Name: series-workflowbc4hf Phase: Succeeded StartedAt: 2026-08-15 16:21:24 +0000 UTC FinishedAt: 2026-08-15 17:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[0] Phase: Succeeded StartedAt: 2026-08-15 16:21:24 +0000 UTC FinishedAt: 2026-08-15 16:24:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[0].run-triage Phase: Succeeded StartedAt: 2026-08-15 16:21:24 +0000 UTC FinishedAt: 2026-08-15 16:24:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a59f57e2aa127c5354168d2ec4bac920df1be4f4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a59f57e2aa127c5354168d2ec4bac920df1be4f4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "afiucv_hs_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmaXVjdl9oc19yY3YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNrcywgYHNrYl9zaGFyZV9jaGVja2AsIGFuZCBgc2tiX2Nvd19oZWFkYCB0byBgYWZpdWN2X2hzX3JjdmAuIFRoZXNlIGNoYW5nZXMgZW5zdXJlIHRoYXQgdGhlIHNvY2tldCBidWZmZXIgaXMgbm90IHNoYXJlZCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBjb250ZW50cyAoZS5nLiwgdmlhIGBFQkNBU0NgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uIG9yIGRhdGEgcmFjZXMuIEl0IGFsc28gZHJvcHMgcGFja2V0cyBub3QgZGVzdGluZWQgZm9yIGBpbml0X25ldGAuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAobGlrZSBtb2RpZnlpbmcgYSBzaGFyZWQgc2tiKSBhcmUgcmVsYXRlZCB0byBtZW1vcnkgc2hhcmluZyBhbmQgZGF0YSBjb3JydXB0aW9uLCB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgS01TQU4gKHdoaWNoIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkpLiBTdGFuZGFyZCBLQVNBTiBhbmQgS0NTQU4gYXJlIGJldHRlciBzdWl0ZWQgZm9yIGRldGVjdGluZyBpc3N1ZXMgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MjI2MTc0ODhlMTdmNzIwZGE3MWI1YmQ2OWJkN2QyNGM4M2ZhMzA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTY6MjM6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi4xMGNmYzVlODJmMDQ3IDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0yMDY0LDExICYjNDM7MjA2NCwyNSBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGludCBlcnIgPSBORVRfUlhfU1VDQ0VTUztcbiBcdGNoYXIgbnVsbHN0cmluZ1s4XTtcbiBcbiYjNDM7XHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIFx1MDAyNmluaXRfbmV0KSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIXNrYilcbiYjNDM7XHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbiYjNDM7XG4gXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnRyYW5zX2hkcikpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIEVUSF9ITEVOKSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7XG4gXHRFQkNBU0ModHJhbnNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCBzaXplb2YodHJhbnNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lKSk7XG4gXHRFQkNBU0ModHJhbnNfaGRyLVx1MDAzZWRlc3RVc2VySUQsIHNpemVvZih0cmFuc19oZHItXHUwMDNlZGVzdFVzZXJJRCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MjI2MTc0ODhlMTdmNzIwZGE3MWI1YmQ2OWJkN2QyNGM4M2ZhMzA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTY6MjM6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWEwNDdiYWI2NWU3Yy4uMTBjZmM1ZTgyZjA0NyAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMjA2NCwxMSAmIzQzOzIwNjQsMjUgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaW50IGVyciA9IE5FVF9SWF9TVUNDRVNTOwogCWNoYXIgbnVsbHN0cmluZ1s4XTsKIAomIzQzOwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZhbXA7aW5pdF9uZXQpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwomIzQzOwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CiYjNDM7CiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0cmFuc19oZHIpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCX0KIAomIzQzOwlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgRVRIX0hMRU4pKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwogCXRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7CiAJRUJDQVNDKHRyYW5zX2hkci0mZ3Q7ZGVzdEFwcE5hbWUsIHNpemVvZih0cmFuc19oZHItJmd0O2Rlc3RBcHBOYW1lKSk7CiAJRUJDQVNDKHRyYW5zX2hkci0mZ3Q7ZGVzdFVzZXJJRCwgc2l6ZW9mKHRyYW5zX2hkci0mZ3Q7ZGVzdFVzZXJJRCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBOZXR3b3JrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0d2Vha2luZyBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBmb2N1c2luZyBvbiB0aGUgYGFmaXVjdl9oc19yY3ZgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZldyBuZXcgY2hlY2tzOiB2ZXJpZnlpbmcgdGhhdCB0aGUgbmV0d29yayBuYW1lc3BhY2Ugb2YgdGhlIGRldmljZSBtYXRjaGVzIHRoZSBpbml0aWFsIG5hbWVzcGFjZSB3aXRoIGBuZXRfZXEoZGV2X25ldChkZXYpLCAmYW1wO2luaXRfbmV0KWAsIHRoZW4gdXNpbmcgYHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpYCwgYW5kIGZpbmFsbHkgYHNrYl9jb3dfaGVhZChza2IsIEVUSF9ITEVOKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZXZlbiBhIHJlbGV2YW50IGNvbmNlcm4/JiMzNDsKCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBuZXQvaXVjdi9hZl9pdWN2LmNgIOKAkyB0aGF0JiMzOTtzIGRlYWxpbmcgd2l0aCBBRl9JVUNWIHNvY2tldHMsIHJpZ2h0PyBBbmQgSVVDViBpcywgaWYgbWVtb3J5IHNlcnZlcywgYW4gSUJNIHovVk0gY29tbXVuaWNhdGlvbiBwcm90b2NvbC4gVGhlIHovVk0gcmVmZXJlbmNlIGhlbHBzIGRlZmluZSBpdHMgZnVuY3Rpb24uIE9rYXksIG5vdyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgd291bGQgZXZlbiBiZSBwcmVzZW50IGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cD8gSVVDViBpcyAqc3BlY2lmaWNhbGx5KiBhbiBzMzkwIGFyY2hpdGVjdHVyZSB0aGluZy4gVGhlIHBhdGNoJiMzOTtzIGludHJvZHVjdGlvbiBvZiB0aGVzZSBjaGVja3Mgc2VlbXMgdGFpbG9yZWQgdG8gdGhhdCBzcGVjaWZpYyBlbnZpcm9ubWVudC4gR2l2ZW4gdGhhdCwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIGNvZGUgaXMgZW50aXJlbHkgczM5MC1kZXBlbmRlbnQuIEkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIG9ubHkgYnVpbHQgaW50byBhbiBzMzkwIGtlcm5lbCwgb3IgaWYgaXQgbWlnaHQgc29tZWhvdyBiZSBjb21waWxlZCBpbiBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLiBJZiB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLCB0aGVuIHRoZXNlIGNoZWNrcyBtaWdodCBub3QgYmUgYXMgaW1wb3J0YW50LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9pdWN2L0tjb25maWc6Mjpjb25maWcgSVVDVlxubmV0L2l1Y3YvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBTMzkwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIFJlYWNoaW5nIGBhZml1Y3ZfaHNfcmN2YCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGFuc3dlciBkZXBlbmRzIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gR29vZC4gSXMgczM5MHggZnV6emVkIGJ5IHN5emthbGxlcj8gQSBxdWljayBtZW50YWwgY2hlY2sgcmV2ZWFscyB0aGF0IHllcywgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzMzkweC4gVGhhdCYjMzk7cyBhIHBvaW50IGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgpIb3dldmVyLCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKmNvcmUqIG9mIHRoZSBwcm9tcHQ6IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFNvLCBjYW4gd2UgYWN0dWFsbHkgaGl0IHRoaXMgYGFmaXVjdl9oc19yY3ZgIGZ1bmN0aW9uIGluIHNvbWV0aGluZyBsaWtlIFFFTVU/IFdlIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydCBhY3R1YWxseSB0cmFuc2xhdGVzIHRvIGJlaW5nIGFibGUgdG8gdGVzdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgYWZpdWN2X2hzX3JjdmAgaXMgcmVnaXN0ZXJlZCBvciB0cmlnZ2VyZWQuIEhvdyBpcyB0aGUgZnVuY3Rpb24gdGllZCB0byBoYXJkd2FyZT8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIExldCYjMzk7cyBzZWUgaG93IGl0IGdldHMgaW52b2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0yMDEyPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1My0vKlxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNTQ6ICogYWZpdWN2X2hzX3JjdigpIC0gYmFzZSBmdW5jdGlvbiBmb3IgYXJyaXZpbmcgZGF0YSB0aHJvdWdoIEhpcGVyU29ja2V0c1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTUtICogICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTctICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1ODpzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDU5LVx0c3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzA4PXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA5LVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzEwOlx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgRVRIX1BfQUZfSVVDVmAgSGFuZGxlcioqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgYEVUSF9QX0FGX0lVQ1ZgIHBhY2tldHMuIFRoYXQmIzM5O3MgZ29vZC4gV2hpY2ggbWVhbnMsIGFueSBpbmNvbWluZyBwYWNrZXQgd2l0aCB0aGF0IHNwZWNpZmljIHByb3RvY29sIElEIHdpbGwgYmUgZnVubmVsZWQgZGlyZWN0bHkgdG8gYGFmaXVjdl9oc19yY3ZgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgdGhvc2UgcGFja2V0cy4KCk5vdywgd2hlcmUgY2FuIHRoaXMgYmUgdHJpZ2dlcmVkPyBBaGEsIGxvb3BiYWNrLCBvZiBjb3Vyc2UsIGFuZCBhbnkgbmV0d29yayBpbnRlcmZhY2UsIGV2ZW4gdmlydHVhbCBvbmVzIGxpa2UgdHVuL3RhcC4gU28gSSBjYW4gY3JhZnQgYSByYXcgcGFja2V0IG9yIHV0aWxpemUgYEFGX1BBQ0tFVGAgdG8gaW5qZWN0IGEgcGFja2V0IHdpdGggdGhhdCBgRVRIX1BfQUZfSVVDVmAgcHJvdG9jb2wuIFBlcmZlY3QuIFRoaXMgbWVhbnMsIGFzIGxvbmcgYXMgdGhlIGNvZGUmIzM5O3MgY29tcGlsZWQsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIFFFTVUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgczM5MCBoYXJkd2FyZS4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHNvbWV0aGluZy4gSXMgYG5ldC9pdWN2L2FmX2l1Y3YuY2AgYWN0dWFsbHkgY29tcGlsZWQgb24gbm9uLXMzOTAgYXJjaGl0ZWN0dXJlcz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L2l1Y3YvTWFrZWZpbGVgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gR290dGEgdmVyaWZ5IHRoYXQgY29tcGlsYXRpb24gcGF0aCB0byBjb25maXJtIHRoaXMgd2hvbGUgbGluZSBvZiB0aGlua2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZl9pdWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVVDVilcdCYjNDM7PSBpdWN2Lm9cbm5ldC9pdWN2L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0FGSVVDVilcdCYjNDM7PSBhZl9pdWN2Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGBDT05GSUdfQUZJVUNWYCBpbiBgbmV0L2l1Y3YvS2NvbmZpZ2AqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYENPTkZJR19BRklVQ1ZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGUgZmFjdCB0aGF0IEkmIzM5O20gZXZlbiB0aGlua2luZyBhYm91dCBpdCB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBJVUNWLCB0aGUgSW50ZXItVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUsIHdoaWNoLCBpZiBtZW1vcnkgc2VydmVzLCBpcyB6L1ZNIHNwZWNpZmljLiBLbm93aW5nIHRoYXQsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGxvY2F0aW9uIC0gYG5ldC9pdWN2L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGl0cyBkZWZpbml0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgb3IgaGVscCB0ZXh0LiBJJiMzOTttIGFzc3VtaW5nIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyBjdXJyZW50IHN0YXRlIG9yIG1heWJlIGl0cyBpbXBsaWNhdGlvbnMuIElzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmFibGU/IEFuZCB3aGF0IGV4YWN0bHkgZG9lcyBpdCBjb250cm9sIHdpdGhpbiB0aGUgaXVjdiBuZXR3b3JraW5nIGNvbnRleHQ/IElzIHRoZXJlIGEgcmVhc29uIHdlIHNob3VsZCBiZSBjb25jZXJuZWQgYWJvdXQgaXRzIHZhbHVlPyBJIG5lZWQgdG8gZ2V0IHRoZSBleGFjdCBkZXRhaWxzIHRvIGdvIGZ1cnRoZXIuIEkgZ3Vlc3MgSSBhbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBLY29uZmlnIGFuZCBoYXZlIGEgbG9vay4gVGltZSB0byBnbyBodW50aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZJVUNWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnPTI9Y29uZmlnIElVQ1Zcbi0tXG5uZXQvaXVjdi9LY29uZmlnLTEwLVxubmV0L2l1Y3YvS2NvbmZpZzoxMTpjb25maWcgQUZJVUNWXG5uZXQvaXVjdi9LY29uZmlnLTEyLVx0ZGVwZW5kcyBvbiBTMzkwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFGSVVDVjogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvICpBRklVQ1YqIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIHRoZSAqUzM5MCogYXJjaGl0ZWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gaXQgYmUgZnV6emVkIGVmZmVjdGl2ZWx5PyBHb29kIG5ld3M6ICpzeXprYWxsZXIqIGFscmVhZHkgc3VwcG9ydHMgZnV6emluZyB0aGUgKnMzOTB4KiBhcmNoaXRlY3R1cmUuIFRoYXTigJlzIGEgdmVyeSBwb3NpdGl2ZSBpbmRpY2F0b3IsIEkga25vdyB0aGUgaW1wbGljYXRpb25zLgoKTm93LCBpZiB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgKnMzOTB4KiwgbXkgYW5hbHlzaXMgc2NyZWFtcyAqV29ydGhGdXp6aW5nPXRydWUqLiBUaGVuICpGb2N1c1N5bWJvbHMqIHNob3VsZCBpbmNsdWRlIComIzM0O2FmaXVjdl9oc19yY3YmIzM0OyogYXMgdGhlIHByaW1hcnkgdGFyZ2V0LCBhbmQgbmF0dXJhbGx5LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgKiYjMzQ7QUZJVUNWJiMzNDsqIGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCB2aWEgKkVuYWJsZUNvbmZpZ3MqLgoKQnV0IGhvbGQgb24sIGxldCYjMzk7cyBub3QganVtcCB0aGUgZ3VuIGNvbXBsZXRlbHkuIEJlZm9yZSBJIGZpbmFsaXplIHRoYXQgYXNzZXNzbWVudCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjay4gRG9lcyAqQUZJVUNWKiBoYXZlICphbnkqIG90aGVyIGRlcGVuZGVuY2llcywgYW55dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGJlZm9yZSBtYWtpbmcgYSByZWNvbW1lbmRhdGlvbj8gR290dGEgYmUgdGhvcm91Z2guIFRoaXMgcXVpY2sgc2FuaXR5IGNoZWNrIGNvdWxkIHNhdmUgYSBsb3Qgb2YgZG93bnN0cmVhbSBoZWFkYWNoZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWc9Mj1jb25maWcgSVVDVlxubmV0L2l1Y3YvS2NvbmZpZzozOlx0ZGVwZW5kcyBvbiBTMzkwXG5uZXQvaXVjdi9LY29uZmlnLTQtXHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXG4tLVxubmV0L2l1Y3YvS2NvbmZpZz0xMT1jb25maWcgQUZJVUNWXG5uZXQvaXVjdi9LY29uZmlnOjEyOlx0ZGVwZW5kcyBvbiBTMzkwXG5uZXQvaXVjdi9LY29uZmlnLTEzLVx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlKioKCk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaGVyZSBpczogZG9lcyB0aGlzIGNoYW5nZSBoaW5nZSBzcGVjaWZpY2FsbHkgb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlPyBJdCYjMzk7cyB0aGUgcHJpbWFyeSBzdXNwZWN0LCBidXQgSSBjYW4mIzM5O3QgYmUgc3VyZSB3aXRob3V0IGRpZ2dpbmcgZGVlcGVyLiBUaGUgY3J1Y2lhbCBlbGVtZW50IGlzIGRlcGVuZGVuY3ksIGFuZCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0IGlzIGFuIGltcG9ydGFudCBvbmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY2FzdCBhIHdpZGVyIG5ldC4gSSBuZWVkIHRvIGV4aGF1c3RpdmVseSBjaGVjayBmb3Igb3RoZXIgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBgbmV0L2l1Y3YvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSB3aG9sZSB0aGluZyB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciBpbXBvcnRhbnQgZGVwZW5kZW5jeSB0aGF0IGlzIGJlaW5nIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIElVQ1ZcbiAgIDM6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAgNDpcdFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxuICAgNTpcdFx0cHJvbXB0IFwmIzM0O0lVQ1Ygc3VwcG9ydCAoUzM5MCAtIHovVk0gb25seSlcJiMzNDtcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpbnRlci11c2VyIGNvbW11bmljYXRpb25cbiAgIDg6XHRcdCAgdW5kZXIgVk0gb3IgVklGLiBJZiB5b3UgcnVuIG9uIHovVk0sIHNheSBcJiMzNDtZXCYjMzQ7IHRvIGVuYWJsZSBhIGZhc3RcbiAgIDk6XHRcdCAgY29tbXVuaWNhdGlvbiBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBBRklVQ1ZcbiAgMTI6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAxMzpcdFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG4gIDE0Olx0XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDE3Olx0XHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbiAgMTg6XHRcdCAgSGlwZXJTb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc5CgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDc1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIFRhcmdldCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBBRklVQ1ZgLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGFmaXVjdl9oc19yY3ZgLiBMZXQmIzM5O3MgY29uZmlybSBpdCYjMzk7cyBub3Qgc3RhdGljOyBnb29kLCBpdCAqaXMqIHN0YXRpYy4gQnV0IGhvbGQgb24sIHRoZSBndWlkZWxpbmVzIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuICBJcyBgYWZpdWN2X2hzX3JjdmAgaW5saW5lZD8gTm8sIGl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyOiBgaXVjdl9wYWNrZXRfdHlwZS5mdW5jID0gYWZpdWN2X2hzX3JjdjtgLiBFeGNlbGxlbnQsIGl0IGhhcyBpdHMgb3duIHN5bWJvbCBhZGRyZXNzLCBzbyBpdCYjMzk7cyBhIHZhbGlkIGNhbmRpZGF0ZS4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgYWZpdWN2X2hzX3JjdmAuICBUaGlzIG1lYW5zIGl0IGlzIHRoZSBvbmx5IGZvY3VzIGZ1bmN0aW9uLiBMZXQmIzM5O3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgaXQmIzM5O3MgdGhlIGJlc3Qgb3B0aW9uLiBJdCBpcyB0aGUgcGFja2V0IHR5cGUgaGFuZGxlciwgYW5kIGEgcHJvcGVyIGVudHJ5IHBvaW50IGFuZCBiZWNhdXNlIGl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IGNhbiYjMzk7dCBiZSBpbmxpbmVkLiBZZXAsIGBhZml1Y3ZfaHNfcmN2YCBpcyB0aGUgY2xlYXIgd2lubmVyLgoKQW5kIGFzIGZvciBjb25maWd1cmF0aW9ucywgYEFGSVVDVmAgaXMgdGhlIGtleS4gVGhlIHNvdXJjZSBzYXlzIGBvYmotJChDT05GSUdfQUZJVUNWKSAmIzQzOz0gYWZfaXVjdi5vYCwgd2hpY2ggaXMgYSBkaXJlY3QgY29uZmlybWF0aW9uLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGYuCgpgYGBjCiAJaW50IGVyciA9IE5FVF9SWF9TVUNDRVNTOwogCWNoYXIgbnVsbHN0cmluZ1s4XTsKIAomIzQzOwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZhbXA7aW5pdF9uZXQpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwomIzQzOwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CiYjNDM7CiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0cmFuc19oZHIpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCX0KIAomIzQzOwlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgRVRIX0hMRU4pKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwogCXRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7CiBgYGAKCkFscmlnaHQsIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHBhdGNoOyBpdCYjMzk7cyBmdW5jdGlvbmFsbHkgbWFraW5nIGNoYW5nZXMsIGZpeGluZyBuYW1lc3BhY2UgY2hlY2tzIGFuZCBza2IgaGFuZGxpbmcuIFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYWZpdWN2X2hzX3JjdmAsIHdoaWNoIGlzIHRoZSBwYWNrZXRfdHlwZSBoYW5kbGVyIGZvciBgRVRIX1BfQUZfSVVDVmAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGJ5IGluamVjdGluZyBwYWNrZXRzIHdpdGggdGhlIGBFVEhfUF9BRl9JVUNWYCBwcm90b2NvbCB2aWEgQUZfUEFDS0VUIG9yIHR1bi90YXAgaW50ZXJmYWNlcy4gVGhlIGNoYW5nZXMgYWRkIGZ1bmN0aW9uYWwgY2hlY2tzIGZvciBuZXR3b3JrIG5hbWVzcGFjZXMsIHNrYiBzaGFyaW5nLCBhbmQgc2tiIGhlYWRyb29tLCB3aGljaCBhcmUgaW1wb3J0YW50IHRvIGZ1enogdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXR3b3JrIG5hbWVzcGFjZSBjaGVja3MsIGBza2Jfc2hhcmVfY2hlY2tgLCBhbmQgYHNrYl9jb3dfaGVhZGAgdG8gYGFmaXVjdl9oc19yY3ZgLiBUaGVzZSBjaGFuZ2VzIGVuc3VyZSB0aGF0IHRoZSBzb2NrZXQgYnVmZmVyIGlzIG5vdCBzaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBpdHMgY29udGVudHMgKGUuZy4sIHZpYSBgRUJDQVNDYCksIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBvciBkYXRhIHJhY2VzLiBJdCBhbHNvIGRyb3BzIHBhY2tldHMgbm90IGRlc3RpbmVkIGZvciBgaW5pdF9uZXRgLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKGxpa2UgbW9kaWZ5aW5nIGEgc2hhcmVkIHNrYikgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IHNoYXJpbmcgYW5kIGRhdGEgY29ycnVwdGlvbiwgd2hpY2ggYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIEtNU0FOICh3aGljaCBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KS4gU3RhbmRhcmQgS0FTQU4gYW5kIEtDU0FOIGFyZSBiZXR0ZXIgc3VpdGVkIGZvciBkZXRlY3RpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBtb2RpZmljYXRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MjI2MTc0ODhlMTdmNzIwZGE3MWI1YmQ2OWJkN2QyNGM4M2ZhMzA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTY6MjM6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWEwNDdiYWI2NWU3Yy4uMTBjZmM1ZTgyZjA0NyAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMjA2NCwxMSAmIzQzOzIwNjQsMjUgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaW50IGVyciA9IE5FVF9SWF9TVUNDRVNTOwogCWNoYXIgbnVsbHN0cmluZ1s4XTsKIAomIzQzOwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZhbXA7aW5pdF9uZXQpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwomIzQzOwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CiYjNDM7CiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0cmFuc19oZHIpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCX0KIAomIzQzOwlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgRVRIX0hMRU4pKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwogCXRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7CiAJRUJDQVNDKHRyYW5zX2hkci0mZ3Q7ZGVzdEFwcE5hbWUsIHNpemVvZih0cmFuc19oZHItJmd0O2Rlc3RBcHBOYW1lKSk7CiAJRUJDQVNDKHRyYW5zX2hkci0mZ3Q7ZGVzdFVzZXJJRCwgc2l6ZW9mKHRyYW5zX2hkci0mZ3Q7ZGVzdFVzZXJJRCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5OQoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiA3OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUmVhc29uaW5nIGZvciBgYWZpdWN2X2hzX3JjdmAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWZpdWN2X2hzX3JjdmAgaW4gYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIEkgc2VlIGl0JiMzOTtzIGFkZGluZyBhIGZldyBrZXkgY2hlY2tzLiBGaXJzdCwgaXQmIzM5O3MgZmlsdGVyaW5nIHBhY2tldHMgYmFzZWQgb24gbmV0d29yayBuYW1lc3BhY2VzLCBtYWtpbmcgc3VyZSB0aGV5JiMzOTtyZSBkZXN0aW5lZCBmb3IgYGluaXRfbmV0YC4gVGhlbiwgaXQmIzM5O3MgdXNpbmcgYHNrYl9zaGFyZV9jaGVja2AgYW5kIGBza2JfY293X2hlYWRgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBjb3VsZCB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoYXQmIzM5O3Mgd2hhdCBJIGFsd2F5cyBsb29rIGZvciB3aXRoIEtNU0FOLgoKTG9va2luZyBjbG9zZXIsIGBza2Jfc2hhcmVfY2hlY2tgIGlzIGFsbCBhYm91dCBjbG9uaW5nIHRoZSBTS0IgaWYgaXQmIzM5O3Mgc2hhcmVkLCBhIHN0YW5kYXJkIG9wZXJhdGlvbi4gQW5kIGBza2JfY293X2hlYWRgIGlzIGFib3V0IG1ha2luZyBzdXJlIHRoZSBTS0IgaGVhZCBpcyB3cml0YWJsZSBhbmQgaGFzIGVub3VnaCBoZWFkcm9vbSDigJMgc3RhbmRhcmQgU0tCIG9wZXJhdGlvbnMgdG8gYXZvaWQgY29ycnVwdGluZyBkYXRhLiBNeSBjb25jZXJuIHdhcyBhcm91bmQgcG90ZW50aWFsIG1lbW9yeSByZWFsbG9jYXRpb24gd2l0aGluIGBza2JfY293X2hlYWRgLCBidXQgdGhhdCBjb3BpZXMgdGhlIG9sZCBkYXRhLiBJdCBlbnN1cmVzIGl0JiMzOTtzIGluaXRpYWxpemVkLiBOb3RoaW5nIGhlcmUgYWxsb2NhdGVzIG5ldyBzdHJ1Y3R1cmVzIG9yIHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhYm91dCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgY29ycnVwdGlvbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzaGFyZWQgU0tCcy4gVGhhdCYjMzk7cyBLQVNBTiBvciBLQ1NBTiB0ZXJyaXRvcnkuCgpTbywgSSB0aGluayB0aGlzIGlzIGFib3V0IGZpeGluZyBhIGJ1ZyB3aGVyZSBgYWZpdWN2X2hzX3JjdmAgKm1vZGlmaWVzKiBTS0IgZGF0YSwgbGlrZSB3aXRoIGBFQkNBU0NgLiBNb2RpZnlpbmcgc2hhcmVkIFNLQiBkYXRhIGlzIGEgYmlnIG5vLW5vIGJlY2F1c2Ugb2YgZGF0YSByYWNlcyBhbmQgcG90ZW50aWFsIGNvcnJ1cHRpb24uIEl0JiMzOTtzIGEgYnVnIGluIHNoYXJlZCBtZW1vcnksIG5vdCBhIGJ1ZyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gYHNrYl9zaGFyZV9jaGVja2AgYW5kIGBza2JfY293X2hlYWRgIGFyZSBzcGVjaWZpY2FsbHkgdGhlcmUgdG8gcHJldmVudCB0aGVzZSBraW5kcyBvZiBidWdzLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IHdhcnJhbnQgS01TQU4uIFRoZSBhZGRlZCBjaGVja3Mg4oCTIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBmaWx0ZXJpbmcsIGBza2Jfc2hhcmVfY2hlY2tgLCBhbmQgYHNrYl9jb3dfaGVhZGAg4oCTIGFyZSB0aGVyZSB0byBtYWtlIHN1cmUgd2UgKmRvbiYjMzk7dCogbW9kaWZ5IGEgc2hhcmVkIFNLQi4gVGhleSBhcmUgZW5zdXJpbmcgbWVtb3J5IHNhZmV0eSwgcHJldmVudGluZyBkYXRhIHJhY2VzIGFuZCBjb3JydXB0aW9uIHZpYSBzdGFuZGFyZCBtZXRob2RzLiBJdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5ICpjb3JydXB0aW9uKiBpc3N1ZSBieSBwcmV2ZW50aW5nIG1vZGlmaWNhdGlvbnMgb2Ygc2hhcmVkIG1lbW9yeSwgbm90IGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaXNzdWUuIEtBU0FOL0tDU0FOIGFyZSBiZXR0ZXIgc3VpdGVkIGhlcmUuIFRodXMsIEkmIzM5O2xsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tzLCBgc2tiX3NoYXJlX2NoZWNrYCwgYW5kIGBza2JfY293X2hlYWRgIHRvIGBhZml1Y3ZfaHNfcmN2YC4gVGhlc2UgY2hhbmdlcyBlbnN1cmUgdGhhdCB0aGUgc29ja2V0IGJ1ZmZlciBpcyBub3Qgc2hhcmVkIGJlZm9yZSBtb2RpZnlpbmcgaXRzIGNvbnRlbnRzIChlLmcuLCB2aWEgYEVCQ0FTQ2ApLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gb3IgZGF0YSByYWNlcy4gSXQgYWxzbyBkcm9wcyBwYWNrZXRzIG5vdCBkZXN0aW5lZCBmb3IgYGluaXRfbmV0YC4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSBpdCBpbiBjb250cm9sIGZsb3cuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChsaWtlIG1vZGlmeWluZyBhIHNoYXJlZCBza2IpIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBzaGFyaW5nIGFuZCBkYXRhIGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiAod2hpY2ggZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSkuIFN0YW5kYXJkIEtBU0FOIGFuZCBLQ1NBTiBhcmUgYmV0dGVyIHN1aXRlZCBmb3IgZGV0ZWN0aW5nIGlzc3VlcyByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnkgbW9kaWZpY2F0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tzLCBgc2tiX3NoYXJlX2NoZWNrYCwgYW5kIGBza2JfY293X2hlYWRgIHRvIGBhZml1Y3ZfaHNfcmN2YC4gVGhlc2UgY2hhbmdlcyBlbnN1cmUgdGhhdCB0aGUgc29ja2V0IGJ1ZmZlciBpcyBub3Qgc2hhcmVkIGJlZm9yZSBtb2RpZnlpbmcgaXRzIGNvbnRlbnRzIChlLmcuLCB2aWEgYEVCQ0FTQ2ApLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gb3IgZGF0YSByYWNlcy4gSXQgYWxzbyBkcm9wcyBwYWNrZXRzIG5vdCBkZXN0aW5lZCBmb3IgYGluaXRfbmV0YC4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSBpdCBpbiBjb250cm9sIGZsb3cuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChsaWtlIG1vZGlmeWluZyBhIHNoYXJlZCBza2IpIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBzaGFyaW5nIGFuZCBkYXRhIGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiAod2hpY2ggZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSkuIFN0YW5kYXJkIEtBU0FOIGFuZCBLQ1NBTiBhcmUgYmV0dGVyIHN1aXRlZCBmb3IgZGV0ZWN0aW5nIGlzc3VlcyByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnkgbW9kaWZpY2F0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjM6MjMuNzQ5ODQ4NzM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc0MjUxNjQzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZpdWN2X2hzX3JjdlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXR3b3JrIG5hbWVzcGFjZSBjaGVja3MsIGBza2Jfc2hhcmVfY2hlY2tgLCBhbmQgYHNrYl9jb3dfaGVhZGAgdG8gYGFmaXVjdl9oc19yY3ZgLiBUaGVzZSBjaGFuZ2VzIGVuc3VyZSB0aGF0IHRoZSBzb2NrZXQgYnVmZmVyIGlzIG5vdCBzaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBpdHMgY29udGVudHMgKGUuZy4sIHZpYSBgRUJDQVNDYCksIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBvciBkYXRhIHJhY2VzLiBJdCBhbHNvIGRyb3BzIHBhY2tldHMgbm90IGRlc3RpbmVkIGZvciBgaW5pdF9uZXRgLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKGxpa2UgbW9kaWZ5aW5nIGEgc2hhcmVkIHNrYikgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IHNoYXJpbmcgYW5kIGRhdGEgY29ycnVwdGlvbiwgd2hpY2ggYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIEtNU0FOICh3aGljaCBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KS4gU3RhbmRhcmQgS0FTQU4gYW5kIEtDU0FOIGFyZSBiZXR0ZXIgc3VpdGVkIGZvciBkZXRlY3RpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBtb2RpZmljYXRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjIzOjIzLjc0OTg1NjcyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1Nzc2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTIyNjE3NDg4ZTE3ZjcyMGRhNzFiNWJkNjliZDdkMjRjODNmYTMwOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjoyMzoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi4xMGNmYzVlODJmMDQ3IDEwMDY0NFxcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xcbkBAIC0yMDY0LDExICsyMDY0LDI1IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7XFxuIFxcdGNoYXIgbnVsbHN0cmluZ1s4XTtcXG4gXFxuK1xcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgXFx1MDAyNmluaXRfbmV0KSkge1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xcbitcXHR9XFxuK1xcbitcXHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCFza2IpXFxuK1xcdFxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4rXFxuIFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqdHJhbnNfaGRyKSkpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIEVUSF9ITEVOKSkge1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xcbitcXHR9XFxuK1xcbiBcXHR0cmFuc19oZHIgPSBpdWN2X3RyYW5zX2hkcihza2IpO1xcbiBcXHRFQkNBU0ModHJhbnNfaGRyLVxcdTAwM2VkZXN0QXBwTmFtZSwgc2l6ZW9mKHRyYW5zX2hkci1cXHUwMDNlZGVzdEFwcE5hbWUpKTtcXG4gXFx0RUJDQVNDKHRyYW5zX2hkci1cXHUwMDNlZGVzdFVzZXJJRCwgc2l6ZW9mKHRyYW5zX2hkci1cXHUwMDNlZGVzdFVzZXJJRCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyMzoyNC4xNzY0ODY2NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2Njk0NDI1NTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRklVQ1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZml1Y3ZfaHNfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFmaXVjdl9oc19yY3ZgLCB3aGljaCBpcyB0aGUgcGFja2V0X3R5cGUgaGFuZGxlciBmb3IgYEVUSF9QX0FGX0lVQ1ZgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBieSBpbmplY3RpbmcgcGFja2V0cyB3aXRoIHRoZSBgRVRIX1BfQUZfSVVDVmAgcHJvdG9jb2wgdmlhIEFGX1BBQ0tFVCBvciB0dW4vdGFwIGludGVyZmFjZXMuIFRoZSBjaGFuZ2VzIGFkZCBmdW5jdGlvbmFsIGNoZWNrcyBmb3IgbmV0d29yayBuYW1lc3BhY2VzLCBza2Igc2hhcmluZywgYW5kIHNrYiBoZWFkcm9vbSwgd2hpY2ggYXJlIGltcG9ydGFudCB0byBmdXp6IHRvIGVuc3VyZSB0aGV5IGNvcnJlY3RseSBoYW5kbGUgbWFsZm9ybWVkIG9yIHVuZXhwZWN0ZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTIyNjE3NDg4ZTE3ZjcyMGRhNzFiNWJkNjliZDdkMjRjODNmYTMwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDE2OjIzOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi4xMGNmYzVlODJmMDQ3IDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0yMDY0LDExICsyMDY0LDI1IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aW50IGVyciA9IE5FVF9SWF9TVUNDRVNTO1xuIFx0Y2hhciBudWxsc3RyaW5nWzhdO1xuIFxuK1x0aWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCBcdTAwMjZpbml0X25ldCkpIHtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbitcdH1cbitcbitcdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xuK1x0aWYgKCFza2IpXG4rXHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbitcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqdHJhbnNfaGRyKSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbiBcdH1cbiBcbitcdGlmIChza2JfY293X2hlYWQoc2tiLCBFVEhfSExFTikpIHtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbitcdH1cbitcbiBcdHRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7XG4gXHRFQkNBU0ModHJhbnNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCBzaXplb2YodHJhbnNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lKSk7XG4gXHRFQkNBU0ModHJhbnNfaGRyLVx1MDAzZWRlc3RVc2VySUQsIHNpemVvZih0cmFuc19oZHItXHUwMDNlZGVzdFVzZXJJRCkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjM6MjQuMTc2NDkwMjY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwODg1MjUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBmb2N1c2luZyBvbiB0aGUgYGFmaXVjdl9oc19yY3ZgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZldyBuZXcgY2hlY2tzOiB2ZXJpZnlpbmcgdGhhdCB0aGUgbmV0d29yayBuYW1lc3BhY2Ugb2YgdGhlIGRldmljZSBtYXRjaGVzIHRoZSBpbml0aWFsIG5hbWVzcGFjZSB3aXRoIGBuZXRfZXEoZGV2X25ldChkZXYpLCBcdTAwMjZpbml0X25ldClgLCB0aGVuIHVzaW5nIGBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKWAsIGFuZCBmaW5hbGx5IGBza2JfY293X2hlYWQoc2tiLCBFVEhfSExFTilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGV2ZW4gYSByZWxldmFudCBjb25jZXJuP1wiXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93bi4gYG5ldC9pdWN2L2FmX2l1Y3YuY2Ag4oCTIHRoYXQncyBkZWFsaW5nIHdpdGggQUZfSVVDViBzb2NrZXRzLCByaWdodD8gQW5kIElVQ1YgaXMsIGlmIG1lbW9yeSBzZXJ2ZXMsIGFuIElCTSB6L1ZNIGNvbW11bmljYXRpb24gcHJvdG9jb2wuIFRoZSB6L1ZNIHJlZmVyZW5jZSBoZWxwcyBkZWZpbmUgaXRzIGZ1bmN0aW9uLiBPa2F5LCBub3cgdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdvdWxkIGV2ZW4gYmUgcHJlc2VudCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXA/IElVQ1YgaXMgKnNwZWNpZmljYWxseSogYW4gczM5MCBhcmNoaXRlY3R1cmUgdGhpbmcuIFRoZSBwYXRjaCdzIGludHJvZHVjdGlvbiBvZiB0aGVzZSBjaGVja3Mgc2VlbXMgdGFpbG9yZWQgdG8gdGhhdCBzcGVjaWZpYyBlbnZpcm9ubWVudC4gR2l2ZW4gdGhhdCwgbGV0J3Mgc2VlIGlmIHRoaXMgY29kZSBpcyBlbnRpcmVseSBzMzkwLWRlcGVuZGVudC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBvbmx5IGJ1aWx0IGludG8gYW4gczM5MCBrZXJuZWwsIG9yIGlmIGl0IG1pZ2h0IHNvbWVob3cgYmUgY29tcGlsZWQgaW4gb24gb3RoZXIgYXJjaGl0ZWN0dXJlcy4gSWYgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcywgdGhlbiB0aGVzZSBjaGVja3MgbWlnaHQgbm90IGJlIGFzIGltcG9ydGFudC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjM6MjkuNDg1MzQ2MTQ0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njk1MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9pdWN2L0tjb25maWc6Mjpjb25maWcgSVVDVlxcbm5ldC9pdWN2L0tjb25maWctMy1cXHRkZXBlbmRzIG9uIFMzOTBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjM6MjkuNTMwMDQ3MDMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MjYxNzA5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBSZWFjaGluZyBgYWZpdWN2X2hzX3JjdmAqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGFuc3dlciBkZXBlbmRzIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gR29vZC4gSXMgczM5MHggZnV6emVkIGJ5IHN5emthbGxlcj8gQSBxdWljayBtZW50YWwgY2hlY2sgcmV2ZWFscyB0aGF0IHllcywgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzMzkweC4gVGhhdCdzIGEgcG9pbnQgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuSG93ZXZlciwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKmNvcmUqIG9mIHRoZSBwcm9tcHQ6IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFNvLCBjYW4gd2UgYWN0dWFsbHkgaGl0IHRoaXMgYGFmaXVjdl9oc19yY3ZgIGZ1bmN0aW9uIGluIHNvbWV0aGluZyBsaWtlIFFFTVU/IFdlIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydCBhY3R1YWxseSB0cmFuc2xhdGVzIHRvIGJlaW5nIGFibGUgdG8gdGVzdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBhZml1Y3ZfaHNfcmN2YCBpcyByZWdpc3RlcmVkIG9yIHRyaWdnZXJlZC4gSG93IGlzIHRoZSBmdW5jdGlvbiB0aWVkIHRvIGhhcmR3YXJlPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBMZXQncyBzZWUgaG93IGl0IGdldHMgaW52b2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDowNi4yNTYyMjA2NTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjU0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZpdWN2X2hzX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTMtLypcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1NDogKiBhZml1Y3ZfaHNfcmN2KCkgLSBiYXNlIGZ1bmN0aW9uIGZvciBhcnJpdmluZyBkYXRhIHRocm91Z2ggSGlwZXJTb2NrZXRzXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTUtICogICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1Ny0gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1ODpzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1OS1cXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwOD1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDktXFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMxMDpcXHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjQ6MDYuMzAzMjkyNTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA2NzAxMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgRVRIX1BfQUZfSVVDVmAgSGFuZGxlcioqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBgRVRIX1BfQUZfSVVDVmAgcGFja2V0cy4gVGhhdCdzIGdvb2QuIFdoaWNoIG1lYW5zLCBhbnkgaW5jb21pbmcgcGFja2V0IHdpdGggdGhhdCBzcGVjaWZpYyBwcm90b2NvbCBJRCB3aWxsIGJlIGZ1bm5lbGVkIGRpcmVjdGx5IHRvIGBhZml1Y3ZfaHNfcmN2YC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQncyBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgdGhvc2UgcGFja2V0cy5cblxuTm93LCB3aGVyZSBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQ/IEFoYSwgbG9vcGJhY2ssIG9mIGNvdXJzZSwgYW5kIGFueSBuZXR3b3JrIGludGVyZmFjZSwgZXZlbiB2aXJ0dWFsIG9uZXMgbGlrZSB0dW4vdGFwLiBTbyBJIGNhbiBjcmFmdCBhIHJhdyBwYWNrZXQgb3IgdXRpbGl6ZSBgQUZfUEFDS0VUYCB0byBpbmplY3QgYSBwYWNrZXQgd2l0aCB0aGF0IGBFVEhfUF9BRl9JVUNWYCBwcm90b2NvbC4gUGVyZmVjdC4gVGhpcyBtZWFucywgYXMgbG9uZyBhcyB0aGUgY29kZSdzIGNvbXBpbGVkLCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIFFFTVUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgczM5MCBoYXJkd2FyZS5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgc29tZXRoaW5nLiBJcyBgbmV0L2l1Y3YvYWZfaXVjdi5jYCBhY3R1YWxseSBjb21waWxlZCBvbiBub24tczM5MCBhcmNoaXRlY3R1cmVzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvaXVjdi9NYWtlZmlsZWAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBHb3R0YSB2ZXJpZnkgdGhhdCBjb21waWxhdGlvbiBwYXRoIHRvIGNvbmZpcm0gdGhpcyB3aG9sZSBsaW5lIG9mIHRoaW5raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjI0OjExLjAwOTk5NTk1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgyMzgwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZfaXVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JVUNWKVxcdCs9IGl1Y3Yub1xcbm5ldC9pdWN2L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0FGSVVDVilcXHQrPSBhZl9pdWN2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjQ6MTEuMTY4MjQwMDI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MjA4MDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGBDT05GSUdfQUZJVUNWYCBpbiBgbmV0L2l1Y3YvS2NvbmZpZ2AqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGRpdmUgaW50byB0aGlzIGBDT05GSUdfQUZJVUNWYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIGZhY3QgdGhhdCBJJ20gZXZlbiB0aGlua2luZyBhYm91dCBpdCB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIElVQ1YsIHRoZSBJbnRlci1Vc2VyIENvbW11bmljYXRpb24gVmVoaWNsZSwgd2hpY2gsIGlmIG1lbW9yeSBzZXJ2ZXMsIGlzIHovVk0gc3BlY2lmaWMuIEtub3dpbmcgdGhhdCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgbG9jYXRpb24gLSBgbmV0L2l1Y3YvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIG9yIGhlbHAgdGV4dC4gSSdtIGFzc3VtaW5nIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyBjdXJyZW50IHN0YXRlIG9yIG1heWJlIGl0cyBpbXBsaWNhdGlvbnMuIElzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmFibGU/IEFuZCB3aGF0IGV4YWN0bHkgZG9lcyBpdCBjb250cm9sIHdpdGhpbiB0aGUgaXVjdiBuZXR3b3JraW5nIGNvbnRleHQ/IElzIHRoZXJlIGEgcmVhc29uIHdlIHNob3VsZCBiZSBjb25jZXJuZWQgYWJvdXQgaXRzIHZhbHVlPyBJIG5lZWQgdG8gZ2V0IHRoZSBleGFjdCBkZXRhaWxzIHRvIGdvIGZ1cnRoZXIuIEkgZ3Vlc3MgSSBhbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBLY29uZmlnIGFuZCBoYXZlIGEgbG9vay4gVGltZSB0byBnbyBodW50aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjQ6MTQuNTMwMzIzNzE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY4NzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZJVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvS2NvbmZpZz0yPWNvbmZpZyBJVUNWXFxuLS1cXG5uZXQvaXVjdi9LY29uZmlnLTEwLVxcbm5ldC9pdWN2L0tjb25maWc6MTE6Y29uZmlnIEFGSVVDVlxcbm5ldC9pdWN2L0tjb25maWctMTItXFx0ZGVwZW5kcyBvbiBTMzkwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjI0OjE0LjU3NjAxNDAwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM2ODE1MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQUZJVUNWOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyAqQUZJVUNWKiBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byB0aGUgKlMzOTAqIGFyY2hpdGVjdHVyZS4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gaXQgYmUgZnV6emVkIGVmZmVjdGl2ZWx5PyBHb29kIG5ld3M6ICpzeXprYWxsZXIqIGFscmVhZHkgc3VwcG9ydHMgZnV6emluZyB0aGUgKnMzOTB4KiBhcmNoaXRlY3R1cmUuIFRoYXTigJlzIGEgdmVyeSBwb3NpdGl2ZSBpbmRpY2F0b3IsIEkga25vdyB0aGUgaW1wbGljYXRpb25zLlxuXG5Ob3csIGlmIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyAqczM5MHgqLCBteSBhbmFseXNpcyBzY3JlYW1zICpXb3J0aEZ1enppbmc9dHJ1ZSouIFRoZW4gKkZvY3VzU3ltYm9scyogc2hvdWxkIGluY2x1ZGUgKlwiYWZpdWN2X2hzX3JjdlwiKiBhcyB0aGUgcHJpbWFyeSB0YXJnZXQsIGFuZCBuYXR1cmFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSAqXCJBRklVQ1ZcIiogY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IHZpYSAqRW5hYmxlQ29uZmlncyouXG5cbkJ1dCBob2xkIG9uLCBsZXQncyBub3QganVtcCB0aGUgZ3VuIGNvbXBsZXRlbHkuIEJlZm9yZSBJIGZpbmFsaXplIHRoYXQgYXNzZXNzbWVudCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjay4gRG9lcyAqQUZJVUNWKiBoYXZlICphbnkqIG90aGVyIGRlcGVuZGVuY2llcywgYW55dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGJlZm9yZSBtYWtpbmcgYSByZWNvbW1lbmRhdGlvbj8gR290dGEgYmUgdGhvcm91Z2guIFRoaXMgcXVpY2sgc2FuaXR5IGNoZWNrIGNvdWxkIHNhdmUgYSBsb3Qgb2YgZG93bnN0cmVhbSBoZWFkYWNoZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDoxOC43MTI4MzE5MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mjk2ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9LY29uZmlnPTI9Y29uZmlnIElVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnOjM6XFx0ZGVwZW5kcyBvbiBTMzkwXFxubmV0L2l1Y3YvS2NvbmZpZy00LVxcdGRlZl90cmlzdGF0ZSB5IGlmIFMzOTBcXG4tLVxcbm5ldC9pdWN2L0tjb25maWc9MTE9Y29uZmlnIEFGSVVDVlxcbm5ldC9pdWN2L0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBTMzkwXFxubmV0L2l1Y3YvS2NvbmZpZy0xMy1cXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjQ6MTguNzU5MTM4NDA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDQyMjA3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaGVyZSBpczogZG9lcyB0aGlzIGNoYW5nZSBoaW5nZSBzcGVjaWZpY2FsbHkgb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlPyBJdCdzIHRoZSBwcmltYXJ5IHN1c3BlY3QsIGJ1dCBJIGNhbid0IGJlIHN1cmUgd2l0aG91dCBkaWdnaW5nIGRlZXBlci4gVGhlIGNydWNpYWwgZWxlbWVudCBpcyBkZXBlbmRlbmN5LCBhbmQgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0IGlzIGFuIGltcG9ydGFudCBvbmUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjYXN0IGEgd2lkZXIgbmV0LiBJIG5lZWQgdG8gZXhoYXVzdGl2ZWx5IGNoZWNrIGZvciBvdGhlciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGBuZXQvaXVjdi9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgd2hvbGUgdGhpbmcgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXNuJ3QgYW5vdGhlciBpbXBvcnRhbnQgZGVwZW5kZW5jeSB0aGF0IGlzIGJlaW5nIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjI0OjIxLjQ2MzM2MjI2MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgSVVDVlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwXFxuICAgNDpcXHRcXHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXFxuICAgNTpcXHRcXHRwcm9tcHQgXFxcIklVQ1Ygc3VwcG9ydCAoUzM5MCAtIHovVk0gb25seSlcXFwiXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgaW50ZXItdXNlciBjb21tdW5pY2F0aW9uXFxuICAgODpcXHRcXHQgIHVuZGVyIFZNIG9yIFZJRi4gSWYgeW91IHJ1biBvbiB6L1ZNLCBzYXkgXFxcIllcXFwiIHRvIGVuYWJsZSBhIGZhc3RcXG4gICA5OlxcdFxcdCAgY29tbXVuaWNhdGlvbiBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRjb25maWcgQUZJVUNWXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gIDEzOlxcdFxcdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxcbiAgMTQ6XFx0XFx0cHJvbXB0IFxcXCJBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcXFwiXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxNzpcXHRcXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cXG4gIDE4OlxcdFxcdCAgSGlwZXJTb2NrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDoyMS40NjM0MjcxMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU3Mjk4OTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIFRhcmdldCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGhlcmUgc2VlbXMgdG8gYmUgYEFGSVVDVmAuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgYWZpdWN2X2hzX3JjdmAuIExldCdzIGNvbmZpcm0gaXQncyBub3Qgc3RhdGljOyBnb29kLCBpdCAqaXMqIHN0YXRpYy4gQnV0IGhvbGQgb24sIHRoZSBndWlkZWxpbmVzIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuICBJcyBgYWZpdWN2X2hzX3JjdmAgaW5saW5lZD8gTm8sIGl0J3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXI6IGBpdWN2X3BhY2tldF90eXBlLmZ1bmMgPSBhZml1Y3ZfaHNfcmN2O2AuIEV4Y2VsbGVudCwgaXQgaGFzIGl0cyBvd24gc3ltYm9sIGFkZHJlc3MsIHNvIGl0J3MgYSB2YWxpZCBjYW5kaWRhdGUuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgYWZpdWN2X2hzX3JjdmAuICBUaGlzIG1lYW5zIGl0IGlzIHRoZSBvbmx5IGZvY3VzIGZ1bmN0aW9uLiBMZXQncyBtYWtlIGFic29sdXRlbHkgc3VyZSBpdCdzIHRoZSBiZXN0IG9wdGlvbi4gSXQgaXMgdGhlIHBhY2tldCB0eXBlIGhhbmRsZXIsIGFuZCBhIHByb3BlciBlbnRyeSBwb2ludCBhbmQgYmVjYXVzZSBpdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IGNhbid0IGJlIGlubGluZWQuIFllcCwgYGFmaXVjdl9oc19yY3ZgIGlzIHRoZSBjbGVhciB3aW5uZXIuXG5cbkFuZCBhcyBmb3IgY29uZmlndXJhdGlvbnMsIGBBRklVQ1ZgIGlzIHRoZSBrZXkuIFRoZSBzb3VyY2Ugc2F5cyBgb2JqLSQoQ09ORklHX0FGSVVDVikgKz0gYWZfaXVjdi5vYCwgd2hpY2ggaXMgYSBkaXJlY3QgY29uZmlybWF0aW9uLlxuXG5MZXQncyBxdWlja2x5IHJldmlldyB0aGUgcGF0Y2ggaXRzZWxmLlxuXG5gYGBjXG4gXHRpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7XG4gXHRjaGFyIG51bGxzdHJpbmdbOF07XG4gXG4rXHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIFx1MDAyNmluaXRfbmV0KSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1x0fVxuK1xuK1x0c2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIXNrYilcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1xuIFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0cmFuc19oZHIpKSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuIFx0fVxuIFxuK1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIEVUSF9ITEVOKSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1x0fVxuK1xuIFx0dHJhbnNfaGRyID0gaXVjdl90cmFuc19oZHIoc2tiKTtcbiBgYGBcblxuQWxyaWdodCwgdGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcGF0Y2g7IGl0J3MgZnVuY3Rpb25hbGx5IG1ha2luZyBjaGFuZ2VzLCBmaXhpbmcgbmFtZXNwYWNlIGNoZWNrcyBhbmQgc2tiIGhhbmRsaW5nLiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3OSwiT3V0cHV0VG9rZW5zIjoxNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDozMS4wMzY0MjE0MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDMxODAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZpdWN2X2hzX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZpdWN2X2hzX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjI0OjMxLjEyMDc0NjM5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNTQyNTcyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDozMS4xMjEzMzY5NTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAwNTM2NjI5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tzLCBgc2tiX3NoYXJlX2NoZWNrYCwgYW5kIGBza2JfY293X2hlYWRgIHRvIGBhZml1Y3ZfaHNfcmN2YC4gVGhlc2UgY2hhbmdlcyBlbnN1cmUgdGhhdCB0aGUgc29ja2V0IGJ1ZmZlciBpcyBub3Qgc2hhcmVkIGJlZm9yZSBtb2RpZnlpbmcgaXRzIGNvbnRlbnRzIChlLmcuLCB2aWEgYEVCQ0FTQ2ApLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gb3IgZGF0YSByYWNlcy4gSXQgYWxzbyBkcm9wcyBwYWNrZXRzIG5vdCBkZXN0aW5lZCBmb3IgYGluaXRfbmV0YC4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSBpdCBpbiBjb250cm9sIGZsb3cuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChsaWtlIG1vZGlmeWluZyBhIHNoYXJlZCBza2IpIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBzaGFyaW5nIGFuZCBkYXRhIGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiAod2hpY2ggZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSkuIFN0YW5kYXJkIEtBU0FOIGFuZCBLQ1NBTiBhcmUgYmV0dGVyIHN1aXRlZCBmb3IgZGV0ZWN0aW5nIGlzc3VlcyByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnkgbW9kaWZpY2F0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MjI2MTc0ODhlMTdmNzIwZGE3MWI1YmQ2OWJkN2QyNGM4M2ZhMzA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTY6MjM6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbmluZGV4IGVhMDQ3YmFiNjVlN2MuLjEwY2ZjNWU4MmYwNDcgMTAwNjQ0XG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuQEAgLTIwNjQsMTEgKzIwNjQsMjUgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7XG4gXHRjaGFyIG51bGxzdHJpbmdbOF07XG4gXG4rXHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIFx1MDAyNmluaXRfbmV0KSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1x0fVxuK1xuK1x0c2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIXNrYilcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1xuIFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0cmFuc19oZHIpKSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuIFx0fVxuIFxuK1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIEVUSF9ITEVOKSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1x0fVxuK1xuIFx0dHJhbnNfaGRyID0gaXVjdl90cmFuc19oZHIoc2tiKTtcbiBcdEVCQ0FTQyh0cmFuc19oZHItXHUwMDNlZGVzdEFwcE5hbWUsIHNpemVvZih0cmFuc19oZHItXHUwMDNlZGVzdEFwcE5hbWUpKTtcbiBcdEVCQ0FTQyh0cmFuc19oZHItXHUwMDNlZGVzdFVzZXJJRCwgc2l6ZW9mKHRyYW5zX2hkci1cdTAwM2VkZXN0VXNlcklEKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDozMS4xMjEzMzc3NzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNTM2MzEyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gUmVhc29uaW5nIGZvciBgYWZpdWN2X2hzX3JjdmAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFmaXVjdl9oc19yY3ZgIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBJIHNlZSBpdCdzIGFkZGluZyBhIGZldyBrZXkgY2hlY2tzLiBGaXJzdCwgaXQncyBmaWx0ZXJpbmcgcGFja2V0cyBiYXNlZCBvbiBuZXR3b3JrIG5hbWVzcGFjZXMsIG1ha2luZyBzdXJlIHRoZXkncmUgZGVzdGluZWQgZm9yIGBpbml0X25ldGAuIFRoZW4sIGl0J3MgdXNpbmcgYHNrYl9zaGFyZV9jaGVja2AgYW5kIGBza2JfY293X2hlYWRgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBjb3VsZCB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoYXQncyB3aGF0IEkgYWx3YXlzIGxvb2sgZm9yIHdpdGggS01TQU4uXG5cbkxvb2tpbmcgY2xvc2VyLCBgc2tiX3NoYXJlX2NoZWNrYCBpcyBhbGwgYWJvdXQgY2xvbmluZyB0aGUgU0tCIGlmIGl0J3Mgc2hhcmVkLCBhIHN0YW5kYXJkIG9wZXJhdGlvbi4gQW5kIGBza2JfY293X2hlYWRgIGlzIGFib3V0IG1ha2luZyBzdXJlIHRoZSBTS0IgaGVhZCBpcyB3cml0YWJsZSBhbmQgaGFzIGVub3VnaCBoZWFkcm9vbSDigJMgc3RhbmRhcmQgU0tCIG9wZXJhdGlvbnMgdG8gYXZvaWQgY29ycnVwdGluZyBkYXRhLiBNeSBjb25jZXJuIHdhcyBhcm91bmQgcG90ZW50aWFsIG1lbW9yeSByZWFsbG9jYXRpb24gd2l0aGluIGBza2JfY293X2hlYWRgLCBidXQgdGhhdCBjb3BpZXMgdGhlIG9sZCBkYXRhLiBJdCBlbnN1cmVzIGl0J3MgaW5pdGlhbGl6ZWQuIE5vdGhpbmcgaGVyZSBhbGxvY2F0ZXMgbmV3IHN0cnVjdHVyZXMgb3IgcmVhZHMgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MgZXNzZW50aWFsbHkgYWJvdXQgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIGNvcnJ1cHRpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc2hhcmVkIFNLQnMuIFRoYXQncyBLQVNBTiBvciBLQ1NBTiB0ZXJyaXRvcnkuXG5cblNvLCBJIHRoaW5rIHRoaXMgaXMgYWJvdXQgZml4aW5nIGEgYnVnIHdoZXJlIGBhZml1Y3ZfaHNfcmN2YCAqbW9kaWZpZXMqIFNLQiBkYXRhLCBsaWtlIHdpdGggYEVCQ0FTQ2AuIE1vZGlmeWluZyBzaGFyZWQgU0tCIGRhdGEgaXMgYSBiaWcgbm8tbm8gYmVjYXVzZSBvZiBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgY29ycnVwdGlvbi4gSXQncyBhIGJ1ZyBpbiBzaGFyZWQgbWVtb3J5LCBub3QgYSBidWcgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBza2Jfc2hhcmVfY2hlY2tgIGFuZCBgc2tiX2Nvd19oZWFkYCBhcmUgc3BlY2lmaWNhbGx5IHRoZXJlIHRvIHByZXZlbnQgdGhlc2Uga2luZHMgb2YgYnVncy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBLTVNBTi4gVGhlIGFkZGVkIGNoZWNrcyDigJMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGZpbHRlcmluZywgYHNrYl9zaGFyZV9jaGVja2AsIGFuZCBgc2tiX2Nvd19oZWFkYCDigJMgYXJlIHRoZXJlIHRvIG1ha2Ugc3VyZSB3ZSAqZG9uJ3QqIG1vZGlmeSBhIHNoYXJlZCBTS0IuIFRoZXkgYXJlIGVuc3VyaW5nIG1lbW9yeSBzYWZldHksIHByZXZlbnRpbmcgZGF0YSByYWNlcyBhbmQgY29ycnVwdGlvbiB2aWEgc3RhbmRhcmQgbWV0aG9kcy4gSXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSAqY29ycnVwdGlvbiogaXNzdWUgYnkgcHJldmVudGluZyBtb2RpZmljYXRpb25zIG9mIHNoYXJlZCBtZW1vcnksIG5vdCBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGlzc3VlLiBLQVNBTi9LQ1NBTiBhcmUgYmV0dGVyIHN1aXRlZCBoZXJlLiBUaHVzLCBJJ2xsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTksIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjQ6NDEuMTc0OTcyNDYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNrcywgYHNrYl9zaGFyZV9jaGVja2AsIGFuZCBgc2tiX2Nvd19oZWFkYCB0byBgYWZpdWN2X2hzX3JjdmAuIFRoZXNlIGNoYW5nZXMgZW5zdXJlIHRoYXQgdGhlIHNvY2tldCBidWZmZXIgaXMgbm90IHNoYXJlZCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBjb250ZW50cyAoZS5nLiwgdmlhIGBFQkNBU0NgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uIG9yIGRhdGEgcmFjZXMuIEl0IGFsc28gZHJvcHMgcGFja2V0cyBub3QgZGVzdGluZWQgZm9yIGBpbml0X25ldGAuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAobGlrZSBtb2RpZnlpbmcgYSBzaGFyZWQgc2tiKSBhcmUgcmVsYXRlZCB0byBtZW1vcnkgc2hhcmluZyBhbmQgZGF0YSBjb3JydXB0aW9uLCB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgS01TQU4gKHdoaWNoIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkpLiBTdGFuZGFyZCBLQVNBTiBhbmQgS0NTQU4gYXJlIGJldHRlciBzdWl0ZWQgZm9yIGRldGVjdGluZyBpc3N1ZXMgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXR3b3JrIG5hbWVzcGFjZSBjaGVja3MsIGBza2Jfc2hhcmVfY2hlY2tgLCBhbmQgYHNrYl9jb3dfaGVhZGAgdG8gYGFmaXVjdl9oc19yY3ZgLiBUaGVzZSBjaGFuZ2VzIGVuc3VyZSB0aGF0IHRoZSBzb2NrZXQgYnVmZmVyIGlzIG5vdCBzaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBpdHMgY29udGVudHMgKGUuZy4sIHZpYSBgRUJDQVNDYCksIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBvciBkYXRhIHJhY2VzLiBJdCBhbHNvIGRyb3BzIHBhY2tldHMgbm90IGRlc3RpbmVkIGZvciBgaW5pdF9uZXRgLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKGxpa2UgbW9kaWZ5aW5nIGEgc2hhcmVkIHNrYikgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IHNoYXJpbmcgYW5kIGRhdGEgY29ycnVwdGlvbiwgd2hpY2ggYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIEtNU0FOICh3aGljaCBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KS4gU3RhbmRhcmQgS0FTQU4gYW5kIEtDU0FOIGFyZSBiZXR0ZXIgc3VpdGVkIGZvciBkZXRlY3RpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBtb2RpZmljYXRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc4hf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-15 16:21:24 +0000 UTC FinishedAt: 2026-08-15 16:24:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a59f57e2aa127c5354168d2ec4bac920df1be4f4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a59f57e2aa127c5354168d2ec4bac920df1be4f4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "afiucv_hs_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmaXVjdl9oc19yY3YmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNrcywgYHNrYl9zaGFyZV9jaGVja2AsIGFuZCBgc2tiX2Nvd19oZWFkYCB0byBgYWZpdWN2X2hzX3JjdmAuIFRoZXNlIGNoYW5nZXMgZW5zdXJlIHRoYXQgdGhlIHNvY2tldCBidWZmZXIgaXMgbm90IHNoYXJlZCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBjb250ZW50cyAoZS5nLiwgdmlhIGBFQkNBU0NgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uIG9yIGRhdGEgcmFjZXMuIEl0IGFsc28gZHJvcHMgcGFja2V0cyBub3QgZGVzdGluZWQgZm9yIGBpbml0X25ldGAuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAobGlrZSBtb2RpZnlpbmcgYSBzaGFyZWQgc2tiKSBhcmUgcmVsYXRlZCB0byBtZW1vcnkgc2hhcmluZyBhbmQgZGF0YSBjb3JydXB0aW9uLCB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgS01TQU4gKHdoaWNoIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkpLiBTdGFuZGFyZCBLQVNBTiBhbmQgS0NTQU4gYXJlIGJldHRlciBzdWl0ZWQgZm9yIGRldGVjdGluZyBpc3N1ZXMgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MjI2MTc0ODhlMTdmNzIwZGE3MWI1YmQ2OWJkN2QyNGM4M2ZhMzA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTY6MjM6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi4xMGNmYzVlODJmMDQ3IDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0yMDY0LDExICYjNDM7MjA2NCwyNSBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGludCBlcnIgPSBORVRfUlhfU1VDQ0VTUztcbiBcdGNoYXIgbnVsbHN0cmluZ1s4XTtcbiBcbiYjNDM7XHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIFx1MDAyNmluaXRfbmV0KSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIXNrYilcbiYjNDM7XHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbiYjNDM7XG4gXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnRyYW5zX2hkcikpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIEVUSF9ITEVOKSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7XG4gXHRFQkNBU0ModHJhbnNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCBzaXplb2YodHJhbnNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lKSk7XG4gXHRFQkNBU0ModHJhbnNfaGRyLVx1MDAzZWRlc3RVc2VySUQsIHNpemVvZih0cmFuc19oZHItXHUwMDNlZGVzdFVzZXJJRCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MjI2MTc0ODhlMTdmNzIwZGE3MWI1YmQ2OWJkN2QyNGM4M2ZhMzA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTY6MjM6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWEwNDdiYWI2NWU3Yy4uMTBjZmM1ZTgyZjA0NyAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMjA2NCwxMSAmIzQzOzIwNjQsMjUgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaW50IGVyciA9IE5FVF9SWF9TVUNDRVNTOwogCWNoYXIgbnVsbHN0cmluZ1s4XTsKIAomIzQzOwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZhbXA7aW5pdF9uZXQpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwomIzQzOwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CiYjNDM7CiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0cmFuc19oZHIpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCX0KIAomIzQzOwlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgRVRIX0hMRU4pKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwogCXRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7CiAJRUJDQVNDKHRyYW5zX2hkci0mZ3Q7ZGVzdEFwcE5hbWUsIHNpemVvZih0cmFuc19oZHItJmd0O2Rlc3RBcHBOYW1lKSk7CiAJRUJDQVNDKHRyYW5zX2hkci0mZ3Q7ZGVzdFVzZXJJRCwgc2l6ZW9mKHRyYW5zX2hkci0mZ3Q7ZGVzdFVzZXJJRCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBOZXR3b3JrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0d2Vha2luZyBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBmb2N1c2luZyBvbiB0aGUgYGFmaXVjdl9oc19yY3ZgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZldyBuZXcgY2hlY2tzOiB2ZXJpZnlpbmcgdGhhdCB0aGUgbmV0d29yayBuYW1lc3BhY2Ugb2YgdGhlIGRldmljZSBtYXRjaGVzIHRoZSBpbml0aWFsIG5hbWVzcGFjZSB3aXRoIGBuZXRfZXEoZGV2X25ldChkZXYpLCAmYW1wO2luaXRfbmV0KWAsIHRoZW4gdXNpbmcgYHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpYCwgYW5kIGZpbmFsbHkgYHNrYl9jb3dfaGVhZChza2IsIEVUSF9ITEVOKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZXZlbiBhIHJlbGV2YW50IGNvbmNlcm4/JiMzNDsKCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBuZXQvaXVjdi9hZl9pdWN2LmNgIOKAkyB0aGF0JiMzOTtzIGRlYWxpbmcgd2l0aCBBRl9JVUNWIHNvY2tldHMsIHJpZ2h0PyBBbmQgSVVDViBpcywgaWYgbWVtb3J5IHNlcnZlcywgYW4gSUJNIHovVk0gY29tbXVuaWNhdGlvbiBwcm90b2NvbC4gVGhlIHovVk0gcmVmZXJlbmNlIGhlbHBzIGRlZmluZSBpdHMgZnVuY3Rpb24uIE9rYXksIG5vdyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgd291bGQgZXZlbiBiZSBwcmVzZW50IGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cD8gSVVDViBpcyAqc3BlY2lmaWNhbGx5KiBhbiBzMzkwIGFyY2hpdGVjdHVyZSB0aGluZy4gVGhlIHBhdGNoJiMzOTtzIGludHJvZHVjdGlvbiBvZiB0aGVzZSBjaGVja3Mgc2VlbXMgdGFpbG9yZWQgdG8gdGhhdCBzcGVjaWZpYyBlbnZpcm9ubWVudC4gR2l2ZW4gdGhhdCwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIGNvZGUgaXMgZW50aXJlbHkgczM5MC1kZXBlbmRlbnQuIEkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIG9ubHkgYnVpbHQgaW50byBhbiBzMzkwIGtlcm5lbCwgb3IgaWYgaXQgbWlnaHQgc29tZWhvdyBiZSBjb21waWxlZCBpbiBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLiBJZiB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLCB0aGVuIHRoZXNlIGNoZWNrcyBtaWdodCBub3QgYmUgYXMgaW1wb3J0YW50LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9pdWN2L0tjb25maWc6Mjpjb25maWcgSVVDVlxubmV0L2l1Y3YvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBTMzkwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIFJlYWNoaW5nIGBhZml1Y3ZfaHNfcmN2YCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGFuc3dlciBkZXBlbmRzIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gR29vZC4gSXMgczM5MHggZnV6emVkIGJ5IHN5emthbGxlcj8gQSBxdWljayBtZW50YWwgY2hlY2sgcmV2ZWFscyB0aGF0IHllcywgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzMzkweC4gVGhhdCYjMzk7cyBhIHBvaW50IGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgpIb3dldmVyLCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKmNvcmUqIG9mIHRoZSBwcm9tcHQ6IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFNvLCBjYW4gd2UgYWN0dWFsbHkgaGl0IHRoaXMgYGFmaXVjdl9oc19yY3ZgIGZ1bmN0aW9uIGluIHNvbWV0aGluZyBsaWtlIFFFTVU/IFdlIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydCBhY3R1YWxseSB0cmFuc2xhdGVzIHRvIGJlaW5nIGFibGUgdG8gdGVzdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgYWZpdWN2X2hzX3JjdmAgaXMgcmVnaXN0ZXJlZCBvciB0cmlnZ2VyZWQuIEhvdyBpcyB0aGUgZnVuY3Rpb24gdGllZCB0byBoYXJkd2FyZT8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIExldCYjMzk7cyBzZWUgaG93IGl0IGdldHMgaW52b2tlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0yMDEyPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1My0vKlxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwNTQ6ICogYWZpdWN2X2hzX3JjdigpIC0gYmFzZSBmdW5jdGlvbiBmb3IgYXJyaXZpbmcgZGF0YSB0aHJvdWdoIEhpcGVyU29ja2V0c1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTUtICogICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTctICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1ODpzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDU5LVx0c3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzA4PXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA5LVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzEwOlx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgRVRIX1BfQUZfSVVDVmAgSGFuZGxlcioqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgYEVUSF9QX0FGX0lVQ1ZgIHBhY2tldHMuIFRoYXQmIzM5O3MgZ29vZC4gV2hpY2ggbWVhbnMsIGFueSBpbmNvbWluZyBwYWNrZXQgd2l0aCB0aGF0IHNwZWNpZmljIHByb3RvY29sIElEIHdpbGwgYmUgZnVubmVsZWQgZGlyZWN0bHkgdG8gYGFmaXVjdl9oc19yY3ZgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgdGhvc2UgcGFja2V0cy4KCk5vdywgd2hlcmUgY2FuIHRoaXMgYmUgdHJpZ2dlcmVkPyBBaGEsIGxvb3BiYWNrLCBvZiBjb3Vyc2UsIGFuZCBhbnkgbmV0d29yayBpbnRlcmZhY2UsIGV2ZW4gdmlydHVhbCBvbmVzIGxpa2UgdHVuL3RhcC4gU28gSSBjYW4gY3JhZnQgYSByYXcgcGFja2V0IG9yIHV0aWxpemUgYEFGX1BBQ0tFVGAgdG8gaW5qZWN0IGEgcGFja2V0IHdpdGggdGhhdCBgRVRIX1BfQUZfSVVDVmAgcHJvdG9jb2wuIFBlcmZlY3QuIFRoaXMgbWVhbnMsIGFzIGxvbmcgYXMgdGhlIGNvZGUmIzM5O3MgY29tcGlsZWQsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIFFFTVUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgczM5MCBoYXJkd2FyZS4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHNvbWV0aGluZy4gSXMgYG5ldC9pdWN2L2FmX2l1Y3YuY2AgYWN0dWFsbHkgY29tcGlsZWQgb24gbm9uLXMzOTAgYXJjaGl0ZWN0dXJlcz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L2l1Y3YvTWFrZWZpbGVgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gR290dGEgdmVyaWZ5IHRoYXQgY29tcGlsYXRpb24gcGF0aCB0byBjb25maXJtIHRoaXMgd2hvbGUgbGluZSBvZiB0aGlua2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZl9pdWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVVDVilcdCYjNDM7PSBpdWN2Lm9cbm5ldC9pdWN2L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0FGSVVDVilcdCYjNDM7PSBhZl9pdWN2Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGBDT05GSUdfQUZJVUNWYCBpbiBgbmV0L2l1Y3YvS2NvbmZpZ2AqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYENPTkZJR19BRklVQ1ZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGUgZmFjdCB0aGF0IEkmIzM5O20gZXZlbiB0aGlua2luZyBhYm91dCBpdCB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBJVUNWLCB0aGUgSW50ZXItVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUsIHdoaWNoLCBpZiBtZW1vcnkgc2VydmVzLCBpcyB6L1ZNIHNwZWNpZmljLiBLbm93aW5nIHRoYXQsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGxvY2F0aW9uIC0gYG5ldC9pdWN2L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGl0cyBkZWZpbml0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgb3IgaGVscCB0ZXh0LiBJJiMzOTttIGFzc3VtaW5nIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyBjdXJyZW50IHN0YXRlIG9yIG1heWJlIGl0cyBpbXBsaWNhdGlvbnMuIElzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmFibGU/IEFuZCB3aGF0IGV4YWN0bHkgZG9lcyBpdCBjb250cm9sIHdpdGhpbiB0aGUgaXVjdiBuZXR3b3JraW5nIGNvbnRleHQ/IElzIHRoZXJlIGEgcmVhc29uIHdlIHNob3VsZCBiZSBjb25jZXJuZWQgYWJvdXQgaXRzIHZhbHVlPyBJIG5lZWQgdG8gZ2V0IHRoZSBleGFjdCBkZXRhaWxzIHRvIGdvIGZ1cnRoZXIuIEkgZ3Vlc3MgSSBhbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBLY29uZmlnIGFuZCBoYXZlIGEgbG9vay4gVGltZSB0byBnbyBodW50aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZJVUNWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnPTI9Y29uZmlnIElVQ1Zcbi0tXG5uZXQvaXVjdi9LY29uZmlnLTEwLVxubmV0L2l1Y3YvS2NvbmZpZzoxMTpjb25maWcgQUZJVUNWXG5uZXQvaXVjdi9LY29uZmlnLTEyLVx0ZGVwZW5kcyBvbiBTMzkwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFGSVVDVjogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvICpBRklVQ1YqIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIHRoZSAqUzM5MCogYXJjaGl0ZWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gaXQgYmUgZnV6emVkIGVmZmVjdGl2ZWx5PyBHb29kIG5ld3M6ICpzeXprYWxsZXIqIGFscmVhZHkgc3VwcG9ydHMgZnV6emluZyB0aGUgKnMzOTB4KiBhcmNoaXRlY3R1cmUuIFRoYXTigJlzIGEgdmVyeSBwb3NpdGl2ZSBpbmRpY2F0b3IsIEkga25vdyB0aGUgaW1wbGljYXRpb25zLgoKTm93LCBpZiB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgKnMzOTB4KiwgbXkgYW5hbHlzaXMgc2NyZWFtcyAqV29ydGhGdXp6aW5nPXRydWUqLiBUaGVuICpGb2N1c1N5bWJvbHMqIHNob3VsZCBpbmNsdWRlIComIzM0O2FmaXVjdl9oc19yY3YmIzM0OyogYXMgdGhlIHByaW1hcnkgdGFyZ2V0LCBhbmQgbmF0dXJhbGx5LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgKiYjMzQ7QUZJVUNWJiMzNDsqIGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCB2aWEgKkVuYWJsZUNvbmZpZ3MqLgoKQnV0IGhvbGQgb24sIGxldCYjMzk7cyBub3QganVtcCB0aGUgZ3VuIGNvbXBsZXRlbHkuIEJlZm9yZSBJIGZpbmFsaXplIHRoYXQgYXNzZXNzbWVudCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjay4gRG9lcyAqQUZJVUNWKiBoYXZlICphbnkqIG90aGVyIGRlcGVuZGVuY2llcywgYW55dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGJlZm9yZSBtYWtpbmcgYSByZWNvbW1lbmRhdGlvbj8gR290dGEgYmUgdGhvcm91Z2guIFRoaXMgcXVpY2sgc2FuaXR5IGNoZWNrIGNvdWxkIHNhdmUgYSBsb3Qgb2YgZG93bnN0cmVhbSBoZWFkYWNoZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWc9Mj1jb25maWcgSVVDVlxubmV0L2l1Y3YvS2NvbmZpZzozOlx0ZGVwZW5kcyBvbiBTMzkwXG5uZXQvaXVjdi9LY29uZmlnLTQtXHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXG4tLVxubmV0L2l1Y3YvS2NvbmZpZz0xMT1jb25maWcgQUZJVUNWXG5uZXQvaXVjdi9LY29uZmlnOjEyOlx0ZGVwZW5kcyBvbiBTMzkwXG5uZXQvaXVjdi9LY29uZmlnLTEzLVx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlKioKCk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaGVyZSBpczogZG9lcyB0aGlzIGNoYW5nZSBoaW5nZSBzcGVjaWZpY2FsbHkgb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlPyBJdCYjMzk7cyB0aGUgcHJpbWFyeSBzdXNwZWN0LCBidXQgSSBjYW4mIzM5O3QgYmUgc3VyZSB3aXRob3V0IGRpZ2dpbmcgZGVlcGVyLiBUaGUgY3J1Y2lhbCBlbGVtZW50IGlzIGRlcGVuZGVuY3ksIGFuZCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0IGlzIGFuIGltcG9ydGFudCBvbmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY2FzdCBhIHdpZGVyIG5ldC4gSSBuZWVkIHRvIGV4aGF1c3RpdmVseSBjaGVjayBmb3Igb3RoZXIgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBgbmV0L2l1Y3YvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSB3aG9sZSB0aGluZyB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciBpbXBvcnRhbnQgZGVwZW5kZW5jeSB0aGF0IGlzIGJlaW5nIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIElVQ1ZcbiAgIDM6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAgNDpcdFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxuICAgNTpcdFx0cHJvbXB0IFwmIzM0O0lVQ1Ygc3VwcG9ydCAoUzM5MCAtIHovVk0gb25seSlcJiMzNDtcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpbnRlci11c2VyIGNvbW11bmljYXRpb25cbiAgIDg6XHRcdCAgdW5kZXIgVk0gb3IgVklGLiBJZiB5b3UgcnVuIG9uIHovVk0sIHNheSBcJiMzNDtZXCYjMzQ7IHRvIGVuYWJsZSBhIGZhc3RcbiAgIDk6XHRcdCAgY29tbXVuaWNhdGlvbiBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBBRklVQ1ZcbiAgMTI6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAxMzpcdFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG4gIDE0Olx0XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDE3Olx0XHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbiAgMTg6XHRcdCAgSGlwZXJTb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc5CgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDc1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIFRhcmdldCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBBRklVQ1ZgLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGFmaXVjdl9oc19yY3ZgLiBMZXQmIzM5O3MgY29uZmlybSBpdCYjMzk7cyBub3Qgc3RhdGljOyBnb29kLCBpdCAqaXMqIHN0YXRpYy4gQnV0IGhvbGQgb24sIHRoZSBndWlkZWxpbmVzIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuICBJcyBgYWZpdWN2X2hzX3JjdmAgaW5saW5lZD8gTm8sIGl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyOiBgaXVjdl9wYWNrZXRfdHlwZS5mdW5jID0gYWZpdWN2X2hzX3JjdjtgLiBFeGNlbGxlbnQsIGl0IGhhcyBpdHMgb3duIHN5bWJvbCBhZGRyZXNzLCBzbyBpdCYjMzk7cyBhIHZhbGlkIGNhbmRpZGF0ZS4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgYWZpdWN2X2hzX3JjdmAuICBUaGlzIG1lYW5zIGl0IGlzIHRoZSBvbmx5IGZvY3VzIGZ1bmN0aW9uLiBMZXQmIzM5O3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgaXQmIzM5O3MgdGhlIGJlc3Qgb3B0aW9uLiBJdCBpcyB0aGUgcGFja2V0IHR5cGUgaGFuZGxlciwgYW5kIGEgcHJvcGVyIGVudHJ5IHBvaW50IGFuZCBiZWNhdXNlIGl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IGNhbiYjMzk7dCBiZSBpbmxpbmVkLiBZZXAsIGBhZml1Y3ZfaHNfcmN2YCBpcyB0aGUgY2xlYXIgd2lubmVyLgoKQW5kIGFzIGZvciBjb25maWd1cmF0aW9ucywgYEFGSVVDVmAgaXMgdGhlIGtleS4gVGhlIHNvdXJjZSBzYXlzIGBvYmotJChDT05GSUdfQUZJVUNWKSAmIzQzOz0gYWZfaXVjdi5vYCwgd2hpY2ggaXMgYSBkaXJlY3QgY29uZmlybWF0aW9uLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGYuCgpgYGBjCiAJaW50IGVyciA9IE5FVF9SWF9TVUNDRVNTOwogCWNoYXIgbnVsbHN0cmluZ1s4XTsKIAomIzQzOwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZhbXA7aW5pdF9uZXQpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwomIzQzOwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CiYjNDM7CiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0cmFuc19oZHIpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCX0KIAomIzQzOwlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgRVRIX0hMRU4pKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwogCXRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7CiBgYGAKCkFscmlnaHQsIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHBhdGNoOyBpdCYjMzk7cyBmdW5jdGlvbmFsbHkgbWFraW5nIGNoYW5nZXMsIGZpeGluZyBuYW1lc3BhY2UgY2hlY2tzIGFuZCBza2IgaGFuZGxpbmcuIFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZpdWN2X2hzX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYWZpdWN2X2hzX3JjdmAsIHdoaWNoIGlzIHRoZSBwYWNrZXRfdHlwZSBoYW5kbGVyIGZvciBgRVRIX1BfQUZfSVVDVmAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGJ5IGluamVjdGluZyBwYWNrZXRzIHdpdGggdGhlIGBFVEhfUF9BRl9JVUNWYCBwcm90b2NvbCB2aWEgQUZfUEFDS0VUIG9yIHR1bi90YXAgaW50ZXJmYWNlcy4gVGhlIGNoYW5nZXMgYWRkIGZ1bmN0aW9uYWwgY2hlY2tzIGZvciBuZXR3b3JrIG5hbWVzcGFjZXMsIHNrYiBzaGFyaW5nLCBhbmQgc2tiIGhlYWRyb29tLCB3aGljaCBhcmUgaW1wb3J0YW50IHRvIGZ1enogdG8gZW5zdXJlIHRoZXkgY29ycmVjdGx5IGhhbmRsZSBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZml1Y3ZfaHNfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXR3b3JrIG5hbWVzcGFjZSBjaGVja3MsIGBza2Jfc2hhcmVfY2hlY2tgLCBhbmQgYHNrYl9jb3dfaGVhZGAgdG8gYGFmaXVjdl9oc19yY3ZgLiBUaGVzZSBjaGFuZ2VzIGVuc3VyZSB0aGF0IHRoZSBzb2NrZXQgYnVmZmVyIGlzIG5vdCBzaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBpdHMgY29udGVudHMgKGUuZy4sIHZpYSBgRUJDQVNDYCksIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBvciBkYXRhIHJhY2VzLiBJdCBhbHNvIGRyb3BzIHBhY2tldHMgbm90IGRlc3RpbmVkIGZvciBgaW5pdF9uZXRgLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKGxpa2UgbW9kaWZ5aW5nIGEgc2hhcmVkIHNrYikgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IHNoYXJpbmcgYW5kIGRhdGEgY29ycnVwdGlvbiwgd2hpY2ggYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIEtNU0FOICh3aGljaCBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KS4gU3RhbmRhcmQgS0FTQU4gYW5kIEtDU0FOIGFyZSBiZXR0ZXIgc3VpdGVkIGZvciBkZXRlY3RpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBtb2RpZmljYXRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MjI2MTc0ODhlMTdmNzIwZGE3MWI1YmQ2OWJkN2QyNGM4M2ZhMzA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTY6MjM6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWEwNDdiYWI2NWU3Yy4uMTBjZmM1ZTgyZjA0NyAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMjA2NCwxMSAmIzQzOzIwNjQsMjUgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaW50IGVyciA9IE5FVF9SWF9TVUNDRVNTOwogCWNoYXIgbnVsbHN0cmluZ1s4XTsKIAomIzQzOwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZhbXA7aW5pdF9uZXQpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwomIzQzOwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CiYjNDM7CiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0cmFuc19oZHIpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCX0KIAomIzQzOwlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgRVRIX0hMRU4pKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKJiM0MzsJfQomIzQzOwogCXRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7CiAJRUJDQVNDKHRyYW5zX2hkci0mZ3Q7ZGVzdEFwcE5hbWUsIHNpemVvZih0cmFuc19oZHItJmd0O2Rlc3RBcHBOYW1lKSk7CiAJRUJDQVNDKHRyYW5zX2hkci0mZ3Q7ZGVzdFVzZXJJRCwgc2l6ZW9mKHRyYW5zX2hkci0mZ3Q7ZGVzdFVzZXJJRCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5OQoJCQkJCQkJb3V0cHV0OiAyMTYKCQkJCQkJCXRob3VnaHRzOiA3OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUmVhc29uaW5nIGZvciBgYWZpdWN2X2hzX3JjdmAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWZpdWN2X2hzX3JjdmAgaW4gYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIEkgc2VlIGl0JiMzOTtzIGFkZGluZyBhIGZldyBrZXkgY2hlY2tzLiBGaXJzdCwgaXQmIzM5O3MgZmlsdGVyaW5nIHBhY2tldHMgYmFzZWQgb24gbmV0d29yayBuYW1lc3BhY2VzLCBtYWtpbmcgc3VyZSB0aGV5JiMzOTtyZSBkZXN0aW5lZCBmb3IgYGluaXRfbmV0YC4gVGhlbiwgaXQmIzM5O3MgdXNpbmcgYHNrYl9zaGFyZV9jaGVja2AgYW5kIGBza2JfY293X2hlYWRgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBjb3VsZCB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoYXQmIzM5O3Mgd2hhdCBJIGFsd2F5cyBsb29rIGZvciB3aXRoIEtNU0FOLgoKTG9va2luZyBjbG9zZXIsIGBza2Jfc2hhcmVfY2hlY2tgIGlzIGFsbCBhYm91dCBjbG9uaW5nIHRoZSBTS0IgaWYgaXQmIzM5O3Mgc2hhcmVkLCBhIHN0YW5kYXJkIG9wZXJhdGlvbi4gQW5kIGBza2JfY293X2hlYWRgIGlzIGFib3V0IG1ha2luZyBzdXJlIHRoZSBTS0IgaGVhZCBpcyB3cml0YWJsZSBhbmQgaGFzIGVub3VnaCBoZWFkcm9vbSDigJMgc3RhbmRhcmQgU0tCIG9wZXJhdGlvbnMgdG8gYXZvaWQgY29ycnVwdGluZyBkYXRhLiBNeSBjb25jZXJuIHdhcyBhcm91bmQgcG90ZW50aWFsIG1lbW9yeSByZWFsbG9jYXRpb24gd2l0aGluIGBza2JfY293X2hlYWRgLCBidXQgdGhhdCBjb3BpZXMgdGhlIG9sZCBkYXRhLiBJdCBlbnN1cmVzIGl0JiMzOTtzIGluaXRpYWxpemVkLiBOb3RoaW5nIGhlcmUgYWxsb2NhdGVzIG5ldyBzdHJ1Y3R1cmVzIG9yIHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhYm91dCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgY29ycnVwdGlvbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzaGFyZWQgU0tCcy4gVGhhdCYjMzk7cyBLQVNBTiBvciBLQ1NBTiB0ZXJyaXRvcnkuCgpTbywgSSB0aGluayB0aGlzIGlzIGFib3V0IGZpeGluZyBhIGJ1ZyB3aGVyZSBgYWZpdWN2X2hzX3JjdmAgKm1vZGlmaWVzKiBTS0IgZGF0YSwgbGlrZSB3aXRoIGBFQkNBU0NgLiBNb2RpZnlpbmcgc2hhcmVkIFNLQiBkYXRhIGlzIGEgYmlnIG5vLW5vIGJlY2F1c2Ugb2YgZGF0YSByYWNlcyBhbmQgcG90ZW50aWFsIGNvcnJ1cHRpb24uIEl0JiMzOTtzIGEgYnVnIGluIHNoYXJlZCBtZW1vcnksIG5vdCBhIGJ1ZyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gYHNrYl9zaGFyZV9jaGVja2AgYW5kIGBza2JfY293X2hlYWRgIGFyZSBzcGVjaWZpY2FsbHkgdGhlcmUgdG8gcHJldmVudCB0aGVzZSBraW5kcyBvZiBidWdzLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IHdhcnJhbnQgS01TQU4uIFRoZSBhZGRlZCBjaGVja3Mg4oCTIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBmaWx0ZXJpbmcsIGBza2Jfc2hhcmVfY2hlY2tgLCBhbmQgYHNrYl9jb3dfaGVhZGAg4oCTIGFyZSB0aGVyZSB0byBtYWtlIHN1cmUgd2UgKmRvbiYjMzk7dCogbW9kaWZ5IGEgc2hhcmVkIFNLQi4gVGhleSBhcmUgZW5zdXJpbmcgbWVtb3J5IHNhZmV0eSwgcHJldmVudGluZyBkYXRhIHJhY2VzIGFuZCBjb3JydXB0aW9uIHZpYSBzdGFuZGFyZCBtZXRob2RzLiBJdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5ICpjb3JydXB0aW9uKiBpc3N1ZSBieSBwcmV2ZW50aW5nIG1vZGlmaWNhdGlvbnMgb2Ygc2hhcmVkIG1lbW9yeSwgbm90IGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaXNzdWUuIEtBU0FOL0tDU0FOIGFyZSBiZXR0ZXIgc3VpdGVkIGhlcmUuIFRodXMsIEkmIzM5O2xsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tzLCBgc2tiX3NoYXJlX2NoZWNrYCwgYW5kIGBza2JfY293X2hlYWRgIHRvIGBhZml1Y3ZfaHNfcmN2YC4gVGhlc2UgY2hhbmdlcyBlbnN1cmUgdGhhdCB0aGUgc29ja2V0IGJ1ZmZlciBpcyBub3Qgc2hhcmVkIGJlZm9yZSBtb2RpZnlpbmcgaXRzIGNvbnRlbnRzIChlLmcuLCB2aWEgYEVCQ0FTQ2ApLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gb3IgZGF0YSByYWNlcy4gSXQgYWxzbyBkcm9wcyBwYWNrZXRzIG5vdCBkZXN0aW5lZCBmb3IgYGluaXRfbmV0YC4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSBpdCBpbiBjb250cm9sIGZsb3cuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChsaWtlIG1vZGlmeWluZyBhIHNoYXJlZCBza2IpIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBzaGFyaW5nIGFuZCBkYXRhIGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiAod2hpY2ggZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSkuIFN0YW5kYXJkIEtBU0FOIGFuZCBLQ1NBTiBhcmUgYmV0dGVyIHN1aXRlZCBmb3IgZGV0ZWN0aW5nIGlzc3VlcyByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnkgbW9kaWZpY2F0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tzLCBgc2tiX3NoYXJlX2NoZWNrYCwgYW5kIGBza2JfY293X2hlYWRgIHRvIGBhZml1Y3ZfaHNfcmN2YC4gVGhlc2UgY2hhbmdlcyBlbnN1cmUgdGhhdCB0aGUgc29ja2V0IGJ1ZmZlciBpcyBub3Qgc2hhcmVkIGJlZm9yZSBtb2RpZnlpbmcgaXRzIGNvbnRlbnRzIChlLmcuLCB2aWEgYEVCQ0FTQ2ApLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gb3IgZGF0YSByYWNlcy4gSXQgYWxzbyBkcm9wcyBwYWNrZXRzIG5vdCBkZXN0aW5lZCBmb3IgYGluaXRfbmV0YC4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSBpdCBpbiBjb250cm9sIGZsb3cuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChsaWtlIG1vZGlmeWluZyBhIHNoYXJlZCBza2IpIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBzaGFyaW5nIGFuZCBkYXRhIGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiAod2hpY2ggZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSkuIFN0YW5kYXJkIEtBU0FOIGFuZCBLQ1NBTiBhcmUgYmV0dGVyIHN1aXRlZCBmb3IgZGV0ZWN0aW5nIGlzc3VlcyByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnkgbW9kaWZpY2F0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjM6MjMuNzQ5ODQ4NzM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc0MjUxNjQzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZpdWN2X2hzX3JjdlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXR3b3JrIG5hbWVzcGFjZSBjaGVja3MsIGBza2Jfc2hhcmVfY2hlY2tgLCBhbmQgYHNrYl9jb3dfaGVhZGAgdG8gYGFmaXVjdl9oc19yY3ZgLiBUaGVzZSBjaGFuZ2VzIGVuc3VyZSB0aGF0IHRoZSBzb2NrZXQgYnVmZmVyIGlzIG5vdCBzaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBpdHMgY29udGVudHMgKGUuZy4sIHZpYSBgRUJDQVNDYCksIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBvciBkYXRhIHJhY2VzLiBJdCBhbHNvIGRyb3BzIHBhY2tldHMgbm90IGRlc3RpbmVkIGZvciBgaW5pdF9uZXRgLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKGxpa2UgbW9kaWZ5aW5nIGEgc2hhcmVkIHNrYikgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IHNoYXJpbmcgYW5kIGRhdGEgY29ycnVwdGlvbiwgd2hpY2ggYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIEtNU0FOICh3aGljaCBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KS4gU3RhbmRhcmQgS0FTQU4gYW5kIEtDU0FOIGFyZSBiZXR0ZXIgc3VpdGVkIGZvciBkZXRlY3RpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBtb2RpZmljYXRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjIzOjIzLjc0OTg1NjcyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1Nzc2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTIyNjE3NDg4ZTE3ZjcyMGRhNzFiNWJkNjliZDdkMjRjODNmYTMwOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjoyMzoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi4xMGNmYzVlODJmMDQ3IDEwMDY0NFxcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xcbkBAIC0yMDY0LDExICsyMDY0LDI1IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7XFxuIFxcdGNoYXIgbnVsbHN0cmluZ1s4XTtcXG4gXFxuK1xcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgXFx1MDAyNmluaXRfbmV0KSkge1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xcbitcXHR9XFxuK1xcbitcXHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCFza2IpXFxuK1xcdFxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4rXFxuIFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqdHJhbnNfaGRyKSkpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIEVUSF9ITEVOKSkge1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xcbitcXHR9XFxuK1xcbiBcXHR0cmFuc19oZHIgPSBpdWN2X3RyYW5zX2hkcihza2IpO1xcbiBcXHRFQkNBU0ModHJhbnNfaGRyLVxcdTAwM2VkZXN0QXBwTmFtZSwgc2l6ZW9mKHRyYW5zX2hkci1cXHUwMDNlZGVzdEFwcE5hbWUpKTtcXG4gXFx0RUJDQVNDKHRyYW5zX2hkci1cXHUwMDNlZGVzdFVzZXJJRCwgc2l6ZW9mKHRyYW5zX2hkci1cXHUwMDNlZGVzdFVzZXJJRCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyMzoyNC4xNzY0ODY2NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2Njk0NDI1NTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRklVQ1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZml1Y3ZfaHNfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFmaXVjdl9oc19yY3ZgLCB3aGljaCBpcyB0aGUgcGFja2V0X3R5cGUgaGFuZGxlciBmb3IgYEVUSF9QX0FGX0lVQ1ZgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBieSBpbmplY3RpbmcgcGFja2V0cyB3aXRoIHRoZSBgRVRIX1BfQUZfSVVDVmAgcHJvdG9jb2wgdmlhIEFGX1BBQ0tFVCBvciB0dW4vdGFwIGludGVyZmFjZXMuIFRoZSBjaGFuZ2VzIGFkZCBmdW5jdGlvbmFsIGNoZWNrcyBmb3IgbmV0d29yayBuYW1lc3BhY2VzLCBza2Igc2hhcmluZywgYW5kIHNrYiBoZWFkcm9vbSwgd2hpY2ggYXJlIGltcG9ydGFudCB0byBmdXp6IHRvIGVuc3VyZSB0aGV5IGNvcnJlY3RseSBoYW5kbGUgbWFsZm9ybWVkIG9yIHVuZXhwZWN0ZWQgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTIyNjE3NDg4ZTE3ZjcyMGRhNzFiNWJkNjliZDdkMjRjODNmYTMwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDE2OjIzOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi4xMGNmYzVlODJmMDQ3IDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0yMDY0LDExICsyMDY0LDI1IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aW50IGVyciA9IE5FVF9SWF9TVUNDRVNTO1xuIFx0Y2hhciBudWxsc3RyaW5nWzhdO1xuIFxuK1x0aWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCBcdTAwMjZpbml0X25ldCkpIHtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbitcdH1cbitcbitcdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xuK1x0aWYgKCFza2IpXG4rXHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbitcbiBcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqdHJhbnNfaGRyKSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbiBcdH1cbiBcbitcdGlmIChza2JfY293X2hlYWQoc2tiLCBFVEhfSExFTikpIHtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbitcdH1cbitcbiBcdHRyYW5zX2hkciA9IGl1Y3ZfdHJhbnNfaGRyKHNrYik7XG4gXHRFQkNBU0ModHJhbnNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCBzaXplb2YodHJhbnNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lKSk7XG4gXHRFQkNBU0ModHJhbnNfaGRyLVx1MDAzZWRlc3RVc2VySUQsIHNpemVvZih0cmFuc19oZHItXHUwMDNlZGVzdFVzZXJJRCkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjM6MjQuMTc2NDkwMjY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwODg1MjUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBmb2N1c2luZyBvbiB0aGUgYGFmaXVjdl9oc19yY3ZgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZldyBuZXcgY2hlY2tzOiB2ZXJpZnlpbmcgdGhhdCB0aGUgbmV0d29yayBuYW1lc3BhY2Ugb2YgdGhlIGRldmljZSBtYXRjaGVzIHRoZSBpbml0aWFsIG5hbWVzcGFjZSB3aXRoIGBuZXRfZXEoZGV2X25ldChkZXYpLCBcdTAwMjZpbml0X25ldClgLCB0aGVuIHVzaW5nIGBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKWAsIGFuZCBmaW5hbGx5IGBza2JfY293X2hlYWQoc2tiLCBFVEhfSExFTilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGV2ZW4gYSByZWxldmFudCBjb25jZXJuP1wiXG5cbkxldCdzIGJyZWFrIHRoaXMgZG93bi4gYG5ldC9pdWN2L2FmX2l1Y3YuY2Ag4oCTIHRoYXQncyBkZWFsaW5nIHdpdGggQUZfSVVDViBzb2NrZXRzLCByaWdodD8gQW5kIElVQ1YgaXMsIGlmIG1lbW9yeSBzZXJ2ZXMsIGFuIElCTSB6L1ZNIGNvbW11bmljYXRpb24gcHJvdG9jb2wuIFRoZSB6L1ZNIHJlZmVyZW5jZSBoZWxwcyBkZWZpbmUgaXRzIGZ1bmN0aW9uLiBPa2F5LCBub3cgdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdvdWxkIGV2ZW4gYmUgcHJlc2VudCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXA/IElVQ1YgaXMgKnNwZWNpZmljYWxseSogYW4gczM5MCBhcmNoaXRlY3R1cmUgdGhpbmcuIFRoZSBwYXRjaCdzIGludHJvZHVjdGlvbiBvZiB0aGVzZSBjaGVja3Mgc2VlbXMgdGFpbG9yZWQgdG8gdGhhdCBzcGVjaWZpYyBlbnZpcm9ubWVudC4gR2l2ZW4gdGhhdCwgbGV0J3Mgc2VlIGlmIHRoaXMgY29kZSBpcyBlbnRpcmVseSBzMzkwLWRlcGVuZGVudC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBvbmx5IGJ1aWx0IGludG8gYW4gczM5MCBrZXJuZWwsIG9yIGlmIGl0IG1pZ2h0IHNvbWVob3cgYmUgY29tcGlsZWQgaW4gb24gb3RoZXIgYXJjaGl0ZWN0dXJlcy4gSWYgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcywgdGhlbiB0aGVzZSBjaGVja3MgbWlnaHQgbm90IGJlIGFzIGltcG9ydGFudC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjM6MjkuNDg1MzQ2MTQ0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njk1MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9pdWN2L0tjb25maWc6Mjpjb25maWcgSVVDVlxcbm5ldC9pdWN2L0tjb25maWctMy1cXHRkZXBlbmRzIG9uIFMzOTBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjM6MjkuNTMwMDQ3MDMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MjYxNzA5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBSZWFjaGluZyBgYWZpdWN2X2hzX3JjdmAqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGFuc3dlciBkZXBlbmRzIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gR29vZC4gSXMgczM5MHggZnV6emVkIGJ5IHN5emthbGxlcj8gQSBxdWljayBtZW50YWwgY2hlY2sgcmV2ZWFscyB0aGF0IHllcywgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzMzkweC4gVGhhdCdzIGEgcG9pbnQgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuSG93ZXZlciwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKmNvcmUqIG9mIHRoZSBwcm9tcHQ6IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFNvLCBjYW4gd2UgYWN0dWFsbHkgaGl0IHRoaXMgYGFmaXVjdl9oc19yY3ZgIGZ1bmN0aW9uIGluIHNvbWV0aGluZyBsaWtlIFFFTVU/IFdlIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydCBhY3R1YWxseSB0cmFuc2xhdGVzIHRvIGJlaW5nIGFibGUgdG8gdGVzdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBhZml1Y3ZfaHNfcmN2YCBpcyByZWdpc3RlcmVkIG9yIHRyaWdnZXJlZC4gSG93IGlzIHRoZSBmdW5jdGlvbiB0aWVkIHRvIGhhcmR3YXJlPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBMZXQncyBzZWUgaG93IGl0IGdldHMgaW52b2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDowNi4yNTYyMjA2NTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjU0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZpdWN2X2hzX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTIwMTI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTMtLypcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1NDogKiBhZml1Y3ZfaHNfcmN2KCkgLSBiYXNlIGZ1bmN0aW9uIGZvciBhcnJpdmluZyBkYXRhIHRocm91Z2ggSGlwZXJTb2NrZXRzXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNTUtICogICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1Ny0gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA1ODpzdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA1OS1cXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwOD1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDktXFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMxMDpcXHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjQ6MDYuMzAzMjkyNTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA2NzAxMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgRVRIX1BfQUZfSVVDVmAgSGFuZGxlcioqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBgRVRIX1BfQUZfSVVDVmAgcGFja2V0cy4gVGhhdCdzIGdvb2QuIFdoaWNoIG1lYW5zLCBhbnkgaW5jb21pbmcgcGFja2V0IHdpdGggdGhhdCBzcGVjaWZpYyBwcm90b2NvbCBJRCB3aWxsIGJlIGZ1bm5lbGVkIGRpcmVjdGx5IHRvIGBhZml1Y3ZfaHNfcmN2YC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQncyBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgdGhvc2UgcGFja2V0cy5cblxuTm93LCB3aGVyZSBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQ/IEFoYSwgbG9vcGJhY2ssIG9mIGNvdXJzZSwgYW5kIGFueSBuZXR3b3JrIGludGVyZmFjZSwgZXZlbiB2aXJ0dWFsIG9uZXMgbGlrZSB0dW4vdGFwLiBTbyBJIGNhbiBjcmFmdCBhIHJhdyBwYWNrZXQgb3IgdXRpbGl6ZSBgQUZfUEFDS0VUYCB0byBpbmplY3QgYSBwYWNrZXQgd2l0aCB0aGF0IGBFVEhfUF9BRl9JVUNWYCBwcm90b2NvbC4gUGVyZmVjdC4gVGhpcyBtZWFucywgYXMgbG9uZyBhcyB0aGUgY29kZSdzIGNvbXBpbGVkLCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIFFFTVUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVuZGVybHlpbmcgczM5MCBoYXJkd2FyZS5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgc29tZXRoaW5nLiBJcyBgbmV0L2l1Y3YvYWZfaXVjdi5jYCBhY3R1YWxseSBjb21waWxlZCBvbiBub24tczM5MCBhcmNoaXRlY3R1cmVzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvaXVjdi9NYWtlZmlsZWAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBHb3R0YSB2ZXJpZnkgdGhhdCBjb21waWxhdGlvbiBwYXRoIHRvIGNvbmZpcm0gdGhpcyB3aG9sZSBsaW5lIG9mIHRoaW5raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjI0OjExLjAwOTk5NTk1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgyMzgwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZfaXVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JVUNWKVxcdCs9IGl1Y3Yub1xcbm5ldC9pdWN2L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0FGSVVDVilcXHQrPSBhZl9pdWN2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjQ6MTEuMTY4MjQwMDI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MjA4MDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGBDT05GSUdfQUZJVUNWYCBpbiBgbmV0L2l1Y3YvS2NvbmZpZ2AqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIGRpdmUgaW50byB0aGlzIGBDT05GSUdfQUZJVUNWYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIGZhY3QgdGhhdCBJJ20gZXZlbiB0aGlua2luZyBhYm91dCBpdCB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIElVQ1YsIHRoZSBJbnRlci1Vc2VyIENvbW11bmljYXRpb24gVmVoaWNsZSwgd2hpY2gsIGlmIG1lbW9yeSBzZXJ2ZXMsIGlzIHovVk0gc3BlY2lmaWMuIEtub3dpbmcgdGhhdCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgbG9jYXRpb24gLSBgbmV0L2l1Y3YvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIG9yIGhlbHAgdGV4dC4gSSdtIGFzc3VtaW5nIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyBjdXJyZW50IHN0YXRlIG9yIG1heWJlIGl0cyBpbXBsaWNhdGlvbnMuIElzIGl0IGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25maWd1cmFibGU/IEFuZCB3aGF0IGV4YWN0bHkgZG9lcyBpdCBjb250cm9sIHdpdGhpbiB0aGUgaXVjdiBuZXR3b3JraW5nIGNvbnRleHQ/IElzIHRoZXJlIGEgcmVhc29uIHdlIHNob3VsZCBiZSBjb25jZXJuZWQgYWJvdXQgaXRzIHZhbHVlPyBJIG5lZWQgdG8gZ2V0IHRoZSBleGFjdCBkZXRhaWxzIHRvIGdvIGZ1cnRoZXIuIEkgZ3Vlc3MgSSBhbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBLY29uZmlnIGFuZCBoYXZlIGEgbG9vay4gVGltZSB0byBnbyBodW50aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjQ6MTQuNTMwMzIzNzE1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY4NzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZJVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvS2NvbmZpZz0yPWNvbmZpZyBJVUNWXFxuLS1cXG5uZXQvaXVjdi9LY29uZmlnLTEwLVxcbm5ldC9pdWN2L0tjb25maWc6MTE6Y29uZmlnIEFGSVVDVlxcbm5ldC9pdWN2L0tjb25maWctMTItXFx0ZGVwZW5kcyBvbiBTMzkwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjI0OjE0LjU3NjAxNDAwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM2ODE1MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQUZJVUNWOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyAqQUZJVUNWKiBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byB0aGUgKlMzOTAqIGFyY2hpdGVjdHVyZS4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gaXQgYmUgZnV6emVkIGVmZmVjdGl2ZWx5PyBHb29kIG5ld3M6ICpzeXprYWxsZXIqIGFscmVhZHkgc3VwcG9ydHMgZnV6emluZyB0aGUgKnMzOTB4KiBhcmNoaXRlY3R1cmUuIFRoYXTigJlzIGEgdmVyeSBwb3NpdGl2ZSBpbmRpY2F0b3IsIEkga25vdyB0aGUgaW1wbGljYXRpb25zLlxuXG5Ob3csIGlmIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyAqczM5MHgqLCBteSBhbmFseXNpcyBzY3JlYW1zICpXb3J0aEZ1enppbmc9dHJ1ZSouIFRoZW4gKkZvY3VzU3ltYm9scyogc2hvdWxkIGluY2x1ZGUgKlwiYWZpdWN2X2hzX3JjdlwiKiBhcyB0aGUgcHJpbWFyeSB0YXJnZXQsIGFuZCBuYXR1cmFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSAqXCJBRklVQ1ZcIiogY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IHZpYSAqRW5hYmxlQ29uZmlncyouXG5cbkJ1dCBob2xkIG9uLCBsZXQncyBub3QganVtcCB0aGUgZ3VuIGNvbXBsZXRlbHkuIEJlZm9yZSBJIGZpbmFsaXplIHRoYXQgYXNzZXNzbWVudCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjay4gRG9lcyAqQUZJVUNWKiBoYXZlICphbnkqIG90aGVyIGRlcGVuZGVuY2llcywgYW55dGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIGJlZm9yZSBtYWtpbmcgYSByZWNvbW1lbmRhdGlvbj8gR290dGEgYmUgdGhvcm91Z2guIFRoaXMgcXVpY2sgc2FuaXR5IGNoZWNrIGNvdWxkIHNhdmUgYSBsb3Qgb2YgZG93bnN0cmVhbSBoZWFkYWNoZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDoxOC43MTI4MzE5MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mjk2ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9LY29uZmlnPTI9Y29uZmlnIElVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnOjM6XFx0ZGVwZW5kcyBvbiBTMzkwXFxubmV0L2l1Y3YvS2NvbmZpZy00LVxcdGRlZl90cmlzdGF0ZSB5IGlmIFMzOTBcXG4tLVxcbm5ldC9pdWN2L0tjb25maWc9MTE9Y29uZmlnIEFGSVVDVlxcbm5ldC9pdWN2L0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBTMzkwXFxubmV0L2l1Y3YvS2NvbmZpZy0xMy1cXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjQ6MTguNzU5MTM4NDA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDQyMjA3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaGVyZSBpczogZG9lcyB0aGlzIGNoYW5nZSBoaW5nZSBzcGVjaWZpY2FsbHkgb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlPyBJdCdzIHRoZSBwcmltYXJ5IHN1c3BlY3QsIGJ1dCBJIGNhbid0IGJlIHN1cmUgd2l0aG91dCBkaWdnaW5nIGRlZXBlci4gVGhlIGNydWNpYWwgZWxlbWVudCBpcyBkZXBlbmRlbmN5LCBhbmQgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0IGlzIGFuIGltcG9ydGFudCBvbmUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjYXN0IGEgd2lkZXIgbmV0LiBJIG5lZWQgdG8gZXhoYXVzdGl2ZWx5IGNoZWNrIGZvciBvdGhlciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGBuZXQvaXVjdi9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgd2hvbGUgdGhpbmcgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXNuJ3QgYW5vdGhlciBpbXBvcnRhbnQgZGVwZW5kZW5jeSB0aGF0IGlzIGJlaW5nIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjI0OjIxLjQ2MzM2MjI2MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgSVVDVlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwXFxuICAgNDpcXHRcXHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXFxuICAgNTpcXHRcXHRwcm9tcHQgXFxcIklVQ1Ygc3VwcG9ydCAoUzM5MCAtIHovVk0gb25seSlcXFwiXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgaW50ZXItdXNlciBjb21tdW5pY2F0aW9uXFxuICAgODpcXHRcXHQgIHVuZGVyIFZNIG9yIFZJRi4gSWYgeW91IHJ1biBvbiB6L1ZNLCBzYXkgXFxcIllcXFwiIHRvIGVuYWJsZSBhIGZhc3RcXG4gICA5OlxcdFxcdCAgY29tbXVuaWNhdGlvbiBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLlxcbiAgMTA6XFx0XFxuICAxMTpcXHRjb25maWcgQUZJVUNWXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gIDEzOlxcdFxcdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxcbiAgMTQ6XFx0XFx0cHJvbXB0IFxcXCJBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcXFwiXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxNzpcXHRcXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cXG4gIDE4OlxcdFxcdCAgSGlwZXJTb2NrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDoyMS40NjM0MjcxMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU3Mjk4OTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIFRhcmdldCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGhlcmUgc2VlbXMgdG8gYmUgYEFGSVVDVmAuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgYWZpdWN2X2hzX3JjdmAuIExldCdzIGNvbmZpcm0gaXQncyBub3Qgc3RhdGljOyBnb29kLCBpdCAqaXMqIHN0YXRpYy4gQnV0IGhvbGQgb24sIHRoZSBndWlkZWxpbmVzIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuICBJcyBgYWZpdWN2X2hzX3JjdmAgaW5saW5lZD8gTm8sIGl0J3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXI6IGBpdWN2X3BhY2tldF90eXBlLmZ1bmMgPSBhZml1Y3ZfaHNfcmN2O2AuIEV4Y2VsbGVudCwgaXQgaGFzIGl0cyBvd24gc3ltYm9sIGFkZHJlc3MsIHNvIGl0J3MgYSB2YWxpZCBjYW5kaWRhdGUuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgYWZpdWN2X2hzX3JjdmAuICBUaGlzIG1lYW5zIGl0IGlzIHRoZSBvbmx5IGZvY3VzIGZ1bmN0aW9uLiBMZXQncyBtYWtlIGFic29sdXRlbHkgc3VyZSBpdCdzIHRoZSBiZXN0IG9wdGlvbi4gSXQgaXMgdGhlIHBhY2tldCB0eXBlIGhhbmRsZXIsIGFuZCBhIHByb3BlciBlbnRyeSBwb2ludCBhbmQgYmVjYXVzZSBpdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IGNhbid0IGJlIGlubGluZWQuIFllcCwgYGFmaXVjdl9oc19yY3ZgIGlzIHRoZSBjbGVhciB3aW5uZXIuXG5cbkFuZCBhcyBmb3IgY29uZmlndXJhdGlvbnMsIGBBRklVQ1ZgIGlzIHRoZSBrZXkuIFRoZSBzb3VyY2Ugc2F5cyBgb2JqLSQoQ09ORklHX0FGSVVDVikgKz0gYWZfaXVjdi5vYCwgd2hpY2ggaXMgYSBkaXJlY3QgY29uZmlybWF0aW9uLlxuXG5MZXQncyBxdWlja2x5IHJldmlldyB0aGUgcGF0Y2ggaXRzZWxmLlxuXG5gYGBjXG4gXHRpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7XG4gXHRjaGFyIG51bGxzdHJpbmdbOF07XG4gXG4rXHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIFx1MDAyNmluaXRfbmV0KSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1x0fVxuK1xuK1x0c2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIXNrYilcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1xuIFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0cmFuc19oZHIpKSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuIFx0fVxuIFxuK1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIEVUSF9ITEVOKSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1x0fVxuK1xuIFx0dHJhbnNfaGRyID0gaXVjdl90cmFuc19oZHIoc2tiKTtcbiBgYGBcblxuQWxyaWdodCwgdGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcGF0Y2g7IGl0J3MgZnVuY3Rpb25hbGx5IG1ha2luZyBjaGFuZ2VzLCBmaXhpbmcgbmFtZXNwYWNlIGNoZWNrcyBhbmQgc2tiIGhhbmRsaW5nLiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3OSwiT3V0cHV0VG9rZW5zIjoxNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDozMS4wMzY0MjE0MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDMxODAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZpdWN2X2hzX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZpdWN2X2hzX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhZml1Y3ZfaHNfcmN2YCwgd2hpY2ggaXMgdGhlIHBhY2tldF90eXBlIGhhbmRsZXIgZm9yIGBFVEhfUF9BRl9JVUNWYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgYnkgaW5qZWN0aW5nIHBhY2tldHMgd2l0aCB0aGUgYEVUSF9QX0FGX0lVQ1ZgIHByb3RvY29sIHZpYSBBRl9QQUNLRVQgb3IgdHVuL3RhcCBpbnRlcmZhY2VzLiBUaGUgY2hhbmdlcyBhZGQgZnVuY3Rpb25hbCBjaGVja3MgZm9yIG5ldHdvcmsgbmFtZXNwYWNlcywgc2tiIHNoYXJpbmcsIGFuZCBza2IgaGVhZHJvb20sIHdoaWNoIGFyZSBpbXBvcnRhbnQgdG8gZnV6eiB0byBlbnN1cmUgdGhleSBjb3JyZWN0bHkgaGFuZGxlIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjI0OjMxLjEyMDc0NjM5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNTQyNTcyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDozMS4xMjEzMzY5NTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAwNTM2NjI5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV0d29yayBuYW1lc3BhY2UgY2hlY2tzLCBgc2tiX3NoYXJlX2NoZWNrYCwgYW5kIGBza2JfY293X2hlYWRgIHRvIGBhZml1Y3ZfaHNfcmN2YC4gVGhlc2UgY2hhbmdlcyBlbnN1cmUgdGhhdCB0aGUgc29ja2V0IGJ1ZmZlciBpcyBub3Qgc2hhcmVkIGJlZm9yZSBtb2RpZnlpbmcgaXRzIGNvbnRlbnRzIChlLmcuLCB2aWEgYEVCQ0FTQ2ApLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gb3IgZGF0YSByYWNlcy4gSXQgYWxzbyBkcm9wcyBwYWNrZXRzIG5vdCBkZXN0aW5lZCBmb3IgYGluaXRfbmV0YC4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIG5vciBkbyB0aGV5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSBpdCBpbiBjb250cm9sIGZsb3cuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIChsaWtlIG1vZGlmeWluZyBhIHNoYXJlZCBza2IpIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBzaGFyaW5nIGFuZCBkYXRhIGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiAod2hpY2ggZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSkuIFN0YW5kYXJkIEtBU0FOIGFuZCBLQ1NBTiBhcmUgYmV0dGVyIHN1aXRlZCBmb3IgZGV0ZWN0aW5nIGlzc3VlcyByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnkgbW9kaWZpY2F0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MjI2MTc0ODhlMTdmNzIwZGE3MWI1YmQ2OWJkN2QyNGM4M2ZhMzA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTY6MjM6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbmluZGV4IGVhMDQ3YmFiNjVlN2MuLjEwY2ZjNWU4MmYwNDcgMTAwNjQ0XG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuQEAgLTIwNjQsMTEgKzIwNjQsMjUgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7XG4gXHRjaGFyIG51bGxzdHJpbmdbOF07XG4gXG4rXHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIFx1MDAyNmluaXRfbmV0KSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1x0fVxuK1xuK1x0c2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIXNrYilcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1xuIFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0cmFuc19oZHIpKSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuIFx0fVxuIFxuK1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIEVUSF9ITEVOKSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuK1x0fVxuK1xuIFx0dHJhbnNfaGRyID0gaXVjdl90cmFuc19oZHIoc2tiKTtcbiBcdEVCQ0FTQyh0cmFuc19oZHItXHUwMDNlZGVzdEFwcE5hbWUsIHNpemVvZih0cmFuc19oZHItXHUwMDNlZGVzdEFwcE5hbWUpKTtcbiBcdEVCQ0FTQyh0cmFuc19oZHItXHUwMDNlZGVzdFVzZXJJRCwgc2l6ZW9mKHRyYW5zX2hkci1cdTAwM2VkZXN0VXNlcklEKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoyNDozMS4xMjEzMzc3NzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNTM2MzEyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gUmVhc29uaW5nIGZvciBgYWZpdWN2X2hzX3JjdmAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFmaXVjdl9oc19yY3ZgIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBJIHNlZSBpdCdzIGFkZGluZyBhIGZldyBrZXkgY2hlY2tzLiBGaXJzdCwgaXQncyBmaWx0ZXJpbmcgcGFja2V0cyBiYXNlZCBvbiBuZXR3b3JrIG5hbWVzcGFjZXMsIG1ha2luZyBzdXJlIHRoZXkncmUgZGVzdGluZWQgZm9yIGBpbml0X25ldGAuIFRoZW4sIGl0J3MgdXNpbmcgYHNrYl9zaGFyZV9jaGVja2AgYW5kIGBza2JfY293X2hlYWRgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBjb3VsZCB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoYXQncyB3aGF0IEkgYWx3YXlzIGxvb2sgZm9yIHdpdGggS01TQU4uXG5cbkxvb2tpbmcgY2xvc2VyLCBgc2tiX3NoYXJlX2NoZWNrYCBpcyBhbGwgYWJvdXQgY2xvbmluZyB0aGUgU0tCIGlmIGl0J3Mgc2hhcmVkLCBhIHN0YW5kYXJkIG9wZXJhdGlvbi4gQW5kIGBza2JfY293X2hlYWRgIGlzIGFib3V0IG1ha2luZyBzdXJlIHRoZSBTS0IgaGVhZCBpcyB3cml0YWJsZSBhbmQgaGFzIGVub3VnaCBoZWFkcm9vbSDigJMgc3RhbmRhcmQgU0tCIG9wZXJhdGlvbnMgdG8gYXZvaWQgY29ycnVwdGluZyBkYXRhLiBNeSBjb25jZXJuIHdhcyBhcm91bmQgcG90ZW50aWFsIG1lbW9yeSByZWFsbG9jYXRpb24gd2l0aGluIGBza2JfY293X2hlYWRgLCBidXQgdGhhdCBjb3BpZXMgdGhlIG9sZCBkYXRhLiBJdCBlbnN1cmVzIGl0J3MgaW5pdGlhbGl6ZWQuIE5vdGhpbmcgaGVyZSBhbGxvY2F0ZXMgbmV3IHN0cnVjdHVyZXMgb3IgcmVhZHMgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MgZXNzZW50aWFsbHkgYWJvdXQgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIGNvcnJ1cHRpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc2hhcmVkIFNLQnMuIFRoYXQncyBLQVNBTiBvciBLQ1NBTiB0ZXJyaXRvcnkuXG5cblNvLCBJIHRoaW5rIHRoaXMgaXMgYWJvdXQgZml4aW5nIGEgYnVnIHdoZXJlIGBhZml1Y3ZfaHNfcmN2YCAqbW9kaWZpZXMqIFNLQiBkYXRhLCBsaWtlIHdpdGggYEVCQ0FTQ2AuIE1vZGlmeWluZyBzaGFyZWQgU0tCIGRhdGEgaXMgYSBiaWcgbm8tbm8gYmVjYXVzZSBvZiBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgY29ycnVwdGlvbi4gSXQncyBhIGJ1ZyBpbiBzaGFyZWQgbWVtb3J5LCBub3QgYSBidWcgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIGBza2Jfc2hhcmVfY2hlY2tgIGFuZCBgc2tiX2Nvd19oZWFkYCBhcmUgc3BlY2lmaWNhbGx5IHRoZXJlIHRvIHByZXZlbnQgdGhlc2Uga2luZHMgb2YgYnVncy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBLTVNBTi4gVGhlIGFkZGVkIGNoZWNrcyDigJMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGZpbHRlcmluZywgYHNrYl9zaGFyZV9jaGVja2AsIGFuZCBgc2tiX2Nvd19oZWFkYCDigJMgYXJlIHRoZXJlIHRvIG1ha2Ugc3VyZSB3ZSAqZG9uJ3QqIG1vZGlmeSBhIHNoYXJlZCBTS0IuIFRoZXkgYXJlIGVuc3VyaW5nIG1lbW9yeSBzYWZldHksIHByZXZlbnRpbmcgZGF0YSByYWNlcyBhbmQgY29ycnVwdGlvbiB2aWEgc3RhbmRhcmQgbWV0aG9kcy4gSXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSAqY29ycnVwdGlvbiogaXNzdWUgYnkgcHJldmVudGluZyBtb2RpZmljYXRpb25zIG9mIHNoYXJlZCBtZW1vcnksIG5vdCBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGlzc3VlLiBLQVNBTi9LQ1NBTiBhcmUgYmV0dGVyIHN1aXRlZCBoZXJlLiBUaHVzLCBJJ2xsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTksIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MjQ6NDEuMTc0OTcyNDYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldHdvcmsgbmFtZXNwYWNlIGNoZWNrcywgYHNrYl9zaGFyZV9jaGVja2AsIGFuZCBgc2tiX2Nvd19oZWFkYCB0byBgYWZpdWN2X2hzX3JjdmAuIFRoZXNlIGNoYW5nZXMgZW5zdXJlIHRoYXQgdGhlIHNvY2tldCBidWZmZXIgaXMgbm90IHNoYXJlZCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBjb250ZW50cyAoZS5nLiwgdmlhIGBFQkNBU0NgKSwgcHJldmVudGluZyBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uIG9yIGRhdGEgcmFjZXMuIEl0IGFsc28gZHJvcHMgcGFja2V0cyBub3QgZGVzdGluZWQgZm9yIGBpbml0X25ldGAuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBub3IgZG8gdGhleSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCAobGlrZSBtb2RpZnlpbmcgYSBzaGFyZWQgc2tiKSBhcmUgcmVsYXRlZCB0byBtZW1vcnkgc2hhcmluZyBhbmQgZGF0YSBjb3JydXB0aW9uLCB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgS01TQU4gKHdoaWNoIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkpLiBTdGFuZGFyZCBLQVNBTiBhbmQgS0NTQU4gYXJlIGJldHRlciBzdWl0ZWQgZm9yIGRldGVjdGluZyBpc3N1ZXMgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXR3b3JrIG5hbWVzcGFjZSBjaGVja3MsIGBza2Jfc2hhcmVfY2hlY2tgLCBhbmQgYHNrYl9jb3dfaGVhZGAgdG8gYGFmaXVjdl9oc19yY3ZgLiBUaGVzZSBjaGFuZ2VzIGVuc3VyZSB0aGF0IHRoZSBzb2NrZXQgYnVmZmVyIGlzIG5vdCBzaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBpdHMgY29udGVudHMgKGUuZy4sIHZpYSBgRUJDQVNDYCksIHByZXZlbnRpbmcgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBvciBkYXRhIHJhY2VzLiBJdCBhbHNvIGRyb3BzIHBhY2tldHMgbm90IGRlc3RpbmVkIGZvciBgaW5pdF9uZXRgLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgbm9yIGRvIHRoZXkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggKGxpa2UgbW9kaWZ5aW5nIGEgc2hhcmVkIHNrYikgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IHNoYXJpbmcgYW5kIGRhdGEgY29ycnVwdGlvbiwgd2hpY2ggYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIEtNU0FOICh3aGljaCBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KS4gU3RhbmRhcmQgS0FTQU4gYW5kIEtDU0FOIGFyZSBiZXR0ZXIgc3VpdGVkIGZvciBkZXRlY3RpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBtb2RpZmljYXRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc4hf[1] Phase: Succeeded StartedAt: 2026-08-15 16:24:52 +0000 UTC FinishedAt: 2026-08-15 16:24:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-15 16:24:52 +0000 UTC FinishedAt: 2026-08-15 16:24:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2] Phase: Succeeded StartedAt: 2026-08-15 16:24:52 +0000 UTC FinishedAt: 2026-08-15 17:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-15 16:24:52 +0000 UTC FinishedAt: 2026-08-15 17:09:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-15 16:24:52 +0000 UTC FinishedAt: 2026-08-15 16:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-15 16:24:52 +0000 UTC FinishedAt: 2026-08-15 16:24:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowbc4hf/series-workflowbc4hf-convert-artifact-3524485899/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-15 16:25:02 +0000 UTC FinishedAt: 2026-08-15 16:46:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-15 16:25:02 +0000 UTC FinishedAt: 2026-08-15 16:46:08 +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:*20f74adc-b298-48e5-93fb-1c8b9d8163be,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-workflowbc4hf/series-workflowbc4hf-convert-artifact-3524485899/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": "5f3957fa-c2d6-414d-9984-cd996f936381", "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-workflowbc4hf/series-workflowbc4hf-build-action-1733778953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-15 16:25:02 +0000 UTC FinishedAt: 2026-08-15 16:45:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*20f74adc-b298-48e5-93fb-1c8b9d8163be,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-workflowbc4hf/series-workflowbc4hf-convert-artifact-3524485899/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": "5f3957fa-c2d6-414d-9984-cd996f936381", "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-workflowbc4hf/series-workflowbc4hf-build-action-1733778953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-15 16:46:08 +0000 UTC FinishedAt: 2026-08-15 16:46:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-15 16:46:08 +0000 UTC FinishedAt: 2026-08-15 16:46:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-15 16:46:08 +0000 UTC FinishedAt: 2026-08-15 16:46:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-15 16:46:08 +0000 UTC FinishedAt: 2026-08-15 16:46:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowbc4hf/series-workflowbc4hf-convert-artifact-945244770/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-15 16:46:19 +0000 UTC FinishedAt: 2026-08-15 16:48:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-15 16:46:19 +0000 UTC FinishedAt: 2026-08-15 16:48:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5f3957fa-c2d6-414d-9984-cd996f936381,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-workflowbc4hf/series-workflowbc4hf-build-action-1733778953/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-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-15 16:48:12 +0000 UTC FinishedAt: 2026-08-15 16:48:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-15 16:48:12 +0000 UTC FinishedAt: 2026-08-15 16:48:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-15 16:48:12 +0000 UTC FinishedAt: 2026-08-15 17:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-15 16:48:12 +0000 UTC FinishedAt: 2026-08-15 17:05:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*20f74adc-b298-48e5-93fb-1c8b9d8163be,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-workflowbc4hf/series-workflowbc4hf-convert-artifact-945244770/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": "bb0b9ca5-7c5c-4a6e-ba81-b02db0f4ba43", "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-workflowbc4hf/series-workflowbc4hf-build-action-2556016310/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-15 16:48:12 +0000 UTC FinishedAt: 2026-08-15 17:05:01 +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:*20f74adc-b298-48e5-93fb-1c8b9d8163be,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-workflowbc4hf/series-workflowbc4hf-convert-artifact-945244770/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": "bb0b9ca5-7c5c-4a6e-ba81-b02db0f4ba43", "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-workflowbc4hf/series-workflowbc4hf-build-action-2556016310/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-15 17:05:11 +0000 UTC FinishedAt: 2026-08-15 17:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-15 17:05:11 +0000 UTC FinishedAt: 2026-08-15 17:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-15 17:05:11 +0000 UTC FinishedAt: 2026-08-15 17:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-15 17:05:11 +0000 UTC FinishedAt: 2026-08-15 17:06:52 +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:*bb0b9ca5-7c5c-4a6e-ba81-b02db0f4ba43,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-workflowbc4hf/series-workflowbc4hf-build-action-2556016310/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-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-15 17:07:02 +0000 UTC FinishedAt: 2026-08-15 17:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-15 17:07:02 +0000 UTC FinishedAt: 2026-08-15 17:09:51 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},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:*5f3957fa-c2d6-414d-9984-cd996f936381,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb0b9ca5-7c5c-4a6e-ba81-b02db0f4ba43,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-workflowbc4hf/series-workflowbc4hf-build-action-1733778953/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-workflowbc4hf/series-workflowbc4hf-build-action-2556016310/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-15 17:07:02 +0000 UTC FinishedAt: 2026-08-15 17:07:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-15 17:07:02 +0000 UTC FinishedAt: 2026-08-15 17:07:07 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},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-workflowbc4hf/series-workflowbc4hf-convert-artifact-1004757399/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-15 17:07:02 +0000 UTC FinishedAt: 2026-08-15 17:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-15 17:07:02 +0000 UTC FinishedAt: 2026-08-15 17:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-15 17:07:02 +0000 UTC FinishedAt: 2026-08-15 17:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-15 17:07:12 +0000 UTC FinishedAt: 2026-08-15 17:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbc4hf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_hs_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a59f57e2aa127c5354168d2ec4bac920df1be4f4","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"93ba3d5f-2e45-4eeb-a9e6-45fc1c9b66aa","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-15 17:07:12 +0000 UTC FinishedAt: 2026-08-15 17:09:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5f3957fa-c2d6-414d-9984-cd996f936381,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb0b9ca5-7c5c-4a6e-ba81-b02db0f4ba43,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-workflowbc4hf/series-workflowbc4hf-build-action-1733778953/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-workflowbc4hf/series-workflowbc4hf-build-action-2556016310/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-workflowbc4hf/series-workflowbc4hf-convert-artifact-1004757399/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,}