Name: series-workflowm5lng Phase: Succeeded StartedAt: 2026-09-09 17:02:48 +0000 UTC FinishedAt: 2026-09-09 20:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[0] Phase: Succeeded StartedAt: 2026-09-09 17:02:48 +0000 UTC FinishedAt: 2026-09-09 17:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 17:02:48 +0000 UTC FinishedAt: 2026-09-09 17:05:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0bffe67ab8a72b3725cc31c4b525709bd3a3e223", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0bffe67ab8a72b3725cc31c4b525709bd3a3e223", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "57a3bb9d-40fd-4481-bad2-5121a4ec4db4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "find_next_to_unuse", "try_to_unuse" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5kX25leHRfdG9fdW51c2UmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VudXNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2x1c3RlciBzY2FubmluZyBhbGdvcml0aG0gaW4gZmluZF9uZXh0X3RvX3VudXNlKCkgd2l0aGluIG1tL3N3YXBmaWxlLmMsIG9wdGltaXppbmcgc3dhcCBzbG90IHNlYXJjaCBieSBza2lwcGluZyBlbXB0eSBjbHVzdGVycyBkdXJpbmcgc3dhcG9mZi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgdGhlIHN3YXBvZmYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhjODZkZGIwOGQ5Y2IxYWQ2MjliMmY4MTAwYzc0Mzg5MzQ3NTQzZThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE3OjA0OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDgwMzJhMGYzYzMxOTUuLjc4OTc0ZGE2ODEwZTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0yNDAsNyAmIzQzOzI0MCw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcbiBcdHN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7XHRcdC8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi9cbiBcdHNpZ25lZCBjaGFyXHR0eXBlO1x0XHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXG4gXHR1bnNpZ25lZCBpbnRcdG1heDtcdFx0Lyogc2l6ZSBvZiB0aGlzIHN3YXAgZGV2aWNlICovXG4tXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi9cbiYjNDM7XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogYXJyYXksIG9uZSBlbnRyeSBwZXIgY2x1c3RlciAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmcmVlX2NsdXN0ZXJzOyAvKiBmcmVlIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vbmZ1bGxfY2x1c3RlcnNbU1dBUF9OUl9PUkRFUlNdO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCAwYTNhM2IyMjE4Yzc3Li4wNWQzNDA4Mzk2Zjk4IDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuY1xuQEAgLTM3MCw4ICYjNDM7MzcwLDYgQEAgc3RhdGljIHZvaWQgZGlzY2FyZF9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0fVxuIH1cbiBcbi0jZGVmaW5lIExBVEVOQ1lfTElNSVRcdFx0MjU2XG4tXG4gc3RhdGljIGlubGluZSBib29sIGNsdXN0ZXJfaXNfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppbmZvKVxuIHtcbiBcdHJldHVybiBpbmZvLVx1MDAzZWNvdW50ID09IDA7XG5AQCAtMjc4Nyw3ICYjNDM7Mjc4NSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4ge1xuLVx0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGksIGVuZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY2lfb2ZmO1xuIFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XG4gXG4gXHQvKlxuQEAgLTI3OTYsMTkgJiM0MzsyNzk2LDM2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdCAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXdcbiBcdCAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBhcmVhICh3aGlsZSBob2xkaW5nIHN3YXBfbG9jaykuXG4gXHQgKi9cbi1cdGZvciAoaSA9IHByZXYgJiM0MzsgMTsgaSBcdTAwM2Mgc2ktXHUwMDNlbWF4OyBpJiM0MzsmIzQzOykge1xuLVx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpLFxuLVx0XHRcdFx0XHRpICUgU1dBUEZJTEVfQ0xVU1RFUik7XG4tXHRcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcdTAwMjZcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcbi1cdFx0XHRicmVhaztcbi1cdFx0aWYgKChpICUgTEFURU5DWV9MSU1JVCkgPT0gMClcbiYjNDM7XHRpID0gcHJldiAmIzQzOyAxO1xuJiM0MztcdHdoaWxlIChpIFx1MDAzYyBzaS1cdTAwM2VtYXgpIHtcbiYjNDM7XHRcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKTtcbiYjNDM7XHRcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXG4mIzQzO1x0XHRcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICYjNDM7IFNXQVBGSUxFX0NMVVNURVIsXG4mIzQzO1x0XHRcdCAgICBzaS1cdTAwM2VtYXgpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS5cbiYjNDM7XHRcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxuJiM0MztcdFx0ICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLlxuJiM0MztcdFx0ICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktXHUwMDNlbG9jayBpc1xuJiM0MztcdFx0ICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFSRUFEX09OQ0UoY2ktXHUwMDNlY291bnQpKSB7XG4mIzQzO1x0XHRcdGkgPSBlbmQ7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuIFxuLVx0aWYgKGkgPT0gc2ktXHUwMDNlbWF4KVxuLVx0XHRpID0gMDtcbiYjNDM7XHRcdGNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSO1xuJiM0MztcdFx0Zm9yICg7IGkgXHUwMDNjIGVuZDsgY2lfb2ZmJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XG4mIzQzO1x0XHRcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcdTAwMjZcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdH1cbiBcbi1cdHJldHVybiBpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmluZF9uZXh0X3RvX3VudXNlJiMzNDssCiAgICAmIzM0O3RyeV90b191bnVzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2x1c3RlciBzY2FubmluZyBhbGdvcml0aG0gaW4gZmluZF9uZXh0X3RvX3VudXNlKCkgd2l0aGluIG1tL3N3YXBmaWxlLmMsIG9wdGltaXppbmcgc3dhcCBzbG90IHNlYXJjaCBieSBza2lwcGluZyBlbXB0eSBjbHVzdGVycyBkdXJpbmcgc3dhcG9mZi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgdGhlIHN3YXBvZmYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhjODZkZGIwOGQ5Y2IxYWQ2MjliMmY4MTAwYzc0Mzg5MzQ3NTQzZTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE3OjA0OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA4MDMyYTBmM2MzMTk1Li43ODk3NGRhNjgxMGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMjQwLDcgJiM0MzsyNDAsNyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCB7CiAJc3RydWN0IHBsaXN0X25vZGUgbGlzdDsJCS8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi8KIAlzaWduZWQgY2hhcgl0eXBlOwkJLyogc3RyYW5nZSBuYW1lIGZvciBhbiBpbmRleCAqLwogCXVuc2lnbmVkIGludAltYXg7CQkvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi8KLQlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi8KJiM0MzsJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGFycmF5LCBvbmUgZW50cnkgcGVyIGNsdXN0ZXIgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBub25mdWxsX2NsdXN0ZXJzW1NXQVBfTlJfT1JERVJTXTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDBhM2EzYjIyMThjNzcuLjA1ZDM0MDgzOTZmOTggMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMzcwLDggJiM0MzszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJfQogfQogCi0jZGVmaW5lIExBVEVOQ1lfTElNSVQJCTI1NgotCiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pCiB7CiAJcmV0dXJuIGluZm8tJmd0O2NvdW50ID09IDA7CkBAIC0yNzg3LDcgJiM0MzsyNzg1LDkgQEAgc3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpCiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCQkJCXVuc2lnbmVkIGludCBwcmV2KQogewotCXVuc2lnbmVkIGludCBpOwomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwomIzQzOwl1bnNpZ25lZCBsb25nIGksIGVuZDsKJiM0MzsJdW5zaWduZWQgaW50IGNpX29mZjsKIAl1bnNpZ25lZCBsb25nIHN3cF90YjsKIAogCS8qCkBAIC0yNzk2LDE5ICYjNDM7Mjc5NiwzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ldwogCSAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBhcmVhICh3aGlsZSBob2xkaW5nIHN3YXBfbG9jaykuCiAJICovCi0JZm9yIChpID0gcHJldiAmIzQzOyAxOyBpICZsdDsgc2ktJmd0O21heDsgaSYjNDM7JiM0MzspIHsKLQkJc3dwX3RiID0gc3dhcF90YWJsZV9nZXQoX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKSwKLQkJCQkJaSAlIFNXQVBGSUxFX0NMVVNURVIpOwotCQlpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgJmFtcDsmYW1wOyAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKQotCQkJYnJlYWs7Ci0JCWlmICgoaSAlIExBVEVOQ1lfTElNSVQpID09IDApCiYjNDM7CWkgPSBwcmV2ICYjNDM7IDE7CiYjNDM7CXdoaWxlIChpICZsdDsgc2ktJmd0O21heCkgewomIzQzOwkJY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpOwomIzQzOwkJZW5kID0gbWluX3QodW5zaWduZWQgbG9uZywKJiM0MzsJCQkgICAgQUxJR05fRE9XTihpLCBTV0FQRklMRV9DTFVTVEVSKSAmIzQzOyBTV0FQRklMRV9DTFVTVEVSLAomIzQzOwkJCSAgICBzaS0mZ3Q7bWF4KTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS4KJiM0MzsJCSAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcAomIzQzOwkJICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLgomIzQzOwkJICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktJmd0O2xvY2sgaXMKJiM0MzsJCSAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghUkVBRF9PTkNFKGNpLSZndDtjb3VudCkpIHsKJiM0MzsJCQlpID0gZW5kOwogCQkJY29uZF9yZXNjaGVkKCk7Ci0JfQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQogCi0JaWYgKGkgPT0gc2ktJmd0O21heCkKLQkJaSA9IDA7CiYjNDM7CQljaV9vZmYgPSBpICUgU1dBUEZJTEVfQ0xVU1RFUjsKJiM0MzsJCWZvciAoOyBpICZsdDsgZW5kOyBjaV9vZmYmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpOwomIzQzOwkJCWlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSAmYW1wOyZhbXA7ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpCiYjNDM7CQkJCXJldHVybiBpOwomIzQzOwkJfQomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KIAotCXJldHVybiBpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2FwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIGFzc2Vzc2luZyB0aGVpciBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgaW1wYWN0cyB3aXRoaW4gdGhlIHN3YXAgc3Vic3lzdGVtLiBGcm9tIHRoZSBkZXRhaWxzIHByb3ZpZGVkLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHdlJiMzOTtyZSBoYW5kbGluZyB1bnVzZWQgc3dhcCBjbHVzdGVycyBkdXJpbmcgYHN3YXBvZmZgLiBUaGUgY29tbWVudCB1cGRhdGUgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYCBpcyBsaWtlbHkgYSBtaW5vciBkZXRhaWwsIHBlcmhhcHMganVzdCBjbGFyaWZ5aW5nIHRoZSBwdXJwb3NlIG9mIHRoZSBgY2x1c3Rlcl9pbmZvYCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBzd2FwX2luZm9fc3RydWN0YC4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IGNvbmZpcm0gdGhlIGNoYW5nZSBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIGFtYmlndWl0aWVzLgoKVGhlIG1lYXQgb2YgdGhlIHdvcmsgc2VlbXMgdG8gYmUgd2l0aGluIGBtbS9zd2FwZmlsZS5jYC4gUmVtb3ZpbmcgdGhhdCBgI2RlZmluZSBMQVRFTkNZX0xJTUlUYCBpcyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBpbmRpY2F0ZXMgYSBzaGlmdCBpbiBob3cgd2UmIzM5O3JlIG1hbmFnaW5nIHRoZSB0aW1pbmcgb2YgdW5zd2FwcGluZy4gVGhlIGtleSwgdGhvdWdoLCBpcyB0aGUgcmV3cml0ZSBvZiBgZmluZF9uZXh0X3RvX3VudXNlYC4gSXQmIzM5O3MgY2xlYXJseSBhZG9wdGluZyBhIGNsdXN0ZXItYmFzZWQgaXRlcmF0aW9uIHN0cmF0ZWd5LiBVc2luZyBgIVJFQURfT05DRShjaS0mZ3Q7Y291bnQpYCB0byBza2lwIGVtcHR5IGNsdXN0ZXJzIGluIGB0cnlfdG9fdW51c2VgIGlzIHRoZSBoZWFydCBvZiBpdCwgYW5kIGl0IHNlZW1zIHRoaXMgdGFyZ2V0cyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgZHVyaW5nIHN3YXBvZmYgb3BlcmF0aW9ucy4gQnkgaXRlcmF0aW5nIGNsdXN0ZXIgYnkgY2x1c3RlciwgdGhlIHBhdGNoIGFwcGVhcnMgdG8gb3B0aW1pemUgc2tpcHBpbmcgdW51c2VkIG9yIHVubmVlZGVkIHN3YXAgcGFnZXMuIEl0JiMzOTtzIHVzaW5nIGBBTElHTl9ET1dOYCBhbmQgYFNXQVBGSUxFX0NMVVNURVJgIHRvIHByZWNpc2VseSBkZWZpbmUgdGhlIGl0ZXJhdGlvbiBib3VuZGFyaWVzLiBUaGlzIHN1Z2dlc3RzIGFuIGludGVudGlvbiB0byBhdm9pZCB1bm5lY2Vzc2FyeSBkaXNrIEkvTy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGFuZCAqaG93Ki4gSSB3aWxsIGRlZmluaXRlbHkgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG1tL3N3YXBmaWxlLmNgIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bGwgdXRpbGl6ZSBlaXRoZXIgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGV4YW1pbmUgdGhlIGNvZGUgc3Vycm91bmRpbmcgYGZpbmRfbmV4dF90b191bnVzZWAsIHRvIHNlZSBob3cgaXQmIzM5O3MgY2FsbGVkIGFuZCB3aGF0IGl0IGludGVyYWN0cyB3aXRoLiBUaGlzIHdpbGwgaGVscCBjbGFyaWZ5IGlmIHRoZSBuZXcgY2x1c3Rlci1iYXNlZCBhcHByb2FjaCBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgYmVoYXZpb3IgY2hhbmdlcyBvciBvcHRpbWl6YXRpb24uIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBza2lwcGluZyB1bnVzZWQgY2x1c3RlcnMsIGluIHBhcnRpY3VsYXIsIHdoZXRoZXIgdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBpbiB0eXBpY2FsIHN3YXAtb2ZmIHNjZW5hcmlvcywgYW5kIGlmIHRoZSBhcHByb2FjaCBjb3VsZCBpbnRyb2R1Y2UgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfbmV4dF90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTI3NTc9c3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpXG4tLVxubW0vc3dhcGZpbGUuYy0yNzg0LSAqL1xubW0vc3dhcGZpbGUuYzoyNzg1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtMjc4Ni1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4tLVxubW0vc3dhcGZpbGUuYz0yODMxPXN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjg4NC1cdCAgICAgICAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgXHUwMDI2XHUwMDI2XG5tbS9zd2FwZmlsZS5jOjI4ODU6XHQgICAgICAgKGkgPSBmaW5kX25leHRfdG9fdW51c2Uoc2ksIGkpKSAhPSAwKSB7XG5tbS9zd2FwZmlsZS5jLTI4ODYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGB0cnlfdG9fdW51c2VgIGFuZCBgZmluZF9uZXh0X3RvX3VudXNlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMsIGB0cnlfdG9fdW51c2VgIGFuZCBgZmluZF9uZXh0X3RvX3VudXNlYCwgYXJlIGludGVyYWN0aW5nLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYWJvdXQgNTAgbGluZXMgc3Vycm91bmRpbmcgYm90aCBvZiB0aGVtLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBzZWUgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIGFueSBpbW1lZGlhdGUgY2FsbGVycywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBkYXRhIGlzIGJlaW5nIHBhc3NlZCBpbiBhbmQgb3V0LiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGFsbG93IG1lIHRvIGluZmVyIHRoZSBwdXJwb3NlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgcmVsYXRlZD8gSXMgb25lIGNhbGxpbmcgdGhlIG90aGVyLCBvciBhcmUgdGhleSBwZWVycz8gSXMgYHVudXNlYCBhIGtleSBwYXJ0IG9mIHRoZSBkZXNpZ24gb3IgbW9yZSBvZiBhbiBleGNlcHRpb24gaGFuZGxlci4gVGhlIGNvbnRleHQgd2lsbCBzaG93IHdoZXRoZXIgdGhpcyBkZXNpZ24gaXMgYSBnb29kIGlkZWEuIExvb2tpbmcgYXQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlbSB3aWxsIGV4cG9zZSBlZGdlIGNhc2VzIG9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiBubyB0aW1lLiBXaXRoIHRoaXMgc3Vycm91bmRpbmcgY29kZSwgSSBzaG91bGQgYmUgYWJsZSB0byBmb3JtIGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBjcmFjayB0aGlzIG9wZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzgwOlx0LypcbjI3ODE6XHQgKiBTY2FuIHN3YXAgdGFibGUgZnJvbSBjdXJyZW50IHBvc2l0aW9uIHRvIG5leHQgZW50cnkgc3RpbGwgaW4gdXNlLlxuMjc4MjpcdCAqIFJldHVybiAwIGlmIHRoZXJlIGFyZSBubyBpbnVzZSBlbnRyaWVzIGFmdGVyIHByZXYgdGlsbCBlbmQgb2ZcbjI3ODM6XHQgKiB0aGUgbWFwLlxuMjc4NDpcdCAqL1xuMjc4NTpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbjI3ODY6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4yNzg3Olx0e1xuMjc4ODpcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbjI3ODk6XHRcdHVuc2lnbmVkIGxvbmcgaSwgZW5kO1xuMjc5MDpcdFx0dW5zaWduZWQgaW50IGNpX29mZjtcbjI3OTE6XHRcdHVuc2lnbmVkIGxvbmcgc3dwX3RiO1xuMjc5MjpcdFxuMjc5MzpcdFx0LypcbjI3OTQ6XHRcdCAqIE5vIG5lZWQgZm9yIHN3YXBfbG9jayBoZXJlOiB3ZSYjMzk7cmUganVzdCBsb29raW5nXG4yNzk1Olx0XHQgKiBmb3Igd2hldGhlciBhbiBlbnRyeSBpcyBpbiB1c2UsIG5vdCBtb2RpZnlpbmcgaXQ7IGZhbHNlXG4yNzk2Olx0XHQgKiBoaXRzIGFyZSBva2F5LCBhbmQgc3lzX3N3YXBvZmYoKSBoYXMgYWxyZWFkeSBwcmV2ZW50ZWQgbmV3XG4yNzk3Olx0XHQgKiBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgYXJlYSAod2hpbGUgaG9sZGluZyBzd2FwX2xvY2spLlxuMjc5ODpcdFx0ICovXG4yNzk5Olx0XHRpID0gcHJldiAmIzQzOyAxO1xuMjgwMDpcdFx0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuMjgwMTpcdFx0XHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XG4yODAyOlx0XHRcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXG4yODAzOlx0XHRcdFx0ICAgIEFMSUdOX0RPV04oaSwgU1dBUEZJTEVfQ0xVU1RFUikgJiM0MzsgU1dBUEZJTEVfQ0xVU1RFUixcbjI4MDQ6XHRcdFx0XHQgICAgc2ktXHUwMDNlbWF4KTtcbjI4MDU6XHRcbjI4MDY6XHRcdFx0LypcbjI4MDc6XHRcdFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXG4yODA4Olx0XHRcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxuMjgwOTpcdFx0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG4yODEwOlx0XHRcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVx1MDAzZWxvY2sgaXNcbjI4MTE6XHRcdFx0ICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci5cbjI4MTI6XHRcdFx0ICovXG4yODEzOlx0XHRcdGlmICghUkVBRF9PTkNFKGNpLVx1MDAzZWNvdW50KSkge1xuMjgxNDpcdFx0XHRcdGkgPSBlbmQ7XG4yODE1Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yODE2Olx0XHRcdFx0Y29udGludWU7XG4yODE3Olx0XHRcdH1cbjI4MTg6XHRcbjI4MTk6XHRcdFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XG4yODIwOlx0XHRcdGZvciAoOyBpIFx1MDAzYyBlbmQ7IGNpX29mZiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7XG4yODIxOlx0XHRcdFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XG4yODIyOlx0XHRcdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuMjgyMzpcdFx0XHRcdFx0cmV0dXJuIGk7XG4yODI0Olx0XHRcdH1cbjI4MjU6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yODI2Olx0XHR9XG4yODI3Olx0XG4yODI4Olx0XHRyZXR1cm4gMDtcbjI4Mjk6XHR9XG4yODMwOlx0XG4yODMxOlx0c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXG4yODMyOlx0e1xuMjgzMzpcdFx0c3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbTtcbjI4MzQ6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuMjgzNTpcdFx0c3RydWN0IGxpc3RfaGVhZCAqcDtcbjI4MzY6XHRcdGludCByZXR2YWwgPSAwO1xuMjgzNzpcdFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpID0gc3dhcF9pbmZvW3R5cGVdO1xuMjgzODpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbjI4Mzk6XHRcdHN3cF9lbnRyeV90IGVudHJ5O1xuMjg0MDpcdFx0dW5zaWduZWQgaW50IGk7XG4yODQxOlx0XG4yODQyOlx0XHRpZiAoIXN3YXBfdXNhZ2VfaW5fcGFnZXMoc2kpKVxuMjg0MzpcdFx0XHRnb3RvIHN1Y2Nlc3M7XG4yODQ0Olx0XG4yODQ1Olx0cmV0cnk6XG4yODQ2Olx0XHRyZXR2YWwgPSBzaG1lbV91bnVzZSh0eXBlKTtcbjI4NDc6XHRcdGlmIChyZXR2YWwpXG4yODQ4Olx0XHRcdHJldHVybiByZXR2YWw7XG4yODQ5Olx0XG4yODUwOlx0XHRwcmV2X21tID0gXHUwMDI2aW5pdF9tbTtcbjI4NTE6XHRcdG1tZ2V0KHByZXZfbW0pO1xuMjg1MjpcdFxuMjg1MzpcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbjI4NTQ6XHRcdHAgPSBcdTAwMjZpbml0X21tLm1tbGlzdDtcbjI4NTU6XHRcdHdoaWxlIChzd2FwX3VzYWdlX2luX3BhZ2VzKHNpKSBcdTAwMjZcdTAwMjZcbjI4NTY6XHRcdCAgICAgICAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgXHUwMDI2XHUwMDI2XG4yODU3Olx0XHQgICAgICAgKHAgPSBwLVx1MDAzZW5leHQpICE9IFx1MDAyNmluaXRfbW0ubW1saXN0KSB7XG4yODU4Olx0XG4yODU5Olx0XHRcdG1tID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbW1fc3RydWN0LCBtbWxpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGB0cnlfdG9fdW51c2VgIFVzYWdlKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBgdHJ5X3RvX3VudXNlYCBmdW5jdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHByZWNpc2VseSAqd2hlcmUqIGl0JiMzOTtzIGJlaW5nIGludm9rZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyBpcyBmdW5kYW1lbnRhbC4gQnkgbWFwcGluZyB0aG9zZSBjYWxscywgSSBjYW4gZGVkdWNlIGl0cyBzY29wZSBvZiBpbmZsdWVuY2UsIHRoZSBzcGVjaWZpYyBjb250ZXh0cyBpdCYjMzk7cyB1c2VkIGluLCBhbmQgdWx0aW1hdGVseSwgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgYXJjaGl0ZWN0dXJlLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBpZiBhbnkgY2hhbmdlcyB3b3VsZCBsZWFkIHRvIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBJIG5lZWQgdG8gdHJlYXQgaXQgbGlrZSBhIHZhcmlhYmxlIEnigJl2ZSBuZXZlciBzZWVuIGJlZm9yZSBhbmQgYmVnaW4gYSBkZWVwIGRpdmUgaW50byBpdHMgdXNhZ2UuIFRoZSBzcGVjaWZpYyBkZXRhaWxzLCBzdWNoIGFzIGlucHV0cywgb3V0cHV0cyBhbmQgYW55IHNpZGUtZWZmZWN0cywgY2FuIGFsbCBiZSBkZWR1Y2VkIG9uY2UgSSBoYXZlIGEgcHJlY2lzZSBtZW50YWwgaW1hZ2Ugb2YgdGhlIGVudmlyb25tZW50IGl04oCZcyBmb3VuZCBpbi4gVGltZSB0byBzdGFydCB0cmFjaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTEzMTQ9c3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4tLVxubW0vc3dhcGZpbGUuYy0xMzM2LVx0Lypcbm1tL3N3YXBmaWxlLmM6MTMzNzpcdCAqIE1ha2Ugc3VyZSB0aGF0IHRyeV90b191bnVzZSgpIG9ic2VydmVzIHNpLVx1MDAzZWludXNlX3BhZ2VzIHJlYWNoaW5nIDBcbm1tL3N3YXBmaWxlLmMtMTMzOC1cdCAqIG9ubHkgYWZ0ZXIgdGhlIGFib3ZlIGNsZWFudXBzIGFyZSBkb25lLlxuLS1cbm1tL3N3YXBmaWxlLmM9MjQ5NT1zdGF0aWMgaW50IHVudXNlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9zd2FwZmlsZS5jLTI1MDYtXHQgKiBJZiB0aGUgZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGUgYnkgb3RoZXJzLCBjb250aW51ZSB0b1xubW0vc3dhcGZpbGUuYzoyNTA3Olx0ICogdW51c2Ugb3RoZXIgUFRFcy4gdHJ5X3RvX3VudXNlIG1heSB0cnkgYWdhaW4gaWYgd2UgbWlzc2VkIHRoaXMgb25lLlxubW0vc3dhcGZpbGUuYy0yNTA4LVx0ICovXG4tLVxubW0vc3dhcGZpbGUuYz0yNzg1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTI4MDgtXHRcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxubW0vc3dhcGZpbGUuYzoyODA5Olx0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG5tbS9zd2FwZmlsZS5jLTI4MTAtXHRcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVx1MDAzZWxvY2sgaXNcbi0tXG5tbS9zd2FwZmlsZS5jLTI4MzAtXG5tbS9zd2FwZmlsZS5jOjI4MzE6c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXG5tbS9zd2FwZmlsZS5jLTI4MzIte1xuLS1cbm1tL3N3YXBmaWxlLmMtMjkyNS1cdC8qXG5tbS9zd2FwZmlsZS5jOjI5MjY6XHQgKiBNYWtlIHN1cmUgdGhhdCBmdXJ0aGVyIGNsZWFudXBzIGFmdGVyIHRyeV90b191bnVzZSgpIHJldHVybnMgaGFwcGVuXG5tbS9zd2FwZmlsZS5jLTI5MjctXHQgKiBhZnRlciBzd2FwX3JhbmdlX2ZyZWUoKSByZWR1Y2VzIHNpLVx1MDAzZWludXNlX3BhZ2VzIHRvIDAuXG4tLVxubW0vc3dhcGZpbGUuYy0yOTMzLS8qXG5tbS9zd2FwZmlsZS5jOjI5MzQ6ICogQWZ0ZXIgYSBzdWNjZXNzZnVsIHRyeV90b191bnVzZSwgaWYgbm8gc3dhcCBpcyBub3cgaW4gdXNlLCB3ZSBrbm93XG5tbS9zd2FwZmlsZS5jLTI5MzUtICogd2UgY2FuIGVtcHR5IHRoZSBtbWxpc3QuICBzd2FwX2xvY2sgbXVzdCBiZSBoZWxkIG9uIGVudHJ5IGFuZCBleGl0LlxuLS1cbm1tL3N3YXBmaWxlLmM9MzE3Nz1TWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUpXG4tLVxubW0vc3dhcGZpbGUuYy0zMjM3LVx0c2V0X2N1cnJlbnRfb29tX29yaWdpbigpO1xubW0vc3dhcGZpbGUuYzozMjM4Olx0ZXJyID0gdHJ5X3RvX3VudXNlKHAtXHUwMDNldHlwZSk7XG5tbS9zd2FwZmlsZS5jLTMyMzktXHRjbGVhcl9jdXJyZW50X29vbV9vcmlnaW4oKTtcbi0tXG5tbS96c3dhcC5jPTE2Njg9dm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKVxuLS1cbm1tL3pzd2FwLmMtMTY3NS1cbm1tL3pzd2FwLmM6MTY3NjpcdC8qIHRyeV90b191bnVzZSgpIGludmFsaWRhdGVkIGFsbCB0aGUgZW50cmllcyBhbHJlYWR5ICovXG5tbS96c3dhcC5jLTE2NzctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl96c3dhcF90cmVlc1t0eXBlXTsgaSYjNDM7JiM0MzspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIzMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTd2Fwb2ZmIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU28sIGB0cnlfdG9fdW51c2VgIGlzIHRyaWdnZXJlZCBieSBgc3lzX3N3YXBvZmZgLCB3aGljaCBpcywgb2YgY291cnNlLCB0aGUga2VybmVsJiMzOTtzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC4gIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBoZXJlLCBgbW0vc3dhcGZpbGUuY2AsIHNvIGFueXRoaW5nIGhhcHBlbmluZyBpbiB0aGVyZSBpcyBpbXBvcnRhbnQuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZWAsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoaW4gYHRyeV90b191bnVzZWAgZHVyaW5nIHRoZSBgc3lzX3N3YXBvZmZgIG9wZXJhdGlvbi4gTXkga2V5IHF1ZXN0aW9uIG5vdyBpcywgJiMzNDtJcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IFFFTVUgYW5kIHdpdGggdGhlIGhlbHAgb2Ygc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyPyYjMzQ7LiAgWWVzLCBpdCBsb29rcyBsaWtlIGl0IGlzLiBgc3dhcG9mZmAgaXMgYSBiYXNpYyBMaW51eCBzeXNjYWxsLiAgV2UgY2FuIGNyZWF0ZSBzd2FwIHdpdGggYHN3YXBvbmAgYW5kIHRoZW4gZGlzYWJsZSBpdCB3aXRoIGBzd2Fwb2ZmYCDigJMgc3RhbmRhcmQgc3R1ZmYuIFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGZ1enppbmcgYHN3YXBvbmAgYW5kIGBzd2Fwb2ZmYCwgc28gd2UgY2FuIGRlZmluaXRlbHkgZ2V0IGF0IGl0LiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzLCBzZWUgaWYgYW55dGhpbmcgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byByZWFjaCB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcGZpbGUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nz1lbmRpZlxubW0vTWFrZWZpbGUtNzgtXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgc3dhcCBpcyBjb25maWd1cmVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gcmVsYXRlZCB0byBgQ09ORklHX1NXQVBgLiBUaGlzIGlzIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jaywgc28gdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgZGVmaW5lZCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIHN3YXAgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhhdCBzeW1ib2wgYW5kIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmN5IGNoYWluIGxvb2tzIGxpa2UsIGFuZCB3aGF0IG90aGVyIHNldHRpbmdzIGl0IGltcGFjdHMuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuZCBtb2RpZnlpbmcgdGhlIHN3YXAgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFuZCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5naW5nIHRoaXMgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNXQVBcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcbi0tXG5tbS9LY29uZmlnLTExLVxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHN3YXAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBxdWlja2VzdCByb3V0ZSB0byB0aGF0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzd2FwIHNwYWNlIG1hbmFnZW1lbnQuIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBTV0FQYCDigJMgdGhhdCBtYWNybyBzaG91bGQgbGVhZCBtZSBkaXJlY3RseSB0byB0aGUgaGVhcnQgb2YgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgaW52b2x2ZWQuIFRpbWUgdG8gZ28gZGlnIGluIHRoZXJlIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEwOlx0XHRib29sXG4gIDExOlx0XG4gIDEyOlx0bWVudWNvbmZpZyBTV0FQXG4gIDEzOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBNTVUgXHUwMDI2XHUwMDI2IEJMT0NLIFx1MDAyNlx1MDAyNiAhQVJDSF9OT19TV0FQXG4gIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcbiAgMTg6XHRcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxuICAxOTpcdFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcbiAgMjA6XHRcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgWlNXQVBcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBTV0FQXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDI2Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcbiAgMjk6XHRcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXG4gIDMwOlx0XHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXG4gIDMxOlx0XHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxuICAzMjpcdFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXG4gIDMzOlx0XHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxuICAzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgcXVpY2sgcnVuZG93biBvZiB3aGF0IEkmIzM5O20gdGhpbmtpbmcgcmlnaHQgbm93LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYToKCioqRm9jdXNpbmcgb24gdGhlIFN3YXBvZmYgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgc3dhcG9mZiBmdW5jdGlvbmFsaXR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byBhbmFseXplLiBBcmUgd2UgZGVhbGluZyB3aXRoIGBmaW5kX25leHRfdG9fdW51c2VgLCBgdHJ5X3RvX3VudXNlYCwgb3IgYXJlIHdlIGxvb2tpbmcgZGVlcGVyIGludG8gdGhlIHN5c2NhbGwgaW1wbGVtZW50YXRpb24gaXRzZWxmIHdpdGggZnVuY3Rpb25zIGxpa2UgYF9fZG9fc3lzX3N3YXBvZmZgLCBga3N5c19zd2Fwb2ZmYCwgb3Igc2ltcGx5IGBzeXNfc3dhcG9mZmA/IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGljaCBvZiB0aGVzZSB3aWxsIHByb3ZpZGUgdGhlIGNyaXRpY2FsIHBhdGggZm9yIHdoYXQgSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBUbyBjb25maXJtIHRoZSBzeXNjYWxsJiMzOTtzIGVudHJ5IHBvaW50LCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgbW0vc3dhcGZpbGUuY2AgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9uIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC4gVGhhdCBmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBrZXJuZWwtbGV2ZWwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLipzd2Fwb2ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MzE1OT1zdGF0aWMgdm9pZCBmbHVzaF9wZXJjcHVfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbi0tXG5tbS9zd2FwZmlsZS5jLTMxNzYtXG5tbS9zd2FwZmlsZS5jOjMxNzc6U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxubW0vc3dhcGZpbGUuYy0zMTc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4NwoJCQkJCQkJb3V0cHV0OiAxMDQKCQkJCQkJCXRob3VnaHRzOiA1ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogYGZpbmRfbmV4dF90b191bnVzZWAgaW4gYG1tL3N3YXBmaWxlLmNgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBmaW5kX25leHRfdG9fdW51c2VgLCBhIHN0YXRpYyBmdW5jdGlvbiBidXJpZWQgd2l0aGluIGBtbS9zd2FwZmlsZS5jYCwgaXMgd29ydGggZnV6emluZy4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGZpbmRfbmV4dF90b191bnVzZWAgYW5kIGl0cyBjYWxsZXIsIGB0cnlfdG9fdW51c2VgLCBhcmUgYm90aCBzdGF0aWMsIGJ1dCB0aGF0IHRoZXkgZG8gaGF2ZSBzeW1ib2xzLCBldmVuIHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMuIFRoaXMgbWVhbnMgdGhleSBhcmUgYWNjZXNzaWJsZSBmb3IgYW5hbHlzaXMgYW5kIGNvdmVyYWdlLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGtleWluZyBpbiBvbiBhIG1vZGlmaWNhdGlvbiB0byBgZmluZF9uZXh0X3RvX3VudXNlYC4gVGhlIHBhdGNoIGFsdGVycyBpdHMgc2NhbiBhbGdvcml0aG0uIEl0IG5vdyBza2lwcyBlbXB0eSBjbHVzdGVycyB3aGVuIGl0ZXJhdGluZyBzd2FwIHNwYWNlLCBiYXNlZCBvbiBgUkVBRF9PTkNFKGNpLSZndDtjb3VudClgLCB3aGljaCBpcyBhIGNsZWFyIG9wdGltaXphdGlvbi4gQ3J1Y2lhbGx5LCBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hlZCBkdXJpbmcgdGhlIGBzd2Fwb2ZmYCBzeXN0ZW0gY2FsbCB2aWEgYF9fZG9fc3lzX3N3YXBvZmZgIGFuZCBga3N5c19zd2Fwb2ZmYC4gVGhpcyBwcm92aWRlcyBhIGNsZWFyLCByZWFjaGFibGUgcGF0aCBmcm9tIHVzZXJzcGFjZS4KClRoZSBwb3NpdGl2ZSBjcml0ZXJpYSBhcmUgc29saWQ6IFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgd2l0aGluIHRoZSBgbW0vYCBzdWJzeXN0ZW0sIGFuZCB0aGUgbW9kaWZpY2F0aW9uIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGNvcmUgbG9naWMgb2YgYGZpbmRfbmV4dF90b191bnVzZWAuIFRoZSByZWFjaGFiaWxpdHkgdGhyb3VnaCB0aGUgYHN3YXBvZmZgIHN5c2NhbGwgaXMgdGhlIGljaW5nIG9uIHRoZSBjYWtlLgoKSSYjMzk7dmUgYWxzbyBjaGVja2VkIHRoZSByZWxldmFudCBjb25maWcsIGBDT05GSUdfU1dBUGAsIHdoaWNoIGlzLCBhcyBleHBlY3RlZCwgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHg4Ni9hbWQ2NCBpZiBNTVUgYW5kIEJMT0NLIGFyZSBlbmFibGVkLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgYGZpbmRfbmV4dF90b191bnVzZWAgYW5kIGB0cnlfdG9fdW51c2VgLgoKSW4gc2hvcnQsIHRoZSBwYXRjaCBvcHRpbWl6ZXMgYGZpbmRfbmV4dF90b191bnVzZWAgd2l0aGluIGBtbS9zd2FwZmlsZS5jYCBieSBza2lwcGluZyBlbXB0eSBjbHVzdGVycyBkdXJpbmcgc3dhcCBzcGFjZSBpdGVyYXRpb24sIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcuCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCwgdGltZSB0byBmaW5hbGl6ZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpbmRfbmV4dF90b191bnVzZSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fdW51c2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNsdXN0ZXIgc2Nhbm5pbmcgYWxnb3JpdGhtIGluIGZpbmRfbmV4dF90b191bnVzZSgpIHdpdGhpbiBtbS9zd2FwZmlsZS5jLCBvcHRpbWl6aW5nIHN3YXAgc2xvdCBzZWFyY2ggYnkgc2tpcHBpbmcgZW1wdHkgY2x1c3RlcnMgZHVyaW5nIHN3YXBvZmYuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIHRoZSBzd2Fwb2ZmIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5kX25leHRfdG9fdW51c2UmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VudXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHVzdGVyIHNjYW5uaW5nIGFsZ29yaXRobSBpbiBmaW5kX25leHRfdG9fdW51c2UoKSB3aXRoaW4gbW0vc3dhcGZpbGUuYywgb3B0aW1pemluZyBzd2FwIHNsb3Qgc2VhcmNoIGJ5IHNraXBwaW5nIGVtcHR5IGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgc3dhcG9mZiBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGM4NmRkYjA4ZDljYjFhZDYyOWIyZjgxMDBjNzQzODkzNDc1NDNlOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTc6MDQ6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDgwMzJhMGYzYzMxOTUuLjc4OTc0ZGE2ODEwZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0yNDAsNyAmIzQzOzI0MCw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHsKIAlzdHJ1Y3QgcGxpc3Rfbm9kZSBsaXN0OwkJLyogZW50cnkgaW4gc3dhcF9hY3RpdmVfaGVhZCAqLwogCXNpZ25lZCBjaGFyCXR5cGU7CQkvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovCiAJdW5zaWduZWQgaW50CW1heDsJCS8qIHNpemUgb2YgdGhpcyBzd2FwIGRldmljZSAqLwotCXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBjbHVzdGVyIGluZm8uIE9ubHkgZm9yIFNTRCAqLwomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogYXJyYXksIG9uZSBlbnRyeSBwZXIgY2x1c3RlciAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9jbHVzdGVyczsgLyogZnJlZSBjbHVzdGVycyBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vbmZ1bGxfY2x1c3RlcnNbU1dBUF9OUl9PUkRFUlNdOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggMGEzYTNiMjIxOGM3Ny4uMDVkMzQwODM5NmY5OCAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0zNzAsOCAmIzQzOzM3MCw2IEBAIHN0YXRpYyB2b2lkIGRpc2NhcmRfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAl9CiB9CiAKLSNkZWZpbmUgTEFURU5DWV9MSU1JVAkJMjU2Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBjbHVzdGVyX2lzX2VtcHR5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaW5mbykKIHsKIAlyZXR1cm4gaW5mby0mZ3Q7Y291bnQgPT0gMDsKQEAgLTI3ODcsNyAmIzQzOzI3ODUsOSBAQCBzdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkJCQkJdW5zaWduZWQgaW50IHByZXYpCiB7Ci0JdW5zaWduZWQgaW50IGk7CiYjNDM7CXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaSwgZW5kOwomIzQzOwl1bnNpZ25lZCBpbnQgY2lfb2ZmOwogCXVuc2lnbmVkIGxvbmcgc3dwX3RiOwogCiAJLyoKQEAgLTI3OTYsMTkgJiM0MzsyNzk2LDM2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkgKiBoaXRzIGFyZSBva2F5LCBhbmQgc3lzX3N3YXBvZmYoKSBoYXMgYWxyZWFkeSBwcmV2ZW50ZWQgbmV3CiAJICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS4KIAkgKi8KLQlmb3IgKGkgPSBwcmV2ICYjNDM7IDE7IGkgJmx0OyBzaS0mZ3Q7bWF4OyBpJiM0MzsmIzQzOykgewotCQlzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpLAotCQkJCQlpICUgU1dBUEZJTEVfQ0xVU1RFUik7Ci0JCWlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSAmYW1wOyZhbXA7ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpCi0JCQlicmVhazsKLQkJaWYgKChpICUgTEFURU5DWV9MSU1JVCkgPT0gMCkKJiM0MzsJaSA9IHByZXYgJiM0MzsgMTsKJiM0MzsJd2hpbGUgKGkgJmx0OyBzaS0mZ3Q7bWF4KSB7CiYjNDM7CQljaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7CiYjNDM7CQllbmQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLAomIzQzOwkJCSAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICYjNDM7IFNXQVBGSUxFX0NMVVNURVIsCiYjNDM7CQkJICAgIHNpLSZndDttYXgpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLgomIzQzOwkJICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwCiYjNDM7CQkgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uCiYjNDM7CQkgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS0mZ3Q7bG9jayBpcwomIzQzOwkJICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFSRUFEX09OQ0UoY2ktJmd0O2NvdW50KSkgewomIzQzOwkJCWkgPSBlbmQ7CiAJCQljb25kX3Jlc2NoZWQoKTsKLQl9CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAKLQlpZiAoaSA9PSBzaS0mZ3Q7bWF4KQotCQlpID0gMDsKJiM0MzsJCWNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSOwomIzQzOwkJZm9yICg7IGkgJmx0OyBlbmQ7IGNpX29mZiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7CiYjNDM7CQkJaWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpICZhbXA7JmFtcDsgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSkKJiM0MzsJCQkJcmV0dXJuIGk7CiYjNDM7CQl9CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJfQogCi0JcmV0dXJuIGk7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgYG1tL3N3YXBmaWxlLmNgIHBhdGNoIHdhcnJhbnRzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0cmVhdCB0aGlzIGFzIGEgc3RhbmRhcmQgZGVmZW5zaXZlIHNlY3VyaXR5IGFuYWx5c2lzLCBha2luIHRvIFFBIGluIHNvZnR3YXJlIGVuZ2luZWVyaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBvYnZpb3VzIHNhZmV0eSBvciBoYXJtIGlzc3Vlcy4gSSBzZWUgdGhlIHBvdGVudGlhbCBzZXZlcml0eSBpcyBsaWtlbHkgYmVuaWduIG9yIG5vbi1leGlzdGVudCBoZXJlLgoKRmlyc3QsIGxldCYjMzk7cyB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2ggZG9lcy4gVGhlIGRpZmYgdGVsbHMgbWUgdGhlcmUmIzM5O3MgYSBjb21tZW50IHVwZGF0ZSBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgIGZvciBgY2x1c3Rlcl9pbmZvYC4gVGhhdOKAmXMgdHJpdmlhbC4gVGhlbiwgaW4gYG1tL3N3YXBmaWxlLmNgLCB0aGUgcGF0Y2ggcmVtb3ZlcyBhIGAjZGVmaW5lIExBVEVOQ1lfTElNSVQgMjU2YCwgd2hpY2ggaXMgYWxzbyBub3QgaW1tZWRpYXRlbHkgY29uY2VybmluZy4KClRoZSBtZWF0IG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbiBgZmluZF9uZXh0X3RvX3VudXNlYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgb3B0aW1pemluZyB0aGUgc2NhbiBsb2dpYyBkdXJpbmcgc3dhcG9mZi91bnVzZSBvcGVyYXRpb25zLiBJbnN0ZWFkIG9mIGNoZWNraW5nIGVhY2ggc2xvdCBhbmQgZG9pbmcgYSBjbHVzdGVyIGxvb2t1cCByZXBlYXRlZGx5LCBpdCBub3cgZmV0Y2hlcyBgY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpYCwgY2hlY2tzIGBjaS0mZ3Q7Y291bnRgLCBhbmQgdGhlbiBpdGVyYXRlcyB3aXRoaW4gdGhlIGNsdXN0ZXIgdXAgdG8gYGVuZGAuIEl0JiMzOTtzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCB3aGljaCAqY291bGQqIGludHJvZHVjZSBhIHN1YnRsZSBidWcuCgpUbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoaWxlIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVkIGZsYWdzIHJpZ2h0IGF3YXksIEkgd2lsbCBoYXZlIHRvIGRpZyBpbiBhIGJpdCBmdXJ0aGVyIHRvIHNlZSBpZiBJIG5lZWQgdG8gcmVjb21tZW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfbmV4dF90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0yNzU3PXN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjc4NC0gKi9cbm1tL3N3YXBmaWxlLmM6Mjc4NTpzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG5tbS9zd2FwZmlsZS5jLTI3ODYtXHRcdFx0XHRcdHVuc2lnbmVkIGludCBwcmV2KVxuLS1cbm1tL3N3YXBmaWxlLmM9MjgzMT1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTI4ODQtXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFx1MDAyNlx1MDAyNlxubW0vc3dhcGZpbGUuYzoyODg1Olx0ICAgICAgIChpID0gZmluZF9uZXh0X3RvX3VudXNlKHNpLCBpKSkgIT0gMCkge1xubW0vc3dhcGZpbGUuYy0yODg2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIFN3YXBmaWxlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBtbS9zd2FwZmlsZS5jYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDI3ODAgdGhyb3VnaCAyODkwLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoYXQgc3BlY2lmaWMgc2VjdGlvbi4gVGhpcyBsaWtlbHkgaG9sZHMgc29tZSBrZXkgbG9naWMsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGRldGFpbHMgb2YgcGFnZSBzd2FwcGluZy4gSSYjMzk7bSBndWVzc2luZyBpdCBjb3VsZCBiZSBhYm91dCBtYW5hZ2luZyBzd2FwIHNwYWNlIGFsbG9jYXRpb24sIGhhbmRsaW5nIHBhZ2UgSS9PIHRvIGFuZCBmcm9tIGRpc2ssIG9yIHBlcmhhcHMgZGVhbGluZyB3aXRoIHRoZSBzd2FwIGNhY2hlLiBLbm93aW5nIHRoZSBleGFjdCBsaW5lIG51bWJlcnMgaXMgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG5hcnJvd2luZyBkb3duIHRoZSBhcmVhIG9mIGludGVyZXN0IGFuZCBhdm9pZGluZyBzcGVuZGluZyB0aW1lIHJldmlld2luZyBjb2RlIHVubmVjZXNzYXJpbHkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc4MDpcdC8qXG4yNzgxOlx0ICogU2NhbiBzd2FwIHRhYmxlIGZyb20gY3VycmVudCBwb3NpdGlvbiB0byBuZXh0IGVudHJ5IHN0aWxsIGluIHVzZS5cbjI3ODI6XHQgKiBSZXR1cm4gMCBpZiB0aGVyZSBhcmUgbm8gaW51c2UgZW50cmllcyBhZnRlciBwcmV2IHRpbGwgZW5kIG9mXG4yNzgzOlx0ICogdGhlIG1hcC5cbjI3ODQ6XHQgKi9cbjI3ODU6XHRzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4yNzg2Olx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBwcmV2KVxuMjc4NzpcdHtcbjI3ODg6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4yNzg5Olx0XHR1bnNpZ25lZCBsb25nIGksIGVuZDtcbjI3OTA6XHRcdHVuc2lnbmVkIGludCBjaV9vZmY7XG4yNzkxOlx0XHR1bnNpZ25lZCBsb25nIHN3cF90YjtcbjI3OTI6XHRcbjI3OTM6XHRcdC8qXG4yNzk0Olx0XHQgKiBObyBuZWVkIGZvciBzd2FwX2xvY2sgaGVyZTogd2UmIzM5O3JlIGp1c3QgbG9va2luZ1xuMjc5NTpcdFx0ICogZm9yIHdoZXRoZXIgYW4gZW50cnkgaXMgaW4gdXNlLCBub3QgbW9kaWZ5aW5nIGl0OyBmYWxzZVxuMjc5NjpcdFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuMjc5NzpcdFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbjI3OTg6XHRcdCAqL1xuMjc5OTpcdFx0aSA9IHByZXYgJiM0MzsgMTtcbjI4MDA6XHRcdHdoaWxlIChpIFx1MDAzYyBzaS1cdTAwM2VtYXgpIHtcbjI4MDE6XHRcdFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpO1xuMjgwMjpcdFx0XHRlbmQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLFxuMjgwMzpcdFx0XHRcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICYjNDM7IFNXQVBGSUxFX0NMVVNURVIsXG4yODA0Olx0XHRcdFx0ICAgIHNpLVx1MDAzZW1heCk7XG4yODA1Olx0XG4yODA2Olx0XHRcdC8qXG4yODA3Olx0XHRcdCAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLlxuMjgwODpcdFx0XHQgKiBBIHNsb3QgaXMgdW5jb3VudGVkIG9ubHkgYWZ0ZXIgaXRzIGZvbGlvIGxlZnQgdGhlIHN3YXBcbjI4MDk6XHRcdFx0ICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLlxuMjgxMDpcdFx0XHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cdTAwM2Vsb2NrIGlzXG4yODExOlx0XHRcdCAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuXG4yODEyOlx0XHRcdCAqL1xuMjgxMzpcdFx0XHRpZiAoIVJFQURfT05DRShjaS1cdTAwM2Vjb3VudCkpIHtcbjI4MTQ6XHRcdFx0XHRpID0gZW5kO1xuMjgxNTpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjgxNjpcdFx0XHRcdGNvbnRpbnVlO1xuMjgxNzpcdFx0XHR9XG4yODE4Olx0XG4yODE5Olx0XHRcdGNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSO1xuMjgyMDpcdFx0XHRmb3IgKDsgaSBcdTAwM2MgZW5kOyBjaV9vZmYmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuMjgyMTpcdFx0XHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xuMjgyMjpcdFx0XHRcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcdTAwMjZcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcbjI4MjM6XHRcdFx0XHRcdHJldHVybiBpO1xuMjgyNDpcdFx0XHR9XG4yODI1Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjgyNjpcdFx0fVxuMjgyNzpcdFxuMjgyODpcdFx0cmV0dXJuIDA7XG4yODI5Olx0fVxuMjgzMDpcdFxuMjgzMTpcdHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuMjgzMjpcdHtcbjI4MzM6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW07XG4yODM0Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbjI4MzU6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnA7XG4yODM2Olx0XHRpbnQgcmV0dmFsID0gMDtcbjI4Mzc6XHRcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSA9IHN3YXBfaW5mb1t0eXBlXTtcbjI4Mzg6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yODM5Olx0XHRzd3BfZW50cnlfdCBlbnRyeTtcbjI4NDA6XHRcdHVuc2lnbmVkIGludCBpO1xuMjg0MTpcdFxuMjg0MjpcdFx0aWYgKCFzd2FwX3VzYWdlX2luX3BhZ2VzKHNpKSlcbjI4NDM6XHRcdFx0Z290byBzdWNjZXNzO1xuMjg0NDpcdFxuMjg0NTpcdHJldHJ5OlxuMjg0NjpcdFx0cmV0dmFsID0gc2htZW1fdW51c2UodHlwZSk7XG4yODQ3Olx0XHRpZiAocmV0dmFsKVxuMjg0ODpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuMjg0OTpcdFxuMjg1MDpcdFx0cHJldl9tbSA9IFx1MDAyNmluaXRfbW07XG4yODUxOlx0XHRtbWdldChwcmV2X21tKTtcbjI4NTI6XHRcbjI4NTM6XHRcdHNwaW5fbG9jayhcdTAwMjZtbWxpc3RfbG9jayk7XG4yODU0Olx0XHRwID0gXHUwMDI2aW5pdF9tbS5tbWxpc3Q7XG4yODU1Olx0XHR3aGlsZSAoc3dhcF91c2FnZV9pbl9wYWdlcyhzaSkgXHUwMDI2XHUwMDI2XG4yODU2Olx0XHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFx1MDAyNlx1MDAyNlxuMjg1NzpcdFx0ICAgICAgIChwID0gcC1cdTAwM2VuZXh0KSAhPSBcdTAwMjZpbml0X21tLm1tbGlzdCkge1xuMjg1ODpcdFxuMjg1OTpcdFx0XHRtbSA9IGxpc3RfZW50cnkocCwgc3RydWN0IG1tX3N0cnVjdCwgbW1saXN0KTtcbjI4NjA6XHRcdFx0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXG4yODYxOlx0XHRcdFx0Y29udGludWU7XG4yODYyOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbjI4NjM6XHRcdFx0bW1wdXQocHJldl9tbSk7XG4yODY0Olx0XHRcdHByZXZfbW0gPSBtbTtcbjI4NjU6XHRcdFx0cmV0dmFsID0gdW51c2VfbW0obW0sIHR5cGUpO1xuMjg2NjpcdFx0XHRpZiAocmV0dmFsKSB7XG4yODY3Olx0XHRcdFx0bW1wdXQocHJldl9tbSk7XG4yODY4Olx0XHRcdFx0cmV0dXJuIHJldHZhbDtcbjI4Njk6XHRcdFx0fVxuMjg3MDpcdFxuMjg3MTpcdFx0XHQvKlxuMjg3MjpcdFx0XHQgKiBNYWtlIHN1cmUgdGhhdCB3ZSBhcmVuJiMzOTt0IGNvbXBsZXRlbHkga2lsbGluZ1xuMjg3MzpcdFx0XHQgKiBpbnRlcmFjdGl2ZSBwZXJmb3JtYW5jZS5cbjI4NzQ6XHRcdFx0ICovXG4yODc1Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjg3NjpcdFx0XHRzcGluX2xvY2soXHUwMDI2bW1saXN0X2xvY2spO1xuMjg3NzpcdFx0fVxuMjg3ODpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW1saXN0X2xvY2spO1xuMjg3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTMxCgkJCQkJCQlvdXRwdXQ6IDE4MAoJCQkJCQkJdGhvdWdodHM6IDUxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXBmaWxlIE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzaW5nIG9uIG9wdGltaXppbmcgdGhlIGBmaW5kX25leHRfdG9fdW51c2VgIGZ1bmN0aW9uIHdpdGhpbiBgbW0vc3dhcGZpbGUuY2AuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBiZSBpbXByb3ZpbmcgdGhlIGVmZmljaWVuY3kgb2YgbG9jYXRpbmcgdGhlIG5leHQgaW4tdXNlIHN3YXAgZW50cnkgd2l0aGluIHRoZSBzd2FwIHNwYWNlIHN0cnVjdHVyZSBgc2lgLgoKVGhlIGNvcmUgb2YgdGhlIG9wdGltaXphdGlvbiBjZW50ZXJzIGFyb3VuZCBjbHVzdGVyLWxldmVsIHRyYWNraW5nLiBgZmluZF9uZXh0X3RvX3VudXNlYCBpcyB1c2luZyBgX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKWAuIFRoZSBsb2dpYyBvcHRpbWl6ZXMgc2tpcHBpbmcgZW50aXJlIGNsdXN0ZXJzIGlmIHRoZSBjbHVzdGVyJiMzOTtzIGNvdW50IChgY2ktJmd0O2NvdW50YCkgaXMgemVybywgaW1wcm92aW5nIHBlcmZvcm1hbmNlLiBPdGhlcndpc2UsIGl0IGVmZmljaWVudGx5IHNjYW5zIGluZGl2aWR1YWwgc3dhcCB0YWJsZSBlbnRyaWVzIHdpdGhpbiB0aGF0IGNsdXN0ZXIuIEl0IHJldHVybnMgdGhlIGluZGV4IGBpYCBvZiB0aGUgbmV4dCBlbnRyeSBvciBgMGAgaWYgbm9uZSBhcmUgZm91bmQuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlPyBJJiMzOTt2ZSBnb3QgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHRoaXMuCgpGaXJzdCwgaXMgdGhpcyByZWxhdGVkIHRvIGtlcm5lbCBkYXRhIGV4cG9zZWQgdG8gdXNlciBzcGFjZT8gTm8sIHRoaXMgaXMgYWxsIGludGVybmFsIHN3YXBmaWxlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBkdXJpbmcgYHRyeV90b191bnVzZWAuIFRoYXQmIzM5O3MgZ29vZC4KCk5leHQsIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gTG9va2luZyBhdCB0aGUgY29kZSwgYWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBmdW5jdGlvbiwgbGlrZSBgaWAsIGBlbmRgLCBgY2lgLCBhbmQgb3RoZXJzLCBiZWZvcmUgYmVpbmcgdXNlZC4gVmFyaWFibGVzIGxpa2UgYGkgPSBwcmV2ICYjNDM7IDE7IGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKC4uLilgLgoKQXJlIHRoZXJlIG5ldyBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOby4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb24gY2hhbmdlcyB3aXRoaW4gdGhpcyBwYXRjaC4KCkZpbmFsbHksIHdoYXQgYWJvdXQgYm91bmRzIGNoZWNrcz8gRG9lcyBpdCBkbyBhbnl0aGluZyB0aGF0IG1pZ2h0IGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vLCB0aGlzIGl0ZXJhdGVzIHVwIHRvIGBzaS0mZ3Q7bWF4YCwgcmVhZGluZyBleGlzdGluZyBzd2FwIHRhYmxlIGNsdXN0ZXJzIGFuZCBlbnRyaWVzLiBBbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgaGVyZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uCgpJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgS0FTQU4gdnMgS01TQU4uIEtBU0FOIGNhdGNoZXMgdGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGFuZCBLTVNBTiB3b3VsZCBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0IEkgZG9uJiMzOTt0IHNlZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWQvbGVhayByaXNrcy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLgoKU28sIGFmdGVyIGEgZmluYWwgY2hlY2sgb2YgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCByZWFzb25pbmcsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU46IGZhbHNlYC4gVGhlIGxvZ2ljIGlzIHNvdW5kLCBhbmQgdGhlcmUgYXJlIG5vIGFwcGFyZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgZ2V0IHRoYXQgdG9vbCBnb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDowNi45ODkwMTkwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzcxODkwNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaW5kX25leHRfdG9fdW51c2VcIixcbiAgICBcInRyeV90b191bnVzZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHVzdGVyIHNjYW5uaW5nIGFsZ29yaXRobSBpbiBmaW5kX25leHRfdG9fdW51c2UoKSB3aXRoaW4gbW0vc3dhcGZpbGUuYywgb3B0aW1pemluZyBzd2FwIHNsb3Qgc2VhcmNoIGJ5IHNraXBwaW5nIGVtcHR5IGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgc3dhcG9mZiBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDowNi45ODkwMjgxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MTU3OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGM4NmRkYjA4ZDljYjFhZDYyOWIyZjgxMDBjNzQzODkzNDc1NDNlOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE3OjA0OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCA4MDMyYTBmM2MzMTk1Li43ODk3NGRhNjgxMGU1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMjQwLDcgKzI0MCw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcXG4gXFx0c3RydWN0IHBsaXN0X25vZGUgbGlzdDtcXHRcXHQvKiBlbnRyeSBpbiBzd2FwX2FjdGl2ZV9oZWFkICovXFxuIFxcdHNpZ25lZCBjaGFyXFx0dHlwZTtcXHRcXHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXFxuIFxcdHVuc2lnbmVkIGludFxcdG1heDtcXHRcXHQvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi9cXG4tXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGNsdXN0ZXIgaW5mby4gT25seSBmb3IgU1NEICovXFxuK1xcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9jbHVzdGVyczsgLyogZnJlZSBjbHVzdGVycyBsaXN0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggMGEzYTNiMjIxOGM3Ny4uMDVkMzQwODM5NmY5OCAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwZmlsZS5jXFxuKysrIGIvbW0vc3dhcGZpbGUuY1xcbkBAIC0zNzAsOCArMzcwLDYgQEAgc3RhdGljIHZvaWQgZGlzY2FyZF9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHR9XFxuIH1cXG4gXFxuLSNkZWZpbmUgTEFURU5DWV9MSU1JVFxcdFxcdDI1Nlxcbi1cXG4gc3RhdGljIGlubGluZSBib29sIGNsdXN0ZXJfaXNfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHJldHVybiBpbmZvLVxcdTAwM2Vjb3VudCA9PSAwO1xcbkBAIC0yNzg3LDcgKzI3ODUsOSBAQCBzdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4gc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XFxuK1xcdHVuc2lnbmVkIGludCBjaV9vZmY7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3dwX3RiO1xcbiBcXG4gXFx0LypcXG5AQCAtMjc5NiwxOSArMjc5NiwzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdCAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXdcXG4gXFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cXG4gXFx0ICovXFxuLVxcdGZvciAoaSA9IHByZXYgKyAxOyBpIFxcdTAwM2Mgc2ktXFx1MDAzZW1heDsgaSsrKSB7XFxuLVxcdFxcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXFxuLVxcdFxcdFxcdFxcdFxcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcXG4tXFx0XFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFxcdTAwMjZcXHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxcbitcXHRpID0gcHJldiArIDE7XFxuK1xcdHdoaWxlIChpIFxcdTAwM2Mgc2ktXFx1MDAzZW1heCkge1xcbitcXHRcXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XFxuK1xcdFxcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXFxuK1xcdFxcdFxcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICsgU1dBUEZJTEVfQ0xVU1RFUixcXG4rXFx0XFx0XFx0ICAgIHNpLVxcdTAwM2VtYXgpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXFxuK1xcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbitcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxuK1xcdFxcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVxcdTAwM2Vsb2NrIGlzXFxuK1xcdFxcdCAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIVJFQURfT05DRShjaS1cXHUwMDNlY291bnQpKSB7XFxuK1xcdFxcdFxcdGkgPSBlbmQ7XFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi1cXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRpZiAoaSA9PSBzaS1cXHUwMDNlbWF4KVxcbi1cXHRcXHRpID0gMDtcXG4rXFx0XFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XFxuK1xcdFxcdGZvciAoOyBpIFxcdTAwM2MgZW5kOyBjaV9vZmYrKywgaSsrKSB7XFxuK1xcdFxcdFxcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbitcXHRcXHRcXHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXFx1MDAyNlxcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdH1cXG4gXFxuLVxcdHJldHVybiBpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjA3LjQ1NjkxNDE4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzA2MzA3NzY3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpbmRfbmV4dF90b191bnVzZVwiLFxuICAgIFwidHJ5X3RvX3VudXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNsdXN0ZXIgc2Nhbm5pbmcgYWxnb3JpdGhtIGluIGZpbmRfbmV4dF90b191bnVzZSgpIHdpdGhpbiBtbS9zd2FwZmlsZS5jLCBvcHRpbWl6aW5nIHN3YXAgc2xvdCBzZWFyY2ggYnkgc2tpcHBpbmcgZW1wdHkgY2x1c3RlcnMgZHVyaW5nIHN3YXBvZmYuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIHRoZSBzd2Fwb2ZmIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGM4NmRkYjA4ZDljYjFhZDYyOWIyZjgxMDBjNzQzODkzNDc1NDNlOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6MDQ6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4MDMyYTBmM2MzMTk1Li43ODk3NGRhNjgxMGU1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMjQwLDcgKzI0MCw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcbiBcdHN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7XHRcdC8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi9cbiBcdHNpZ25lZCBjaGFyXHR0eXBlO1x0XHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXG4gXHR1bnNpZ25lZCBpbnRcdG1heDtcdFx0Lyogc2l6ZSBvZiB0aGlzIHN3YXAgZGV2aWNlICovXG4tXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi9cbitcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDBhM2EzYjIyMThjNzcuLjA1ZDM0MDgzOTZmOTggMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMzcwLDggKzM3MCw2IEBAIHN0YXRpYyB2b2lkIGRpc2NhcmRfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBMQVRFTkNZX0xJTUlUXHRcdDI1NlxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBjbHVzdGVyX2lzX2VtcHR5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaW5mbylcbiB7XG4gXHRyZXR1cm4gaW5mby1cdTAwM2Vjb3VudCA9PSAwO1xuQEAgLTI3ODcsNyArMjc4NSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4ge1xuLVx0dW5zaWduZWQgaW50IGk7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuK1x0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XG4rXHR1bnNpZ25lZCBpbnQgY2lfb2ZmO1xuIFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XG4gXG4gXHQvKlxuQEAgLTI3OTYsMTkgKzI3OTYsMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuIFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gcHJldiArIDE7IGkgXHUwMDNjIHNpLVx1MDAzZW1heDsgaSsrKSB7XG4tXHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXG4tXHRcdFx0XHRcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcbi1cdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxuK1x0aSA9IHByZXYgKyAxO1xuK1x0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuK1x0XHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XG4rXHRcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXG4rXHRcdFx0ICAgIEFMSUdOX0RPV04oaSwgU1dBUEZJTEVfQ0xVU1RFUikgKyBTV0FQRklMRV9DTFVTVEVSLFxuK1x0XHRcdCAgICBzaS1cdTAwM2VtYXgpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS5cbitcdFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXG4rXHRcdCAqIGNhY2hlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGhlcmUgZm9yIHRyeV90b191bnVzZSgpIHRvIGFjdCBvbi5cbitcdFx0ICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktXHUwMDNlbG9jayBpc1xuK1x0XHQgKiBlbm91Z2gsIHVubGlrZSBpbiBldmVyeSBvdGhlciBjbHVzdGVyX2lzX2VtcHR5KCkgY2FsbGVyLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFSRUFEX09OQ0UoY2ktXHUwMDNlY291bnQpKSB7XG4rXHRcdFx0aSA9IGVuZDtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdH1cbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFxuLVx0aWYgKGkgPT0gc2ktXHUwMDNlbWF4KVxuLVx0XHRpID0gMDtcbitcdFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XG4rXHRcdGZvciAoOyBpIFx1MDAzYyBlbmQ7IGNpX29mZisrLCBpKyspIHtcbitcdFx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbitcdFx0XHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXHUwMDI2XHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXG4rXHRcdFx0XHRyZXR1cm4gaTtcbitcdFx0fVxuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbiBcbi1cdHJldHVybiBpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MDcuNDU2OTE1NjYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg0ODA1NjM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIGFzc2Vzc2luZyB0aGVpciBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgaW1wYWN0cyB3aXRoaW4gdGhlIHN3YXAgc3Vic3lzdGVtLiBGcm9tIHRoZSBkZXRhaWxzIHByb3ZpZGVkLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHdlJ3JlIGhhbmRsaW5nIHVudXNlZCBzd2FwIGNsdXN0ZXJzIGR1cmluZyBgc3dhcG9mZmAuIFRoZSBjb21tZW50IHVwZGF0ZSBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgIGlzIGxpa2VseSBhIG1pbm9yIGRldGFpbCwgcGVyaGFwcyBqdXN0IGNsYXJpZnlpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGBjbHVzdGVyX2luZm9gIGZpZWxkIHdpdGhpbiBgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3RgLiBJJ2xsIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBjaGFuZ2UgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIGFtYmlndWl0aWVzLlxuXG5UaGUgbWVhdCBvZiB0aGUgd29yayBzZWVtcyB0byBiZSB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgLiBSZW1vdmluZyB0aGF0IGAjZGVmaW5lIExBVEVOQ1lfTElNSVRgIGlzIGludGVyZXN0aW5nLCBhbmQgbGlrZWx5IGluZGljYXRlcyBhIHNoaWZ0IGluIGhvdyB3ZSdyZSBtYW5hZ2luZyB0aGUgdGltaW5nIG9mIHVuc3dhcHBpbmcuIFRoZSBrZXksIHRob3VnaCwgaXMgdGhlIHJld3JpdGUgb2YgYGZpbmRfbmV4dF90b191bnVzZWAuIEl0J3MgY2xlYXJseSBhZG9wdGluZyBhIGNsdXN0ZXItYmFzZWQgaXRlcmF0aW9uIHN0cmF0ZWd5LiBVc2luZyBgIVJFQURfT05DRShjaS1cdTAwM2Vjb3VudClgIHRvIHNraXAgZW1wdHkgY2x1c3RlcnMgaW4gYHRyeV90b191bnVzZWAgaXMgdGhlIGhlYXJ0IG9mIGl0LCBhbmQgaXQgc2VlbXMgdGhpcyB0YXJnZXRzIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBkdXJpbmcgc3dhcG9mZiBvcGVyYXRpb25zLiBCeSBpdGVyYXRpbmcgY2x1c3RlciBieSBjbHVzdGVyLCB0aGUgcGF0Y2ggYXBwZWFycyB0byBvcHRpbWl6ZSBza2lwcGluZyB1bnVzZWQgb3IgdW5uZWVkZWQgc3dhcCBwYWdlcy4gSXQncyB1c2luZyBgQUxJR05fRE9XTmAgYW5kIGBTV0FQRklMRV9DTFVTVEVSYCB0byBwcmVjaXNlbHkgZGVmaW5lIHRoZSBpdGVyYXRpb24gYm91bmRhcmllcy4gVGhpcyBzdWdnZXN0cyBhbiBpbnRlbnRpb24gdG8gYXZvaWQgdW5uZWNlc3NhcnkgZGlzayBJL08uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGFuZCAqaG93Ki4gSSB3aWxsIGRlZmluaXRlbHkgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG1tL3N3YXBmaWxlLmNgIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdsbCB1dGlsaXplIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyBgZmluZF9uZXh0X3RvX3VudXNlYCwgdG8gc2VlIGhvdyBpdCdzIGNhbGxlZCBhbmQgd2hhdCBpdCBpbnRlcmFjdHMgd2l0aC4gVGhpcyB3aWxsIGhlbHAgY2xhcmlmeSBpZiB0aGUgbmV3IGNsdXN0ZXItYmFzZWQgYXBwcm9hY2ggaW50cm9kdWNlcyBhbnkgc3VidGxlIGJlaGF2aW9yIGNoYW5nZXMgb3Igb3B0aW1pemF0aW9uLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2Ygc2tpcHBpbmcgdW51c2VkIGNsdXN0ZXJzLCBpbiBwYXJ0aWN1bGFyLCB3aGV0aGVyIHRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2UgaW4gdHlwaWNhbCBzd2FwLW9mZiBzY2VuYXJpb3MsIGFuZCBpZiB0aGUgYXBwcm9hY2ggY291bGQgaW50cm9kdWNlIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjEzLjMwNDk3NTMwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk2NTQwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaW5kX25leHRfdG9fdW51c2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9Mjc1Nz1zdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjc4NC0gKi9cXG5tbS9zd2FwZmlsZS5jOjI3ODU6c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMjc4Ni1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjgzMT1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjg4NC1cXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxubW0vc3dhcGZpbGUuYzoyODg1OlxcdCAgICAgICAoaSA9IGZpbmRfbmV4dF90b191bnVzZShzaSwgaSkpICE9IDApIHtcXG5tbS9zd2FwZmlsZS5jLTI4ODYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjEzLjM1Nzk0OTM3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NTkyMzU5NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYHRyeV90b191bnVzZWAgYW5kIGBmaW5kX25leHRfdG9fdW51c2VgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMsIGB0cnlfdG9fdW51c2VgIGFuZCBgZmluZF9uZXh0X3RvX3VudXNlYCwgYXJlIGludGVyYWN0aW5nLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBhYm91dCA1MCBsaW5lcyBzdXJyb3VuZGluZyBib3RoIG9mIHRoZW0uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHNlZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcywgYW55IGltbWVkaWF0ZSBjYWxsZXJzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGRhdGEgaXMgYmVpbmcgcGFzc2VkIGluIGFuZCBvdXQuIFRoaXMgd2lsbCBob3BlZnVsbHkgYWxsb3cgbWUgdG8gaW5mZXIgdGhlIHB1cnBvc2Ugb2YgdGhlc2UgZnVuY3Rpb25zLiBBcmUgdGhleSByZWxhdGVkPyBJcyBvbmUgY2FsbGluZyB0aGUgb3RoZXIsIG9yIGFyZSB0aGV5IHBlZXJzPyBJcyBgdW51c2VgIGEga2V5IHBhcnQgb2YgdGhlIGRlc2lnbiBvciBtb3JlIG9mIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLiBUaGUgY29udGV4dCB3aWxsIHNob3cgd2hldGhlciB0aGlzIGRlc2lnbiBpcyBhIGdvb2QgaWRlYS4gTG9va2luZyBhdCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCB0aGVtIHdpbGwgZXhwb3NlIGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIG5vIHRpbWUuIFdpdGggdGhpcyBzdXJyb3VuZGluZyBjb2RlLCBJIHNob3VsZCBiZSBhYmxlIHRvIGZvcm0gYSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGNyYWNrIHRoaXMgb3Blbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjIwLjIxNzE4OTAxNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwZmlsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3ODA6XFx0LypcXG4yNzgxOlxcdCAqIFNjYW4gc3dhcCB0YWJsZSBmcm9tIGN1cnJlbnQgcG9zaXRpb24gdG8gbmV4dCBlbnRyeSBzdGlsbCBpbiB1c2UuXFxuMjc4MjpcXHQgKiBSZXR1cm4gMCBpZiB0aGVyZSBhcmUgbm8gaW51c2UgZW50cmllcyBhZnRlciBwcmV2IHRpbGwgZW5kIG9mXFxuMjc4MzpcXHQgKiB0aGUgbWFwLlxcbjI3ODQ6XFx0ICovXFxuMjc4NTpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuMjc4NjpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4yNzg3OlxcdHtcXG4yNzg4OlxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuMjc4OTpcXHRcXHR1bnNpZ25lZCBsb25nIGksIGVuZDtcXG4yNzkwOlxcdFxcdHVuc2lnbmVkIGludCBjaV9vZmY7XFxuMjc5MTpcXHRcXHR1bnNpZ25lZCBsb25nIHN3cF90YjtcXG4yNzkyOlxcdFxcbjI3OTM6XFx0XFx0LypcXG4yNzk0OlxcdFxcdCAqIE5vIG5lZWQgZm9yIHN3YXBfbG9jayBoZXJlOiB3ZSdyZSBqdXN0IGxvb2tpbmdcXG4yNzk1OlxcdFxcdCAqIGZvciB3aGV0aGVyIGFuIGVudHJ5IGlzIGluIHVzZSwgbm90IG1vZGlmeWluZyBpdDsgZmFsc2VcXG4yNzk2OlxcdFxcdCAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXdcXG4yNzk3OlxcdFxcdCAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBhcmVhICh3aGlsZSBob2xkaW5nIHN3YXBfbG9jaykuXFxuMjc5ODpcXHRcXHQgKi9cXG4yNzk5OlxcdFxcdGkgPSBwcmV2ICsgMTtcXG4yODAwOlxcdFxcdHdoaWxlIChpIFxcdTAwM2Mgc2ktXFx1MDAzZW1heCkge1xcbjI4MDE6XFx0XFx0XFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpO1xcbjI4MDI6XFx0XFx0XFx0ZW5kID0gbWluX3QodW5zaWduZWQgbG9uZyxcXG4yODAzOlxcdFxcdFxcdFxcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICsgU1dBUEZJTEVfQ0xVU1RFUixcXG4yODA0OlxcdFxcdFxcdFxcdCAgICBzaS1cXHUwMDNlbWF4KTtcXG4yODA1OlxcdFxcbjI4MDY6XFx0XFx0XFx0LypcXG4yODA3OlxcdFxcdFxcdCAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLlxcbjI4MDg6XFx0XFx0XFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXFxuMjgwOTpcXHRcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxuMjgxMDpcXHRcXHRcXHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cXHUwMDNlbG9jayBpc1xcbjI4MTE6XFx0XFx0XFx0ICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci5cXG4yODEyOlxcdFxcdFxcdCAqL1xcbjI4MTM6XFx0XFx0XFx0aWYgKCFSRUFEX09OQ0UoY2ktXFx1MDAzZWNvdW50KSkge1xcbjI4MTQ6XFx0XFx0XFx0XFx0aSA9IGVuZDtcXG4yODE1OlxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjI4MTY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgxNzpcXHRcXHRcXHR9XFxuMjgxODpcXHRcXG4yODE5OlxcdFxcdFxcdGNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSO1xcbjI4MjA6XFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBlbmQ7IGNpX29mZisrLCBpKyspIHtcXG4yODIxOlxcdFxcdFxcdFxcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbjI4MjI6XFx0XFx0XFx0XFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFxcdTAwMjZcXHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXFxuMjgyMzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gaTtcXG4yODI0OlxcdFxcdFxcdH1cXG4yODI1OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjI4MjY6XFx0XFx0fVxcbjI4Mjc6XFx0XFxuMjgyODpcXHRcXHRyZXR1cm4gMDtcXG4yODI5OlxcdH1cXG4yODMwOlxcdFxcbjI4MzE6XFx0c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuMjgzMjpcXHR7XFxuMjgzMzpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tO1xcbjI4MzQ6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuMjgzNTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwO1xcbjI4MzY6XFx0XFx0aW50IHJldHZhbCA9IDA7XFxuMjgzNzpcXHRcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kgPSBzd2FwX2luZm9bdHlwZV07XFxuMjgzODpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjI4Mzk6XFx0XFx0c3dwX2VudHJ5X3QgZW50cnk7XFxuMjg0MDpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4yODQxOlxcdFxcbjI4NDI6XFx0XFx0aWYgKCFzd2FwX3VzYWdlX2luX3BhZ2VzKHNpKSlcXG4yODQzOlxcdFxcdFxcdGdvdG8gc3VjY2VzcztcXG4yODQ0OlxcdFxcbjI4NDU6XFx0cmV0cnk6XFxuMjg0NjpcXHRcXHRyZXR2YWwgPSBzaG1lbV91bnVzZSh0eXBlKTtcXG4yODQ3OlxcdFxcdGlmIChyZXR2YWwpXFxuMjg0ODpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbjI4NDk6XFx0XFxuMjg1MDpcXHRcXHRwcmV2X21tID0gXFx1MDAyNmluaXRfbW07XFxuMjg1MTpcXHRcXHRtbWdldChwcmV2X21tKTtcXG4yODUyOlxcdFxcbjI4NTM6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZtbWxpc3RfbG9jayk7XFxuMjg1NDpcXHRcXHRwID0gXFx1MDAyNmluaXRfbW0ubW1saXN0O1xcbjI4NTU6XFx0XFx0d2hpbGUgKHN3YXBfdXNhZ2VfaW5fcGFnZXMoc2kpIFxcdTAwMjZcXHUwMDI2XFxuMjg1NjpcXHRcXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxuMjg1NzpcXHRcXHQgICAgICAgKHAgPSBwLVxcdTAwM2VuZXh0KSAhPSBcXHUwMDI2aW5pdF9tbS5tbWxpc3QpIHtcXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0XFx0bW0gPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBtbV9zdHJ1Y3QsIG1tbGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjIwLjIxNzM1OTc3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzkxNTYwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHRyeV90b191bnVzZWAgVXNhZ2UqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgYHRyeV90b191bnVzZWAgZnVuY3Rpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgKndoZXJlKiBpdCdzIGJlaW5nIGludm9rZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyBpcyBmdW5kYW1lbnRhbC4gQnkgbWFwcGluZyB0aG9zZSBjYWxscywgSSBjYW4gZGVkdWNlIGl0cyBzY29wZSBvZiBpbmZsdWVuY2UsIHRoZSBzcGVjaWZpYyBjb250ZXh0cyBpdCdzIHVzZWQgaW4sIGFuZCB1bHRpbWF0ZWx5LCBpdHMgcm9sZSBpbiB0aGUgZ3JlYXRlciBhcmNoaXRlY3R1cmUuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBjaGFuZ2VzIHdvdWxkIGxlYWQgdG8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIEkgbmVlZCB0byB0cmVhdCBpdCBsaWtlIGEgdmFyaWFibGUgSeKAmXZlIG5ldmVyIHNlZW4gYmVmb3JlIGFuZCBiZWdpbiBhIGRlZXAgZGl2ZSBpbnRvIGl0cyB1c2FnZS4gVGhlIHNwZWNpZmljIGRldGFpbHMsIHN1Y2ggYXMgaW5wdXRzLCBvdXRwdXRzIGFuZCBhbnkgc2lkZS1lZmZlY3RzLCBjYW4gYWxsIGJlIGRlZHVjZWQgb25jZSBJIGhhdmUgYSBwcmVjaXNlIG1lbnRhbCBpbWFnZSBvZiB0aGUgZW52aXJvbm1lbnQgaXTigJlzIGZvdW5kIGluLiBUaW1lIHRvIHN0YXJ0IHRyYWNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMDAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjIyLjA5NjUxNzc2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTk4MjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fdW51c2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTMxND1zdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTMzNi1cXHQvKlxcbm1tL3N3YXBmaWxlLmM6MTMzNzpcXHQgKiBNYWtlIHN1cmUgdGhhdCB0cnlfdG9fdW51c2UoKSBvYnNlcnZlcyBzaS1cXHUwMDNlaW51c2VfcGFnZXMgcmVhY2hpbmcgMFxcbm1tL3N3YXBmaWxlLmMtMTMzOC1cXHQgKiBvbmx5IGFmdGVyIHRoZSBhYm92ZSBjbGVhbnVwcyBhcmUgZG9uZS5cXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjQ5NT1zdGF0aWMgaW50IHVudXNlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjUwNi1cXHQgKiBJZiB0aGUgZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGUgYnkgb3RoZXJzLCBjb250aW51ZSB0b1xcbm1tL3N3YXBmaWxlLmM6MjUwNzpcXHQgKiB1bnVzZSBvdGhlciBQVEVzLiB0cnlfdG9fdW51c2UgbWF5IHRyeSBhZ2FpbiBpZiB3ZSBtaXNzZWQgdGhpcyBvbmUuXFxubW0vc3dhcGZpbGUuYy0yNTA4LVxcdCAqL1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yNzg1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjgwOC1cXHRcXHQgKiBBIHNsb3QgaXMgdW5jb3VudGVkIG9ubHkgYWZ0ZXIgaXRzIGZvbGlvIGxlZnQgdGhlIHN3YXBcXG5tbS9zd2FwZmlsZS5jOjI4MDk6XFx0XFx0ICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLlxcbm1tL3N3YXBmaWxlLmMtMjgxMC1cXHRcXHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cXHUwMDNlbG9jayBpc1xcbi0tXFxubW0vc3dhcGZpbGUuYy0yODMwLVxcbm1tL3N3YXBmaWxlLmM6MjgzMTpzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG5tbS9zd2FwZmlsZS5jLTI4MzIte1xcbi0tXFxubW0vc3dhcGZpbGUuYy0yOTI1LVxcdC8qXFxubW0vc3dhcGZpbGUuYzoyOTI2OlxcdCAqIE1ha2Ugc3VyZSB0aGF0IGZ1cnRoZXIgY2xlYW51cHMgYWZ0ZXIgdHJ5X3RvX3VudXNlKCkgcmV0dXJucyBoYXBwZW5cXG5tbS9zd2FwZmlsZS5jLTI5MjctXFx0ICogYWZ0ZXIgc3dhcF9yYW5nZV9mcmVlKCkgcmVkdWNlcyBzaS1cXHUwMDNlaW51c2VfcGFnZXMgdG8gMC5cXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjkzMy0vKlxcbm1tL3N3YXBmaWxlLmM6MjkzNDogKiBBZnRlciBhIHN1Y2Nlc3NmdWwgdHJ5X3RvX3VudXNlLCBpZiBubyBzd2FwIGlzIG5vdyBpbiB1c2UsIHdlIGtub3dcXG5tbS9zd2FwZmlsZS5jLTI5MzUtICogd2UgY2FuIGVtcHR5IHRoZSBtbWxpc3QuICBzd2FwX2xvY2sgbXVzdCBiZSBoZWxkIG9uIGVudHJ5IGFuZCBleGl0Llxcbi0tXFxubW0vc3dhcGZpbGUuYz0zMTc3PVNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzIzNy1cXHRzZXRfY3VycmVudF9vb21fb3JpZ2luKCk7XFxubW0vc3dhcGZpbGUuYzozMjM4OlxcdGVyciA9IHRyeV90b191bnVzZShwLVxcdTAwM2V0eXBlKTtcXG5tbS9zd2FwZmlsZS5jLTMyMzktXFx0Y2xlYXJfY3VycmVudF9vb21fb3JpZ2luKCk7XFxuLS1cXG5tbS96c3dhcC5jPTE2Njg9dm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKVxcbi0tXFxubW0venN3YXAuYy0xNjc1LVxcbm1tL3pzd2FwLmM6MTY3NjpcXHQvKiB0cnlfdG9fdW51c2UoKSBpbnZhbGlkYXRlZCBhbGwgdGhlIGVudHJpZXMgYWxyZWFkeSAqL1xcbm1tL3pzd2FwLmMtMTY3Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfenN3YXBfdHJlZXNbdHlwZV07IGkrKylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MjIuMTQ4NTA0ODc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyOTcyNjgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTd2Fwb2ZmIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFNvLCBgdHJ5X3RvX3VudXNlYCBpcyB0cmlnZ2VyZWQgYnkgYHN5c19zd2Fwb2ZmYCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgdGhlIGtlcm5lbCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC4gIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGhlcmUsIGBtbS9zd2FwZmlsZS5jYCwgc28gYW55dGhpbmcgaGFwcGVuaW5nIGluIHRoZXJlIGlzIGltcG9ydGFudC4gVGhpcyBwYXRjaCBtb2RpZmllcyBgZmluZF9uZXh0X3RvX3VudXNlYCwgYW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhpbiBgdHJ5X3RvX3VudXNlYCBkdXJpbmcgdGhlIGBzeXNfc3dhcG9mZmAgb3BlcmF0aW9uLiBNeSBrZXkgcXVlc3Rpb24gbm93IGlzLCBcIklzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgUUVNVSBhbmQgd2l0aCB0aGUgaGVscCBvZiBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXI/XCIuICBZZXMsIGl0IGxvb2tzIGxpa2UgaXQgaXMuIGBzd2Fwb2ZmYCBpcyBhIGJhc2ljIExpbnV4IHN5c2NhbGwuICBXZSBjYW4gY3JlYXRlIHN3YXAgd2l0aCBgc3dhcG9uYCBhbmQgdGhlbiBkaXNhYmxlIGl0IHdpdGggYHN3YXBvZmZgIOKAkyBzdGFuZGFyZCBzdHVmZi4gU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgZnV6emluZyBgc3dhcG9uYCBhbmQgYHN3YXBvZmZgLCBzbyB3ZSBjYW4gZGVmaW5pdGVseSBnZXQgYXQgaXQuIE5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMsIHNlZSBpZiBhbnl0aGluZyBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHJlYWNoIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjMwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjI0Ljc3ODIzNDI2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2OTcxNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcGZpbGUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Nzc9ZW5kaWZcXG5tbS9NYWtlZmlsZS03OC1cXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDoyNC44MzM5Mzc3MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA1NTExNjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBzd2FwIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIHJlbGF0ZWQgdG8gYENPTkZJR19TV0FQYC4gVGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2ssIHNvIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgZGVmaW5lZCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIHN3YXAgaW1wbGVtZW50YXRpb24uIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0aGF0IHN5bWJvbCBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY3kgY2hhaW4gbG9va3MgbGlrZSwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgaXQgaW1wYWN0cy4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBhbmQgbW9kaWZ5aW5nIHRoZSBzd2FwIGJlaGF2aW9yLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFuZCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5naW5nIHRoaXMgc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjI3LjIzOTQ1MTgyMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MTkyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVBcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MjcuMjkyMjc3MDIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDYyMjY2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHN3YXAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIHF1aWNrZXN0IHJvdXRlIHRvIHRoYXQgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGluIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzd2FwIHNwYWNlIG1hbmFnZW1lbnQuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgYFNXQVBgIOKAkyB0aGF0IG1hY3JvIHNob3VsZCBsZWFkIG1lIGRpcmVjdGx5IHRvIHRoZSBoZWFydCBvZiBob3cgaXQncyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgYXJlIGludm9sdmVkLiBUaW1lIHRvIGdvIGRpZyBpbiB0aGVyZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQ2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MjguOTk4NTA2MzA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEwOlxcdFxcdGJvb2xcXG4gIDExOlxcdFxcbiAgMTI6XFx0bWVudWNvbmZpZyBTV0FQXFxuICAxMzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjI4Ljk5ODY2MTU0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMxNDk2NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgcXVpY2sgcnVuZG93biBvZiB3aGF0IEknbSB0aGlua2luZyByaWdodCBub3csIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhOlxuXG4qKkZvY3VzaW5nIG9uIHRoZSBTd2Fwb2ZmIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgSSdtIHRyeWluZyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG9mIHRoZSBzd2Fwb2ZmIGZ1bmN0aW9uYWxpdHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSB0aGUgbW9zdCByZWxldmFudCBzeW1ib2xzIHRvIGFuYWx5emUuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYGZpbmRfbmV4dF90b191bnVzZWAsIGB0cnlfdG9fdW51c2VgLCBvciBhcmUgd2UgbG9va2luZyBkZWVwZXIgaW50byB0aGUgc3lzY2FsbCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgd2l0aCBmdW5jdGlvbnMgbGlrZSBgX19kb19zeXNfc3dhcG9mZmAsIGBrc3lzX3N3YXBvZmZgLCBvciBzaW1wbHkgYHN5c19zd2Fwb2ZmYD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoaWNoIG9mIHRoZXNlIHdpbGwgcHJvdmlkZSB0aGUgY3JpdGljYWwgcGF0aCBmb3Igd2hhdCBJJ20gaW52ZXN0aWdhdGluZy4gVG8gY29uZmlybSB0aGUgc3lzY2FsbCdzIGVudHJ5IHBvaW50LCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9zd2FwZmlsZS5jYCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb24gbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGBzd2Fwb2ZmYCBzeXNjYWxsLiBUaGF0IGZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGtlcm5lbC1sZXZlbCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MzEuMjMwMTYxNDcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjc3NjI4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qc3dhcG9mZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0zMTU5PXN0YXRpYyB2b2lkIGZsdXNoX3BlcmNwdV9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0zMTc2LVxcbm1tL3N3YXBmaWxlLmM6MzE3NzpTWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUpXFxubW0vc3dhcGZpbGUuYy0zMTc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MzEuMjgyOTQzODgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3MjE2Njk0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogYGZpbmRfbmV4dF90b191bnVzZWAgaW4gYG1tL3N3YXBmaWxlLmNgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgZmluZF9uZXh0X3RvX3VudXNlYCwgYSBzdGF0aWMgZnVuY3Rpb24gYnVyaWVkIHdpdGhpbiBgbW0vc3dhcGZpbGUuY2AsIGlzIHdvcnRoIGZ1enppbmcuIEkndmUgY29uZmlybWVkIHRoYXQgYGZpbmRfbmV4dF90b191bnVzZWAgYW5kIGl0cyBjYWxsZXIsIGB0cnlfdG9fdW51c2VgLCBhcmUgYm90aCBzdGF0aWMsIGJ1dCB0aGF0IHRoZXkgZG8gaGF2ZSBzeW1ib2xzLCBldmVuIHRob3VnaCB0aGV5J3JlIHN0YXRpYy4gVGhpcyBtZWFucyB0aGV5IGFyZSBhY2Nlc3NpYmxlIGZvciBhbmFseXNpcyBhbmQgY292ZXJhZ2UuXG5cblNwZWNpZmljYWxseSwgSSdtIGtleWluZyBpbiBvbiBhIG1vZGlmaWNhdGlvbiB0byBgZmluZF9uZXh0X3RvX3VudXNlYC4gVGhlIHBhdGNoIGFsdGVycyBpdHMgc2NhbiBhbGdvcml0aG0uIEl0IG5vdyBza2lwcyBlbXB0eSBjbHVzdGVycyB3aGVuIGl0ZXJhdGluZyBzd2FwIHNwYWNlLCBiYXNlZCBvbiBgUkVBRF9PTkNFKGNpLVx1MDAzZWNvdW50KWAsIHdoaWNoIGlzIGEgY2xlYXIgb3B0aW1pemF0aW9uLiBDcnVjaWFsbHksIEkndmUgdmVyaWZpZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWNoZWQgZHVyaW5nIHRoZSBgc3dhcG9mZmAgc3lzdGVtIGNhbGwgdmlhIGBfX2RvX3N5c19zd2Fwb2ZmYCBhbmQgYGtzeXNfc3dhcG9mZmAuIFRoaXMgcHJvdmlkZXMgYSBjbGVhciwgcmVhY2hhYmxlIHBhdGggZnJvbSB1c2Vyc3BhY2UuXG5cblRoZSBwb3NpdGl2ZSBjcml0ZXJpYSBhcmUgc29saWQ6IFdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCB3aXRoaW4gdGhlIGBtbS9gIHN1YnN5c3RlbSwgYW5kIHRoZSBtb2RpZmljYXRpb24gZGlyZWN0bHkgYWZmZWN0cyB0aGUgY29yZSBsb2dpYyBvZiBgZmluZF9uZXh0X3RvX3VudXNlYC4gVGhlIHJlYWNoYWJpbGl0eSB0aHJvdWdoIHRoZSBgc3dhcG9mZmAgc3lzY2FsbCBpcyB0aGUgaWNpbmcgb24gdGhlIGNha2UuXG5cbkkndmUgYWxzbyBjaGVja2VkIHRoZSByZWxldmFudCBjb25maWcsIGBDT05GSUdfU1dBUGAsIHdoaWNoIGlzLCBhcyBleHBlY3RlZCwgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHg4Ni9hbWQ2NCBpZiBNTVUgYW5kIEJMT0NLIGFyZSBlbmFibGVkLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlIGBmaW5kX25leHRfdG9fdW51c2VgIGFuZCBgdHJ5X3RvX3VudXNlYC5cblxuSW4gc2hvcnQsIHRoZSBwYXRjaCBvcHRpbWl6ZXMgYGZpbmRfbmV4dF90b191bnVzZWAgd2l0aGluIGBtbS9zd2FwZmlsZS5jYCBieSBza2lwcGluZyBlbXB0eSBjbHVzdGVycyBkdXJpbmcgc3dhcCBzcGFjZSBpdGVyYXRpb24sIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQsIHRpbWUgdG8gZmluYWxpemUgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk4NywiT3V0cHV0VG9rZW5zIjoxMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MzguMDA0NjIxNzY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMwNjQ5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaW5kX25leHRfdG9fdW51c2VcIixcbiAgICBcInRyeV90b191bnVzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHVzdGVyIHNjYW5uaW5nIGFsZ29yaXRobSBpbiBmaW5kX25leHRfdG9fdW51c2UoKSB3aXRoaW4gbW0vc3dhcGZpbGUuYywgb3B0aW1pemluZyBzd2FwIHNsb3Qgc2VhcmNoIGJ5IHNraXBwaW5nIGVtcHR5IGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgc3dhcG9mZiBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaW5kX25leHRfdG9fdW51c2VcIixcbiAgICBcInRyeV90b191bnVzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHVzdGVyIHNjYW5uaW5nIGFsZ29yaXRobSBpbiBmaW5kX25leHRfdG9fdW51c2UoKSB3aXRoaW4gbW0vc3dhcGZpbGUuYywgb3B0aW1pemluZyBzd2FwIHNsb3Qgc2VhcmNoIGJ5IHNraXBwaW5nIGVtcHR5IGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgc3dhcG9mZiBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDozOC4wODc2OTYxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNzMyMDM2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDozOC4wODgzNDIzNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMjcyNTUyNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZmluZF9uZXh0X3RvX3VudXNlKClgIGluIGBtbS9zd2FwZmlsZS5jYCB0byBvcHRpbWl6ZSB0aGUgc2VhcmNoIGZvciBpbi11c2Ugc3dhcCBlbnRyaWVzIGJ5IHNraXBwaW5nIGVtcHR5IHN3YXAgY2x1c3RlcnMgZHVyaW5nIHN3YXBvZmYuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBjaWAsIGBpYCwgYGVuZGAsIGBjaV9vZmZgLCBgc3dwX3RiYCkgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IGJlZm9yZSBhY2Nlc3MsIGFuZCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIGtlcm5lbC1pbml0aWFsaXplZCBzd2FwIGRhdGEgc3RydWN0dXJlcyAoYHN3YXBfaW5mb19zdHJ1Y3RgLCBgc3dhcF9jbHVzdGVyX2luZm9gKS4gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhY2Nlc3NlcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS9wYWRkaW5nIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGluZGV4aW5nIG9yIG9mZi1ieS1vbmUgYm91bmRhcnkgaXNzdWVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGM4NmRkYjA4ZDljYjFhZDYyOWIyZjgxMDBjNzQzODkzNDc1NDNlOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6MDQ6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4MDMyYTBmM2MzMTk1Li43ODk3NGRhNjgxMGU1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMjQwLDcgKzI0MCw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcbiBcdHN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7XHRcdC8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi9cbiBcdHNpZ25lZCBjaGFyXHR0eXBlO1x0XHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXG4gXHR1bnNpZ25lZCBpbnRcdG1heDtcdFx0Lyogc2l6ZSBvZiB0aGlzIHN3YXAgZGV2aWNlICovXG4tXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi9cbitcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDBhM2EzYjIyMThjNzcuLjA1ZDM0MDgzOTZmOTggMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMzcwLDggKzM3MCw2IEBAIHN0YXRpYyB2b2lkIGRpc2NhcmRfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBMQVRFTkNZX0xJTUlUXHRcdDI1NlxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBjbHVzdGVyX2lzX2VtcHR5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaW5mbylcbiB7XG4gXHRyZXR1cm4gaW5mby1cdTAwM2Vjb3VudCA9PSAwO1xuQEAgLTI3ODcsNyArMjc4NSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4ge1xuLVx0dW5zaWduZWQgaW50IGk7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuK1x0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XG4rXHR1bnNpZ25lZCBpbnQgY2lfb2ZmO1xuIFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XG4gXG4gXHQvKlxuQEAgLTI3OTYsMTkgKzI3OTYsMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuIFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gcHJldiArIDE7IGkgXHUwMDNjIHNpLVx1MDAzZW1heDsgaSsrKSB7XG4tXHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXG4tXHRcdFx0XHRcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcbi1cdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxuK1x0aSA9IHByZXYgKyAxO1xuK1x0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuK1x0XHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XG4rXHRcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXG4rXHRcdFx0ICAgIEFMSUdOX0RPV04oaSwgU1dBUEZJTEVfQ0xVU1RFUikgKyBTV0FQRklMRV9DTFVTVEVSLFxuK1x0XHRcdCAgICBzaS1cdTAwM2VtYXgpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS5cbitcdFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXG4rXHRcdCAqIGNhY2hlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGhlcmUgZm9yIHRyeV90b191bnVzZSgpIHRvIGFjdCBvbi5cbitcdFx0ICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktXHUwMDNlbG9jayBpc1xuK1x0XHQgKiBlbm91Z2gsIHVubGlrZSBpbiBldmVyeSBvdGhlciBjbHVzdGVyX2lzX2VtcHR5KCkgY2FsbGVyLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFSRUFEX09OQ0UoY2ktXHUwMDNlY291bnQpKSB7XG4rXHRcdFx0aSA9IGVuZDtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdH1cbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFxuLVx0aWYgKGkgPT0gc2ktXHUwMDNlbWF4KVxuLVx0XHRpID0gMDtcbitcdFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XG4rXHRcdGZvciAoOyBpIFx1MDAzYyBlbmQ7IGNpX29mZisrLCBpKyspIHtcbitcdFx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbitcdFx0XHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXHUwMDI2XHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXG4rXHRcdFx0XHRyZXR1cm4gaTtcbitcdFx0fVxuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbiBcbi1cdHJldHVybiBpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MzguMDg4MzQ0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0NDM1NTI0ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgYG1tL3N3YXBmaWxlLmNgIHBhdGNoIHdhcnJhbnRzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0cmVhdCB0aGlzIGFzIGEgc3RhbmRhcmQgZGVmZW5zaXZlIHNlY3VyaXR5IGFuYWx5c2lzLCBha2luIHRvIFFBIGluIHNvZnR3YXJlIGVuZ2luZWVyaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG9idmlvdXMgc2FmZXR5IG9yIGhhcm0gaXNzdWVzLiBJIHNlZSB0aGUgcG90ZW50aWFsIHNldmVyaXR5IGlzIGxpa2VseSBiZW5pZ24gb3Igbm9uLWV4aXN0ZW50IGhlcmUuXG5cbkZpcnN0LCBsZXQncyB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2ggZG9lcy4gVGhlIGRpZmYgdGVsbHMgbWUgdGhlcmUncyBhIGNvbW1lbnQgdXBkYXRlIGluIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAgZm9yIGBjbHVzdGVyX2luZm9gLiBUaGF04oCZcyB0cml2aWFsLiBUaGVuLCBpbiBgbW0vc3dhcGZpbGUuY2AsIHRoZSBwYXRjaCByZW1vdmVzIGEgYCNkZWZpbmUgTEFURU5DWV9MSU1JVCAyNTZgLCB3aGljaCBpcyBhbHNvIG5vdCBpbW1lZGlhdGVseSBjb25jZXJuaW5nLlxuXG5UaGUgbWVhdCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW4gYGZpbmRfbmV4dF90b191bnVzZWAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgb3B0aW1pemluZyB0aGUgc2NhbiBsb2dpYyBkdXJpbmcgc3dhcG9mZi91bnVzZSBvcGVyYXRpb25zLiBJbnN0ZWFkIG9mIGNoZWNraW5nIGVhY2ggc2xvdCBhbmQgZG9pbmcgYSBjbHVzdGVyIGxvb2t1cCByZXBlYXRlZGx5LCBpdCBub3cgZmV0Y2hlcyBgY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpYCwgY2hlY2tzIGBjaS1cdTAwM2Vjb3VudGAsIGFuZCB0aGVuIGl0ZXJhdGVzIHdpdGhpbiB0aGUgY2x1c3RlciB1cCB0byBgZW5kYC4gSXQncyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgd2hpY2ggKmNvdWxkKiBpbnRyb2R1Y2UgYSBzdWJ0bGUgYnVnLlxuXG5UbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSdsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gV2hpbGUgSSBkb24ndCBzZWUgYW55IHJlZCBmbGFncyByaWdodCBhd2F5LCBJIHdpbGwgaGF2ZSB0byBkaWcgaW4gYSBiaXQgZnVydGhlciB0byBzZWUgaWYgSSBuZWVkIHRvIHJlY29tbWVuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6NTIuNTIzODcyOTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzM3NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfbmV4dF90b191bnVzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9Mjc1Nz1zdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjc4NC0gKi9cXG5tbS9zd2FwZmlsZS5jOjI3ODU6c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMjc4Ni1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjgzMT1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjg4NC1cXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxubW0vc3dhcGZpbGUuYzoyODg1OlxcdCAgICAgICAoaSA9IGZpbmRfbmV4dF90b191bnVzZShzaSwgaSkpICE9IDApIHtcXG5tbS9zd2FwZmlsZS5jLTI4ODYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjUyLjU3NDYxODkyOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQ1ODg1MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgU3dhcGZpbGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0vc3dhcGZpbGUuY2AgZmlsZS4gSSdtIGZvY3VzaW5nIG9uIGxpbmVzIDI3ODAgdGhyb3VnaCAyODkwLiBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhhdCBzcGVjaWZpYyBzZWN0aW9uLiBUaGlzIGxpa2VseSBob2xkcyBzb21lIGtleSBsb2dpYywgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZGV0YWlscyBvZiBwYWdlIHN3YXBwaW5nLiBJJ20gZ3Vlc3NpbmcgaXQgY291bGQgYmUgYWJvdXQgbWFuYWdpbmcgc3dhcCBzcGFjZSBhbGxvY2F0aW9uLCBoYW5kbGluZyBwYWdlIEkvTyB0byBhbmQgZnJvbSBkaXNrLCBvciBwZXJoYXBzIGRlYWxpbmcgd2l0aCB0aGUgc3dhcCBjYWNoZS4gS25vd2luZyB0aGUgZXhhY3QgbGluZSBudW1iZXJzIGlzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBuYXJyb3dpbmcgZG93biB0aGUgYXJlYSBvZiBpbnRlcmVzdCBhbmQgYXZvaWRpbmcgc3BlbmRpbmcgdGltZSByZXZpZXdpbmcgY29kZSB1bm5lY2Vzc2FyaWx5LiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6NTQuMzIwNTA2MzU0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwZmlsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzgwOlxcdC8qXFxuMjc4MTpcXHQgKiBTY2FuIHN3YXAgdGFibGUgZnJvbSBjdXJyZW50IHBvc2l0aW9uIHRvIG5leHQgZW50cnkgc3RpbGwgaW4gdXNlLlxcbjI3ODI6XFx0ICogUmV0dXJuIDAgaWYgdGhlcmUgYXJlIG5vIGludXNlIGVudHJpZXMgYWZ0ZXIgcHJldiB0aWxsIGVuZCBvZlxcbjI3ODM6XFx0ICogdGhlIG1hcC5cXG4yNzg0OlxcdCAqL1xcbjI3ODU6XFx0c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbjI3ODY6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHByZXYpXFxuMjc4NzpcXHR7XFxuMjc4ODpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbjI3ODk6XFx0XFx0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XFxuMjc5MDpcXHRcXHR1bnNpZ25lZCBpbnQgY2lfb2ZmO1xcbjI3OTE6XFx0XFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XFxuMjc5MjpcXHRcXG4yNzkzOlxcdFxcdC8qXFxuMjc5NDpcXHRcXHQgKiBObyBuZWVkIGZvciBzd2FwX2xvY2sgaGVyZTogd2UncmUganVzdCBsb29raW5nXFxuMjc5NTpcXHRcXHQgKiBmb3Igd2hldGhlciBhbiBlbnRyeSBpcyBpbiB1c2UsIG5vdCBtb2RpZnlpbmcgaXQ7IGZhbHNlXFxuMjc5NjpcXHRcXHQgKiBoaXRzIGFyZSBva2F5LCBhbmQgc3lzX3N3YXBvZmYoKSBoYXMgYWxyZWFkeSBwcmV2ZW50ZWQgbmV3XFxuMjc5NzpcXHRcXHQgKiBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgYXJlYSAod2hpbGUgaG9sZGluZyBzd2FwX2xvY2spLlxcbjI3OTg6XFx0XFx0ICovXFxuMjc5OTpcXHRcXHRpID0gcHJldiArIDE7XFxuMjgwMDpcXHRcXHR3aGlsZSAoaSBcXHUwMDNjIHNpLVxcdTAwM2VtYXgpIHtcXG4yODAxOlxcdFxcdFxcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKTtcXG4yODAyOlxcdFxcdFxcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXFxuMjgwMzpcXHRcXHRcXHRcXHQgICAgQUxJR05fRE9XTihpLCBTV0FQRklMRV9DTFVTVEVSKSArIFNXQVBGSUxFX0NMVVNURVIsXFxuMjgwNDpcXHRcXHRcXHRcXHQgICAgc2ktXFx1MDAzZW1heCk7XFxuMjgwNTpcXHRcXG4yODA2OlxcdFxcdFxcdC8qXFxuMjgwNzpcXHRcXHRcXHQgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS5cXG4yODA4OlxcdFxcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbjI4MDk6XFx0XFx0XFx0ICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLlxcbjI4MTA6XFx0XFx0XFx0ICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktXFx1MDAzZWxvY2sgaXNcXG4yODExOlxcdFxcdFxcdCAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuXFxuMjgxMjpcXHRcXHRcXHQgKi9cXG4yODEzOlxcdFxcdFxcdGlmICghUkVBRF9PTkNFKGNpLVxcdTAwM2Vjb3VudCkpIHtcXG4yODE0OlxcdFxcdFxcdFxcdGkgPSBlbmQ7XFxuMjgxNTpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yODE2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI4MTc6XFx0XFx0XFx0fVxcbjI4MTg6XFx0XFxuMjgxOTpcXHRcXHRcXHRjaV9vZmYgPSBpICUgU1dBUEZJTEVfQ0xVU1RFUjtcXG4yODIwOlxcdFxcdFxcdGZvciAoOyBpIFxcdTAwM2MgZW5kOyBjaV9vZmYrKywgaSsrKSB7XFxuMjgyMTpcXHRcXHRcXHRcXHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcXG4yODIyOlxcdFxcdFxcdFxcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcXHUwMDI2XFx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxcbjI4MjM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuMjgyNDpcXHRcXHRcXHR9XFxuMjgyNTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yODI2OlxcdFxcdH1cXG4yODI3OlxcdFxcbjI4Mjg6XFx0XFx0cmV0dXJuIDA7XFxuMjgyOTpcXHR9XFxuMjgzMDpcXHRcXG4yODMxOlxcdHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbjI4MzI6XFx0e1xcbjI4MzM6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbTtcXG4yODM0OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbjI4MzU6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcDtcXG4yODM2OlxcdFxcdGludCByZXR2YWwgPSAwO1xcbjI4Mzc6XFx0XFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpID0gc3dhcF9pbmZvW3R5cGVdO1xcbjI4Mzg6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yODM5OlxcdFxcdHN3cF9lbnRyeV90IGVudHJ5O1xcbjI4NDA6XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuMjg0MTpcXHRcXG4yODQyOlxcdFxcdGlmICghc3dhcF91c2FnZV9pbl9wYWdlcyhzaSkpXFxuMjg0MzpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3M7XFxuMjg0NDpcXHRcXG4yODQ1OlxcdHJldHJ5OlxcbjI4NDY6XFx0XFx0cmV0dmFsID0gc2htZW1fdW51c2UodHlwZSk7XFxuMjg0NzpcXHRcXHRpZiAocmV0dmFsKVxcbjI4NDg6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4yODQ5OlxcdFxcbjI4NTA6XFx0XFx0cHJldl9tbSA9IFxcdTAwMjZpbml0X21tO1xcbjI4NTE6XFx0XFx0bW1nZXQocHJldl9tbSk7XFxuMjg1MjpcXHRcXG4yODUzOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bW1saXN0X2xvY2spO1xcbjI4NTQ6XFx0XFx0cCA9IFxcdTAwMjZpbml0X21tLm1tbGlzdDtcXG4yODU1OlxcdFxcdHdoaWxlIChzd2FwX3VzYWdlX2luX3BhZ2VzKHNpKSBcXHUwMDI2XFx1MDAyNlxcbjI4NTY6XFx0XFx0ICAgICAgICFzaWduYWxfcGVuZGluZyhjdXJyZW50KSBcXHUwMDI2XFx1MDAyNlxcbjI4NTc6XFx0XFx0ICAgICAgIChwID0gcC1cXHUwMDNlbmV4dCkgIT0gXFx1MDAyNmluaXRfbW0ubW1saXN0KSB7XFxuMjg1ODpcXHRcXG4yODU5OlxcdFxcdFxcdG1tID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbW1fc3RydWN0LCBtbWxpc3QpO1xcbjI4NjA6XFx0XFx0XFx0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXFxuMjg2MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODYyOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtbWxpc3RfbG9jayk7XFxuMjg2MzpcXHRcXHRcXHRtbXB1dChwcmV2X21tKTtcXG4yODY0OlxcdFxcdFxcdHByZXZfbW0gPSBtbTtcXG4yODY1OlxcdFxcdFxcdHJldHZhbCA9IHVudXNlX21tKG1tLCB0eXBlKTtcXG4yODY2OlxcdFxcdFxcdGlmIChyZXR2YWwpIHtcXG4yODY3OlxcdFxcdFxcdFxcdG1tcHV0KHByZXZfbW0pO1xcbjI4Njg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4yODY5OlxcdFxcdFxcdH1cXG4yODcwOlxcdFxcbjI4NzE6XFx0XFx0XFx0LypcXG4yODcyOlxcdFxcdFxcdCAqIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZW4ndCBjb21wbGV0ZWx5IGtpbGxpbmdcXG4yODczOlxcdFxcdFxcdCAqIGludGVyYWN0aXZlIHBlcmZvcm1hbmNlLlxcbjI4NzQ6XFx0XFx0XFx0ICovXFxuMjg3NTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yODc2OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bW1saXN0X2xvY2spO1xcbjI4Nzc6XFx0XFx0fVxcbjI4Nzg6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1tbGlzdF9sb2NrKTtcXG4yODc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDo1NC4zMjA3MDM4MDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA0MDE2NzYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXBmaWxlIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2luZyBvbiBvcHRpbWl6aW5nIHRoZSBgZmluZF9uZXh0X3RvX3VudXNlYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdG8gYmUgaW1wcm92aW5nIHRoZSBlZmZpY2llbmN5IG9mIGxvY2F0aW5nIHRoZSBuZXh0IGluLXVzZSBzd2FwIGVudHJ5IHdpdGhpbiB0aGUgc3dhcCBzcGFjZSBzdHJ1Y3R1cmUgYHNpYC5cblxuVGhlIGNvcmUgb2YgdGhlIG9wdGltaXphdGlvbiBjZW50ZXJzIGFyb3VuZCBjbHVzdGVyLWxldmVsIHRyYWNraW5nLiBgZmluZF9uZXh0X3RvX3VudXNlYCBpcyB1c2luZyBgX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKWAuIFRoZSBsb2dpYyBvcHRpbWl6ZXMgc2tpcHBpbmcgZW50aXJlIGNsdXN0ZXJzIGlmIHRoZSBjbHVzdGVyJ3MgY291bnQgKGBjaS1cdTAwM2Vjb3VudGApIGlzIHplcm8sIGltcHJvdmluZyBwZXJmb3JtYW5jZS4gT3RoZXJ3aXNlLCBpdCBlZmZpY2llbnRseSBzY2FucyBpbmRpdmlkdWFsIHN3YXAgdGFibGUgZW50cmllcyB3aXRoaW4gdGhhdCBjbHVzdGVyLiBJdCByZXR1cm5zIHRoZSBpbmRleCBgaWAgb2YgdGhlIG5leHQgZW50cnkgb3IgYDBgIGlmIG5vbmUgYXJlIGZvdW5kLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlPyBJJ3ZlIGdvdCB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhpcy5cblxuRmlyc3QsIGlzIHRoaXMgcmVsYXRlZCB0byBrZXJuZWwgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2U/IE5vLCB0aGlzIGlzIGFsbCBpbnRlcm5hbCBzd2FwZmlsZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZHVyaW5nIGB0cnlfdG9fdW51c2VgLiBUaGF0J3MgZ29vZC5cblxuTmV4dCwgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBMb29raW5nIGF0IHRoZSBjb2RlLCBhbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBsaWtlIGBpYCwgYGVuZGAsIGBjaWAsIGFuZCBvdGhlcnMsIGJlZm9yZSBiZWluZyB1c2VkLiBWYXJpYWJsZXMgbGlrZSBgaSA9IHByZXYgKyAxOyBjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlciguLi4pYC5cblxuQXJlIHRoZXJlIG5ldyBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOby4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb24gY2hhbmdlcyB3aXRoaW4gdGhpcyBwYXRjaC5cblxuRmluYWxseSwgd2hhdCBhYm91dCBib3VuZHMgY2hlY2tzPyBEb2VzIGl0IGRvIGFueXRoaW5nIHRoYXQgbWlnaHQgYWxsb3cgc3Vycm91bmRpbmcgY29kZSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8gTm8sIHRoaXMgaXRlcmF0ZXMgdXAgdG8gYHNpLVx1MDAzZW1heGAsIHJlYWRpbmcgZXhpc3Rpbmcgc3dhcCB0YWJsZSBjbHVzdGVycyBhbmQgZW50cmllcy4gQW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5JJ3ZlIGdvdCB0byBjb25zaWRlciBLQVNBTiB2cyBLTVNBTi4gS0FTQU4gY2F0Y2hlcyB0aGluZ3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgYW5kIEtNU0FOIHdvdWxkIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBCdXQgSSBkb24ndCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkL2xlYWsgcmlza3MuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS5cblxuU28sIGFmdGVyIGEgZmluYWwgY2hlY2sgb2YgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCByZWFzb25pbmcsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTjogZmFsc2VgLiBUaGUgbG9naWMgaXMgc291bmQsIGFuZCB0aGVyZSBhcmUgbm8gYXBwYXJlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGdldCB0aGF0IHRvb2wgZ29pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzEsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDU6MDEuMzYwODc0NDY3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZmluZF9uZXh0X3RvX3VudXNlKClgIGluIGBtbS9zd2FwZmlsZS5jYCB0byBvcHRpbWl6ZSB0aGUgc2VhcmNoIGZvciBpbi11c2Ugc3dhcCBlbnRyaWVzIGJ5IHNraXBwaW5nIGVtcHR5IHN3YXAgY2x1c3RlcnMgZHVyaW5nIHN3YXBvZmYuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBjaWAsIGBpYCwgYGVuZGAsIGBjaV9vZmZgLCBgc3dwX3RiYCkgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IGJlZm9yZSBhY2Nlc3MsIGFuZCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIGtlcm5lbC1pbml0aWFsaXplZCBzd2FwIGRhdGEgc3RydWN0dXJlcyAoYHN3YXBfaW5mb19zdHJ1Y3RgLCBgc3dhcF9jbHVzdGVyX2luZm9gKS4gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhY2Nlc3NlcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS9wYWRkaW5nIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGluZGV4aW5nIG9yIG9mZi1ieS1vbmUgYm91bmRhcnkgaXNzdWVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowm5lng[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 17:02:48 +0000 UTC FinishedAt: 2026-09-09 17:05:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0bffe67ab8a72b3725cc31c4b525709bd3a3e223", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0bffe67ab8a72b3725cc31c4b525709bd3a3e223", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "57a3bb9d-40fd-4481-bad2-5121a4ec4db4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "find_next_to_unuse", "try_to_unuse" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5kX25leHRfdG9fdW51c2UmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VudXNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2x1c3RlciBzY2FubmluZyBhbGdvcml0aG0gaW4gZmluZF9uZXh0X3RvX3VudXNlKCkgd2l0aGluIG1tL3N3YXBmaWxlLmMsIG9wdGltaXppbmcgc3dhcCBzbG90IHNlYXJjaCBieSBza2lwcGluZyBlbXB0eSBjbHVzdGVycyBkdXJpbmcgc3dhcG9mZi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgdGhlIHN3YXBvZmYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhjODZkZGIwOGQ5Y2IxYWQ2MjliMmY4MTAwYzc0Mzg5MzQ3NTQzZThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE3OjA0OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDgwMzJhMGYzYzMxOTUuLjc4OTc0ZGE2ODEwZTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0yNDAsNyAmIzQzOzI0MCw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcbiBcdHN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7XHRcdC8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi9cbiBcdHNpZ25lZCBjaGFyXHR0eXBlO1x0XHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXG4gXHR1bnNpZ25lZCBpbnRcdG1heDtcdFx0Lyogc2l6ZSBvZiB0aGlzIHN3YXAgZGV2aWNlICovXG4tXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi9cbiYjNDM7XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogYXJyYXksIG9uZSBlbnRyeSBwZXIgY2x1c3RlciAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmcmVlX2NsdXN0ZXJzOyAvKiBmcmVlIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vbmZ1bGxfY2x1c3RlcnNbU1dBUF9OUl9PUkRFUlNdO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCAwYTNhM2IyMjE4Yzc3Li4wNWQzNDA4Mzk2Zjk4IDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuY1xuQEAgLTM3MCw4ICYjNDM7MzcwLDYgQEAgc3RhdGljIHZvaWQgZGlzY2FyZF9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0fVxuIH1cbiBcbi0jZGVmaW5lIExBVEVOQ1lfTElNSVRcdFx0MjU2XG4tXG4gc3RhdGljIGlubGluZSBib29sIGNsdXN0ZXJfaXNfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppbmZvKVxuIHtcbiBcdHJldHVybiBpbmZvLVx1MDAzZWNvdW50ID09IDA7XG5AQCAtMjc4Nyw3ICYjNDM7Mjc4NSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4ge1xuLVx0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGksIGVuZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY2lfb2ZmO1xuIFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XG4gXG4gXHQvKlxuQEAgLTI3OTYsMTkgJiM0MzsyNzk2LDM2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdCAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXdcbiBcdCAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBhcmVhICh3aGlsZSBob2xkaW5nIHN3YXBfbG9jaykuXG4gXHQgKi9cbi1cdGZvciAoaSA9IHByZXYgJiM0MzsgMTsgaSBcdTAwM2Mgc2ktXHUwMDNlbWF4OyBpJiM0MzsmIzQzOykge1xuLVx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpLFxuLVx0XHRcdFx0XHRpICUgU1dBUEZJTEVfQ0xVU1RFUik7XG4tXHRcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcdTAwMjZcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcbi1cdFx0XHRicmVhaztcbi1cdFx0aWYgKChpICUgTEFURU5DWV9MSU1JVCkgPT0gMClcbiYjNDM7XHRpID0gcHJldiAmIzQzOyAxO1xuJiM0MztcdHdoaWxlIChpIFx1MDAzYyBzaS1cdTAwM2VtYXgpIHtcbiYjNDM7XHRcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKTtcbiYjNDM7XHRcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXG4mIzQzO1x0XHRcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICYjNDM7IFNXQVBGSUxFX0NMVVNURVIsXG4mIzQzO1x0XHRcdCAgICBzaS1cdTAwM2VtYXgpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS5cbiYjNDM7XHRcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxuJiM0MztcdFx0ICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLlxuJiM0MztcdFx0ICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktXHUwMDNlbG9jayBpc1xuJiM0MztcdFx0ICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFSRUFEX09OQ0UoY2ktXHUwMDNlY291bnQpKSB7XG4mIzQzO1x0XHRcdGkgPSBlbmQ7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuIFxuLVx0aWYgKGkgPT0gc2ktXHUwMDNlbWF4KVxuLVx0XHRpID0gMDtcbiYjNDM7XHRcdGNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSO1xuJiM0MztcdFx0Zm9yICg7IGkgXHUwMDNjIGVuZDsgY2lfb2ZmJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XG4mIzQzO1x0XHRcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcdTAwMjZcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdH1cbiBcbi1cdHJldHVybiBpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmluZF9uZXh0X3RvX3VudXNlJiMzNDssCiAgICAmIzM0O3RyeV90b191bnVzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2x1c3RlciBzY2FubmluZyBhbGdvcml0aG0gaW4gZmluZF9uZXh0X3RvX3VudXNlKCkgd2l0aGluIG1tL3N3YXBmaWxlLmMsIG9wdGltaXppbmcgc3dhcCBzbG90IHNlYXJjaCBieSBza2lwcGluZyBlbXB0eSBjbHVzdGVycyBkdXJpbmcgc3dhcG9mZi4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlYWNoYWJsZSB2aWEgdGhlIHN3YXBvZmYgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhjODZkZGIwOGQ5Y2IxYWQ2MjliMmY4MTAwYzc0Mzg5MzQ3NTQzZTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE3OjA0OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA4MDMyYTBmM2MzMTk1Li43ODk3NGRhNjgxMGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMjQwLDcgJiM0MzsyNDAsNyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCB7CiAJc3RydWN0IHBsaXN0X25vZGUgbGlzdDsJCS8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi8KIAlzaWduZWQgY2hhcgl0eXBlOwkJLyogc3RyYW5nZSBuYW1lIGZvciBhbiBpbmRleCAqLwogCXVuc2lnbmVkIGludAltYXg7CQkvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi8KLQlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi8KJiM0MzsJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGFycmF5LCBvbmUgZW50cnkgcGVyIGNsdXN0ZXIgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBub25mdWxsX2NsdXN0ZXJzW1NXQVBfTlJfT1JERVJTXTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDBhM2EzYjIyMThjNzcuLjA1ZDM0MDgzOTZmOTggMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMzcwLDggJiM0MzszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJfQogfQogCi0jZGVmaW5lIExBVEVOQ1lfTElNSVQJCTI1NgotCiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pCiB7CiAJcmV0dXJuIGluZm8tJmd0O2NvdW50ID09IDA7CkBAIC0yNzg3LDcgJiM0MzsyNzg1LDkgQEAgc3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpCiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCQkJCXVuc2lnbmVkIGludCBwcmV2KQogewotCXVuc2lnbmVkIGludCBpOwomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwomIzQzOwl1bnNpZ25lZCBsb25nIGksIGVuZDsKJiM0MzsJdW5zaWduZWQgaW50IGNpX29mZjsKIAl1bnNpZ25lZCBsb25nIHN3cF90YjsKIAogCS8qCkBAIC0yNzk2LDE5ICYjNDM7Mjc5NiwzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ldwogCSAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBhcmVhICh3aGlsZSBob2xkaW5nIHN3YXBfbG9jaykuCiAJICovCi0JZm9yIChpID0gcHJldiAmIzQzOyAxOyBpICZsdDsgc2ktJmd0O21heDsgaSYjNDM7JiM0MzspIHsKLQkJc3dwX3RiID0gc3dhcF90YWJsZV9nZXQoX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKSwKLQkJCQkJaSAlIFNXQVBGSUxFX0NMVVNURVIpOwotCQlpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgJmFtcDsmYW1wOyAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKQotCQkJYnJlYWs7Ci0JCWlmICgoaSAlIExBVEVOQ1lfTElNSVQpID09IDApCiYjNDM7CWkgPSBwcmV2ICYjNDM7IDE7CiYjNDM7CXdoaWxlIChpICZsdDsgc2ktJmd0O21heCkgewomIzQzOwkJY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpOwomIzQzOwkJZW5kID0gbWluX3QodW5zaWduZWQgbG9uZywKJiM0MzsJCQkgICAgQUxJR05fRE9XTihpLCBTV0FQRklMRV9DTFVTVEVSKSAmIzQzOyBTV0FQRklMRV9DTFVTVEVSLAomIzQzOwkJCSAgICBzaS0mZ3Q7bWF4KTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS4KJiM0MzsJCSAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcAomIzQzOwkJICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLgomIzQzOwkJICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktJmd0O2xvY2sgaXMKJiM0MzsJCSAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghUkVBRF9PTkNFKGNpLSZndDtjb3VudCkpIHsKJiM0MzsJCQlpID0gZW5kOwogCQkJY29uZF9yZXNjaGVkKCk7Ci0JfQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQogCi0JaWYgKGkgPT0gc2ktJmd0O21heCkKLQkJaSA9IDA7CiYjNDM7CQljaV9vZmYgPSBpICUgU1dBUEZJTEVfQ0xVU1RFUjsKJiM0MzsJCWZvciAoOyBpICZsdDsgZW5kOyBjaV9vZmYmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpOwomIzQzOwkJCWlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSAmYW1wOyZhbXA7ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpCiYjNDM7CQkJCXJldHVybiBpOwomIzQzOwkJfQomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KIAotCXJldHVybiBpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2FwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIGFzc2Vzc2luZyB0aGVpciBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgaW1wYWN0cyB3aXRoaW4gdGhlIHN3YXAgc3Vic3lzdGVtLiBGcm9tIHRoZSBkZXRhaWxzIHByb3ZpZGVkLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHdlJiMzOTtyZSBoYW5kbGluZyB1bnVzZWQgc3dhcCBjbHVzdGVycyBkdXJpbmcgYHN3YXBvZmZgLiBUaGUgY29tbWVudCB1cGRhdGUgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYCBpcyBsaWtlbHkgYSBtaW5vciBkZXRhaWwsIHBlcmhhcHMganVzdCBjbGFyaWZ5aW5nIHRoZSBwdXJwb3NlIG9mIHRoZSBgY2x1c3Rlcl9pbmZvYCBmaWVsZCB3aXRoaW4gYHN0cnVjdCBzd2FwX2luZm9fc3RydWN0YC4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IGNvbmZpcm0gdGhlIGNoYW5nZSBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIGFtYmlndWl0aWVzLgoKVGhlIG1lYXQgb2YgdGhlIHdvcmsgc2VlbXMgdG8gYmUgd2l0aGluIGBtbS9zd2FwZmlsZS5jYC4gUmVtb3ZpbmcgdGhhdCBgI2RlZmluZSBMQVRFTkNZX0xJTUlUYCBpcyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBpbmRpY2F0ZXMgYSBzaGlmdCBpbiBob3cgd2UmIzM5O3JlIG1hbmFnaW5nIHRoZSB0aW1pbmcgb2YgdW5zd2FwcGluZy4gVGhlIGtleSwgdGhvdWdoLCBpcyB0aGUgcmV3cml0ZSBvZiBgZmluZF9uZXh0X3RvX3VudXNlYC4gSXQmIzM5O3MgY2xlYXJseSBhZG9wdGluZyBhIGNsdXN0ZXItYmFzZWQgaXRlcmF0aW9uIHN0cmF0ZWd5LiBVc2luZyBgIVJFQURfT05DRShjaS0mZ3Q7Y291bnQpYCB0byBza2lwIGVtcHR5IGNsdXN0ZXJzIGluIGB0cnlfdG9fdW51c2VgIGlzIHRoZSBoZWFydCBvZiBpdCwgYW5kIGl0IHNlZW1zIHRoaXMgdGFyZ2V0cyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgZHVyaW5nIHN3YXBvZmYgb3BlcmF0aW9ucy4gQnkgaXRlcmF0aW5nIGNsdXN0ZXIgYnkgY2x1c3RlciwgdGhlIHBhdGNoIGFwcGVhcnMgdG8gb3B0aW1pemUgc2tpcHBpbmcgdW51c2VkIG9yIHVubmVlZGVkIHN3YXAgcGFnZXMuIEl0JiMzOTtzIHVzaW5nIGBBTElHTl9ET1dOYCBhbmQgYFNXQVBGSUxFX0NMVVNURVJgIHRvIHByZWNpc2VseSBkZWZpbmUgdGhlIGl0ZXJhdGlvbiBib3VuZGFyaWVzLiBUaGlzIHN1Z2dlc3RzIGFuIGludGVudGlvbiB0byBhdm9pZCB1bm5lY2Vzc2FyeSBkaXNrIEkvTy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGFuZCAqaG93Ki4gSSB3aWxsIGRlZmluaXRlbHkgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG1tL3N3YXBmaWxlLmNgIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bGwgdXRpbGl6ZSBlaXRoZXIgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGV4YW1pbmUgdGhlIGNvZGUgc3Vycm91bmRpbmcgYGZpbmRfbmV4dF90b191bnVzZWAsIHRvIHNlZSBob3cgaXQmIzM5O3MgY2FsbGVkIGFuZCB3aGF0IGl0IGludGVyYWN0cyB3aXRoLiBUaGlzIHdpbGwgaGVscCBjbGFyaWZ5IGlmIHRoZSBuZXcgY2x1c3Rlci1iYXNlZCBhcHByb2FjaCBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgYmVoYXZpb3IgY2hhbmdlcyBvciBvcHRpbWl6YXRpb24uIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBza2lwcGluZyB1bnVzZWQgY2x1c3RlcnMsIGluIHBhcnRpY3VsYXIsIHdoZXRoZXIgdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBpbiB0eXBpY2FsIHN3YXAtb2ZmIHNjZW5hcmlvcywgYW5kIGlmIHRoZSBhcHByb2FjaCBjb3VsZCBpbnRyb2R1Y2UgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfbmV4dF90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTI3NTc9c3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpXG4tLVxubW0vc3dhcGZpbGUuYy0yNzg0LSAqL1xubW0vc3dhcGZpbGUuYzoyNzg1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtMjc4Ni1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4tLVxubW0vc3dhcGZpbGUuYz0yODMxPXN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjg4NC1cdCAgICAgICAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgXHUwMDI2XHUwMDI2XG5tbS9zd2FwZmlsZS5jOjI4ODU6XHQgICAgICAgKGkgPSBmaW5kX25leHRfdG9fdW51c2Uoc2ksIGkpKSAhPSAwKSB7XG5tbS9zd2FwZmlsZS5jLTI4ODYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGB0cnlfdG9fdW51c2VgIGFuZCBgZmluZF9uZXh0X3RvX3VudXNlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMsIGB0cnlfdG9fdW51c2VgIGFuZCBgZmluZF9uZXh0X3RvX3VudXNlYCwgYXJlIGludGVyYWN0aW5nLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYWJvdXQgNTAgbGluZXMgc3Vycm91bmRpbmcgYm90aCBvZiB0aGVtLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBzZWUgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIGFueSBpbW1lZGlhdGUgY2FsbGVycywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBkYXRhIGlzIGJlaW5nIHBhc3NlZCBpbiBhbmQgb3V0LiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGFsbG93IG1lIHRvIGluZmVyIHRoZSBwdXJwb3NlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgcmVsYXRlZD8gSXMgb25lIGNhbGxpbmcgdGhlIG90aGVyLCBvciBhcmUgdGhleSBwZWVycz8gSXMgYHVudXNlYCBhIGtleSBwYXJ0IG9mIHRoZSBkZXNpZ24gb3IgbW9yZSBvZiBhbiBleGNlcHRpb24gaGFuZGxlci4gVGhlIGNvbnRleHQgd2lsbCBzaG93IHdoZXRoZXIgdGhpcyBkZXNpZ24gaXMgYSBnb29kIGlkZWEuIExvb2tpbmcgYXQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlbSB3aWxsIGV4cG9zZSBlZGdlIGNhc2VzIG9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiBubyB0aW1lLiBXaXRoIHRoaXMgc3Vycm91bmRpbmcgY29kZSwgSSBzaG91bGQgYmUgYWJsZSB0byBmb3JtIGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBjcmFjayB0aGlzIG9wZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzgwOlx0LypcbjI3ODE6XHQgKiBTY2FuIHN3YXAgdGFibGUgZnJvbSBjdXJyZW50IHBvc2l0aW9uIHRvIG5leHQgZW50cnkgc3RpbGwgaW4gdXNlLlxuMjc4MjpcdCAqIFJldHVybiAwIGlmIHRoZXJlIGFyZSBubyBpbnVzZSBlbnRyaWVzIGFmdGVyIHByZXYgdGlsbCBlbmQgb2ZcbjI3ODM6XHQgKiB0aGUgbWFwLlxuMjc4NDpcdCAqL1xuMjc4NTpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbjI3ODY6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4yNzg3Olx0e1xuMjc4ODpcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbjI3ODk6XHRcdHVuc2lnbmVkIGxvbmcgaSwgZW5kO1xuMjc5MDpcdFx0dW5zaWduZWQgaW50IGNpX29mZjtcbjI3OTE6XHRcdHVuc2lnbmVkIGxvbmcgc3dwX3RiO1xuMjc5MjpcdFxuMjc5MzpcdFx0LypcbjI3OTQ6XHRcdCAqIE5vIG5lZWQgZm9yIHN3YXBfbG9jayBoZXJlOiB3ZSYjMzk7cmUganVzdCBsb29raW5nXG4yNzk1Olx0XHQgKiBmb3Igd2hldGhlciBhbiBlbnRyeSBpcyBpbiB1c2UsIG5vdCBtb2RpZnlpbmcgaXQ7IGZhbHNlXG4yNzk2Olx0XHQgKiBoaXRzIGFyZSBva2F5LCBhbmQgc3lzX3N3YXBvZmYoKSBoYXMgYWxyZWFkeSBwcmV2ZW50ZWQgbmV3XG4yNzk3Olx0XHQgKiBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgYXJlYSAod2hpbGUgaG9sZGluZyBzd2FwX2xvY2spLlxuMjc5ODpcdFx0ICovXG4yNzk5Olx0XHRpID0gcHJldiAmIzQzOyAxO1xuMjgwMDpcdFx0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuMjgwMTpcdFx0XHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XG4yODAyOlx0XHRcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXG4yODAzOlx0XHRcdFx0ICAgIEFMSUdOX0RPV04oaSwgU1dBUEZJTEVfQ0xVU1RFUikgJiM0MzsgU1dBUEZJTEVfQ0xVU1RFUixcbjI4MDQ6XHRcdFx0XHQgICAgc2ktXHUwMDNlbWF4KTtcbjI4MDU6XHRcbjI4MDY6XHRcdFx0LypcbjI4MDc6XHRcdFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXG4yODA4Olx0XHRcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxuMjgwOTpcdFx0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG4yODEwOlx0XHRcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVx1MDAzZWxvY2sgaXNcbjI4MTE6XHRcdFx0ICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci5cbjI4MTI6XHRcdFx0ICovXG4yODEzOlx0XHRcdGlmICghUkVBRF9PTkNFKGNpLVx1MDAzZWNvdW50KSkge1xuMjgxNDpcdFx0XHRcdGkgPSBlbmQ7XG4yODE1Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yODE2Olx0XHRcdFx0Y29udGludWU7XG4yODE3Olx0XHRcdH1cbjI4MTg6XHRcbjI4MTk6XHRcdFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XG4yODIwOlx0XHRcdGZvciAoOyBpIFx1MDAzYyBlbmQ7IGNpX29mZiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7XG4yODIxOlx0XHRcdFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XG4yODIyOlx0XHRcdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuMjgyMzpcdFx0XHRcdFx0cmV0dXJuIGk7XG4yODI0Olx0XHRcdH1cbjI4MjU6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yODI2Olx0XHR9XG4yODI3Olx0XG4yODI4Olx0XHRyZXR1cm4gMDtcbjI4Mjk6XHR9XG4yODMwOlx0XG4yODMxOlx0c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXG4yODMyOlx0e1xuMjgzMzpcdFx0c3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbTtcbjI4MzQ6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuMjgzNTpcdFx0c3RydWN0IGxpc3RfaGVhZCAqcDtcbjI4MzY6XHRcdGludCByZXR2YWwgPSAwO1xuMjgzNzpcdFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpID0gc3dhcF9pbmZvW3R5cGVdO1xuMjgzODpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbjI4Mzk6XHRcdHN3cF9lbnRyeV90IGVudHJ5O1xuMjg0MDpcdFx0dW5zaWduZWQgaW50IGk7XG4yODQxOlx0XG4yODQyOlx0XHRpZiAoIXN3YXBfdXNhZ2VfaW5fcGFnZXMoc2kpKVxuMjg0MzpcdFx0XHRnb3RvIHN1Y2Nlc3M7XG4yODQ0Olx0XG4yODQ1Olx0cmV0cnk6XG4yODQ2Olx0XHRyZXR2YWwgPSBzaG1lbV91bnVzZSh0eXBlKTtcbjI4NDc6XHRcdGlmIChyZXR2YWwpXG4yODQ4Olx0XHRcdHJldHVybiByZXR2YWw7XG4yODQ5Olx0XG4yODUwOlx0XHRwcmV2X21tID0gXHUwMDI2aW5pdF9tbTtcbjI4NTE6XHRcdG1tZ2V0KHByZXZfbW0pO1xuMjg1MjpcdFxuMjg1MzpcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbjI4NTQ6XHRcdHAgPSBcdTAwMjZpbml0X21tLm1tbGlzdDtcbjI4NTU6XHRcdHdoaWxlIChzd2FwX3VzYWdlX2luX3BhZ2VzKHNpKSBcdTAwMjZcdTAwMjZcbjI4NTY6XHRcdCAgICAgICAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgXHUwMDI2XHUwMDI2XG4yODU3Olx0XHQgICAgICAgKHAgPSBwLVx1MDAzZW5leHQpICE9IFx1MDAyNmluaXRfbW0ubW1saXN0KSB7XG4yODU4Olx0XG4yODU5Olx0XHRcdG1tID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbW1fc3RydWN0LCBtbWxpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMDAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGB0cnlfdG9fdW51c2VgIFVzYWdlKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBgdHJ5X3RvX3VudXNlYCBmdW5jdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHByZWNpc2VseSAqd2hlcmUqIGl0JiMzOTtzIGJlaW5nIGludm9rZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyBpcyBmdW5kYW1lbnRhbC4gQnkgbWFwcGluZyB0aG9zZSBjYWxscywgSSBjYW4gZGVkdWNlIGl0cyBzY29wZSBvZiBpbmZsdWVuY2UsIHRoZSBzcGVjaWZpYyBjb250ZXh0cyBpdCYjMzk7cyB1c2VkIGluLCBhbmQgdWx0aW1hdGVseSwgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgYXJjaGl0ZWN0dXJlLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBpZiBhbnkgY2hhbmdlcyB3b3VsZCBsZWFkIHRvIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBJIG5lZWQgdG8gdHJlYXQgaXQgbGlrZSBhIHZhcmlhYmxlIEnigJl2ZSBuZXZlciBzZWVuIGJlZm9yZSBhbmQgYmVnaW4gYSBkZWVwIGRpdmUgaW50byBpdHMgdXNhZ2UuIFRoZSBzcGVjaWZpYyBkZXRhaWxzLCBzdWNoIGFzIGlucHV0cywgb3V0cHV0cyBhbmQgYW55IHNpZGUtZWZmZWN0cywgY2FuIGFsbCBiZSBkZWR1Y2VkIG9uY2UgSSBoYXZlIGEgcHJlY2lzZSBtZW50YWwgaW1hZ2Ugb2YgdGhlIGVudmlyb25tZW50IGl04oCZcyBmb3VuZCBpbi4gVGltZSB0byBzdGFydCB0cmFjaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTEzMTQ9c3RhdGljIHZvaWQgc3dhcF9yYW5nZV9mcmVlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4tLVxubW0vc3dhcGZpbGUuYy0xMzM2LVx0Lypcbm1tL3N3YXBmaWxlLmM6MTMzNzpcdCAqIE1ha2Ugc3VyZSB0aGF0IHRyeV90b191bnVzZSgpIG9ic2VydmVzIHNpLVx1MDAzZWludXNlX3BhZ2VzIHJlYWNoaW5nIDBcbm1tL3N3YXBmaWxlLmMtMTMzOC1cdCAqIG9ubHkgYWZ0ZXIgdGhlIGFib3ZlIGNsZWFudXBzIGFyZSBkb25lLlxuLS1cbm1tL3N3YXBmaWxlLmM9MjQ5NT1zdGF0aWMgaW50IHVudXNlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9zd2FwZmlsZS5jLTI1MDYtXHQgKiBJZiB0aGUgZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGUgYnkgb3RoZXJzLCBjb250aW51ZSB0b1xubW0vc3dhcGZpbGUuYzoyNTA3Olx0ICogdW51c2Ugb3RoZXIgUFRFcy4gdHJ5X3RvX3VudXNlIG1heSB0cnkgYWdhaW4gaWYgd2UgbWlzc2VkIHRoaXMgb25lLlxubW0vc3dhcGZpbGUuYy0yNTA4LVx0ICovXG4tLVxubW0vc3dhcGZpbGUuYz0yNzg1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTI4MDgtXHRcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxubW0vc3dhcGZpbGUuYzoyODA5Olx0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG5tbS9zd2FwZmlsZS5jLTI4MTAtXHRcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVx1MDAzZWxvY2sgaXNcbi0tXG5tbS9zd2FwZmlsZS5jLTI4MzAtXG5tbS9zd2FwZmlsZS5jOjI4MzE6c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXG5tbS9zd2FwZmlsZS5jLTI4MzIte1xuLS1cbm1tL3N3YXBmaWxlLmMtMjkyNS1cdC8qXG5tbS9zd2FwZmlsZS5jOjI5MjY6XHQgKiBNYWtlIHN1cmUgdGhhdCBmdXJ0aGVyIGNsZWFudXBzIGFmdGVyIHRyeV90b191bnVzZSgpIHJldHVybnMgaGFwcGVuXG5tbS9zd2FwZmlsZS5jLTI5MjctXHQgKiBhZnRlciBzd2FwX3JhbmdlX2ZyZWUoKSByZWR1Y2VzIHNpLVx1MDAzZWludXNlX3BhZ2VzIHRvIDAuXG4tLVxubW0vc3dhcGZpbGUuYy0yOTMzLS8qXG5tbS9zd2FwZmlsZS5jOjI5MzQ6ICogQWZ0ZXIgYSBzdWNjZXNzZnVsIHRyeV90b191bnVzZSwgaWYgbm8gc3dhcCBpcyBub3cgaW4gdXNlLCB3ZSBrbm93XG5tbS9zd2FwZmlsZS5jLTI5MzUtICogd2UgY2FuIGVtcHR5IHRoZSBtbWxpc3QuICBzd2FwX2xvY2sgbXVzdCBiZSBoZWxkIG9uIGVudHJ5IGFuZCBleGl0LlxuLS1cbm1tL3N3YXBmaWxlLmM9MzE3Nz1TWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUpXG4tLVxubW0vc3dhcGZpbGUuYy0zMjM3LVx0c2V0X2N1cnJlbnRfb29tX29yaWdpbigpO1xubW0vc3dhcGZpbGUuYzozMjM4Olx0ZXJyID0gdHJ5X3RvX3VudXNlKHAtXHUwMDNldHlwZSk7XG5tbS9zd2FwZmlsZS5jLTMyMzktXHRjbGVhcl9jdXJyZW50X29vbV9vcmlnaW4oKTtcbi0tXG5tbS96c3dhcC5jPTE2Njg9dm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKVxuLS1cbm1tL3pzd2FwLmMtMTY3NS1cbm1tL3pzd2FwLmM6MTY3NjpcdC8qIHRyeV90b191bnVzZSgpIGludmFsaWRhdGVkIGFsbCB0aGUgZW50cmllcyBhbHJlYWR5ICovXG5tbS96c3dhcC5jLTE2NzctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl96c3dhcF90cmVlc1t0eXBlXTsgaSYjNDM7JiM0MzspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIzMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTd2Fwb2ZmIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU28sIGB0cnlfdG9fdW51c2VgIGlzIHRyaWdnZXJlZCBieSBgc3lzX3N3YXBvZmZgLCB3aGljaCBpcywgb2YgY291cnNlLCB0aGUga2VybmVsJiMzOTtzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC4gIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBoZXJlLCBgbW0vc3dhcGZpbGUuY2AsIHNvIGFueXRoaW5nIGhhcHBlbmluZyBpbiB0aGVyZSBpcyBpbXBvcnRhbnQuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZWAsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoaW4gYHRyeV90b191bnVzZWAgZHVyaW5nIHRoZSBgc3lzX3N3YXBvZmZgIG9wZXJhdGlvbi4gTXkga2V5IHF1ZXN0aW9uIG5vdyBpcywgJiMzNDtJcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IFFFTVUgYW5kIHdpdGggdGhlIGhlbHAgb2Ygc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyPyYjMzQ7LiAgWWVzLCBpdCBsb29rcyBsaWtlIGl0IGlzLiBgc3dhcG9mZmAgaXMgYSBiYXNpYyBMaW51eCBzeXNjYWxsLiAgV2UgY2FuIGNyZWF0ZSBzd2FwIHdpdGggYHN3YXBvbmAgYW5kIHRoZW4gZGlzYWJsZSBpdCB3aXRoIGBzd2Fwb2ZmYCDigJMgc3RhbmRhcmQgc3R1ZmYuIFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGZ1enppbmcgYHN3YXBvbmAgYW5kIGBzd2Fwb2ZmYCwgc28gd2UgY2FuIGRlZmluaXRlbHkgZ2V0IGF0IGl0LiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzLCBzZWUgaWYgYW55dGhpbmcgbmVlZHMgdG8gYmUgZW5hYmxlZCB0byByZWFjaCB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcGZpbGUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nz1lbmRpZlxubW0vTWFrZWZpbGUtNzgtXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgc3dhcCBpcyBjb25maWd1cmVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gcmVsYXRlZCB0byBgQ09ORklHX1NXQVBgLiBUaGlzIGlzIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jaywgc28gdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgZGVmaW5lZCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIHN3YXAgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhhdCBzeW1ib2wgYW5kIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmN5IGNoYWluIGxvb2tzIGxpa2UsIGFuZCB3aGF0IG90aGVyIHNldHRpbmdzIGl0IGltcGFjdHMuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuZCBtb2RpZnlpbmcgdGhlIHN3YXAgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFuZCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5naW5nIHRoaXMgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNXQVBcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcbi0tXG5tbS9LY29uZmlnLTExLVxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHN3YXAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBxdWlja2VzdCByb3V0ZSB0byB0aGF0IGluZm9ybWF0aW9uIHNob3VsZCBiZSBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzd2FwIHNwYWNlIG1hbmFnZW1lbnQuIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBTV0FQYCDigJMgdGhhdCBtYWNybyBzaG91bGQgbGVhZCBtZSBkaXJlY3RseSB0byB0aGUgaGVhcnQgb2YgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgaW52b2x2ZWQuIFRpbWUgdG8gZ28gZGlnIGluIHRoZXJlIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEwOlx0XHRib29sXG4gIDExOlx0XG4gIDEyOlx0bWVudWNvbmZpZyBTV0FQXG4gIDEzOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBNTVUgXHUwMDI2XHUwMDI2IEJMT0NLIFx1MDAyNlx1MDAyNiAhQVJDSF9OT19TV0FQXG4gIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcbiAgMTg6XHRcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxuICAxOTpcdFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcbiAgMjA6XHRcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgWlNXQVBcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBTV0FQXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDI2Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcbiAgMjk6XHRcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXG4gIDMwOlx0XHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXG4gIDMxOlx0XHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxuICAzMjpcdFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXG4gIDMzOlx0XHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxuICAzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgcXVpY2sgcnVuZG93biBvZiB3aGF0IEkmIzM5O20gdGhpbmtpbmcgcmlnaHQgbm93LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYToKCioqRm9jdXNpbmcgb24gdGhlIFN3YXBvZmYgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0cnlpbmcgdG8gemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgc3dhcG9mZiBmdW5jdGlvbmFsaXR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byBhbmFseXplLiBBcmUgd2UgZGVhbGluZyB3aXRoIGBmaW5kX25leHRfdG9fdW51c2VgLCBgdHJ5X3RvX3VudXNlYCwgb3IgYXJlIHdlIGxvb2tpbmcgZGVlcGVyIGludG8gdGhlIHN5c2NhbGwgaW1wbGVtZW50YXRpb24gaXRzZWxmIHdpdGggZnVuY3Rpb25zIGxpa2UgYF9fZG9fc3lzX3N3YXBvZmZgLCBga3N5c19zd2Fwb2ZmYCwgb3Igc2ltcGx5IGBzeXNfc3dhcG9mZmA/IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGljaCBvZiB0aGVzZSB3aWxsIHByb3ZpZGUgdGhlIGNyaXRpY2FsIHBhdGggZm9yIHdoYXQgSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBUbyBjb25maXJtIHRoZSBzeXNjYWxsJiMzOTtzIGVudHJ5IHBvaW50LCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgbW0vc3dhcGZpbGUuY2AgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9uIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC4gVGhhdCBmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBrZXJuZWwtbGV2ZWwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLipzd2Fwb2ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MzE1OT1zdGF0aWMgdm9pZCBmbHVzaF9wZXJjcHVfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbi0tXG5tbS9zd2FwZmlsZS5jLTMxNzYtXG5tbS9zd2FwZmlsZS5jOjMxNzc6U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxubW0vc3dhcGZpbGUuYy0zMTc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4NwoJCQkJCQkJb3V0cHV0OiAxMDQKCQkJCQkJCXRob3VnaHRzOiA1ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogYGZpbmRfbmV4dF90b191bnVzZWAgaW4gYG1tL3N3YXBmaWxlLmNgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBmaW5kX25leHRfdG9fdW51c2VgLCBhIHN0YXRpYyBmdW5jdGlvbiBidXJpZWQgd2l0aGluIGBtbS9zd2FwZmlsZS5jYCwgaXMgd29ydGggZnV6emluZy4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGZpbmRfbmV4dF90b191bnVzZWAgYW5kIGl0cyBjYWxsZXIsIGB0cnlfdG9fdW51c2VgLCBhcmUgYm90aCBzdGF0aWMsIGJ1dCB0aGF0IHRoZXkgZG8gaGF2ZSBzeW1ib2xzLCBldmVuIHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMuIFRoaXMgbWVhbnMgdGhleSBhcmUgYWNjZXNzaWJsZSBmb3IgYW5hbHlzaXMgYW5kIGNvdmVyYWdlLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGtleWluZyBpbiBvbiBhIG1vZGlmaWNhdGlvbiB0byBgZmluZF9uZXh0X3RvX3VudXNlYC4gVGhlIHBhdGNoIGFsdGVycyBpdHMgc2NhbiBhbGdvcml0aG0uIEl0IG5vdyBza2lwcyBlbXB0eSBjbHVzdGVycyB3aGVuIGl0ZXJhdGluZyBzd2FwIHNwYWNlLCBiYXNlZCBvbiBgUkVBRF9PTkNFKGNpLSZndDtjb3VudClgLCB3aGljaCBpcyBhIGNsZWFyIG9wdGltaXphdGlvbi4gQ3J1Y2lhbGx5LCBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hlZCBkdXJpbmcgdGhlIGBzd2Fwb2ZmYCBzeXN0ZW0gY2FsbCB2aWEgYF9fZG9fc3lzX3N3YXBvZmZgIGFuZCBga3N5c19zd2Fwb2ZmYC4gVGhpcyBwcm92aWRlcyBhIGNsZWFyLCByZWFjaGFibGUgcGF0aCBmcm9tIHVzZXJzcGFjZS4KClRoZSBwb3NpdGl2ZSBjcml0ZXJpYSBhcmUgc29saWQ6IFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgd2l0aGluIHRoZSBgbW0vYCBzdWJzeXN0ZW0sIGFuZCB0aGUgbW9kaWZpY2F0aW9uIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGNvcmUgbG9naWMgb2YgYGZpbmRfbmV4dF90b191bnVzZWAuIFRoZSByZWFjaGFiaWxpdHkgdGhyb3VnaCB0aGUgYHN3YXBvZmZgIHN5c2NhbGwgaXMgdGhlIGljaW5nIG9uIHRoZSBjYWtlLgoKSSYjMzk7dmUgYWxzbyBjaGVja2VkIHRoZSByZWxldmFudCBjb25maWcsIGBDT05GSUdfU1dBUGAsIHdoaWNoIGlzLCBhcyBleHBlY3RlZCwgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHg4Ni9hbWQ2NCBpZiBNTVUgYW5kIEJMT0NLIGFyZSBlbmFibGVkLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgYGZpbmRfbmV4dF90b191bnVzZWAgYW5kIGB0cnlfdG9fdW51c2VgLgoKSW4gc2hvcnQsIHRoZSBwYXRjaCBvcHRpbWl6ZXMgYGZpbmRfbmV4dF90b191bnVzZWAgd2l0aGluIGBtbS9zd2FwZmlsZS5jYCBieSBza2lwcGluZyBlbXB0eSBjbHVzdGVycyBkdXJpbmcgc3dhcCBzcGFjZSBpdGVyYXRpb24sIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcuCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCwgdGltZSB0byBmaW5hbGl6ZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpbmRfbmV4dF90b191bnVzZSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fdW51c2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNsdXN0ZXIgc2Nhbm5pbmcgYWxnb3JpdGhtIGluIGZpbmRfbmV4dF90b191bnVzZSgpIHdpdGhpbiBtbS9zd2FwZmlsZS5jLCBvcHRpbWl6aW5nIHN3YXAgc2xvdCBzZWFyY2ggYnkgc2tpcHBpbmcgZW1wdHkgY2x1c3RlcnMgZHVyaW5nIHN3YXBvZmYuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIHRoZSBzd2Fwb2ZmIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5kX25leHRfdG9fdW51c2UmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VudXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHVzdGVyIHNjYW5uaW5nIGFsZ29yaXRobSBpbiBmaW5kX25leHRfdG9fdW51c2UoKSB3aXRoaW4gbW0vc3dhcGZpbGUuYywgb3B0aW1pemluZyBzd2FwIHNsb3Qgc2VhcmNoIGJ5IHNraXBwaW5nIGVtcHR5IGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgc3dhcG9mZiBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGM4NmRkYjA4ZDljYjFhZDYyOWIyZjgxMDBjNzQzODkzNDc1NDNlOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTc6MDQ6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDgwMzJhMGYzYzMxOTUuLjc4OTc0ZGE2ODEwZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0yNDAsNyAmIzQzOzI0MCw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHsKIAlzdHJ1Y3QgcGxpc3Rfbm9kZSBsaXN0OwkJLyogZW50cnkgaW4gc3dhcF9hY3RpdmVfaGVhZCAqLwogCXNpZ25lZCBjaGFyCXR5cGU7CQkvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovCiAJdW5zaWduZWQgaW50CW1heDsJCS8qIHNpemUgb2YgdGhpcyBzd2FwIGRldmljZSAqLwotCXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBjbHVzdGVyIGluZm8uIE9ubHkgZm9yIFNTRCAqLwomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogYXJyYXksIG9uZSBlbnRyeSBwZXIgY2x1c3RlciAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9jbHVzdGVyczsgLyogZnJlZSBjbHVzdGVycyBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vbmZ1bGxfY2x1c3RlcnNbU1dBUF9OUl9PUkRFUlNdOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggMGEzYTNiMjIxOGM3Ny4uMDVkMzQwODM5NmY5OCAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0zNzAsOCAmIzQzOzM3MCw2IEBAIHN0YXRpYyB2b2lkIGRpc2NhcmRfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAl9CiB9CiAKLSNkZWZpbmUgTEFURU5DWV9MSU1JVAkJMjU2Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBjbHVzdGVyX2lzX2VtcHR5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaW5mbykKIHsKIAlyZXR1cm4gaW5mby0mZ3Q7Y291bnQgPT0gMDsKQEAgLTI3ODcsNyAmIzQzOzI3ODUsOSBAQCBzdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkJCQkJdW5zaWduZWQgaW50IHByZXYpCiB7Ci0JdW5zaWduZWQgaW50IGk7CiYjNDM7CXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaSwgZW5kOwomIzQzOwl1bnNpZ25lZCBpbnQgY2lfb2ZmOwogCXVuc2lnbmVkIGxvbmcgc3dwX3RiOwogCiAJLyoKQEAgLTI3OTYsMTkgJiM0MzsyNzk2LDM2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkgKiBoaXRzIGFyZSBva2F5LCBhbmQgc3lzX3N3YXBvZmYoKSBoYXMgYWxyZWFkeSBwcmV2ZW50ZWQgbmV3CiAJICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS4KIAkgKi8KLQlmb3IgKGkgPSBwcmV2ICYjNDM7IDE7IGkgJmx0OyBzaS0mZ3Q7bWF4OyBpJiM0MzsmIzQzOykgewotCQlzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpLAotCQkJCQlpICUgU1dBUEZJTEVfQ0xVU1RFUik7Ci0JCWlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSAmYW1wOyZhbXA7ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpCi0JCQlicmVhazsKLQkJaWYgKChpICUgTEFURU5DWV9MSU1JVCkgPT0gMCkKJiM0MzsJaSA9IHByZXYgJiM0MzsgMTsKJiM0MzsJd2hpbGUgKGkgJmx0OyBzaS0mZ3Q7bWF4KSB7CiYjNDM7CQljaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7CiYjNDM7CQllbmQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLAomIzQzOwkJCSAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICYjNDM7IFNXQVBGSUxFX0NMVVNURVIsCiYjNDM7CQkJICAgIHNpLSZndDttYXgpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLgomIzQzOwkJICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwCiYjNDM7CQkgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uCiYjNDM7CQkgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS0mZ3Q7bG9jayBpcwomIzQzOwkJICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFSRUFEX09OQ0UoY2ktJmd0O2NvdW50KSkgewomIzQzOwkJCWkgPSBlbmQ7CiAJCQljb25kX3Jlc2NoZWQoKTsKLQl9CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAKLQlpZiAoaSA9PSBzaS0mZ3Q7bWF4KQotCQlpID0gMDsKJiM0MzsJCWNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSOwomIzQzOwkJZm9yICg7IGkgJmx0OyBlbmQ7IGNpX29mZiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7CiYjNDM7CQkJaWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpICZhbXA7JmFtcDsgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSkKJiM0MzsJCQkJcmV0dXJuIGk7CiYjNDM7CQl9CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJfQogCi0JcmV0dXJuIGk7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgYG1tL3N3YXBmaWxlLmNgIHBhdGNoIHdhcnJhbnRzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0cmVhdCB0aGlzIGFzIGEgc3RhbmRhcmQgZGVmZW5zaXZlIHNlY3VyaXR5IGFuYWx5c2lzLCBha2luIHRvIFFBIGluIHNvZnR3YXJlIGVuZ2luZWVyaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBvYnZpb3VzIHNhZmV0eSBvciBoYXJtIGlzc3Vlcy4gSSBzZWUgdGhlIHBvdGVudGlhbCBzZXZlcml0eSBpcyBsaWtlbHkgYmVuaWduIG9yIG5vbi1leGlzdGVudCBoZXJlLgoKRmlyc3QsIGxldCYjMzk7cyB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2ggZG9lcy4gVGhlIGRpZmYgdGVsbHMgbWUgdGhlcmUmIzM5O3MgYSBjb21tZW50IHVwZGF0ZSBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgIGZvciBgY2x1c3Rlcl9pbmZvYC4gVGhhdOKAmXMgdHJpdmlhbC4gVGhlbiwgaW4gYG1tL3N3YXBmaWxlLmNgLCB0aGUgcGF0Y2ggcmVtb3ZlcyBhIGAjZGVmaW5lIExBVEVOQ1lfTElNSVQgMjU2YCwgd2hpY2ggaXMgYWxzbyBub3QgaW1tZWRpYXRlbHkgY29uY2VybmluZy4KClRoZSBtZWF0IG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbiBgZmluZF9uZXh0X3RvX3VudXNlYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgb3B0aW1pemluZyB0aGUgc2NhbiBsb2dpYyBkdXJpbmcgc3dhcG9mZi91bnVzZSBvcGVyYXRpb25zLiBJbnN0ZWFkIG9mIGNoZWNraW5nIGVhY2ggc2xvdCBhbmQgZG9pbmcgYSBjbHVzdGVyIGxvb2t1cCByZXBlYXRlZGx5LCBpdCBub3cgZmV0Y2hlcyBgY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpYCwgY2hlY2tzIGBjaS0mZ3Q7Y291bnRgLCBhbmQgdGhlbiBpdGVyYXRlcyB3aXRoaW4gdGhlIGNsdXN0ZXIgdXAgdG8gYGVuZGAuIEl0JiMzOTtzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCB3aGljaCAqY291bGQqIGludHJvZHVjZSBhIHN1YnRsZSBidWcuCgpUbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBiZXR0ZXIgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoaWxlIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVkIGZsYWdzIHJpZ2h0IGF3YXksIEkgd2lsbCBoYXZlIHRvIGRpZyBpbiBhIGJpdCBmdXJ0aGVyIHRvIHNlZSBpZiBJIG5lZWQgdG8gcmVjb21tZW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfbmV4dF90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0yNzU3PXN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjc4NC0gKi9cbm1tL3N3YXBmaWxlLmM6Mjc4NTpzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG5tbS9zd2FwZmlsZS5jLTI3ODYtXHRcdFx0XHRcdHVuc2lnbmVkIGludCBwcmV2KVxuLS1cbm1tL3N3YXBmaWxlLmM9MjgzMT1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTI4ODQtXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFx1MDAyNlx1MDAyNlxubW0vc3dhcGZpbGUuYzoyODg1Olx0ICAgICAgIChpID0gZmluZF9uZXh0X3RvX3VudXNlKHNpLCBpKSkgIT0gMCkge1xubW0vc3dhcGZpbGUuYy0yODg2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIFN3YXBmaWxlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBtbS9zd2FwZmlsZS5jYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDI3ODAgdGhyb3VnaCAyODkwLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoYXQgc3BlY2lmaWMgc2VjdGlvbi4gVGhpcyBsaWtlbHkgaG9sZHMgc29tZSBrZXkgbG9naWMsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGRldGFpbHMgb2YgcGFnZSBzd2FwcGluZy4gSSYjMzk7bSBndWVzc2luZyBpdCBjb3VsZCBiZSBhYm91dCBtYW5hZ2luZyBzd2FwIHNwYWNlIGFsbG9jYXRpb24sIGhhbmRsaW5nIHBhZ2UgSS9PIHRvIGFuZCBmcm9tIGRpc2ssIG9yIHBlcmhhcHMgZGVhbGluZyB3aXRoIHRoZSBzd2FwIGNhY2hlLiBLbm93aW5nIHRoZSBleGFjdCBsaW5lIG51bWJlcnMgaXMgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG5hcnJvd2luZyBkb3duIHRoZSBhcmVhIG9mIGludGVyZXN0IGFuZCBhdm9pZGluZyBzcGVuZGluZyB0aW1lIHJldmlld2luZyBjb2RlIHVubmVjZXNzYXJpbHkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc4MDpcdC8qXG4yNzgxOlx0ICogU2NhbiBzd2FwIHRhYmxlIGZyb20gY3VycmVudCBwb3NpdGlvbiB0byBuZXh0IGVudHJ5IHN0aWxsIGluIHVzZS5cbjI3ODI6XHQgKiBSZXR1cm4gMCBpZiB0aGVyZSBhcmUgbm8gaW51c2UgZW50cmllcyBhZnRlciBwcmV2IHRpbGwgZW5kIG9mXG4yNzgzOlx0ICogdGhlIG1hcC5cbjI3ODQ6XHQgKi9cbjI3ODU6XHRzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4yNzg2Olx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBwcmV2KVxuMjc4NzpcdHtcbjI3ODg6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4yNzg5Olx0XHR1bnNpZ25lZCBsb25nIGksIGVuZDtcbjI3OTA6XHRcdHVuc2lnbmVkIGludCBjaV9vZmY7XG4yNzkxOlx0XHR1bnNpZ25lZCBsb25nIHN3cF90YjtcbjI3OTI6XHRcbjI3OTM6XHRcdC8qXG4yNzk0Olx0XHQgKiBObyBuZWVkIGZvciBzd2FwX2xvY2sgaGVyZTogd2UmIzM5O3JlIGp1c3QgbG9va2luZ1xuMjc5NTpcdFx0ICogZm9yIHdoZXRoZXIgYW4gZW50cnkgaXMgaW4gdXNlLCBub3QgbW9kaWZ5aW5nIGl0OyBmYWxzZVxuMjc5NjpcdFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuMjc5NzpcdFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbjI3OTg6XHRcdCAqL1xuMjc5OTpcdFx0aSA9IHByZXYgJiM0MzsgMTtcbjI4MDA6XHRcdHdoaWxlIChpIFx1MDAzYyBzaS1cdTAwM2VtYXgpIHtcbjI4MDE6XHRcdFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpO1xuMjgwMjpcdFx0XHRlbmQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLFxuMjgwMzpcdFx0XHRcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICYjNDM7IFNXQVBGSUxFX0NMVVNURVIsXG4yODA0Olx0XHRcdFx0ICAgIHNpLVx1MDAzZW1heCk7XG4yODA1Olx0XG4yODA2Olx0XHRcdC8qXG4yODA3Olx0XHRcdCAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLlxuMjgwODpcdFx0XHQgKiBBIHNsb3QgaXMgdW5jb3VudGVkIG9ubHkgYWZ0ZXIgaXRzIGZvbGlvIGxlZnQgdGhlIHN3YXBcbjI4MDk6XHRcdFx0ICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLlxuMjgxMDpcdFx0XHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cdTAwM2Vsb2NrIGlzXG4yODExOlx0XHRcdCAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuXG4yODEyOlx0XHRcdCAqL1xuMjgxMzpcdFx0XHRpZiAoIVJFQURfT05DRShjaS1cdTAwM2Vjb3VudCkpIHtcbjI4MTQ6XHRcdFx0XHRpID0gZW5kO1xuMjgxNTpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjgxNjpcdFx0XHRcdGNvbnRpbnVlO1xuMjgxNzpcdFx0XHR9XG4yODE4Olx0XG4yODE5Olx0XHRcdGNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSO1xuMjgyMDpcdFx0XHRmb3IgKDsgaSBcdTAwM2MgZW5kOyBjaV9vZmYmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuMjgyMTpcdFx0XHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xuMjgyMjpcdFx0XHRcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcdTAwMjZcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcbjI4MjM6XHRcdFx0XHRcdHJldHVybiBpO1xuMjgyNDpcdFx0XHR9XG4yODI1Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjgyNjpcdFx0fVxuMjgyNzpcdFxuMjgyODpcdFx0cmV0dXJuIDA7XG4yODI5Olx0fVxuMjgzMDpcdFxuMjgzMTpcdHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuMjgzMjpcdHtcbjI4MzM6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW07XG4yODM0Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbjI4MzU6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnA7XG4yODM2Olx0XHRpbnQgcmV0dmFsID0gMDtcbjI4Mzc6XHRcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSA9IHN3YXBfaW5mb1t0eXBlXTtcbjI4Mzg6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yODM5Olx0XHRzd3BfZW50cnlfdCBlbnRyeTtcbjI4NDA6XHRcdHVuc2lnbmVkIGludCBpO1xuMjg0MTpcdFxuMjg0MjpcdFx0aWYgKCFzd2FwX3VzYWdlX2luX3BhZ2VzKHNpKSlcbjI4NDM6XHRcdFx0Z290byBzdWNjZXNzO1xuMjg0NDpcdFxuMjg0NTpcdHJldHJ5OlxuMjg0NjpcdFx0cmV0dmFsID0gc2htZW1fdW51c2UodHlwZSk7XG4yODQ3Olx0XHRpZiAocmV0dmFsKVxuMjg0ODpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuMjg0OTpcdFxuMjg1MDpcdFx0cHJldl9tbSA9IFx1MDAyNmluaXRfbW07XG4yODUxOlx0XHRtbWdldChwcmV2X21tKTtcbjI4NTI6XHRcbjI4NTM6XHRcdHNwaW5fbG9jayhcdTAwMjZtbWxpc3RfbG9jayk7XG4yODU0Olx0XHRwID0gXHUwMDI2aW5pdF9tbS5tbWxpc3Q7XG4yODU1Olx0XHR3aGlsZSAoc3dhcF91c2FnZV9pbl9wYWdlcyhzaSkgXHUwMDI2XHUwMDI2XG4yODU2Olx0XHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFx1MDAyNlx1MDAyNlxuMjg1NzpcdFx0ICAgICAgIChwID0gcC1cdTAwM2VuZXh0KSAhPSBcdTAwMjZpbml0X21tLm1tbGlzdCkge1xuMjg1ODpcdFxuMjg1OTpcdFx0XHRtbSA9IGxpc3RfZW50cnkocCwgc3RydWN0IG1tX3N0cnVjdCwgbW1saXN0KTtcbjI4NjA6XHRcdFx0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXG4yODYxOlx0XHRcdFx0Y29udGludWU7XG4yODYyOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbjI4NjM6XHRcdFx0bW1wdXQocHJldl9tbSk7XG4yODY0Olx0XHRcdHByZXZfbW0gPSBtbTtcbjI4NjU6XHRcdFx0cmV0dmFsID0gdW51c2VfbW0obW0sIHR5cGUpO1xuMjg2NjpcdFx0XHRpZiAocmV0dmFsKSB7XG4yODY3Olx0XHRcdFx0bW1wdXQocHJldl9tbSk7XG4yODY4Olx0XHRcdFx0cmV0dXJuIHJldHZhbDtcbjI4Njk6XHRcdFx0fVxuMjg3MDpcdFxuMjg3MTpcdFx0XHQvKlxuMjg3MjpcdFx0XHQgKiBNYWtlIHN1cmUgdGhhdCB3ZSBhcmVuJiMzOTt0IGNvbXBsZXRlbHkga2lsbGluZ1xuMjg3MzpcdFx0XHQgKiBpbnRlcmFjdGl2ZSBwZXJmb3JtYW5jZS5cbjI4NzQ6XHRcdFx0ICovXG4yODc1Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjg3NjpcdFx0XHRzcGluX2xvY2soXHUwMDI2bW1saXN0X2xvY2spO1xuMjg3NzpcdFx0fVxuMjg3ODpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW1saXN0X2xvY2spO1xuMjg3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTMxCgkJCQkJCQlvdXRwdXQ6IDE4MAoJCQkJCQkJdGhvdWdodHM6IDUxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXBmaWxlIE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzaW5nIG9uIG9wdGltaXppbmcgdGhlIGBmaW5kX25leHRfdG9fdW51c2VgIGZ1bmN0aW9uIHdpdGhpbiBgbW0vc3dhcGZpbGUuY2AuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBiZSBpbXByb3ZpbmcgdGhlIGVmZmljaWVuY3kgb2YgbG9jYXRpbmcgdGhlIG5leHQgaW4tdXNlIHN3YXAgZW50cnkgd2l0aGluIHRoZSBzd2FwIHNwYWNlIHN0cnVjdHVyZSBgc2lgLgoKVGhlIGNvcmUgb2YgdGhlIG9wdGltaXphdGlvbiBjZW50ZXJzIGFyb3VuZCBjbHVzdGVyLWxldmVsIHRyYWNraW5nLiBgZmluZF9uZXh0X3RvX3VudXNlYCBpcyB1c2luZyBgX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKWAuIFRoZSBsb2dpYyBvcHRpbWl6ZXMgc2tpcHBpbmcgZW50aXJlIGNsdXN0ZXJzIGlmIHRoZSBjbHVzdGVyJiMzOTtzIGNvdW50IChgY2ktJmd0O2NvdW50YCkgaXMgemVybywgaW1wcm92aW5nIHBlcmZvcm1hbmNlLiBPdGhlcndpc2UsIGl0IGVmZmljaWVudGx5IHNjYW5zIGluZGl2aWR1YWwgc3dhcCB0YWJsZSBlbnRyaWVzIHdpdGhpbiB0aGF0IGNsdXN0ZXIuIEl0IHJldHVybnMgdGhlIGluZGV4IGBpYCBvZiB0aGUgbmV4dCBlbnRyeSBvciBgMGAgaWYgbm9uZSBhcmUgZm91bmQuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlPyBJJiMzOTt2ZSBnb3QgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHRoaXMuCgpGaXJzdCwgaXMgdGhpcyByZWxhdGVkIHRvIGtlcm5lbCBkYXRhIGV4cG9zZWQgdG8gdXNlciBzcGFjZT8gTm8sIHRoaXMgaXMgYWxsIGludGVybmFsIHN3YXBmaWxlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBkdXJpbmcgYHRyeV90b191bnVzZWAuIFRoYXQmIzM5O3MgZ29vZC4KCk5leHQsIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gTG9va2luZyBhdCB0aGUgY29kZSwgYWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBmdW5jdGlvbiwgbGlrZSBgaWAsIGBlbmRgLCBgY2lgLCBhbmQgb3RoZXJzLCBiZWZvcmUgYmVpbmcgdXNlZC4gVmFyaWFibGVzIGxpa2UgYGkgPSBwcmV2ICYjNDM7IDE7IGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKC4uLilgLgoKQXJlIHRoZXJlIG5ldyBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOby4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb24gY2hhbmdlcyB3aXRoaW4gdGhpcyBwYXRjaC4KCkZpbmFsbHksIHdoYXQgYWJvdXQgYm91bmRzIGNoZWNrcz8gRG9lcyBpdCBkbyBhbnl0aGluZyB0aGF0IG1pZ2h0IGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vLCB0aGlzIGl0ZXJhdGVzIHVwIHRvIGBzaS0mZ3Q7bWF4YCwgcmVhZGluZyBleGlzdGluZyBzd2FwIHRhYmxlIGNsdXN0ZXJzIGFuZCBlbnRyaWVzLiBBbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgaGVyZSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uCgpJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgS0FTQU4gdnMgS01TQU4uIEtBU0FOIGNhdGNoZXMgdGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGFuZCBLTVNBTiB3b3VsZCBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0IEkgZG9uJiMzOTt0IHNlZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlYWQvbGVhayByaXNrcy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLgoKU28sIGFmdGVyIGEgZmluYWwgY2hlY2sgb2YgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCByZWFzb25pbmcsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU46IGZhbHNlYC4gVGhlIGxvZ2ljIGlzIHNvdW5kLCBhbmQgdGhlcmUgYXJlIG5vIGFwcGFyZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgZ2V0IHRoYXQgdG9vbCBnb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDowNi45ODkwMTkwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzcxODkwNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaW5kX25leHRfdG9fdW51c2VcIixcbiAgICBcInRyeV90b191bnVzZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHVzdGVyIHNjYW5uaW5nIGFsZ29yaXRobSBpbiBmaW5kX25leHRfdG9fdW51c2UoKSB3aXRoaW4gbW0vc3dhcGZpbGUuYywgb3B0aW1pemluZyBzd2FwIHNsb3Qgc2VhcmNoIGJ5IHNraXBwaW5nIGVtcHR5IGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgc3dhcG9mZiBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDowNi45ODkwMjgxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MTU3OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGM4NmRkYjA4ZDljYjFhZDYyOWIyZjgxMDBjNzQzODkzNDc1NDNlOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE3OjA0OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCA4MDMyYTBmM2MzMTk1Li43ODk3NGRhNjgxMGU1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMjQwLDcgKzI0MCw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcXG4gXFx0c3RydWN0IHBsaXN0X25vZGUgbGlzdDtcXHRcXHQvKiBlbnRyeSBpbiBzd2FwX2FjdGl2ZV9oZWFkICovXFxuIFxcdHNpZ25lZCBjaGFyXFx0dHlwZTtcXHRcXHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXFxuIFxcdHVuc2lnbmVkIGludFxcdG1heDtcXHRcXHQvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi9cXG4tXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGNsdXN0ZXIgaW5mby4gT25seSBmb3IgU1NEICovXFxuK1xcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9jbHVzdGVyczsgLyogZnJlZSBjbHVzdGVycyBsaXN0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggMGEzYTNiMjIxOGM3Ny4uMDVkMzQwODM5NmY5OCAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwZmlsZS5jXFxuKysrIGIvbW0vc3dhcGZpbGUuY1xcbkBAIC0zNzAsOCArMzcwLDYgQEAgc3RhdGljIHZvaWQgZGlzY2FyZF9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHR9XFxuIH1cXG4gXFxuLSNkZWZpbmUgTEFURU5DWV9MSU1JVFxcdFxcdDI1Nlxcbi1cXG4gc3RhdGljIGlubGluZSBib29sIGNsdXN0ZXJfaXNfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHJldHVybiBpbmZvLVxcdTAwM2Vjb3VudCA9PSAwO1xcbkBAIC0yNzg3LDcgKzI3ODUsOSBAQCBzdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4gc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XFxuK1xcdHVuc2lnbmVkIGludCBjaV9vZmY7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3dwX3RiO1xcbiBcXG4gXFx0LypcXG5AQCAtMjc5NiwxOSArMjc5NiwzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdCAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXdcXG4gXFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cXG4gXFx0ICovXFxuLVxcdGZvciAoaSA9IHByZXYgKyAxOyBpIFxcdTAwM2Mgc2ktXFx1MDAzZW1heDsgaSsrKSB7XFxuLVxcdFxcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXFxuLVxcdFxcdFxcdFxcdFxcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcXG4tXFx0XFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFxcdTAwMjZcXHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxcbitcXHRpID0gcHJldiArIDE7XFxuK1xcdHdoaWxlIChpIFxcdTAwM2Mgc2ktXFx1MDAzZW1heCkge1xcbitcXHRcXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XFxuK1xcdFxcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXFxuK1xcdFxcdFxcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICsgU1dBUEZJTEVfQ0xVU1RFUixcXG4rXFx0XFx0XFx0ICAgIHNpLVxcdTAwM2VtYXgpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXFxuK1xcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbitcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxuK1xcdFxcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVxcdTAwM2Vsb2NrIGlzXFxuK1xcdFxcdCAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIVJFQURfT05DRShjaS1cXHUwMDNlY291bnQpKSB7XFxuK1xcdFxcdFxcdGkgPSBlbmQ7XFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi1cXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRpZiAoaSA9PSBzaS1cXHUwMDNlbWF4KVxcbi1cXHRcXHRpID0gMDtcXG4rXFx0XFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XFxuK1xcdFxcdGZvciAoOyBpIFxcdTAwM2MgZW5kOyBjaV9vZmYrKywgaSsrKSB7XFxuK1xcdFxcdFxcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbitcXHRcXHRcXHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXFx1MDAyNlxcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdH1cXG4gXFxuLVxcdHJldHVybiBpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjA3LjQ1NjkxNDE4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzA2MzA3NzY3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpbmRfbmV4dF90b191bnVzZVwiLFxuICAgIFwidHJ5X3RvX3VudXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNsdXN0ZXIgc2Nhbm5pbmcgYWxnb3JpdGhtIGluIGZpbmRfbmV4dF90b191bnVzZSgpIHdpdGhpbiBtbS9zd2FwZmlsZS5jLCBvcHRpbWl6aW5nIHN3YXAgc2xvdCBzZWFyY2ggYnkgc2tpcHBpbmcgZW1wdHkgY2x1c3RlcnMgZHVyaW5nIHN3YXBvZmYuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWFjaGFibGUgdmlhIHRoZSBzd2Fwb2ZmIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGM4NmRkYjA4ZDljYjFhZDYyOWIyZjgxMDBjNzQzODkzNDc1NDNlOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6MDQ6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4MDMyYTBmM2MzMTk1Li43ODk3NGRhNjgxMGU1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMjQwLDcgKzI0MCw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcbiBcdHN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7XHRcdC8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi9cbiBcdHNpZ25lZCBjaGFyXHR0eXBlO1x0XHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXG4gXHR1bnNpZ25lZCBpbnRcdG1heDtcdFx0Lyogc2l6ZSBvZiB0aGlzIHN3YXAgZGV2aWNlICovXG4tXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi9cbitcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDBhM2EzYjIyMThjNzcuLjA1ZDM0MDgzOTZmOTggMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMzcwLDggKzM3MCw2IEBAIHN0YXRpYyB2b2lkIGRpc2NhcmRfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBMQVRFTkNZX0xJTUlUXHRcdDI1NlxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBjbHVzdGVyX2lzX2VtcHR5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaW5mbylcbiB7XG4gXHRyZXR1cm4gaW5mby1cdTAwM2Vjb3VudCA9PSAwO1xuQEAgLTI3ODcsNyArMjc4NSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4ge1xuLVx0dW5zaWduZWQgaW50IGk7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuK1x0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XG4rXHR1bnNpZ25lZCBpbnQgY2lfb2ZmO1xuIFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XG4gXG4gXHQvKlxuQEAgLTI3OTYsMTkgKzI3OTYsMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuIFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gcHJldiArIDE7IGkgXHUwMDNjIHNpLVx1MDAzZW1heDsgaSsrKSB7XG4tXHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXG4tXHRcdFx0XHRcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcbi1cdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxuK1x0aSA9IHByZXYgKyAxO1xuK1x0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuK1x0XHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XG4rXHRcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXG4rXHRcdFx0ICAgIEFMSUdOX0RPV04oaSwgU1dBUEZJTEVfQ0xVU1RFUikgKyBTV0FQRklMRV9DTFVTVEVSLFxuK1x0XHRcdCAgICBzaS1cdTAwM2VtYXgpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS5cbitcdFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXG4rXHRcdCAqIGNhY2hlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGhlcmUgZm9yIHRyeV90b191bnVzZSgpIHRvIGFjdCBvbi5cbitcdFx0ICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktXHUwMDNlbG9jayBpc1xuK1x0XHQgKiBlbm91Z2gsIHVubGlrZSBpbiBldmVyeSBvdGhlciBjbHVzdGVyX2lzX2VtcHR5KCkgY2FsbGVyLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFSRUFEX09OQ0UoY2ktXHUwMDNlY291bnQpKSB7XG4rXHRcdFx0aSA9IGVuZDtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdH1cbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFxuLVx0aWYgKGkgPT0gc2ktXHUwMDNlbWF4KVxuLVx0XHRpID0gMDtcbitcdFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XG4rXHRcdGZvciAoOyBpIFx1MDAzYyBlbmQ7IGNpX29mZisrLCBpKyspIHtcbitcdFx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbitcdFx0XHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXHUwMDI2XHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXG4rXHRcdFx0XHRyZXR1cm4gaTtcbitcdFx0fVxuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbiBcbi1cdHJldHVybiBpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MDcuNDU2OTE1NjYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg0ODA1NjM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIGFzc2Vzc2luZyB0aGVpciBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgaW1wYWN0cyB3aXRoaW4gdGhlIHN3YXAgc3Vic3lzdGVtLiBGcm9tIHRoZSBkZXRhaWxzIHByb3ZpZGVkLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHdlJ3JlIGhhbmRsaW5nIHVudXNlZCBzd2FwIGNsdXN0ZXJzIGR1cmluZyBgc3dhcG9mZmAuIFRoZSBjb21tZW50IHVwZGF0ZSBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgIGlzIGxpa2VseSBhIG1pbm9yIGRldGFpbCwgcGVyaGFwcyBqdXN0IGNsYXJpZnlpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGBjbHVzdGVyX2luZm9gIGZpZWxkIHdpdGhpbiBgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3RgLiBJJ2xsIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBjaGFuZ2UgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIGFtYmlndWl0aWVzLlxuXG5UaGUgbWVhdCBvZiB0aGUgd29yayBzZWVtcyB0byBiZSB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgLiBSZW1vdmluZyB0aGF0IGAjZGVmaW5lIExBVEVOQ1lfTElNSVRgIGlzIGludGVyZXN0aW5nLCBhbmQgbGlrZWx5IGluZGljYXRlcyBhIHNoaWZ0IGluIGhvdyB3ZSdyZSBtYW5hZ2luZyB0aGUgdGltaW5nIG9mIHVuc3dhcHBpbmcuIFRoZSBrZXksIHRob3VnaCwgaXMgdGhlIHJld3JpdGUgb2YgYGZpbmRfbmV4dF90b191bnVzZWAuIEl0J3MgY2xlYXJseSBhZG9wdGluZyBhIGNsdXN0ZXItYmFzZWQgaXRlcmF0aW9uIHN0cmF0ZWd5LiBVc2luZyBgIVJFQURfT05DRShjaS1cdTAwM2Vjb3VudClgIHRvIHNraXAgZW1wdHkgY2x1c3RlcnMgaW4gYHRyeV90b191bnVzZWAgaXMgdGhlIGhlYXJ0IG9mIGl0LCBhbmQgaXQgc2VlbXMgdGhpcyB0YXJnZXRzIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBkdXJpbmcgc3dhcG9mZiBvcGVyYXRpb25zLiBCeSBpdGVyYXRpbmcgY2x1c3RlciBieSBjbHVzdGVyLCB0aGUgcGF0Y2ggYXBwZWFycyB0byBvcHRpbWl6ZSBza2lwcGluZyB1bnVzZWQgb3IgdW5uZWVkZWQgc3dhcCBwYWdlcy4gSXQncyB1c2luZyBgQUxJR05fRE9XTmAgYW5kIGBTV0FQRklMRV9DTFVTVEVSYCB0byBwcmVjaXNlbHkgZGVmaW5lIHRoZSBpdGVyYXRpb24gYm91bmRhcmllcy4gVGhpcyBzdWdnZXN0cyBhbiBpbnRlbnRpb24gdG8gYXZvaWQgdW5uZWNlc3NhcnkgZGlzayBJL08uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGFuZCAqaG93Ki4gSSB3aWxsIGRlZmluaXRlbHkgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG1tL3N3YXBmaWxlLmNgIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdsbCB1dGlsaXplIGVpdGhlciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyBgZmluZF9uZXh0X3RvX3VudXNlYCwgdG8gc2VlIGhvdyBpdCdzIGNhbGxlZCBhbmQgd2hhdCBpdCBpbnRlcmFjdHMgd2l0aC4gVGhpcyB3aWxsIGhlbHAgY2xhcmlmeSBpZiB0aGUgbmV3IGNsdXN0ZXItYmFzZWQgYXBwcm9hY2ggaW50cm9kdWNlcyBhbnkgc3VidGxlIGJlaGF2aW9yIGNoYW5nZXMgb3Igb3B0aW1pemF0aW9uLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2Ygc2tpcHBpbmcgdW51c2VkIGNsdXN0ZXJzLCBpbiBwYXJ0aWN1bGFyLCB3aGV0aGVyIHRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2UgaW4gdHlwaWNhbCBzd2FwLW9mZiBzY2VuYXJpb3MsIGFuZCBpZiB0aGUgYXBwcm9hY2ggY291bGQgaW50cm9kdWNlIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjEzLjMwNDk3NTMwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk2NTQwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaW5kX25leHRfdG9fdW51c2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9Mjc1Nz1zdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjc4NC0gKi9cXG5tbS9zd2FwZmlsZS5jOjI3ODU6c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMjc4Ni1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjgzMT1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjg4NC1cXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxubW0vc3dhcGZpbGUuYzoyODg1OlxcdCAgICAgICAoaSA9IGZpbmRfbmV4dF90b191bnVzZShzaSwgaSkpICE9IDApIHtcXG5tbS9zd2FwZmlsZS5jLTI4ODYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjEzLjM1Nzk0OTM3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NTkyMzU5NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYHRyeV90b191bnVzZWAgYW5kIGBmaW5kX25leHRfdG9fdW51c2VgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMsIGB0cnlfdG9fdW51c2VgIGFuZCBgZmluZF9uZXh0X3RvX3VudXNlYCwgYXJlIGludGVyYWN0aW5nLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBhYm91dCA1MCBsaW5lcyBzdXJyb3VuZGluZyBib3RoIG9mIHRoZW0uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHNlZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcywgYW55IGltbWVkaWF0ZSBjYWxsZXJzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGRhdGEgaXMgYmVpbmcgcGFzc2VkIGluIGFuZCBvdXQuIFRoaXMgd2lsbCBob3BlZnVsbHkgYWxsb3cgbWUgdG8gaW5mZXIgdGhlIHB1cnBvc2Ugb2YgdGhlc2UgZnVuY3Rpb25zLiBBcmUgdGhleSByZWxhdGVkPyBJcyBvbmUgY2FsbGluZyB0aGUgb3RoZXIsIG9yIGFyZSB0aGV5IHBlZXJzPyBJcyBgdW51c2VgIGEga2V5IHBhcnQgb2YgdGhlIGRlc2lnbiBvciBtb3JlIG9mIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLiBUaGUgY29udGV4dCB3aWxsIHNob3cgd2hldGhlciB0aGlzIGRlc2lnbiBpcyBhIGdvb2QgaWRlYS4gTG9va2luZyBhdCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCB0aGVtIHdpbGwgZXhwb3NlIGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIG5vIHRpbWUuIFdpdGggdGhpcyBzdXJyb3VuZGluZyBjb2RlLCBJIHNob3VsZCBiZSBhYmxlIHRvIGZvcm0gYSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGNyYWNrIHRoaXMgb3Blbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjIwLjIxNzE4OTAxNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwZmlsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3ODA6XFx0LypcXG4yNzgxOlxcdCAqIFNjYW4gc3dhcCB0YWJsZSBmcm9tIGN1cnJlbnQgcG9zaXRpb24gdG8gbmV4dCBlbnRyeSBzdGlsbCBpbiB1c2UuXFxuMjc4MjpcXHQgKiBSZXR1cm4gMCBpZiB0aGVyZSBhcmUgbm8gaW51c2UgZW50cmllcyBhZnRlciBwcmV2IHRpbGwgZW5kIG9mXFxuMjc4MzpcXHQgKiB0aGUgbWFwLlxcbjI3ODQ6XFx0ICovXFxuMjc4NTpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuMjc4NjpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4yNzg3OlxcdHtcXG4yNzg4OlxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuMjc4OTpcXHRcXHR1bnNpZ25lZCBsb25nIGksIGVuZDtcXG4yNzkwOlxcdFxcdHVuc2lnbmVkIGludCBjaV9vZmY7XFxuMjc5MTpcXHRcXHR1bnNpZ25lZCBsb25nIHN3cF90YjtcXG4yNzkyOlxcdFxcbjI3OTM6XFx0XFx0LypcXG4yNzk0OlxcdFxcdCAqIE5vIG5lZWQgZm9yIHN3YXBfbG9jayBoZXJlOiB3ZSdyZSBqdXN0IGxvb2tpbmdcXG4yNzk1OlxcdFxcdCAqIGZvciB3aGV0aGVyIGFuIGVudHJ5IGlzIGluIHVzZSwgbm90IG1vZGlmeWluZyBpdDsgZmFsc2VcXG4yNzk2OlxcdFxcdCAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXdcXG4yNzk3OlxcdFxcdCAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBhcmVhICh3aGlsZSBob2xkaW5nIHN3YXBfbG9jaykuXFxuMjc5ODpcXHRcXHQgKi9cXG4yNzk5OlxcdFxcdGkgPSBwcmV2ICsgMTtcXG4yODAwOlxcdFxcdHdoaWxlIChpIFxcdTAwM2Mgc2ktXFx1MDAzZW1heCkge1xcbjI4MDE6XFx0XFx0XFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpO1xcbjI4MDI6XFx0XFx0XFx0ZW5kID0gbWluX3QodW5zaWduZWQgbG9uZyxcXG4yODAzOlxcdFxcdFxcdFxcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICsgU1dBUEZJTEVfQ0xVU1RFUixcXG4yODA0OlxcdFxcdFxcdFxcdCAgICBzaS1cXHUwMDNlbWF4KTtcXG4yODA1OlxcdFxcbjI4MDY6XFx0XFx0XFx0LypcXG4yODA3OlxcdFxcdFxcdCAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLlxcbjI4MDg6XFx0XFx0XFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXFxuMjgwOTpcXHRcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxuMjgxMDpcXHRcXHRcXHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cXHUwMDNlbG9jayBpc1xcbjI4MTE6XFx0XFx0XFx0ICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci5cXG4yODEyOlxcdFxcdFxcdCAqL1xcbjI4MTM6XFx0XFx0XFx0aWYgKCFSRUFEX09OQ0UoY2ktXFx1MDAzZWNvdW50KSkge1xcbjI4MTQ6XFx0XFx0XFx0XFx0aSA9IGVuZDtcXG4yODE1OlxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjI4MTY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgxNzpcXHRcXHRcXHR9XFxuMjgxODpcXHRcXG4yODE5OlxcdFxcdFxcdGNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSO1xcbjI4MjA6XFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBlbmQ7IGNpX29mZisrLCBpKyspIHtcXG4yODIxOlxcdFxcdFxcdFxcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbjI4MjI6XFx0XFx0XFx0XFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFxcdTAwMjZcXHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXFxuMjgyMzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gaTtcXG4yODI0OlxcdFxcdFxcdH1cXG4yODI1OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjI4MjY6XFx0XFx0fVxcbjI4Mjc6XFx0XFxuMjgyODpcXHRcXHRyZXR1cm4gMDtcXG4yODI5OlxcdH1cXG4yODMwOlxcdFxcbjI4MzE6XFx0c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuMjgzMjpcXHR7XFxuMjgzMzpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tO1xcbjI4MzQ6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuMjgzNTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwO1xcbjI4MzY6XFx0XFx0aW50IHJldHZhbCA9IDA7XFxuMjgzNzpcXHRcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kgPSBzd2FwX2luZm9bdHlwZV07XFxuMjgzODpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjI4Mzk6XFx0XFx0c3dwX2VudHJ5X3QgZW50cnk7XFxuMjg0MDpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4yODQxOlxcdFxcbjI4NDI6XFx0XFx0aWYgKCFzd2FwX3VzYWdlX2luX3BhZ2VzKHNpKSlcXG4yODQzOlxcdFxcdFxcdGdvdG8gc3VjY2VzcztcXG4yODQ0OlxcdFxcbjI4NDU6XFx0cmV0cnk6XFxuMjg0NjpcXHRcXHRyZXR2YWwgPSBzaG1lbV91bnVzZSh0eXBlKTtcXG4yODQ3OlxcdFxcdGlmIChyZXR2YWwpXFxuMjg0ODpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbjI4NDk6XFx0XFxuMjg1MDpcXHRcXHRwcmV2X21tID0gXFx1MDAyNmluaXRfbW07XFxuMjg1MTpcXHRcXHRtbWdldChwcmV2X21tKTtcXG4yODUyOlxcdFxcbjI4NTM6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZtbWxpc3RfbG9jayk7XFxuMjg1NDpcXHRcXHRwID0gXFx1MDAyNmluaXRfbW0ubW1saXN0O1xcbjI4NTU6XFx0XFx0d2hpbGUgKHN3YXBfdXNhZ2VfaW5fcGFnZXMoc2kpIFxcdTAwMjZcXHUwMDI2XFxuMjg1NjpcXHRcXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxuMjg1NzpcXHRcXHQgICAgICAgKHAgPSBwLVxcdTAwM2VuZXh0KSAhPSBcXHUwMDI2aW5pdF9tbS5tbWxpc3QpIHtcXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0XFx0bW0gPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBtbV9zdHJ1Y3QsIG1tbGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjIwLjIxNzM1OTc3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzkxNTYwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHRyeV90b191bnVzZWAgVXNhZ2UqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgYHRyeV90b191bnVzZWAgZnVuY3Rpb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgKndoZXJlKiBpdCdzIGJlaW5nIGludm9rZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gS25vd2luZyBpdHMgY2FsbCBzaXRlcyBpcyBmdW5kYW1lbnRhbC4gQnkgbWFwcGluZyB0aG9zZSBjYWxscywgSSBjYW4gZGVkdWNlIGl0cyBzY29wZSBvZiBpbmZsdWVuY2UsIHRoZSBzcGVjaWZpYyBjb250ZXh0cyBpdCdzIHVzZWQgaW4sIGFuZCB1bHRpbWF0ZWx5LCBpdHMgcm9sZSBpbiB0aGUgZ3JlYXRlciBhcmNoaXRlY3R1cmUuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBjaGFuZ2VzIHdvdWxkIGxlYWQgdG8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIEkgbmVlZCB0byB0cmVhdCBpdCBsaWtlIGEgdmFyaWFibGUgSeKAmXZlIG5ldmVyIHNlZW4gYmVmb3JlIGFuZCBiZWdpbiBhIGRlZXAgZGl2ZSBpbnRvIGl0cyB1c2FnZS4gVGhlIHNwZWNpZmljIGRldGFpbHMsIHN1Y2ggYXMgaW5wdXRzLCBvdXRwdXRzIGFuZCBhbnkgc2lkZS1lZmZlY3RzLCBjYW4gYWxsIGJlIGRlZHVjZWQgb25jZSBJIGhhdmUgYSBwcmVjaXNlIG1lbnRhbCBpbWFnZSBvZiB0aGUgZW52aXJvbm1lbnQgaXTigJlzIGZvdW5kIGluLiBUaW1lIHRvIHN0YXJ0IHRyYWNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMDAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjIyLjA5NjUxNzc2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTk4MjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fdW51c2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTMxND1zdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTMzNi1cXHQvKlxcbm1tL3N3YXBmaWxlLmM6MTMzNzpcXHQgKiBNYWtlIHN1cmUgdGhhdCB0cnlfdG9fdW51c2UoKSBvYnNlcnZlcyBzaS1cXHUwMDNlaW51c2VfcGFnZXMgcmVhY2hpbmcgMFxcbm1tL3N3YXBmaWxlLmMtMTMzOC1cXHQgKiBvbmx5IGFmdGVyIHRoZSBhYm92ZSBjbGVhbnVwcyBhcmUgZG9uZS5cXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjQ5NT1zdGF0aWMgaW50IHVudXNlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjUwNi1cXHQgKiBJZiB0aGUgZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGUgYnkgb3RoZXJzLCBjb250aW51ZSB0b1xcbm1tL3N3YXBmaWxlLmM6MjUwNzpcXHQgKiB1bnVzZSBvdGhlciBQVEVzLiB0cnlfdG9fdW51c2UgbWF5IHRyeSBhZ2FpbiBpZiB3ZSBtaXNzZWQgdGhpcyBvbmUuXFxubW0vc3dhcGZpbGUuYy0yNTA4LVxcdCAqL1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yNzg1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjgwOC1cXHRcXHQgKiBBIHNsb3QgaXMgdW5jb3VudGVkIG9ubHkgYWZ0ZXIgaXRzIGZvbGlvIGxlZnQgdGhlIHN3YXBcXG5tbS9zd2FwZmlsZS5jOjI4MDk6XFx0XFx0ICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLlxcbm1tL3N3YXBmaWxlLmMtMjgxMC1cXHRcXHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cXHUwMDNlbG9jayBpc1xcbi0tXFxubW0vc3dhcGZpbGUuYy0yODMwLVxcbm1tL3N3YXBmaWxlLmM6MjgzMTpzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG5tbS9zd2FwZmlsZS5jLTI4MzIte1xcbi0tXFxubW0vc3dhcGZpbGUuYy0yOTI1LVxcdC8qXFxubW0vc3dhcGZpbGUuYzoyOTI2OlxcdCAqIE1ha2Ugc3VyZSB0aGF0IGZ1cnRoZXIgY2xlYW51cHMgYWZ0ZXIgdHJ5X3RvX3VudXNlKCkgcmV0dXJucyBoYXBwZW5cXG5tbS9zd2FwZmlsZS5jLTI5MjctXFx0ICogYWZ0ZXIgc3dhcF9yYW5nZV9mcmVlKCkgcmVkdWNlcyBzaS1cXHUwMDNlaW51c2VfcGFnZXMgdG8gMC5cXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjkzMy0vKlxcbm1tL3N3YXBmaWxlLmM6MjkzNDogKiBBZnRlciBhIHN1Y2Nlc3NmdWwgdHJ5X3RvX3VudXNlLCBpZiBubyBzd2FwIGlzIG5vdyBpbiB1c2UsIHdlIGtub3dcXG5tbS9zd2FwZmlsZS5jLTI5MzUtICogd2UgY2FuIGVtcHR5IHRoZSBtbWxpc3QuICBzd2FwX2xvY2sgbXVzdCBiZSBoZWxkIG9uIGVudHJ5IGFuZCBleGl0Llxcbi0tXFxubW0vc3dhcGZpbGUuYz0zMTc3PVNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzIzNy1cXHRzZXRfY3VycmVudF9vb21fb3JpZ2luKCk7XFxubW0vc3dhcGZpbGUuYzozMjM4OlxcdGVyciA9IHRyeV90b191bnVzZShwLVxcdTAwM2V0eXBlKTtcXG5tbS9zd2FwZmlsZS5jLTMyMzktXFx0Y2xlYXJfY3VycmVudF9vb21fb3JpZ2luKCk7XFxuLS1cXG5tbS96c3dhcC5jPTE2Njg9dm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKVxcbi0tXFxubW0venN3YXAuYy0xNjc1LVxcbm1tL3pzd2FwLmM6MTY3NjpcXHQvKiB0cnlfdG9fdW51c2UoKSBpbnZhbGlkYXRlZCBhbGwgdGhlIGVudHJpZXMgYWxyZWFkeSAqL1xcbm1tL3pzd2FwLmMtMTY3Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfenN3YXBfdHJlZXNbdHlwZV07IGkrKylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MjIuMTQ4NTA0ODc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYyOTcyNjgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTd2Fwb2ZmIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFNvLCBgdHJ5X3RvX3VudXNlYCBpcyB0cmlnZ2VyZWQgYnkgYHN5c19zd2Fwb2ZmYCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgdGhlIGtlcm5lbCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC4gIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGhlcmUsIGBtbS9zd2FwZmlsZS5jYCwgc28gYW55dGhpbmcgaGFwcGVuaW5nIGluIHRoZXJlIGlzIGltcG9ydGFudC4gVGhpcyBwYXRjaCBtb2RpZmllcyBgZmluZF9uZXh0X3RvX3VudXNlYCwgYW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhpbiBgdHJ5X3RvX3VudXNlYCBkdXJpbmcgdGhlIGBzeXNfc3dhcG9mZmAgb3BlcmF0aW9uLiBNeSBrZXkgcXVlc3Rpb24gbm93IGlzLCBcIklzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgUUVNVSBhbmQgd2l0aCB0aGUgaGVscCBvZiBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXI/XCIuICBZZXMsIGl0IGxvb2tzIGxpa2UgaXQgaXMuIGBzd2Fwb2ZmYCBpcyBhIGJhc2ljIExpbnV4IHN5c2NhbGwuICBXZSBjYW4gY3JlYXRlIHN3YXAgd2l0aCBgc3dhcG9uYCBhbmQgdGhlbiBkaXNhYmxlIGl0IHdpdGggYHN3YXBvZmZgIOKAkyBzdGFuZGFyZCBzdHVmZi4gU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgZnV6emluZyBgc3dhcG9uYCBhbmQgYHN3YXBvZmZgLCBzbyB3ZSBjYW4gZGVmaW5pdGVseSBnZXQgYXQgaXQuIE5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMsIHNlZSBpZiBhbnl0aGluZyBuZWVkcyB0byBiZSBlbmFibGVkIHRvIHJlYWNoIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjMwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjI0Ljc3ODIzNDI2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2OTcxNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcGZpbGUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Nzc9ZW5kaWZcXG5tbS9NYWtlZmlsZS03OC1cXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDoyNC44MzM5Mzc3MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA1NTExNjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBzd2FwIGlzIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIHJlbGF0ZWQgdG8gYENPTkZJR19TV0FQYC4gVGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2ssIHNvIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgZGVmaW5lZCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIHN3YXAgaW1wbGVtZW50YXRpb24uIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0aGF0IHN5bWJvbCBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY3kgY2hhaW4gbG9va3MgbGlrZSwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgaXQgaW1wYWN0cy4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBhbmQgbW9kaWZ5aW5nIHRoZSBzd2FwIGJlaGF2aW9yLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFuZCBhbnkgYXNzb2NpYXRlZCBoZWxwIHRleHQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5naW5nIHRoaXMgc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc2NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjI3LjIzOTQ1MTgyMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MTkyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVBcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MjcuMjkyMjc3MDIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDYyMjY2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHN3YXAgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIHF1aWNrZXN0IHJvdXRlIHRvIHRoYXQgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGluIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzd2FwIHNwYWNlIG1hbmFnZW1lbnQuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgYFNXQVBgIOKAkyB0aGF0IG1hY3JvIHNob3VsZCBsZWFkIG1lIGRpcmVjdGx5IHRvIHRoZSBoZWFydCBvZiBob3cgaXQncyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgYXJlIGludm9sdmVkLiBUaW1lIHRvIGdvIGRpZyBpbiB0aGVyZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQ2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MjguOTk4NTA2MzA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEwOlxcdFxcdGJvb2xcXG4gIDExOlxcdFxcbiAgMTI6XFx0bWVudWNvbmZpZyBTV0FQXFxuICAxMzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjI4Ljk5ODY2MTU0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMxNDk2NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgcXVpY2sgcnVuZG93biBvZiB3aGF0IEknbSB0aGlua2luZyByaWdodCBub3csIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2UgaW4gdGhpcyBhcmVhOlxuXG4qKkZvY3VzaW5nIG9uIHRoZSBTd2Fwb2ZmIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgSSdtIHRyeWluZyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIG9mIHRoZSBzd2Fwb2ZmIGZ1bmN0aW9uYWxpdHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSB0aGUgbW9zdCByZWxldmFudCBzeW1ib2xzIHRvIGFuYWx5emUuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYGZpbmRfbmV4dF90b191bnVzZWAsIGB0cnlfdG9fdW51c2VgLCBvciBhcmUgd2UgbG9va2luZyBkZWVwZXIgaW50byB0aGUgc3lzY2FsbCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgd2l0aCBmdW5jdGlvbnMgbGlrZSBgX19kb19zeXNfc3dhcG9mZmAsIGBrc3lzX3N3YXBvZmZgLCBvciBzaW1wbHkgYHN5c19zd2Fwb2ZmYD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoaWNoIG9mIHRoZXNlIHdpbGwgcHJvdmlkZSB0aGUgY3JpdGljYWwgcGF0aCBmb3Igd2hhdCBJJ20gaW52ZXN0aWdhdGluZy4gVG8gY29uZmlybSB0aGUgc3lzY2FsbCdzIGVudHJ5IHBvaW50LCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9zd2FwZmlsZS5jYCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb24gbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGBzd2Fwb2ZmYCBzeXNjYWxsLiBUaGF0IGZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGtlcm5lbC1sZXZlbCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MzEuMjMwMTYxNDcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjc3NjI4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qc3dhcG9mZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0zMTU5PXN0YXRpYyB2b2lkIGZsdXNoX3BlcmNwdV9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0zMTc2LVxcbm1tL3N3YXBmaWxlLmM6MzE3NzpTWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUpXFxubW0vc3dhcGZpbGUuYy0zMTc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MzEuMjgyOTQzODgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3MjE2Njk0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogYGZpbmRfbmV4dF90b191bnVzZWAgaW4gYG1tL3N3YXBmaWxlLmNgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgZmluZF9uZXh0X3RvX3VudXNlYCwgYSBzdGF0aWMgZnVuY3Rpb24gYnVyaWVkIHdpdGhpbiBgbW0vc3dhcGZpbGUuY2AsIGlzIHdvcnRoIGZ1enppbmcuIEkndmUgY29uZmlybWVkIHRoYXQgYGZpbmRfbmV4dF90b191bnVzZWAgYW5kIGl0cyBjYWxsZXIsIGB0cnlfdG9fdW51c2VgLCBhcmUgYm90aCBzdGF0aWMsIGJ1dCB0aGF0IHRoZXkgZG8gaGF2ZSBzeW1ib2xzLCBldmVuIHRob3VnaCB0aGV5J3JlIHN0YXRpYy4gVGhpcyBtZWFucyB0aGV5IGFyZSBhY2Nlc3NpYmxlIGZvciBhbmFseXNpcyBhbmQgY292ZXJhZ2UuXG5cblNwZWNpZmljYWxseSwgSSdtIGtleWluZyBpbiBvbiBhIG1vZGlmaWNhdGlvbiB0byBgZmluZF9uZXh0X3RvX3VudXNlYC4gVGhlIHBhdGNoIGFsdGVycyBpdHMgc2NhbiBhbGdvcml0aG0uIEl0IG5vdyBza2lwcyBlbXB0eSBjbHVzdGVycyB3aGVuIGl0ZXJhdGluZyBzd2FwIHNwYWNlLCBiYXNlZCBvbiBgUkVBRF9PTkNFKGNpLVx1MDAzZWNvdW50KWAsIHdoaWNoIGlzIGEgY2xlYXIgb3B0aW1pemF0aW9uLiBDcnVjaWFsbHksIEkndmUgdmVyaWZpZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWNoZWQgZHVyaW5nIHRoZSBgc3dhcG9mZmAgc3lzdGVtIGNhbGwgdmlhIGBfX2RvX3N5c19zd2Fwb2ZmYCBhbmQgYGtzeXNfc3dhcG9mZmAuIFRoaXMgcHJvdmlkZXMgYSBjbGVhciwgcmVhY2hhYmxlIHBhdGggZnJvbSB1c2Vyc3BhY2UuXG5cblRoZSBwb3NpdGl2ZSBjcml0ZXJpYSBhcmUgc29saWQ6IFdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCB3aXRoaW4gdGhlIGBtbS9gIHN1YnN5c3RlbSwgYW5kIHRoZSBtb2RpZmljYXRpb24gZGlyZWN0bHkgYWZmZWN0cyB0aGUgY29yZSBsb2dpYyBvZiBgZmluZF9uZXh0X3RvX3VudXNlYC4gVGhlIHJlYWNoYWJpbGl0eSB0aHJvdWdoIHRoZSBgc3dhcG9mZmAgc3lzY2FsbCBpcyB0aGUgaWNpbmcgb24gdGhlIGNha2UuXG5cbkkndmUgYWxzbyBjaGVja2VkIHRoZSByZWxldmFudCBjb25maWcsIGBDT05GSUdfU1dBUGAsIHdoaWNoIGlzLCBhcyBleHBlY3RlZCwgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHg4Ni9hbWQ2NCBpZiBNTVUgYW5kIEJMT0NLIGFyZSBlbmFibGVkLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlIGBmaW5kX25leHRfdG9fdW51c2VgIGFuZCBgdHJ5X3RvX3VudXNlYC5cblxuSW4gc2hvcnQsIHRoZSBwYXRjaCBvcHRpbWl6ZXMgYGZpbmRfbmV4dF90b191bnVzZWAgd2l0aGluIGBtbS9zd2FwZmlsZS5jYCBieSBza2lwcGluZyBlbXB0eSBjbHVzdGVycyBkdXJpbmcgc3dhcCBzcGFjZSBpdGVyYXRpb24sIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQsIHRpbWUgdG8gZmluYWxpemUgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk4NywiT3V0cHV0VG9rZW5zIjoxMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MzguMDA0NjIxNzY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMwNjQ5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaW5kX25leHRfdG9fdW51c2VcIixcbiAgICBcInRyeV90b191bnVzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHVzdGVyIHNjYW5uaW5nIGFsZ29yaXRobSBpbiBmaW5kX25leHRfdG9fdW51c2UoKSB3aXRoaW4gbW0vc3dhcGZpbGUuYywgb3B0aW1pemluZyBzd2FwIHNsb3Qgc2VhcmNoIGJ5IHNraXBwaW5nIGVtcHR5IGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgc3dhcG9mZiBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaW5kX25leHRfdG9fdW51c2VcIixcbiAgICBcInRyeV90b191bnVzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHVzdGVyIHNjYW5uaW5nIGFsZ29yaXRobSBpbiBmaW5kX25leHRfdG9fdW51c2UoKSB3aXRoaW4gbW0vc3dhcGZpbGUuYywgb3B0aW1pemluZyBzd2FwIHNsb3Qgc2VhcmNoIGJ5IHNraXBwaW5nIGVtcHR5IGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgc3dhcG9mZiBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDozOC4wODc2OTYxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNzMyMDM2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDozOC4wODgzNDIzNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMjcyNTUyNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZmluZF9uZXh0X3RvX3VudXNlKClgIGluIGBtbS9zd2FwZmlsZS5jYCB0byBvcHRpbWl6ZSB0aGUgc2VhcmNoIGZvciBpbi11c2Ugc3dhcCBlbnRyaWVzIGJ5IHNraXBwaW5nIGVtcHR5IHN3YXAgY2x1c3RlcnMgZHVyaW5nIHN3YXBvZmYuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBjaWAsIGBpYCwgYGVuZGAsIGBjaV9vZmZgLCBgc3dwX3RiYCkgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IGJlZm9yZSBhY2Nlc3MsIGFuZCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIGtlcm5lbC1pbml0aWFsaXplZCBzd2FwIGRhdGEgc3RydWN0dXJlcyAoYHN3YXBfaW5mb19zdHJ1Y3RgLCBgc3dhcF9jbHVzdGVyX2luZm9gKS4gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhY2Nlc3NlcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS9wYWRkaW5nIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGluZGV4aW5nIG9yIG9mZi1ieS1vbmUgYm91bmRhcnkgaXNzdWVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGM4NmRkYjA4ZDljYjFhZDYyOWIyZjgxMDBjNzQzODkzNDc1NDNlOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTc6MDQ6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4MDMyYTBmM2MzMTk1Li43ODk3NGRhNjgxMGU1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMjQwLDcgKzI0MCw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcbiBcdHN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7XHRcdC8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi9cbiBcdHNpZ25lZCBjaGFyXHR0eXBlO1x0XHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXG4gXHR1bnNpZ25lZCBpbnRcdG1heDtcdFx0Lyogc2l6ZSBvZiB0aGlzIHN3YXAgZGV2aWNlICovXG4tXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi9cbitcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDBhM2EzYjIyMThjNzcuLjA1ZDM0MDgzOTZmOTggMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMzcwLDggKzM3MCw2IEBAIHN0YXRpYyB2b2lkIGRpc2NhcmRfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBMQVRFTkNZX0xJTUlUXHRcdDI1NlxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBjbHVzdGVyX2lzX2VtcHR5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaW5mbylcbiB7XG4gXHRyZXR1cm4gaW5mby1cdTAwM2Vjb3VudCA9PSAwO1xuQEAgLTI3ODcsNyArMjc4NSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4ge1xuLVx0dW5zaWduZWQgaW50IGk7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuK1x0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XG4rXHR1bnNpZ25lZCBpbnQgY2lfb2ZmO1xuIFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XG4gXG4gXHQvKlxuQEAgLTI3OTYsMTkgKzI3OTYsMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuIFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gcHJldiArIDE7IGkgXHUwMDNjIHNpLVx1MDAzZW1heDsgaSsrKSB7XG4tXHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXG4tXHRcdFx0XHRcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcbi1cdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxuK1x0aSA9IHByZXYgKyAxO1xuK1x0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuK1x0XHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XG4rXHRcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXG4rXHRcdFx0ICAgIEFMSUdOX0RPV04oaSwgU1dBUEZJTEVfQ0xVU1RFUikgKyBTV0FQRklMRV9DTFVTVEVSLFxuK1x0XHRcdCAgICBzaS1cdTAwM2VtYXgpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS5cbitcdFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXG4rXHRcdCAqIGNhY2hlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGhlcmUgZm9yIHRyeV90b191bnVzZSgpIHRvIGFjdCBvbi5cbitcdFx0ICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktXHUwMDNlbG9jayBpc1xuK1x0XHQgKiBlbm91Z2gsIHVubGlrZSBpbiBldmVyeSBvdGhlciBjbHVzdGVyX2lzX2VtcHR5KCkgY2FsbGVyLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFSRUFEX09OQ0UoY2ktXHUwMDNlY291bnQpKSB7XG4rXHRcdFx0aSA9IGVuZDtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdH1cbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFxuLVx0aWYgKGkgPT0gc2ktXHUwMDNlbWF4KVxuLVx0XHRpID0gMDtcbitcdFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XG4rXHRcdGZvciAoOyBpIFx1MDAzYyBlbmQ7IGNpX29mZisrLCBpKyspIHtcbitcdFx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbitcdFx0XHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXHUwMDI2XHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXG4rXHRcdFx0XHRyZXR1cm4gaTtcbitcdFx0fVxuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbiBcbi1cdHJldHVybiBpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6MzguMDg4MzQ0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0NDM1NTI0ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgYG1tL3N3YXBmaWxlLmNgIHBhdGNoIHdhcnJhbnRzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB0cmVhdCB0aGlzIGFzIGEgc3RhbmRhcmQgZGVmZW5zaXZlIHNlY3VyaXR5IGFuYWx5c2lzLCBha2luIHRvIFFBIGluIHNvZnR3YXJlIGVuZ2luZWVyaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG9idmlvdXMgc2FmZXR5IG9yIGhhcm0gaXNzdWVzLiBJIHNlZSB0aGUgcG90ZW50aWFsIHNldmVyaXR5IGlzIGxpa2VseSBiZW5pZ24gb3Igbm9uLWV4aXN0ZW50IGhlcmUuXG5cbkZpcnN0LCBsZXQncyB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2ggZG9lcy4gVGhlIGRpZmYgdGVsbHMgbWUgdGhlcmUncyBhIGNvbW1lbnQgdXBkYXRlIGluIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAgZm9yIGBjbHVzdGVyX2luZm9gLiBUaGF04oCZcyB0cml2aWFsLiBUaGVuLCBpbiBgbW0vc3dhcGZpbGUuY2AsIHRoZSBwYXRjaCByZW1vdmVzIGEgYCNkZWZpbmUgTEFURU5DWV9MSU1JVCAyNTZgLCB3aGljaCBpcyBhbHNvIG5vdCBpbW1lZGlhdGVseSBjb25jZXJuaW5nLlxuXG5UaGUgbWVhdCBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW4gYGZpbmRfbmV4dF90b191bnVzZWAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgb3B0aW1pemluZyB0aGUgc2NhbiBsb2dpYyBkdXJpbmcgc3dhcG9mZi91bnVzZSBvcGVyYXRpb25zLiBJbnN0ZWFkIG9mIGNoZWNraW5nIGVhY2ggc2xvdCBhbmQgZG9pbmcgYSBjbHVzdGVyIGxvb2t1cCByZXBlYXRlZGx5LCBpdCBub3cgZmV0Y2hlcyBgY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpYCwgY2hlY2tzIGBjaS1cdTAwM2Vjb3VudGAsIGFuZCB0aGVuIGl0ZXJhdGVzIHdpdGhpbiB0aGUgY2x1c3RlciB1cCB0byBgZW5kYC4gSXQncyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgd2hpY2ggKmNvdWxkKiBpbnRyb2R1Y2UgYSBzdWJ0bGUgYnVnLlxuXG5UbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSdsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gV2hpbGUgSSBkb24ndCBzZWUgYW55IHJlZCBmbGFncyByaWdodCBhd2F5LCBJIHdpbGwgaGF2ZSB0byBkaWcgaW4gYSBiaXQgZnVydGhlciB0byBzZWUgaWYgSSBuZWVkIHRvIHJlY29tbWVuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6NTIuNTIzODcyOTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzM3NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfbmV4dF90b191bnVzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9Mjc1Nz1zdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjc4NC0gKi9cXG5tbS9zd2FwZmlsZS5jOjI3ODU6c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMjc4Ni1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjgzMT1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjg4NC1cXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxubW0vc3dhcGZpbGUuYzoyODg1OlxcdCAgICAgICAoaSA9IGZpbmRfbmV4dF90b191bnVzZShzaSwgaSkpICE9IDApIHtcXG5tbS9zd2FwZmlsZS5jLTI4ODYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjA0OjUyLjU3NDYxODkyOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQ1ODg1MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgU3dhcGZpbGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0vc3dhcGZpbGUuY2AgZmlsZS4gSSdtIGZvY3VzaW5nIG9uIGxpbmVzIDI3ODAgdGhyb3VnaCAyODkwLiBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhhdCBzcGVjaWZpYyBzZWN0aW9uLiBUaGlzIGxpa2VseSBob2xkcyBzb21lIGtleSBsb2dpYywgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZGV0YWlscyBvZiBwYWdlIHN3YXBwaW5nLiBJJ20gZ3Vlc3NpbmcgaXQgY291bGQgYmUgYWJvdXQgbWFuYWdpbmcgc3dhcCBzcGFjZSBhbGxvY2F0aW9uLCBoYW5kbGluZyBwYWdlIEkvTyB0byBhbmQgZnJvbSBkaXNrLCBvciBwZXJoYXBzIGRlYWxpbmcgd2l0aCB0aGUgc3dhcCBjYWNoZS4gS25vd2luZyB0aGUgZXhhY3QgbGluZSBudW1iZXJzIGlzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBuYXJyb3dpbmcgZG93biB0aGUgYXJlYSBvZiBpbnRlcmVzdCBhbmQgYXZvaWRpbmcgc3BlbmRpbmcgdGltZSByZXZpZXdpbmcgY29kZSB1bm5lY2Vzc2FyaWx5LiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDQ6NTQuMzIwNTA2MzU0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwZmlsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzgwOlxcdC8qXFxuMjc4MTpcXHQgKiBTY2FuIHN3YXAgdGFibGUgZnJvbSBjdXJyZW50IHBvc2l0aW9uIHRvIG5leHQgZW50cnkgc3RpbGwgaW4gdXNlLlxcbjI3ODI6XFx0ICogUmV0dXJuIDAgaWYgdGhlcmUgYXJlIG5vIGludXNlIGVudHJpZXMgYWZ0ZXIgcHJldiB0aWxsIGVuZCBvZlxcbjI3ODM6XFx0ICogdGhlIG1hcC5cXG4yNzg0OlxcdCAqL1xcbjI3ODU6XFx0c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbjI3ODY6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHByZXYpXFxuMjc4NzpcXHR7XFxuMjc4ODpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbjI3ODk6XFx0XFx0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XFxuMjc5MDpcXHRcXHR1bnNpZ25lZCBpbnQgY2lfb2ZmO1xcbjI3OTE6XFx0XFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XFxuMjc5MjpcXHRcXG4yNzkzOlxcdFxcdC8qXFxuMjc5NDpcXHRcXHQgKiBObyBuZWVkIGZvciBzd2FwX2xvY2sgaGVyZTogd2UncmUganVzdCBsb29raW5nXFxuMjc5NTpcXHRcXHQgKiBmb3Igd2hldGhlciBhbiBlbnRyeSBpcyBpbiB1c2UsIG5vdCBtb2RpZnlpbmcgaXQ7IGZhbHNlXFxuMjc5NjpcXHRcXHQgKiBoaXRzIGFyZSBva2F5LCBhbmQgc3lzX3N3YXBvZmYoKSBoYXMgYWxyZWFkeSBwcmV2ZW50ZWQgbmV3XFxuMjc5NzpcXHRcXHQgKiBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgYXJlYSAod2hpbGUgaG9sZGluZyBzd2FwX2xvY2spLlxcbjI3OTg6XFx0XFx0ICovXFxuMjc5OTpcXHRcXHRpID0gcHJldiArIDE7XFxuMjgwMDpcXHRcXHR3aGlsZSAoaSBcXHUwMDNjIHNpLVxcdTAwM2VtYXgpIHtcXG4yODAxOlxcdFxcdFxcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKTtcXG4yODAyOlxcdFxcdFxcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXFxuMjgwMzpcXHRcXHRcXHRcXHQgICAgQUxJR05fRE9XTihpLCBTV0FQRklMRV9DTFVTVEVSKSArIFNXQVBGSUxFX0NMVVNURVIsXFxuMjgwNDpcXHRcXHRcXHRcXHQgICAgc2ktXFx1MDAzZW1heCk7XFxuMjgwNTpcXHRcXG4yODA2OlxcdFxcdFxcdC8qXFxuMjgwNzpcXHRcXHRcXHQgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS5cXG4yODA4OlxcdFxcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbjI4MDk6XFx0XFx0XFx0ICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLlxcbjI4MTA6XFx0XFx0XFx0ICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktXFx1MDAzZWxvY2sgaXNcXG4yODExOlxcdFxcdFxcdCAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuXFxuMjgxMjpcXHRcXHRcXHQgKi9cXG4yODEzOlxcdFxcdFxcdGlmICghUkVBRF9PTkNFKGNpLVxcdTAwM2Vjb3VudCkpIHtcXG4yODE0OlxcdFxcdFxcdFxcdGkgPSBlbmQ7XFxuMjgxNTpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yODE2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI4MTc6XFx0XFx0XFx0fVxcbjI4MTg6XFx0XFxuMjgxOTpcXHRcXHRcXHRjaV9vZmYgPSBpICUgU1dBUEZJTEVfQ0xVU1RFUjtcXG4yODIwOlxcdFxcdFxcdGZvciAoOyBpIFxcdTAwM2MgZW5kOyBjaV9vZmYrKywgaSsrKSB7XFxuMjgyMTpcXHRcXHRcXHRcXHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcXG4yODIyOlxcdFxcdFxcdFxcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcXHUwMDI2XFx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxcbjI4MjM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuMjgyNDpcXHRcXHRcXHR9XFxuMjgyNTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yODI2OlxcdFxcdH1cXG4yODI3OlxcdFxcbjI4Mjg6XFx0XFx0cmV0dXJuIDA7XFxuMjgyOTpcXHR9XFxuMjgzMDpcXHRcXG4yODMxOlxcdHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbjI4MzI6XFx0e1xcbjI4MzM6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbTtcXG4yODM0OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbjI4MzU6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcDtcXG4yODM2OlxcdFxcdGludCByZXR2YWwgPSAwO1xcbjI4Mzc6XFx0XFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpID0gc3dhcF9pbmZvW3R5cGVdO1xcbjI4Mzg6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yODM5OlxcdFxcdHN3cF9lbnRyeV90IGVudHJ5O1xcbjI4NDA6XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuMjg0MTpcXHRcXG4yODQyOlxcdFxcdGlmICghc3dhcF91c2FnZV9pbl9wYWdlcyhzaSkpXFxuMjg0MzpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3M7XFxuMjg0NDpcXHRcXG4yODQ1OlxcdHJldHJ5OlxcbjI4NDY6XFx0XFx0cmV0dmFsID0gc2htZW1fdW51c2UodHlwZSk7XFxuMjg0NzpcXHRcXHRpZiAocmV0dmFsKVxcbjI4NDg6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4yODQ5OlxcdFxcbjI4NTA6XFx0XFx0cHJldl9tbSA9IFxcdTAwMjZpbml0X21tO1xcbjI4NTE6XFx0XFx0bW1nZXQocHJldl9tbSk7XFxuMjg1MjpcXHRcXG4yODUzOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bW1saXN0X2xvY2spO1xcbjI4NTQ6XFx0XFx0cCA9IFxcdTAwMjZpbml0X21tLm1tbGlzdDtcXG4yODU1OlxcdFxcdHdoaWxlIChzd2FwX3VzYWdlX2luX3BhZ2VzKHNpKSBcXHUwMDI2XFx1MDAyNlxcbjI4NTY6XFx0XFx0ICAgICAgICFzaWduYWxfcGVuZGluZyhjdXJyZW50KSBcXHUwMDI2XFx1MDAyNlxcbjI4NTc6XFx0XFx0ICAgICAgIChwID0gcC1cXHUwMDNlbmV4dCkgIT0gXFx1MDAyNmluaXRfbW0ubW1saXN0KSB7XFxuMjg1ODpcXHRcXG4yODU5OlxcdFxcdFxcdG1tID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbW1fc3RydWN0LCBtbWxpc3QpO1xcbjI4NjA6XFx0XFx0XFx0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXFxuMjg2MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODYyOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtbWxpc3RfbG9jayk7XFxuMjg2MzpcXHRcXHRcXHRtbXB1dChwcmV2X21tKTtcXG4yODY0OlxcdFxcdFxcdHByZXZfbW0gPSBtbTtcXG4yODY1OlxcdFxcdFxcdHJldHZhbCA9IHVudXNlX21tKG1tLCB0eXBlKTtcXG4yODY2OlxcdFxcdFxcdGlmIChyZXR2YWwpIHtcXG4yODY3OlxcdFxcdFxcdFxcdG1tcHV0KHByZXZfbW0pO1xcbjI4Njg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4yODY5OlxcdFxcdFxcdH1cXG4yODcwOlxcdFxcbjI4NzE6XFx0XFx0XFx0LypcXG4yODcyOlxcdFxcdFxcdCAqIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZW4ndCBjb21wbGV0ZWx5IGtpbGxpbmdcXG4yODczOlxcdFxcdFxcdCAqIGludGVyYWN0aXZlIHBlcmZvcm1hbmNlLlxcbjI4NzQ6XFx0XFx0XFx0ICovXFxuMjg3NTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yODc2OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bW1saXN0X2xvY2spO1xcbjI4Nzc6XFx0XFx0fVxcbjI4Nzg6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1tbGlzdF9sb2NrKTtcXG4yODc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzowNDo1NC4zMjA3MDM4MDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA0MDE2NzYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXBmaWxlIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2luZyBvbiBvcHRpbWl6aW5nIHRoZSBgZmluZF9uZXh0X3RvX3VudXNlYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdG8gYmUgaW1wcm92aW5nIHRoZSBlZmZpY2llbmN5IG9mIGxvY2F0aW5nIHRoZSBuZXh0IGluLXVzZSBzd2FwIGVudHJ5IHdpdGhpbiB0aGUgc3dhcCBzcGFjZSBzdHJ1Y3R1cmUgYHNpYC5cblxuVGhlIGNvcmUgb2YgdGhlIG9wdGltaXphdGlvbiBjZW50ZXJzIGFyb3VuZCBjbHVzdGVyLWxldmVsIHRyYWNraW5nLiBgZmluZF9uZXh0X3RvX3VudXNlYCBpcyB1c2luZyBgX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKWAuIFRoZSBsb2dpYyBvcHRpbWl6ZXMgc2tpcHBpbmcgZW50aXJlIGNsdXN0ZXJzIGlmIHRoZSBjbHVzdGVyJ3MgY291bnQgKGBjaS1cdTAwM2Vjb3VudGApIGlzIHplcm8sIGltcHJvdmluZyBwZXJmb3JtYW5jZS4gT3RoZXJ3aXNlLCBpdCBlZmZpY2llbnRseSBzY2FucyBpbmRpdmlkdWFsIHN3YXAgdGFibGUgZW50cmllcyB3aXRoaW4gdGhhdCBjbHVzdGVyLiBJdCByZXR1cm5zIHRoZSBpbmRleCBgaWAgb2YgdGhlIG5leHQgZW50cnkgb3IgYDBgIGlmIG5vbmUgYXJlIGZvdW5kLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlPyBJJ3ZlIGdvdCB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhpcy5cblxuRmlyc3QsIGlzIHRoaXMgcmVsYXRlZCB0byBrZXJuZWwgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2U/IE5vLCB0aGlzIGlzIGFsbCBpbnRlcm5hbCBzd2FwZmlsZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZHVyaW5nIGB0cnlfdG9fdW51c2VgLiBUaGF0J3MgZ29vZC5cblxuTmV4dCwgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBMb29raW5nIGF0IHRoZSBjb2RlLCBhbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBsaWtlIGBpYCwgYGVuZGAsIGBjaWAsIGFuZCBvdGhlcnMsIGJlZm9yZSBiZWluZyB1c2VkLiBWYXJpYWJsZXMgbGlrZSBgaSA9IHByZXYgKyAxOyBjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlciguLi4pYC5cblxuQXJlIHRoZXJlIG5ldyBhbGxvY2F0aW9ucyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOby4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb24gY2hhbmdlcyB3aXRoaW4gdGhpcyBwYXRjaC5cblxuRmluYWxseSwgd2hhdCBhYm91dCBib3VuZHMgY2hlY2tzPyBEb2VzIGl0IGRvIGFueXRoaW5nIHRoYXQgbWlnaHQgYWxsb3cgc3Vycm91bmRpbmcgY29kZSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8gTm8sIHRoaXMgaXRlcmF0ZXMgdXAgdG8gYHNpLVx1MDAzZW1heGAsIHJlYWRpbmcgZXhpc3Rpbmcgc3dhcCB0YWJsZSBjbHVzdGVycyBhbmQgZW50cmllcy4gQW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIGhlcmUgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5JJ3ZlIGdvdCB0byBjb25zaWRlciBLQVNBTiB2cyBLTVNBTi4gS0FTQU4gY2F0Y2hlcyB0aGluZ3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgYW5kIEtNU0FOIHdvdWxkIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBCdXQgSSBkb24ndCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSByZWFkL2xlYWsgcmlza3MuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS5cblxuU28sIGFmdGVyIGEgZmluYWwgY2hlY2sgb2YgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCByZWFzb25pbmcsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTjogZmFsc2VgLiBUaGUgbG9naWMgaXMgc291bmQsIGFuZCB0aGVyZSBhcmUgbm8gYXBwYXJlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGdldCB0aGF0IHRvb2wgZ29pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzEsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MDU6MDEuMzYwODc0NDY3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZmluZF9uZXh0X3RvX3VudXNlKClgIGluIGBtbS9zd2FwZmlsZS5jYCB0byBvcHRpbWl6ZSB0aGUgc2VhcmNoIGZvciBpbi11c2Ugc3dhcCBlbnRyaWVzIGJ5IHNraXBwaW5nIGVtcHR5IHN3YXAgY2x1c3RlcnMgZHVyaW5nIHN3YXBvZmYuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBjaWAsIGBpYCwgYGVuZGAsIGBjaV9vZmZgLCBgc3dwX3RiYCkgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IGJlZm9yZSBhY2Nlc3MsIGFuZCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIGtlcm5lbC1pbml0aWFsaXplZCBzd2FwIGRhdGEgc3RydWN0dXJlcyAoYHN3YXBfaW5mb19zdHJ1Y3RgLCBgc3dhcF9jbHVzdGVyX2luZm9gKS4gTm8ga2VybmVsLXRvLXVzZXIgY29waWVzLCBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhY2Nlc3NlcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS9wYWRkaW5nIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbnkgcG90ZW50aWFsIGluZGV4aW5nIG9yIG9mZi1ieS1vbmUgYm91bmRhcnkgaXNzdWVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbmRfbmV4dF90b191bnVzZSgpYCBpbiBgbW0vc3dhcGZpbGUuY2AgdG8gb3B0aW1pemUgdGhlIHNlYXJjaCBmb3IgaW4tdXNlIHN3YXAgZW50cmllcyBieSBza2lwcGluZyBlbXB0eSBzd2FwIGNsdXN0ZXJzIGR1cmluZyBzd2Fwb2ZmLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgY2lgLCBgaWAsIGBlbmRgLCBgY2lfb2ZmYCwgYHN3cF90YmApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSBiZWZvcmUgYWNjZXNzLCBhbmQgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCBrZXJuZWwtaW5pdGlhbGl6ZWQgc3dhcCBkYXRhIHN0cnVjdHVyZXMgKGBzd2FwX2luZm9fc3RydWN0YCwgYHN3YXBfY2x1c3Rlcl9pbmZvYCkuIE5vIGtlcm5lbC10by11c2VyIGNvcGllcywgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWNjZXNzZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkvcGFkZGluZyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQW55IHBvdGVudGlhbCBpbmRleGluZyBvciBvZmYtYnktb25lIGJvdW5kYXJ5IGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowm5lng[1] Phase: Succeeded StartedAt: 2026-09-09 17:05:12 +0000 UTC FinishedAt: 2026-09-09 17:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 17:05:12 +0000 UTC FinishedAt: 2026-09-09 17:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2] Phase: Succeeded StartedAt: 2026-09-09 17:05:12 +0000 UTC FinishedAt: 2026-09-09 20:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 17:05:12 +0000 UTC FinishedAt: 2026-09-09 20:55:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 17:05:12 +0000 UTC FinishedAt: 2026-09-09 17:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 17:05:12 +0000 UTC FinishedAt: 2026-09-09 17:05:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm5lng/series-workflowm5lng-convert-artifact-625362011/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 17:05:22 +0000 UTC FinishedAt: 2026-09-09 17:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 17:05:22 +0000 UTC FinishedAt: 2026-09-09 17:26:40 +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:*a77da226-98aa-413b-b869-e9f9549c9031,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-workflowm5lng/series-workflowm5lng-convert-artifact-625362011/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": "2e269bd8-56e5-447d-b202-0f9686091f24", "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-workflowm5lng/series-workflowm5lng-build-action-1798177177/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 17:05:22 +0000 UTC FinishedAt: 2026-09-09 17:26:30 +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:*a77da226-98aa-413b-b869-e9f9549c9031,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-workflowm5lng/series-workflowm5lng-convert-artifact-625362011/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": "2e269bd8-56e5-447d-b202-0f9686091f24", "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-workflowm5lng/series-workflowm5lng-build-action-1798177177/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 17:26:40 +0000 UTC FinishedAt: 2026-09-09 17:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 17:26:40 +0000 UTC FinishedAt: 2026-09-09 17:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 17:26:40 +0000 UTC FinishedAt: 2026-09-09 17:26:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 17:26:40 +0000 UTC FinishedAt: 2026-09-09 17:26:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm5lng/series-workflowm5lng-convert-artifact-1601203378/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 17:26:50 +0000 UTC FinishedAt: 2026-09-09 17:28:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 17:26:50 +0000 UTC FinishedAt: 2026-09-09 17:28:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2e269bd8-56e5-447d-b202-0f9686091f24,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-workflowm5lng/series-workflowm5lng-build-action-1798177177/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-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 17:28:38 +0000 UTC FinishedAt: 2026-09-09 17:28:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 17:28:38 +0000 UTC FinishedAt: 2026-09-09 17:28:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 17:28:38 +0000 UTC FinishedAt: 2026-09-09 17:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 17:28:38 +0000 UTC FinishedAt: 2026-09-09 17:51:32 +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:*a77da226-98aa-413b-b869-e9f9549c9031,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-workflowm5lng/series-workflowm5lng-convert-artifact-1601203378/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": "c2980788-c976-45b9-8efd-c999d3074d72", "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-workflowm5lng/series-workflowm5lng-build-action-2242731590/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 17:28:38 +0000 UTC FinishedAt: 2026-09-09 17:51:22 +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:*a77da226-98aa-413b-b869-e9f9549c9031,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-workflowm5lng/series-workflowm5lng-convert-artifact-1601203378/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": "c2980788-c976-45b9-8efd-c999d3074d72", "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-workflowm5lng/series-workflowm5lng-build-action-2242731590/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 17:51:32 +0000 UTC FinishedAt: 2026-09-09 17:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 17:51:32 +0000 UTC FinishedAt: 2026-09-09 17:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 17:51:32 +0000 UTC FinishedAt: 2026-09-09 17:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 17:51:32 +0000 UTC FinishedAt: 2026-09-09 17:53:37 +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:*c2980788-c976-45b9-8efd-c999d3074d72,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-workflowm5lng/series-workflowm5lng-build-action-2242731590/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-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 17:53:46 +0000 UTC FinishedAt: 2026-09-09 20:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 17:53:46 +0000 UTC FinishedAt: 2026-09-09 20:55:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*2e269bd8-56e5-447d-b202-0f9686091f24,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c2980788-c976-45b9-8efd-c999d3074d72,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-workflowm5lng/series-workflowm5lng-build-action-1798177177/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-workflowm5lng/series-workflowm5lng-build-action-2242731590/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 17:53:46 +0000 UTC FinishedAt: 2026-09-09 17:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 17:53:46 +0000 UTC FinishedAt: 2026-09-09 17:53:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm5lng/series-workflowm5lng-convert-artifact-2372368903/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 17:53:46 +0000 UTC FinishedAt: 2026-09-09 17:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 17:53:46 +0000 UTC FinishedAt: 2026-09-09 17:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 17:53:47 +0000 UTC FinishedAt: 2026-09-09 17:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 17:53:57 +0000 UTC FinishedAt: 2026-09-09 20:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm5lng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["find_next_to_unuse","try_to_unuse"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0bffe67ab8a72b3725cc31c4b525709bd3a3e223","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"57a3bb9d-40fd-4481-bad2-5121a4ec4db4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 17:53:57 +0000 UTC FinishedAt: 2026-09-09 20:55:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2e269bd8-56e5-447d-b202-0f9686091f24,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c2980788-c976-45b9-8efd-c999d3074d72,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-workflowm5lng/series-workflowm5lng-build-action-1798177177/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-workflowm5lng/series-workflowm5lng-build-action-2242731590/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-workflowm5lng/series-workflowm5lng-convert-artifact-2372368903/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,}