Name: series-workflow9lcsf Phase: Succeeded StartedAt: 2026-09-05 17:19:40 +0000 UTC FinishedAt: 2026-09-05 21:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[0] Phase: Succeeded StartedAt: 2026-09-05 17:19:40 +0000 UTC FinishedAt: 2026-09-05 17:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 17:19:40 +0000 UTC FinishedAt: 2026-09-05 17:38:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7ac9662189069914a088ec61ad85dc46b5cb1563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7ac9662189069914a088ec61ad85dc46b5cb1563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "858384af-3a30-448a-81a0-29fc0e390bbd" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_cond_jmp_op", "is_branch_taken", "reg_not_null", "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfY29uZF9qbXBfb3AmIzM0OywKICAgICYjMzQ7aXNfYnJhbmNoX3Rha2VuJiMzNDssCiAgICAmIzM0O3JlZ19ub3RfbnVsbCYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIGZpeCBzb3VuZG5lc3MgaXNzdWVzIHJlZ2FyZGluZyByZWdpc3RlciB0cmFja2luZywgc3BlY2lmaWNhbGx5OlxuMS4gSGFuZGxpbmcgb2Zmc2V0IHdyYXBwaW5nIHRvIHplcm8gaW4gYHJlZ19ub3RfbnVsbCgpYC5cbjIuIEhhbmRsaW5nIDMyLWJpdCBwb2ludGVyLXZzLXNjYWxhciBjb21wYXJpc29ucyBpbiBgaXNfYnJhbmNoX3Rha2VuKClgLlxuMy4gRW5zdXJpbmcgbGlua2VkIHJlZ2lzdGVycyBhcmUgY29sbGVjdGVkIGJlZm9yZSBzYXZpbmcgcmVnaXN0ZXJzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cbjQuIE1hcmtpbmcgcHJlY2lzaW9uIG9uIGBzcmNfcmVnYCB3aGVuIGNoZWNraW5nIG51bGxuZXNzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIChzdWNoIGFzIGBzdHJ1Y3QgbGlua2VkX3JlZ3NgKSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgKGUuZy4sIHplcm8taW5pdGlhbGl6ZWQgb24gZGVjbGFyYXRpb24pLCBhbmQgdGhlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCB2ZXJpZmllciBpbnRlcm5hbCBjb250cm9sLWZsb3cgYW5kIHJlZ2lzdGVyIHN0YXRlIGxvZ2ljLiBBbnkgcG90ZW50aWFsIG1pc2JlaGF2aW9yIHByZXZlbnRlZCBieSB0aGVzZSBmaXhlcyByZWxhdGVzIHRvIEJQRiB2ZXJpZmljYXRpb24gc291bmRuZXNzIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIGRlcmVmZXJlbmNlcyksIHdoaWNoIGlzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGZvciBwb2ludGVyIG51bGxuZXNzIGluZmVyZW5jZSwgMzItYml0IGp1bXAgYnJhbmNoIHByZWRpY3Rpb24sIGxpbmtlZCByZWdpc3RlcnMgY29sbGVjdGlvbiB0aW1pbmcsIGFuZCBwcmVjaXNpb24gdHJhY2tpbmcgb24gcmVnaXN0ZXIgY29tcGFyaXNvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2ZXJpZmljYXRpb24gcGF0aHMgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzozODowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2NDAzNTY4Mzc5NTEuLjcwOWI0NzkzZThlYjcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTM1Miw2ICYjNDM7MzUyLDEzIEBAIHN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0XG4gXHRpZiAodHlwZV9tYXlfYmVfbnVsbCh0eXBlKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHR5cGVzIGJlbG93IGd1YXJhbnRlZSBhIG5vbi1OVUxMIGJhc2UsIGFuIHVuYm91bmRlZCBvZmZzZXQgY2FuXG4mIzQzO1x0ICogc3RpbGwgd3JhcCBiYXNlICYjNDM7IG9mZnNldCB0byB6ZXJvLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZWdfc21pbihyZWcpIFx1MDAzYz0gLUJQRl9NQVhfVkFSX09GRiB8fCByZWdfc21heChyZWcpIFx1MDAzZT0gQlBGX01BWF9WQVJfT0ZGKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHR5cGUgPSBiYXNlX3R5cGUodHlwZSk7XG4gXHRyZXR1cm4gdHlwZSA9PSBQVFJfVE9fU09DS0VUIHx8XG4gXHRcdHR5cGUgPT0gUFRSX1RPX1RDUF9TT0NLIHx8XG5AQCAtMTYzMDIsNiAmIzQzOzE2MzA5LDEzIEBAIHN0YXRpYyBpbnQgaXNfYnJhbmNoX3Rha2VuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXG4gXHRpZiAoX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcxKSB8fCBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzIpKSB7XG4gXHRcdHU2NCB2YWw7XG4gXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGxvdyAzMiBiaXRzIG9mIGEgdmFsaWQgcG9pbnRlciBtYXkgd2VsbCBiZSB6ZXJvLCBoZW5jZVxuJiM0MztcdFx0ICogbm90aGluZyBiZWxvdyBhcHBsaWVzIHRvIGEgMzItYml0IGNvbXBhcmlzb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChpc19qbXAzMilcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiBcdFx0LyogYXJyYW5nZSB0aGF0IHJlZzIgaXMgYSBzY2FsYXIsIGFuZCByZWcxIGlzIGEgcG9pbnRlciAqL1xuIFx0XHRpZiAoIWlzX3JlZ19jb25zdChyZWcyLCBpc19qbXAzMikpIHtcbiBcdFx0XHRvcGNvZGUgPSBmbGlwX29wY29kZShvcGNvZGUpO1xuQEAgLTE2ODYzLDYgJiM0MzsxNjg3NywxNiBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvbGxlY3QgdGhlIGxpbmtlZCByZWdpc3RlcnMgYmVmb3JlIGVudi1cdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gc2V0dXAsXG4mIzQzO1x0ICogb3RoZXJ3aXNlIGlkcyBkcm9wcGVkIGJ5IGNvbGxlY3RfbGlua2VkX3JlZ3MoKSB3b3VsZCBiZSByZXN1cnJlY3RlZFxuJiM0MztcdCAqIHdoZW4gZW52LVx1MDAzZXt0cnVlLGZhbHNlfV9yZWd7MSwyfSBhcmUgY29waWVkIGJhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZClcbiYjNDM7XHRcdGNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgc3JjX3JlZy1cdTAwM2VpZCwgXHUwMDI2bGlua2VkX3JlZ3MpO1xuJiM0MztcdGlmIChkc3RfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBkc3RfcmVnLVx1MDAzZWlkKVxuJiM0MztcdFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBkc3RfcmVnLVx1MDAzZWlkLCBcdTAwMjZsaW5rZWRfcmVncyk7XG4mIzQzO1xuIFx0aXNfam1wMzIgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSk1QMzI7XG4gXHRlbnYtXHUwMDNlZmFsc2VfcmVnMSA9ICpkc3RfcmVnO1xuIFx0ZW52LVx1MDAzZWZhbHNlX3JlZzIgPSAqc3JjX3JlZztcbkBAIC0xNjkxNywxMCAmIzQzOzE2OTQxLDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICogJiMzOTt0aGlzX2JyYW5jaCYjMzk7IGFuZCAmIzM5O290aGVyX2JyYW5jaCYjMzk7IHNoYXJlIHRoaXMgaGlzdG9yeVxuIFx0ICogaWYgcGFyZW50IHN0YXRlIGlzIGNyZWF0ZWQuXG4gXHQgKi9cbi1cdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1ggXHUwMDI2XHUwMDI2IHNyY19yZWctXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUgXHUwMDI2XHUwMDI2IHNyY19yZWctXHUwMDNlaWQpXG4tXHRcdGNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgc3JjX3JlZy1cdTAwM2VpZCwgXHUwMDI2bGlua2VkX3JlZ3MpO1xuLVx0aWYgKGRzdF9yZWctXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUgXHUwMDI2XHUwMDI2IGRzdF9yZWctXHUwMDNlaWQpXG4tXHRcdGNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgZHN0X3JlZy1cdTAwM2VpZCwgXHUwMDI2bGlua2VkX3JlZ3MpO1xuIFx0aWYgKGxpbmtlZF9yZWdzLmNudCBcdTAwM2UgMSkge1xuIFx0XHRlcnIgPSBicGZfcHVzaF9qbXBfaGlzdG9yeShlbnYsIHRoaXNfYnJhbmNoLCAwLCAwLCAwLCBsaW5rZWRfcmVnc19wYWNrKFx1MDAyNmxpbmtlZF9yZWdzKSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtMTcwMDQsNiAmIzQzOzE3MDI0LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdCAgICB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgKChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0sgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tID09IDApIHx8XG4gXHQgICAgIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1ggXHUwMDI2XHUwMDI2IGJwZl9yZWdpc3Rlcl9pc19udWxsKHNyY19yZWcpKSkpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBGb3IgQlBGX1ggdGhlIHplcm8gaXMgYSBwcm9wZXJ0eSBvZiB0aGlzIGV4ZWN1dGlvbiBwYXRoLFxuJiM0MztcdFx0ICogaGVuY2Ugc3JjX3JlZyBoYXMgdG8gYmUgcHJlY2lzZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuJiM0MztcdFx0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIGluc24tXHUwMDNlc3JjX3JlZyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiBcdFx0LyogTWFyayBhbGwgaWRlbnRpY2FsIHJlZ2lzdGVycyBpbiBlYWNoIGJyYW5jaCBhcyBlaXRoZXJcbiBcdFx0ICogc2FmZSBvciB1bmtub3duIGRlcGVuZGluZyBSID09IDAgb3IgUiAhPSAwIGNvbmRpdGlvbmFsLlxuIFx0XHQgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbmluZGV4IGI0MTJhNTQyZWY3NmYuLjNjNzg5YzU2NWIxOGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xuQEAgLTMxMSw2ICYjNDM7MzExLDE0NyBAQCBfX25ha2VkIHZvaWQgdW50cnVzdGVkX21lbV9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBIHBvaW50ZXIgd2l0aCBhbiBvZmZzZXQgdGhhdCBpcyBub3QgYm91bmRlZCBmcm9tIGFib3ZlIG1heSBiZSBudWxsIGF0XG4mIzQzOyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmVcbiYjNDM7X19tc2coXCYjMzQ7ZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjcgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgdW5ib3VuZGVkX29mZnNldF9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogcjYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjYwKTsgKi9cdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbiYjNDM7XHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiAmIzQzOz0gLTg7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1x0XHRcdFxcXG4mIzQzO1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdC8qIHI3ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXHUwMDI2MSk7ICovXHRcXFxuJiM0MztcdCoodTY0ICopKHIxMCAtIDgpID0gMTtcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjIgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuJiM0MztcdHI3ID0gcjA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi9cdFxcXG4mIzQzO1x0cjggPSByNztcdFx0XHRcdFx0XFxcbiYjNDM7XHRyOCAtPSByNjtcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByOCBpcyBpbiBbMCwgUzY0X01BWF0gKi9cdFx0XHRcXFxuJiM0MztcdHI4IFx1MDAzY1x1MDAzYz0gMTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyOCBcdTAwM2VcdTAwM2U9IDE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogcjYgbWF5IHdyYXAgdG8gemVybyBhdCBydW50aW1lICovXHRcdFxcXG4mIzQzO1x0cjYgJiM0Mzs9IHI4O1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHI3ICE9IHI2IGdvdG8gMWY7XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1OCAqKShyNyAmIzQzOyAwKTtcdFx0XHRcdFxcXG4mIzQzOzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4mIzQzO1x0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19fbmFrZWQgdm9pZCBib3VuZGVkX29mZnNldF9pbmZlcnNfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdC8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXHUwMDI2MCk7ICovXHRcXFxuJiM0MztcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjIgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuJiM0MztcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4mIzQzO1x0cjYgPSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByNyA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjEpOyAqL1x0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSA4KSA9IDE7XHRcdFx0XHRcXFxuJiM0MztcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIyICYjNDM7PSAtODtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbiYjNDM7XHRyNyA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdC8qIHBvaW50ZXIgLSBwb2ludGVyIGlzIGFuIHVua25vd24gc2NhbGFyICovXHRcXFxuJiM0MztcdHI4ID0gcjc7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjggLT0gcjY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogcjggaXMgaW4gWzAsIDNdICovXHRcdFx0XHRcXFxuJiM0MztcdHI4IFx1MDAyNj0gMztcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiAmIzQzOz0gcjg7XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgcjcgIT0gcjYgZ290byAxZjtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAqKHU4ICopKHI3ICYjNDM7IDApO1x0XHRcdFx0XFxcbiYjNDM7MTpcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbiYjNDM7XHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGxvdyAzMiBiaXRzIG9mIGEgbWFwIHZhbHVlIHBvaW50ZXIgbWF5IGJlIHplcm8sIGhlbmNlIGEgMzItYml0XG4mIzQzOyAqIGNvbXBhcmUgd2l0aCB6ZXJvIGNhbm5vdCBiZSBwcmVkaWN0ZWQgZnJvbSB0aGUgcG9pbnRlciBiZWluZyBub24tTlVMTFxuJiM0MzsgKiBhbmQgYm90aCBzdWNjZXNzb3JzIG9mIHN1Y2ggYSBqdW1wIGhhdmUgdG8gYmUgdmVyaWZpZWQuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBhY2Nlc3MgdG8gbWFwIHZhbHVlLCB2YWx1ZV9zaXplPTQgb2ZmPTMyIHNpemU9NFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGptcDMyX3B0cl92c196ZXJvX2puZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNmtleSk7ICovXHRcXFxuJiM0MztcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjIgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuJiM0MztcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4mIzQzO1x0aWYgdzAgIT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9ICoodTMyICopKHIwICYjNDM7IDMyKTtcdFx0XHRcdFxcXG4mIzQzOzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4mIzQzO1x0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBiZWxvdyBwcm9ncmFtIGlzIGV4cGxvcmVkIGluIHR3byBwYXRoczogcjYgPT0gMCBhbmQgcjYgPT0gMS5cbiYjNDM7ICogT24gdGhlIGZpcnN0IHBhdGggY29tcGFyaXNvbiBcJiMzNDtpZiByMCA9PSByNiBnb3RvIDJmXCYjMzQ7IHNob3VsZCBtYXJrIHI2IGFzIHByZWNpc2UsXG4mIzQzOyAqIG90aGVyd2lzZSB1bnNhZmUgcGF0aCB3aXRoIHI2ID09IDEgd291bGQgYmUgaW5jb3JyZWN0bHkgcHJ1bmVkLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19mYWlsdXJlXG4mIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXG4mIzQzO19fbXNnKFwmIzM0O2Vycm9yOiBpbnZhbGlkIGRlcmVmZXJlbmNlIG9mIFIwIChhIG51bGxhYmxlIG1hcCB2YWx1ZSBwb2ludGVyKVwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGltcHJlY2lzZV96ZXJvX2RvZXNfbm90X2luZmVyX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHQvKiByNiBpcyAwIG9uIHRoZSBwYXRoIGV4cGxvcmVkIGZpcnN0LCAxIG9uIHRoZSBvdGhlciAqL1xcXG4mIzQzO1x0cjYgPSAxO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjApOyAqL1x0XFxcbiYjNDM7MTpcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjIgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuJiM0MztcdGlmIHIwID09IHI2IGdvdG8gMmY7XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1OCAqKShyMCAmIzQzOyAwKTtcdFx0XHRcdFxcXG4mIzQzOzI6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXG4mIzQzO1x0ICBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbiYjNDM7XHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGtmdW5jX3Jvb3Qodm9pZClcbiB7XG4gXHRicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmNcbmluZGV4IDY2M2QxNWZjNWZkMjYuLjI1NjU0NzA0OGNjNDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG5AQCAtMzgwLDEzICYjNDM7MzgwLDE0IEBAIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4gX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiAvKlxuLSAqIGNoZWNrIHRoYXQgcjAgYW5kIHI1IGhhdmUgZGlmZmVyZW50IElEcyBhZnRlciAmIzM5O2lmJiMzOTssXG4tICogY29sbGVjdF9saW5rZWRfcmVncygpIGNhbiYjMzk7dCB0aWUgbW9yZSB0aGFuIDUgcmVnaXN0ZXJzIGZvciBhIHNpbmdsZSBpbnNuLlxuJiM0MzsgKiBjaGVjayB0aGF0IHI1IGlzIHVubGlua2VkIGFmdGVyICYjMzk7aWYmIzM5OywgY29sbGVjdF9saW5rZWRfcmVncygpIGNhbiYjMzk7dCB0aWVcbiYjNDM7ICogbW9yZSB0aGFuIDUgcmVnaXN0ZXJzIGZvciBhIHNpbmdsZSBpbnNuIGFuZCB0aGUgcmVnaXN0ZXIgY29tcGFyZWQgYnlcbiYjNDM7ICogdGhlIGp1bXAgaXMgbm90IGV4ZW1wdCBmcm9tIHRoYXQuXG4gICovXG4tX19tc2coXCYjMzQ7NzogKDI1KSBpZiByMCBcdTAwM2UgMHg3IGdvdG8gcGMmIzQzOzAgICAgICAgICA7IFIwPXNjYWxhcihpZD0xXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDs3OiAoMjUpIGlmIHI1IFx1MDAzZSAweDcgZ290byBwYyYjNDM7MCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49XCYjMzQ7KVxuIF9fbXNnKFwmIzM0OzEyOiAoYmYpIHI1ID0gcjUgICAgICAgICAgICAgICAgICAgICAgOyBSNT1zY2FsYXIoaWQ9MlwmIzM0OylcbiAvKiBjaGVjayB0aGF0IHJ7MC00fSBhcmUgbWFya2VkIHByZWNpc2UgYWZ0ZXIgJiMzOTtpZiYjMzk7ICovXG4tX19tc2coXCYjMzQ7ZnJhbWUwOiByZWdzPXIwIHN0YWNrPSBiZWZvcmUgNzogKDI1KSBpZiByMCBcdTAwM2UgMHg3IGdvdG8gcGMmIzQzOzBcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O2ZyYW1lMDogcmVncz1yMCBzdGFjaz0gYmVmb3JlIDc6ICgyNSkgaWYgcjUgXHUwMDNlIDB4NyBnb3RvIHBjJiM0MzswXCYjMzQ7KVxuIF9fbXNnKFwmIzM0O2ZyYW1lMDogcGFyZW50IHN0YXRlIHJlZ3M9cjAscjEscjIscjMscjQgc3RhY2s9OlwmIzM0OylcbiBfX25ha2VkIHZvaWQgbGlua2VkX3JlZ3NfdG9vX21hbnlfcmVncyh2b2lkKVxuIHtcbkBAIC00MDAsOCAmIzQzOzQwMSw4IEBAIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpXG4gXHRcJiMzNDtyMyA9IHIwO1wmIzM0O1xuIFx0XCYjMzQ7cjQgPSByMDtcJiMzNDtcbiBcdFwmIzM0O3I1ID0gcjA7XCYjMzQ7XG4tXHQvKiBwcm9wYWdhdGUgcmFuZ2UgZm9yIHJ7MC01fSAqL1xuLVx0XCYjMzQ7aWYgcjAgXHUwMDNlIDcgZ290byAmIzQzOzA7XCYjMzQ7XG4mIzQzO1x0LyogcnswLTR9IGZpbGwgdGhlIHJlY29yZCwgcjUgZG9lcyBub3QgZml0IGFuZCBpcyB1bmxpbmtlZCAqL1xuJiM0MztcdFwmIzM0O2lmIHI1IFx1MDAzZSA3IGdvdG8gJiM0MzswO1wmIzM0O1xuIFx0Lyoga2VlcCByezEtNH0gbGl2ZSAqL1xuIFx0XCYjMzQ7cjEgPSByMTtcJiMzNDtcbiBcdFwmIzM0O3IyID0gcjI7XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19jb25kX2ptcF9vcCYjMzQ7LAogICAgJiMzNDtpc19icmFuY2hfdGFrZW4mIzM0OywKICAgICYjMzQ7cmVnX25vdF9udWxsJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGZvciBwb2ludGVyIG51bGxuZXNzIGluZmVyZW5jZSwgMzItYml0IGp1bXAgYnJhbmNoIHByZWRpY3Rpb24sIGxpbmtlZCByZWdpc3RlcnMgY29sbGVjdGlvbiB0aW1pbmcsIGFuZCBwcmVjaXNpb24gdHJhY2tpbmcgb24gcmVnaXN0ZXIgY29tcGFyaXNvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2ZXJpZmljYXRpb24gcGF0aHMgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNzozODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNjQwMzU2ODM3OTUxLi43MDliNDc5M2U4ZWI3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0zNTIsNiAmIzQzOzM1MiwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdAogCWlmICh0eXBlX21heV9iZV9udWxsKHR5cGUpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhlIHR5cGVzIGJlbG93IGd1YXJhbnRlZSBhIG5vbi1OVUxMIGJhc2UsIGFuIHVuYm91bmRlZCBvZmZzZXQgY2FuCiYjNDM7CSAqIHN0aWxsIHdyYXAgYmFzZSAmIzQzOyBvZmZzZXQgdG8gemVyby4KJiM0MzsJICovCiYjNDM7CWlmIChyZWdfc21pbihyZWcpICZsdDs9IC1CUEZfTUFYX1ZBUl9PRkYgfHwgcmVnX3NtYXgocmVnKSAmZ3Q7PSBCUEZfTUFYX1ZBUl9PRkYpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJdHlwZSA9IGJhc2VfdHlwZSh0eXBlKTsKIAlyZXR1cm4gdHlwZSA9PSBQVFJfVE9fU09DS0VUIHx8CiAJCXR5cGUgPT0gUFRSX1RPX1RDUF9TT0NLIHx8CkBAIC0xNjMwMiw2ICYjNDM7MTYzMDksMTMgQEAgc3RhdGljIGludCBpc19icmFuY2hfdGFrZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnIKIAlpZiAoX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcxKSB8fCBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzIpKSB7CiAJCXU2NCB2YWw7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIG1heSB3ZWxsIGJlIHplcm8sIGhlbmNlCiYjNDM7CQkgKiBub3RoaW5nIGJlbG93IGFwcGxpZXMgdG8gYSAzMi1iaXQgY29tcGFyaXNvbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGlzX2ptcDMyKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsKIAkJLyogYXJyYW5nZSB0aGF0IHJlZzIgaXMgYSBzY2FsYXIsIGFuZCByZWcxIGlzIGEgcG9pbnRlciAqLwogCQlpZiAoIWlzX3JlZ19jb25zdChyZWcyLCBpc19qbXAzMikpIHsKIAkJCW9wY29kZSA9IGZsaXBfb3Bjb2RlKG9wY29kZSk7CkBAIC0xNjg2Myw2ICYjNDM7MTY4NzcsMTYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJcmV0dXJuIGVycjsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQ29sbGVjdCB0aGUgbGlua2VkIHJlZ2lzdGVycyBiZWZvcmUgZW52LSZndDt7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gc2V0dXAsCiYjNDM7CSAqIG90aGVyd2lzZSBpZHMgZHJvcHBlZCBieSBjb2xsZWN0X2xpbmtlZF9yZWdzKCkgd291bGQgYmUgcmVzdXJyZWN0ZWQKJiM0MzsJICogd2hlbiBlbnYtJmd0O3t0cnVlLGZhbHNlfV9yZWd7MSwyfSBhcmUgY29waWVkIGJhY2suCiYjNDM7CSAqLwomIzQzOwlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7IHNyY19yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgc3JjX3JlZy0mZ3Q7aWQpCiYjNDM7CQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKJiM0MzsJaWYgKGRzdF9yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgZHN0X3JlZy0mZ3Q7aWQpCiYjNDM7CQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKJiM0MzsKIAlpc19qbXAzMiA9IEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfSk1QMzI7CiAJZW52LSZndDtmYWxzZV9yZWcxID0gKmRzdF9yZWc7CiAJZW52LSZndDtmYWxzZV9yZWcyID0gKnNyY19yZWc7CkBAIC0xNjkxNywxMCAmIzQzOzE2OTQxLDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCSAqICYjMzk7dGhpc19icmFuY2gmIzM5OyBhbmQgJiMzOTtvdGhlcl9icmFuY2gmIzM5OyBzaGFyZSB0aGlzIGhpc3RvcnkKIAkgKiBpZiBwYXJlbnQgc3RhdGUgaXMgY3JlYXRlZC4KIAkgKi8KLQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7IHNyY19yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgc3JjX3JlZy0mZ3Q7aWQpCi0JCWNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgc3JjX3JlZy0mZ3Q7aWQsICZhbXA7bGlua2VkX3JlZ3MpOwotCWlmIChkc3RfcmVnLSZndDt0eXBlID09IFNDQUxBUl9WQUxVRSAmYW1wOyZhbXA7IGRzdF9yZWctJmd0O2lkKQotCQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKIAlpZiAobGlua2VkX3JlZ3MuY250ICZndDsgMSkgewogCQllcnIgPSBicGZfcHVzaF9qbXBfaGlzdG9yeShlbnYsIHRoaXNfYnJhbmNoLCAwLCAwLCAwLCBsaW5rZWRfcmVnc19wYWNrKCZhbXA7bGlua2VkX3JlZ3MpKTsKIAkJaWYgKGVycikKQEAgLTE3MDA0LDYgJiM0MzsxNzAyNCwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJICAgIHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwogCSAgICAoKEJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0sgJmFtcDsmYW1wOyBpbnNuLSZndDtpbW0gPT0gMCkgfHwKIAkgICAgIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9YICZhbXA7JmFtcDsgYnBmX3JlZ2lzdGVyX2lzX251bGwoc3JjX3JlZykpKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEZvciBCUEZfWCB0aGUgemVybyBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZXhlY3V0aW9uIHBhdGgsCiYjNDM7CQkgKiBoZW5jZSBzcmNfcmVnIGhhcyB0byBiZSBwcmVjaXNlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewomIzQzOwkJCWVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KIAkJLyogTWFyayBhbGwgaWRlbnRpY2FsIHJlZ2lzdGVycyBpbiBlYWNoIGJyYW5jaCBhcyBlaXRoZXIKIAkJICogc2FmZSBvciB1bmtub3duIGRlcGVuZGluZyBSID09IDAgb3IgUiAhPSAwIGNvbmRpdGlvbmFsLgogCQkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYwppbmRleCBiNDEyYTU0MmVmNzZmLi4zYzc4OWM1NjViMThmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jCkBAIC0zMTEsNiAmIzQzOzMxMSwxNDcgQEAgX19uYWtlZCB2b2lkIHVudHJ1c3RlZF9tZW1fZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpCiAJOiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSBwb2ludGVyIHdpdGggYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGJvdW5kZWQgZnJvbSBhYm92ZSBtYXkgYmUgbnVsbCBhdAomIzQzOyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSNyAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcikmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgdW5ib3VuZGVkX29mZnNldF9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJLyogcjYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCAmYW1wOzApOyAqLwlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CWlmIHIwID09IDAgZ290byAxZjsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJXAomIzQzOwkvKiByNyA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7MSk7ICovCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSAxOwkJCQlcCiYjNDM7CXIxID0gJVttYXBfaGFzaF0gbGw7CQkJCVwKJiM0MzsJcjIgPSByMTA7CQkJCQlcCiYjNDM7CXIyICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dOwkJCVwKJiM0MzsJcjcgPSByMDsJCQkJCVwKJiM0MzsJLyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi8JXAomIzQzOwlyOCA9IHI3OwkJCQkJXAomIzQzOwlyOCAtPSByNjsJCQkJCVwKJiM0MzsJLyogcjggaXMgaW4gWzAsIFM2NF9NQVhdICovCQkJXAomIzQzOwlyOCAmbHQ7Jmx0Oz0gMTsJCQkJCVwKJiM0MzsJcjggJmd0OyZndDs9IDE7CQkJCQlcCiYjNDM7CS8qIHI2IG1heSB3cmFwIHRvIHplcm8gYXQgcnVudGltZSAqLwkJXAomIzQzOwlyNiAmIzQzOz0gcjg7CQkJCQlcCiYjNDM7CWlmIHI3ICE9IHI2IGdvdG8gMWY7CQkJCVwKJiM0MzsJcjAgPSAqKHU4ICopKHI3ICYjNDM7IDApOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgYm91bmRlZF9vZmZzZXRfaW5mZXJzX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwkvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7MCk7ICovCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSAwOwkJCQlcCiYjNDM7CXIxID0gJVttYXBfaGFzaF0gbGw7CQkJCVwKJiM0MzsJcjIgPSByMTA7CQkJCQlcCiYjNDM7CXIyICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dOwkJCVwKJiM0MzsJaWYgcjAgPT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQlcCiYjNDM7CS8qIHI3ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDsxKTsgKi8JXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IDE7CQkJCVwKJiM0MzsJcjEgPSAlW21hcF9oYXNoXSBsbDsJCQkJXAomIzQzOwlyMiA9IHIxMDsJCQkJCVwKJiM0MzsJcjIgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07CQkJXAomIzQzOwlyNyA9IHIwOwkJCQkJXAomIzQzOwkvKiBwb2ludGVyIC0gcG9pbnRlciBpcyBhbiB1bmtub3duIHNjYWxhciAqLwlcCiYjNDM7CXI4ID0gcjc7CQkJCQlcCiYjNDM7CXI4IC09IHI2OwkJCQkJXAomIzQzOwkvKiByOCBpcyBpbiBbMCwgM10gKi8JCQkJXAomIzQzOwlyOCAmYW1wOz0gMzsJCQkJCVwKJiM0MzsJcjYgJiM0Mzs9IHI4OwkJCQkJXAomIzQzOwlpZiByNyAhPSByNiBnb3RvIDFmOwkJCQlcCiYjNDM7CXIwID0gKih1OCAqKShyNyAmIzQzOyAwKTsJCQkJXAomIzQzOzE6CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSwKJiM0MzsJICBfX2ltbV9hZGRyKG1hcF9oYXNoKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBsb3cgMzIgYml0cyBvZiBhIG1hcCB2YWx1ZSBwb2ludGVyIG1heSBiZSB6ZXJvLCBoZW5jZSBhIDMyLWJpdAomIzQzOyAqIGNvbXBhcmUgd2l0aCB6ZXJvIGNhbm5vdCBiZSBwcmVkaWN0ZWQgZnJvbSB0aGUgcG9pbnRlciBiZWluZyBub24tTlVMTAomIzQzOyAqIGFuZCBib3RoIHN1Y2Nlc3NvcnMgb2Ygc3VjaCBhIGp1bXAgaGF2ZSB0byBiZSB2ZXJpZmllZC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIGFjY2VzcyB0byBtYXAgdmFsdWUsIHZhbHVlX3NpemU9NCBvZmY9MzIgc2l6ZT00JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGptcDMyX3B0cl92c196ZXJvX2puZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwkvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7a2V5KTsgKi8JXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IDA7CQkJCVwKJiM0MzsJcjEgPSAlW21hcF9oYXNoXSBsbDsJCQkJXAomIzQzOwlyMiA9IHIxMDsJCQkJCVwKJiM0MzsJcjIgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07CQkJXAomIzQzOwlpZiByMCA9PSAwIGdvdG8gMWY7CQkJCVwKJiM0MzsJaWYgdzAgIT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXIwID0gKih1MzIgKikocjAgJiM0MzsgMzIpOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIGJlbG93IHByb2dyYW0gaXMgZXhwbG9yZWQgaW4gdHdvIHBhdGhzOiByNiA9PSAwIGFuZCByNiA9PSAxLgomIzQzOyAqIE9uIHRoZSBmaXJzdCBwYXRoIGNvbXBhcmlzb24gJiMzNDtpZiByMCA9PSByNiBnb3RvIDJmJiMzNDsgc2hvdWxkIG1hcmsgcjYgYXMgcHJlY2lzZSwKJiM0MzsgKiBvdGhlcndpc2UgdW5zYWZlIHBhdGggd2l0aCByNiA9PSAxIHdvdWxkIGJlIGluY29ycmVjdGx5IHBydW5lZC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKQomIzQzO19fbXNnKCYjMzQ7ZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjAgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGltcHJlY2lzZV96ZXJvX2RvZXNfbm90X2luZmVyX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJXAomIzQzOwkvKiByNiBpcyAwIG9uIHRoZSBwYXRoIGV4cGxvcmVkIGZpcnN0LCAxIG9uIHRoZSBvdGhlciAqL1wKJiM0MzsJcjYgPSAxOwkJCQkJCVwKJiM0MzsJaWYgcjAgPT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXI2ID0gMDsJCQkJCQlcCiYjNDM7CS8qIHIwID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDswKTsgKi8JXAomIzQzOzE6CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CWlmIHIwID09IHI2IGdvdG8gMmY7CQkJCVwKJiM0MzsJcjAgPSAqKHU4ICopKHIwICYjNDM7IDApOwkJCQlcCiYjNDM7MjoJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpLAomIzQzOwkgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogdm9pZCBrZnVuY19yb290KHZvaWQpCiB7CiAJYnBmX3Jkb25seV9jYXN0KDAsIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmMKaW5kZXggNjYzZDE1ZmM1ZmQyNi4uMjU2NTQ3MDQ4Y2M0NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jCkBAIC0zODAsMTMgJiM0MzszODAsMTQgQEAgU0VDKCYjMzQ7c29ja2V0JiMzNDspCiBfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKIF9fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiAvKgotICogY2hlY2sgdGhhdCByMCBhbmQgcjUgaGF2ZSBkaWZmZXJlbnQgSURzIGFmdGVyICYjMzk7aWYmIzM5OywKLSAqIGNvbGxlY3RfbGlua2VkX3JlZ3MoKSBjYW4mIzM5O3QgdGllIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbi4KJiM0MzsgKiBjaGVjayB0aGF0IHI1IGlzIHVubGlua2VkIGFmdGVyICYjMzk7aWYmIzM5OywgY29sbGVjdF9saW5rZWRfcmVncygpIGNhbiYjMzk7dCB0aWUKJiM0MzsgKiBtb3JlIHRoYW4gNSByZWdpc3RlcnMgZm9yIGEgc2luZ2xlIGluc24gYW5kIHRoZSByZWdpc3RlciBjb21wYXJlZCBieQomIzQzOyAqIHRoZSBqdW1wIGlzIG5vdCBleGVtcHQgZnJvbSB0aGF0LgogICovCi1fX21zZygmIzM0Ozc6ICgyNSkgaWYgcjAgJmd0OyAweDcgZ290byBwYyYjNDM7MCAgICAgICAgIDsgUjA9c2NhbGFyKGlkPTEmIzM0OykKJiM0MztfX21zZygmIzM0Ozc6ICgyNSkgaWYgcjUgJmd0OyAweDcgZ290byBwYyYjNDM7MCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49JiMzNDspCiBfX21zZygmIzM0OzEyOiAoYmYpIHI1ID0gcjUgICAgICAgICAgICAgICAgICAgICAgOyBSNT1zY2FsYXIoaWQ9MiYjMzQ7KQogLyogY2hlY2sgdGhhdCByezAtNH0gYXJlIG1hcmtlZCBwcmVjaXNlIGFmdGVyICYjMzk7aWYmIzM5OyAqLwotX19tc2coJiMzNDtmcmFtZTA6IHJlZ3M9cjAgc3RhY2s9IGJlZm9yZSA3OiAoMjUpIGlmIHIwICZndDsgMHg3IGdvdG8gcGMmIzQzOzAmIzM0OykKJiM0MztfX21zZygmIzM0O2ZyYW1lMDogcmVncz1yMCBzdGFjaz0gYmVmb3JlIDc6ICgyNSkgaWYgcjUgJmd0OyAweDcgZ290byBwYyYjNDM7MCYjMzQ7KQogX19tc2coJiMzNDtmcmFtZTA6IHBhcmVudCBzdGF0ZSByZWdzPXIwLHIxLHIyLHIzLHI0IHN0YWNrPTomIzM0OykKIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpCiB7CkBAIC00MDAsOCAmIzQzOzQwMSw4IEBAIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpCiAJJiMzNDtyMyA9IHIwOyYjMzQ7CiAJJiMzNDtyNCA9IHIwOyYjMzQ7CiAJJiMzNDtyNSA9IHIwOyYjMzQ7Ci0JLyogcHJvcGFnYXRlIHJhbmdlIGZvciByezAtNX0gKi8KLQkmIzM0O2lmIHIwICZndDsgNyBnb3RvICYjNDM7MDsmIzM0OwomIzQzOwkvKiByezAtNH0gZmlsbCB0aGUgcmVjb3JkLCByNSBkb2VzIG5vdCBmaXQgYW5kIGlzIHVubGlua2VkICovCiYjNDM7CSYjMzQ7aWYgcjUgJmd0OyA3IGdvdG8gJiM0MzswOyYjMzQ7CiAJLyoga2VlcCByezEtNH0gbGl2ZSAqLwogCSYjMzQ7cjEgPSByMTsmIzM0OwogCSYjMzQ7cjIgPSByMjsmIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjY5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgdGhlIGFzc29jaWF0ZWQgc2VsZnRlc3RzLiBUaGUgdmVyaWZpZXIsIG9mIGNvdXJzZSwgaXMgYSBjcml0aWNhbCBjb21wb25lbnQsIGV4ZWN1dGVkIHdoZW5ldmVyIGEgQlBGIHByb2dyYW0gaXMgbG9hZGVkIHZpYSBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyBjYXJlZnVsIHNjcnV0aW55LiBBbmQgdGhlIGltcGFjdCBpcyBpbW1lZGlhdGVseSBvYnZpb3VzLCBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIG9wdGlvbi4gVGhpcyBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSByZWFjaGFibGUgYnkgYm90aCB1bnByaXZpbGVnZWQgYW5kIHByaXZpbGVnZWQgdXNlcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIGEgZmV3IGtleSBhcmVhcyBvZiBjaGFuZ2U6CgoxLiAgSW4gYHJlZ19ub3RfbnVsbGAsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyBudWxsIHBvaW50ZXIgY2hlY2tzIGFyZSBwZXJmb3JtZWQgcmVsYXRlZCB0byBvZmZzZXQgYm91bmRzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGAtQlBGX01BWF9WQVJfT0ZGYCBhbmQgYEJQRl9NQVhfVkFSX09GRmAuCgoyLiAgYGlzX2JyYW5jaF90YWtlbmAgYWxzbyBoYXMgY2hhbmdlcywgd2hpY2ggcmVsYXRlcyB0byBudWxsIGNoZWNrcyB3aXRoIHBvaW50ZXIgY29tcGFyaXNvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgYGlzX2ptcDMyYCAoMzIgYml0IGNvbXBhcmlzb25zKS4KCjMuICBgY2hlY2tfY29uZF9qbXBfb3BgIGFwcGVhcnMgdG8gYmUgZ2V0dGluZyBzb21lIHNpZ25pZmljYW50IHJld29yay4gVGhlIGBjb2xsZWN0X2xpbmtlZF9yZWdzYCBmdW5jdGlvbiBpcyBiZWluZyBtb3ZlZCwgYW5kIGBtYXJrX2NoYWluX3ByZWNpc2lvbmAgaXMgYmVpbmcgYWRkZWQgaW4gdGhlIHBvaW50ZXItdnMtbnVsbCBjaGVja2luZyBsb2dpYyB3aGVuIGRlYWxpbmcgd2l0aCBgQlBGX1hgIHNvdXJjZSBvcGVyYW5kIGFuZCB0aGUgc291cmNlIHJlZ2lzdGVyIGJlaW5nIG51bGwuCgpUaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHN0aWxsIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmOiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSB0aGUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZW50cnkgcG9pbnRzIHRocm91Z2ggYGJwZl9jaGVja2AgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byBgcmVnX25vdF9udWxsYCwgYGlzX2JyYW5jaF90YWtlbmAsIGFuZCBgY2hlY2tfY29uZF9qbXBfb3BgLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGZsb3cgdGhyb3VnaCB0aGUgY29yZSB2ZXJpZmllciBsb2dpYy4KCkkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IganVzdCBkaXJlY3RseSBleGFtaW5lIHRoZSBmaWxlIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgc3ltYm9scyBhbmQgY29uZmlncyByaWdodC4gVGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkLCBidXQgaXRzIGltcGxpY2F0aW9ucyBvbiBwb2ludGVyIGhhbmRsaW5nIGFuZCBjb25kaXRpb25hbCBqdW1wcyBpbiBCUEYgcHJvZ3JhbXMgY291bGQgYmUgc3Vic3RhbnRpYWwsIHNvIEkgbmVlZCB0byBnbyBkZWVwZXIgaW50byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgQlBGX1NZU0NBTEwgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgQlBGX1NZU0NBTExgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgd2l0aCBgS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBhcmUgc2V0LCBzbyBgQlBGX1NZU0NBTExgLCBiZWluZyBhIG1hY3JvIGxpa2VseSB0aWVkIHRvIGEgZmVhdHVyZSBvciBmdW5jdGlvbmFsaXR5LCAqc2hvdWxkKiBiZSBkZWZpbmVkIGluIGEgYEtjb25maWdgIGZpbGUgc29tZXdoZXJlLiBUaGUgY2hhbGxlbmdlIG5vdyBpcyBmaWd1cmluZyBvdXQgd2hlcmUgdGhhdCBgS2NvbmZpZ2AgaXMuIEkmIzM5O2xsIG5lZWQgdG8gZG8gc29tZSBkaWdnaW5nLCBwcm9iYWJseSB1c2luZyBgZ3JlcGAgb3Igc2ltaWxhciB0b29scywgc2VhcmNoaW5nIHRoZSBzb3VyY2UgdHJlZSBmb3IgcmVmZXJlbmNlcyBvciBkZWZpbml0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gYmUgbmVzdGVkIHdpdGhpbiBhIGZlYXR1cmUgdGhhdCBoYXMgdG8gYmUgY29uZmlndXJlZCB3aGVuIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQuIE9uY2UgSSBsb2NhdGUgdGhlIGZpbGUsIEkgY2FuIGFuYWx5emUgdGhlIGFzc29jaWF0ZWQgYEtjb25maWdgIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBgQlBGX1NZU0NBTExgIGFuZCwgY3J1Y2lhbGx5LCB1bmRlcnN0YW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHdvcmsgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDYzCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIEJQRiB2ZXJpZmllciBpcyBtYW5hZ2luZyBjb25kaXRpb25hbCBqdW1wcyBhbmQgcmVnaXN0ZXIgdmFsaWRpdHkuIE15IGh1bmNoIGlzIHRoYXQgYSBkZWVwIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCBzb21lIGtleSBkZXRhaWxzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIGZ1bmN0aW9ucyBsaWtlIGByZWdfbm90X251bGxgLCBgaXNfYnJhbmNoX3Rha2VuYCwgYW5kIGBjaGVja19jb25kX2ptcF9vcGAgYXJlIGRlZmluZWQgd2l0aCBzdGF0aWMgbGlua2FnZSBvciBpZiB0aGV5IGFyZSBhY2Nlc3NpYmxlIGdsb2JhbGx5IHdpdGhpbiB0aGUgdmVyaWZpZXImIzM5O3Mgc2NvcGUuIFRoZWlyIHNjb3BlIHdpbGwgaW5mbHVlbmNlIGhvdyBlYXNpbHkgdGhleSBjYW4gYmUgcmUtdXNlZCBhbmQgZXh0ZW5kZWQuIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8gdHJhY2UgdGhlaXIgY2FsbCBzaXRlcy4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSAqY2FsbGVkKiBwcm92aWRlcyB2aXRhbCBjb250ZXh0IGZvciB0aGVpciBmdW5jdGlvbmFsaXR5LCBhbmQgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIHZlcmlmaWVyJiMzOTtzIGNvbnRyb2wgZmxvdyBhbmQgZGVjaXNpb24tbWFraW5nIGxvZ2ljLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGNvbmRpdGlvbmFsIGp1bXBzIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZywgYW5kIHBvdGVudGlhbGx5IG9wdGltaXppbmcsIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhyZWdfbm90X251bGx8aXNfYnJhbmNoX3Rha2VufGNoZWNrX2NvbmRfam1wX29wKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTg9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAtICogUFRSX1RPX01BUF9WQUxVRSBhbmQgdGhlIHNhbWUgcmVnaXN0ZXIgY2hhbmdlcyBzdGF0ZSB0byBDT05TVF9JTU0gaW4gdGhlIGZhbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYxOiAqIGJyYW5jaC4gU2VlIGNoZWNrX2NvbmRfam1wX29wKCkuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyLSAqXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMyNj1zdGF0aWMgdm9pZCB2ZXJib3NlX2ludmFsaWRfc2NhbGFyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDc6c3RhdGljIGJvb2wgcmVnX25vdF9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYyNTY9c3RhdGljIGludCBpc19wa3RfcHRyX2JyYW5jaF90YWtlbihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzMDItICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMDM6c3RhdGljIGludCBpc19icmFuY2hfdGFrZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzEsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzMDQtXHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzIsIHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzMjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMjg6XHRcdGlmICghcmVnX25vdF9udWxsKGVudiwgcmVnMSkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzMjktXHRcdFx0cmV0dXJuIC0xO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjc0Nj1zdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY4MDE6c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODAyLVx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgKmluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjg5NC1cdGVudi1cdTAwM2V0cnVlX3JlZzIgPSAqc3JjX3JlZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjg5NTpcdHByZWQgPSBpc19icmFuY2hfdGFrZW4oZW52LCBkc3RfcmVnLCBzcmNfcmVnLCBvcGNvZGUsIGlzX2ptcDMyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjg5Ni1cdGlmIChwcmVkIFx1MDAzZT0gMCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODk3LVx0XHQvKiBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgZHN0X3JlZyBwb2ludGVyIHR5cGUgaXQgaXMgYmVjYXVzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODk4Olx0XHQgKiBhYm92ZSBpc19icmFuY2hfdGFrZW4oKSBzcGVjaWFsIGNhc2VkIHRoZSAwIGNvbXBhcmlzb24uXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4OTktXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzAwOC1cdFx0XHQvKiBzcmMgPT0gZHN0IFx1MDAyNlx1MDAyNiBkc3QgIT0gTlVMTCA9XHUwMDNlIHNyYyAhPSBOVUxMICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcwMDk6XHRcdFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIGRzdF9yZWcpIFx1MDAyNlx1MDAyNiB0eXBlX21heV9iZV9udWxsKHNyY19yZWctXHUwMDNldHlwZSkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcwMTAtXHRcdFx0XHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcoXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcwMTEtXHRcdFx0Lyogc3JjID09IGRzdCBcdTAwMjZcdTAwMjYgc3JjICE9IE5VTEwgPVx1MDAzZSBkc3QgIT0gTlVMTCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MDEyOlx0XHRcdGlmIChyZWdfbm90X251bGwoZW52LCBzcmNfcmVnKSBcdTAwMjZcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVx1MDAzZXR5cGUpKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MDEzLVx0XHRcdFx0bWFya19wdHJfbm90X251bGxfcmVnKFx1MDAyNmVxX2JyYW5jaF9yZWdzW2luc24tXHUwMDNlZHN0X3JlZ10pO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODEwNz1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTkzLVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxOTQ6XHRcdHJldHVybiBjaGVja19jb25kX2ptcF9vcChlbnYsIGluc24sIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxOTUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgcGVyc3BlY3RpdmUgb24gdGhpcyBzcGVjaWZpYyBsaW5lIG9mIGlucXVpcnk6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9jaGVja2AgaW4gdGhlIEJQRiBWZXJpZmllcioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gYnJvYWRlbiBvdXIgc2NvcGUgYSBiaXQuIFdoaWxlIHdlJiMzOTt2ZSBiZWVuIGV4YW1pbmluZyBvdGhlciBhcmVhcywgSSYjMzk7bSBmZWVsaW5nIGEgbmFnZ2luZyBzZW5zYXRpb24gdGhhdCB3ZSBtaWdodCBiZSBvdmVybG9va2luZyBzb21ldGhpbmcgY3J1Y2lhbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdyB0aGlua2luZyB3ZSBzaG91bGQgcmVhbGx5IHRha2UgYSBoYXJkIGxvb2sgYXQgYGJwZl9jaGVja2Agd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHdob2xlIEJQRiB2ZXJpZmljYXRpb24gcHJvY2VzcywgYW5kIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIG1hbmlmZXN0aW5nLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSB0aWVkIHRvIHRoaXMgcGFydGljdWxhciBhcmVhLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBleHBsb3JlZCB0aGF0IHNlY3Rpb24gdGhvcm91Z2hseTsgaXQgd2FycmFudHMgaW1tZWRpYXRlIGF0dGVudGlvbi4gTXkgZ3V0IHNheXMgaXQmIzM5O3MgbGlrZWx5IGxpbmtlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJwZl9jaGVja1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4OTY9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDEyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDEzOmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDE0LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzMKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogNDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEJQRiBWZXJpZmllcioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBwdWxsIG91dCB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSBpdCYjMzk7cyB0aGVzZSBmdW5jdGlvbnM6IGBjaGVja19jb25kX2ptcF9vcGAsIGBpc19icmFuY2hfdGFrZW5gLCBgcmVnX25vdF9udWxsYCwgYW5kIGBicGZfY2hlY2tgLiBHb3QgaXQuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaC4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIGl0IHNlZW1zIGxpa2UgdGhlc2Ugd2VyZSBhbGwgdG91Y2hlZDogYHJlZ19ub3RfbnVsbGAsIGBpc19icmFuY2hfdGFrZW5gLCBgY2hlY2tfY29uZF9qbXBfb3BgLCBhbGwgbG9jYXRlZCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIGBicGZfY2hlY2tgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIGFuZCB0aGUgb3RoZXIgdGhyZWUgZnVuY3Rpb25zIGFyZSBzdGF0aWMgYW5kIHdlcmUgbW9kaWZpZWQuIE9rYXkuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIGZ1enppbmcgd29ydGhpbmVzcy4gVGhlIEJQRiB2ZXJpZmllciBpcyBkZWZpbml0ZWx5IGEgY29yZSBzdWJzeXN0ZW3igJRpdCYjMzk7cyByaWdodCB0aGVyZSBpbiBCUEYuIFRoZSBwYXRjaCBkZXRhaWxzIG1vZGlmaWNhdGlvbnMgaW4gcmFuZ2UgdHJhY2tpbmcsIHBvaW50ZXIgbnVsbG5lc3MsIGJyYW5jaCBwcmVkaWN0aW9uLCByZWdpc3RlciBsaW5raW5nLCBhbmQgcHJlY2lzaW9uIHRyYWNraW5nLiBTaWduaWZpY2FudCBzdHVmZi4gQWxzbywgSSBjYW4gcmVhY2ggaXQgdmlhIHRoZSBgc3lzX2JwZmAgc3lzY2FsbCB3aXRoIGBCUEZfUFJPR19MT0FEYC4gKkRlZmluaXRlbHkqIFdvcnRoRnV6emluZz10cnVlLiBObyBxdWVzdGlvbi4KCkkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIHJlbGV2YW50IG9uZSBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAsIHVuZGVyIHRoZSAmIzM0O0JQRiBzdWJzeXN0ZW0mIzM0OyBtZW51LiBHb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZC4KCkxldCYjMzk7cyByZXZpZXcgdGhlIGZvY3VzIHN5bWJvbCBydWxlcyB0byBtYWtlIHN1cmUgSSYjMzk7bSBkb2luZyB0aGlzIHJpZ2h0LiBUaGUgZ29hbCBpcyB0byBmb2N1cyBvbiBzcGVjaWZpYywgbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucywgdGFyZ2V0aW5nIGZ1bmN0aW9ucyBkaXJlY3RseSBtb2RpZmllZCBvciBhY3RpbmcgYXMgZGlyZWN0IGNhbGxlciBlbnRyeXBvaW50cy4gVGhlIG9uZXMgSSYjMzk7dmUgc2VsZWN0ZWQsIGBjaGVja19jb25kX2ptcF9vcGAsIGBpc19icmFuY2hfdGFrZW5gLCBgcmVnX25vdF9udWxsYCwgYW5kIGBicGZfY2hlY2tgLCBmaXQgdGhlIGJpbGwgcGVyZmVjdGx5LgoKRmluYWxseSwganVzdCBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiB0aGUgZGlmZiBhbmQgYWxsIG1vZGlmaWVkIGZpbGVzIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gTG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2l0aCBzb21lIGFzc29jaWF0ZWQgc2VsZi10ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuIFRoZSBzZWxmLXRlc3RzIGFyZSB1c2VyLXNwYWNlLCBzbyBJIGRvbiYjMzk7dCBuZWVkIGFueSBzeW1ib2xzIGZyb20gdGhlbS4gQWxsIGNsZWFyLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfY29uZF9qbXBfb3AmIzM0OywKICAgICYjMzQ7aXNfYnJhbmNoX3Rha2VuJiMzNDssCiAgICAmIzM0O3JlZ19ub3RfbnVsbCYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBmb3IgcG9pbnRlciBudWxsbmVzcyBpbmZlcmVuY2UsIDMyLWJpdCBqdW1wIGJyYW5jaCBwcmVkaWN0aW9uLCBsaW5rZWQgcmVnaXN0ZXJzIGNvbGxlY3Rpb24gdGltaW5nLCBhbmQgcHJlY2lzaW9uIHRyYWNraW5nIG9uIHJlZ2lzdGVyIGNvbXBhcmlzb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmVyaWZpY2F0aW9uIHBhdGhzIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoZWNrX2NvbmRfam1wX29wJiMzNDssCiAgICAmIzM0O2lzX2JyYW5jaF90YWtlbiYjMzQ7LAogICAgJiMzNDtyZWdfbm90X251bGwmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgZm9yIHBvaW50ZXIgbnVsbG5lc3MgaW5mZXJlbmNlLCAzMi1iaXQganVtcCBicmFuY2ggcHJlZGljdGlvbiwgbGlua2VkIHJlZ2lzdGVycyBjb2xsZWN0aW9uIHRpbWluZywgYW5kIHByZWNpc2lvbiB0cmFja2luZyBvbiByZWdpc3RlciBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZlcmlmaWNhdGlvbiBwYXRocyB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gZml4IHNvdW5kbmVzcyBpc3N1ZXMgcmVnYXJkaW5nIHJlZ2lzdGVyIHRyYWNraW5nLCBzcGVjaWZpY2FsbHk6XG4xLiBIYW5kbGluZyBvZmZzZXQgd3JhcHBpbmcgdG8gemVybyBpbiBgcmVnX25vdF9udWxsKClgLlxuMi4gSGFuZGxpbmcgMzItYml0IHBvaW50ZXItdnMtc2NhbGFyIGNvbXBhcmlzb25zIGluIGBpc19icmFuY2hfdGFrZW4oKWAuXG4zLiBFbnN1cmluZyBsaW5rZWQgcmVnaXN0ZXJzIGFyZSBjb2xsZWN0ZWQgYmVmb3JlIHNhdmluZyByZWdpc3RlcnMgaW4gYGNoZWNrX2NvbmRfam1wX29wKClgLlxuNC4gTWFya2luZyBwcmVjaXNpb24gb24gYHNyY19yZWdgIHdoZW4gY2hlY2tpbmcgbnVsbG5lc3MgaW4gYGNoZWNrX2NvbmRfam1wX29wKClgLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZywgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlIHN0cnVjdHVyZXMgbWFuaXB1bGF0ZWQgKHN1Y2ggYXMgYHN0cnVjdCBsaW5rZWRfcmVnc2ApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSAoZS5nLiwgemVyby1pbml0aWFsaXplZCBvbiBkZWNsYXJhdGlvbiksIGFuZCB0aGUgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IHZlcmlmaWVyIGludGVybmFsIGNvbnRyb2wtZmxvdyBhbmQgcmVnaXN0ZXIgc3RhdGUgbG9naWMuIEFueSBwb3RlbnRpYWwgbWlzYmVoYXZpb3IgcHJldmVudGVkIGJ5IHRoZXNlIGZpeGVzIHJlbGF0ZXMgdG8gQlBGIHZlcmlmaWNhdGlvbiBzb3VuZG5lc3MgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgZGVyZWZlcmVuY2VzKSwgd2hpY2ggaXMgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNzozODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNjQwMzU2ODM3OTUxLi43MDliNDc5M2U4ZWI3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0zNTIsNiAmIzQzOzM1MiwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdAogCWlmICh0eXBlX21heV9iZV9udWxsKHR5cGUpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhlIHR5cGVzIGJlbG93IGd1YXJhbnRlZSBhIG5vbi1OVUxMIGJhc2UsIGFuIHVuYm91bmRlZCBvZmZzZXQgY2FuCiYjNDM7CSAqIHN0aWxsIHdyYXAgYmFzZSAmIzQzOyBvZmZzZXQgdG8gemVyby4KJiM0MzsJICovCiYjNDM7CWlmIChyZWdfc21pbihyZWcpICZsdDs9IC1CUEZfTUFYX1ZBUl9PRkYgfHwgcmVnX3NtYXgocmVnKSAmZ3Q7PSBCUEZfTUFYX1ZBUl9PRkYpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJdHlwZSA9IGJhc2VfdHlwZSh0eXBlKTsKIAlyZXR1cm4gdHlwZSA9PSBQVFJfVE9fU09DS0VUIHx8CiAJCXR5cGUgPT0gUFRSX1RPX1RDUF9TT0NLIHx8CkBAIC0xNjMwMiw2ICYjNDM7MTYzMDksMTMgQEAgc3RhdGljIGludCBpc19icmFuY2hfdGFrZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnIKIAlpZiAoX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcxKSB8fCBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzIpKSB7CiAJCXU2NCB2YWw7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIG1heSB3ZWxsIGJlIHplcm8sIGhlbmNlCiYjNDM7CQkgKiBub3RoaW5nIGJlbG93IGFwcGxpZXMgdG8gYSAzMi1iaXQgY29tcGFyaXNvbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGlzX2ptcDMyKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsKIAkJLyogYXJyYW5nZSB0aGF0IHJlZzIgaXMgYSBzY2FsYXIsIGFuZCByZWcxIGlzIGEgcG9pbnRlciAqLwogCQlpZiAoIWlzX3JlZ19jb25zdChyZWcyLCBpc19qbXAzMikpIHsKIAkJCW9wY29kZSA9IGZsaXBfb3Bjb2RlKG9wY29kZSk7CkBAIC0xNjg2Myw2ICYjNDM7MTY4NzcsMTYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJcmV0dXJuIGVycjsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQ29sbGVjdCB0aGUgbGlua2VkIHJlZ2lzdGVycyBiZWZvcmUgZW52LSZndDt7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gc2V0dXAsCiYjNDM7CSAqIG90aGVyd2lzZSBpZHMgZHJvcHBlZCBieSBjb2xsZWN0X2xpbmtlZF9yZWdzKCkgd291bGQgYmUgcmVzdXJyZWN0ZWQKJiM0MzsJICogd2hlbiBlbnYtJmd0O3t0cnVlLGZhbHNlfV9yZWd7MSwyfSBhcmUgY29waWVkIGJhY2suCiYjNDM7CSAqLwomIzQzOwlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7IHNyY19yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgc3JjX3JlZy0mZ3Q7aWQpCiYjNDM7CQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKJiM0MzsJaWYgKGRzdF9yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgZHN0X3JlZy0mZ3Q7aWQpCiYjNDM7CQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKJiM0MzsKIAlpc19qbXAzMiA9IEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfSk1QMzI7CiAJZW52LSZndDtmYWxzZV9yZWcxID0gKmRzdF9yZWc7CiAJZW52LSZndDtmYWxzZV9yZWcyID0gKnNyY19yZWc7CkBAIC0xNjkxNywxMCAmIzQzOzE2OTQxLDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCSAqICYjMzk7dGhpc19icmFuY2gmIzM5OyBhbmQgJiMzOTtvdGhlcl9icmFuY2gmIzM5OyBzaGFyZSB0aGlzIGhpc3RvcnkKIAkgKiBpZiBwYXJlbnQgc3RhdGUgaXMgY3JlYXRlZC4KIAkgKi8KLQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7IHNyY19yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgc3JjX3JlZy0mZ3Q7aWQpCi0JCWNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgc3JjX3JlZy0mZ3Q7aWQsICZhbXA7bGlua2VkX3JlZ3MpOwotCWlmIChkc3RfcmVnLSZndDt0eXBlID09IFNDQUxBUl9WQUxVRSAmYW1wOyZhbXA7IGRzdF9yZWctJmd0O2lkKQotCQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKIAlpZiAobGlua2VkX3JlZ3MuY250ICZndDsgMSkgewogCQllcnIgPSBicGZfcHVzaF9qbXBfaGlzdG9yeShlbnYsIHRoaXNfYnJhbmNoLCAwLCAwLCAwLCBsaW5rZWRfcmVnc19wYWNrKCZhbXA7bGlua2VkX3JlZ3MpKTsKIAkJaWYgKGVycikKQEAgLTE3MDA0LDYgJiM0MzsxNzAyNCwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJICAgIHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwogCSAgICAoKEJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0sgJmFtcDsmYW1wOyBpbnNuLSZndDtpbW0gPT0gMCkgfHwKIAkgICAgIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9YICZhbXA7JmFtcDsgYnBmX3JlZ2lzdGVyX2lzX251bGwoc3JjX3JlZykpKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEZvciBCUEZfWCB0aGUgemVybyBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZXhlY3V0aW9uIHBhdGgsCiYjNDM7CQkgKiBoZW5jZSBzcmNfcmVnIGhhcyB0byBiZSBwcmVjaXNlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewomIzQzOwkJCWVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KIAkJLyogTWFyayBhbGwgaWRlbnRpY2FsIHJlZ2lzdGVycyBpbiBlYWNoIGJyYW5jaCBhcyBlaXRoZXIKIAkJICogc2FmZSBvciB1bmtub3duIGRlcGVuZGluZyBSID09IDAgb3IgUiAhPSAwIGNvbmRpdGlvbmFsLgogCQkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYwppbmRleCBiNDEyYTU0MmVmNzZmLi4zYzc4OWM1NjViMThmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jCkBAIC0zMTEsNiAmIzQzOzMxMSwxNDcgQEAgX19uYWtlZCB2b2lkIHVudHJ1c3RlZF9tZW1fZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpCiAJOiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSBwb2ludGVyIHdpdGggYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGJvdW5kZWQgZnJvbSBhYm92ZSBtYXkgYmUgbnVsbCBhdAomIzQzOyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSNyAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcikmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgdW5ib3VuZGVkX29mZnNldF9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJLyogcjYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCAmYW1wOzApOyAqLwlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CWlmIHIwID09IDAgZ290byAxZjsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJXAomIzQzOwkvKiByNyA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7MSk7ICovCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSAxOwkJCQlcCiYjNDM7CXIxID0gJVttYXBfaGFzaF0gbGw7CQkJCVwKJiM0MzsJcjIgPSByMTA7CQkJCQlcCiYjNDM7CXIyICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dOwkJCVwKJiM0MzsJcjcgPSByMDsJCQkJCVwKJiM0MzsJLyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi8JXAomIzQzOwlyOCA9IHI3OwkJCQkJXAomIzQzOwlyOCAtPSByNjsJCQkJCVwKJiM0MzsJLyogcjggaXMgaW4gWzAsIFM2NF9NQVhdICovCQkJXAomIzQzOwlyOCAmbHQ7Jmx0Oz0gMTsJCQkJCVwKJiM0MzsJcjggJmd0OyZndDs9IDE7CQkJCQlcCiYjNDM7CS8qIHI2IG1heSB3cmFwIHRvIHplcm8gYXQgcnVudGltZSAqLwkJXAomIzQzOwlyNiAmIzQzOz0gcjg7CQkJCQlcCiYjNDM7CWlmIHI3ICE9IHI2IGdvdG8gMWY7CQkJCVwKJiM0MzsJcjAgPSAqKHU4ICopKHI3ICYjNDM7IDApOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgYm91bmRlZF9vZmZzZXRfaW5mZXJzX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwkvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7MCk7ICovCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSAwOwkJCQlcCiYjNDM7CXIxID0gJVttYXBfaGFzaF0gbGw7CQkJCVwKJiM0MzsJcjIgPSByMTA7CQkJCQlcCiYjNDM7CXIyICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dOwkJCVwKJiM0MzsJaWYgcjAgPT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQlcCiYjNDM7CS8qIHI3ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDsxKTsgKi8JXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IDE7CQkJCVwKJiM0MzsJcjEgPSAlW21hcF9oYXNoXSBsbDsJCQkJXAomIzQzOwlyMiA9IHIxMDsJCQkJCVwKJiM0MzsJcjIgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07CQkJXAomIzQzOwlyNyA9IHIwOwkJCQkJXAomIzQzOwkvKiBwb2ludGVyIC0gcG9pbnRlciBpcyBhbiB1bmtub3duIHNjYWxhciAqLwlcCiYjNDM7CXI4ID0gcjc7CQkJCQlcCiYjNDM7CXI4IC09IHI2OwkJCQkJXAomIzQzOwkvKiByOCBpcyBpbiBbMCwgM10gKi8JCQkJXAomIzQzOwlyOCAmYW1wOz0gMzsJCQkJCVwKJiM0MzsJcjYgJiM0Mzs9IHI4OwkJCQkJXAomIzQzOwlpZiByNyAhPSByNiBnb3RvIDFmOwkJCQlcCiYjNDM7CXIwID0gKih1OCAqKShyNyAmIzQzOyAwKTsJCQkJXAomIzQzOzE6CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSwKJiM0MzsJICBfX2ltbV9hZGRyKG1hcF9oYXNoKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBsb3cgMzIgYml0cyBvZiBhIG1hcCB2YWx1ZSBwb2ludGVyIG1heSBiZSB6ZXJvLCBoZW5jZSBhIDMyLWJpdAomIzQzOyAqIGNvbXBhcmUgd2l0aCB6ZXJvIGNhbm5vdCBiZSBwcmVkaWN0ZWQgZnJvbSB0aGUgcG9pbnRlciBiZWluZyBub24tTlVMTAomIzQzOyAqIGFuZCBib3RoIHN1Y2Nlc3NvcnMgb2Ygc3VjaCBhIGp1bXAgaGF2ZSB0byBiZSB2ZXJpZmllZC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIGFjY2VzcyB0byBtYXAgdmFsdWUsIHZhbHVlX3NpemU9NCBvZmY9MzIgc2l6ZT00JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGptcDMyX3B0cl92c196ZXJvX2puZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwkvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7a2V5KTsgKi8JXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IDA7CQkJCVwKJiM0MzsJcjEgPSAlW21hcF9oYXNoXSBsbDsJCQkJXAomIzQzOwlyMiA9IHIxMDsJCQkJCVwKJiM0MzsJcjIgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07CQkJXAomIzQzOwlpZiByMCA9PSAwIGdvdG8gMWY7CQkJCVwKJiM0MzsJaWYgdzAgIT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXIwID0gKih1MzIgKikocjAgJiM0MzsgMzIpOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIGJlbG93IHByb2dyYW0gaXMgZXhwbG9yZWQgaW4gdHdvIHBhdGhzOiByNiA9PSAwIGFuZCByNiA9PSAxLgomIzQzOyAqIE9uIHRoZSBmaXJzdCBwYXRoIGNvbXBhcmlzb24gJiMzNDtpZiByMCA9PSByNiBnb3RvIDJmJiMzNDsgc2hvdWxkIG1hcmsgcjYgYXMgcHJlY2lzZSwKJiM0MzsgKiBvdGhlcndpc2UgdW5zYWZlIHBhdGggd2l0aCByNiA9PSAxIHdvdWxkIGJlIGluY29ycmVjdGx5IHBydW5lZC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKQomIzQzO19fbXNnKCYjMzQ7ZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjAgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGltcHJlY2lzZV96ZXJvX2RvZXNfbm90X2luZmVyX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJXAomIzQzOwkvKiByNiBpcyAwIG9uIHRoZSBwYXRoIGV4cGxvcmVkIGZpcnN0LCAxIG9uIHRoZSBvdGhlciAqL1wKJiM0MzsJcjYgPSAxOwkJCQkJCVwKJiM0MzsJaWYgcjAgPT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXI2ID0gMDsJCQkJCQlcCiYjNDM7CS8qIHIwID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDswKTsgKi8JXAomIzQzOzE6CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CWlmIHIwID09IHI2IGdvdG8gMmY7CQkJCVwKJiM0MzsJcjAgPSAqKHU4ICopKHIwICYjNDM7IDApOwkJCQlcCiYjNDM7MjoJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpLAomIzQzOwkgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogdm9pZCBrZnVuY19yb290KHZvaWQpCiB7CiAJYnBmX3Jkb25seV9jYXN0KDAsIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmMKaW5kZXggNjYzZDE1ZmM1ZmQyNi4uMjU2NTQ3MDQ4Y2M0NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jCkBAIC0zODAsMTMgJiM0MzszODAsMTQgQEAgU0VDKCYjMzQ7c29ja2V0JiMzNDspCiBfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKIF9fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiAvKgotICogY2hlY2sgdGhhdCByMCBhbmQgcjUgaGF2ZSBkaWZmZXJlbnQgSURzIGFmdGVyICYjMzk7aWYmIzM5OywKLSAqIGNvbGxlY3RfbGlua2VkX3JlZ3MoKSBjYW4mIzM5O3QgdGllIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbi4KJiM0MzsgKiBjaGVjayB0aGF0IHI1IGlzIHVubGlua2VkIGFmdGVyICYjMzk7aWYmIzM5OywgY29sbGVjdF9saW5rZWRfcmVncygpIGNhbiYjMzk7dCB0aWUKJiM0MzsgKiBtb3JlIHRoYW4gNSByZWdpc3RlcnMgZm9yIGEgc2luZ2xlIGluc24gYW5kIHRoZSByZWdpc3RlciBjb21wYXJlZCBieQomIzQzOyAqIHRoZSBqdW1wIGlzIG5vdCBleGVtcHQgZnJvbSB0aGF0LgogICovCi1fX21zZygmIzM0Ozc6ICgyNSkgaWYgcjAgJmd0OyAweDcgZ290byBwYyYjNDM7MCAgICAgICAgIDsgUjA9c2NhbGFyKGlkPTEmIzM0OykKJiM0MztfX21zZygmIzM0Ozc6ICgyNSkgaWYgcjUgJmd0OyAweDcgZ290byBwYyYjNDM7MCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49JiMzNDspCiBfX21zZygmIzM0OzEyOiAoYmYpIHI1ID0gcjUgICAgICAgICAgICAgICAgICAgICAgOyBSNT1zY2FsYXIoaWQ9MiYjMzQ7KQogLyogY2hlY2sgdGhhdCByezAtNH0gYXJlIG1hcmtlZCBwcmVjaXNlIGFmdGVyICYjMzk7aWYmIzM5OyAqLwotX19tc2coJiMzNDtmcmFtZTA6IHJlZ3M9cjAgc3RhY2s9IGJlZm9yZSA3OiAoMjUpIGlmIHIwICZndDsgMHg3IGdvdG8gcGMmIzQzOzAmIzM0OykKJiM0MztfX21zZygmIzM0O2ZyYW1lMDogcmVncz1yMCBzdGFjaz0gYmVmb3JlIDc6ICgyNSkgaWYgcjUgJmd0OyAweDcgZ290byBwYyYjNDM7MCYjMzQ7KQogX19tc2coJiMzNDtmcmFtZTA6IHBhcmVudCBzdGF0ZSByZWdzPXIwLHIxLHIyLHIzLHI0IHN0YWNrPTomIzM0OykKIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpCiB7CkBAIC00MDAsOCAmIzQzOzQwMSw4IEBAIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpCiAJJiMzNDtyMyA9IHIwOyYjMzQ7CiAJJiMzNDtyNCA9IHIwOyYjMzQ7CiAJJiMzNDtyNSA9IHIwOyYjMzQ7Ci0JLyogcHJvcGFnYXRlIHJhbmdlIGZvciByezAtNX0gKi8KLQkmIzM0O2lmIHIwICZndDsgNyBnb3RvICYjNDM7MDsmIzM0OwomIzQzOwkvKiByezAtNH0gZmlsbCB0aGUgcmVjb3JkLCByNSBkb2VzIG5vdCBmaXQgYW5kIGlzIHVubGlua2VkICovCiYjNDM7CSYjMzQ7aWYgcjUgJmd0OyA3IGdvdG8gJiM0MzswOyYjMzQ7CiAJLyoga2VlcCByezEtNH0gbGl2ZSAqLwogCSYjMzQ7cjEgPSByMTsmIzM0OwogCSYjMzQ7cjIgPSByMjsmIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEtNU0FOIFJlbGV2YW5jZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGNvbnNpZGVyIEtNU0FOIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyB0aHJvdWdoIHRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBzZWxmdGVzdHMsIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCkZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBjb2RlIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgaW4gZGV0YWlsOgoKMS4gICoqYHJlZ19ub3RfbnVsbGAgY2hhbmdlOioqIFRoZSBhZGRpdGlvbiBvZiB0aGUgb2Zmc2V0IGNoZWNrIG1ha2VzIHNlbnNlLiBXZSBuZWVkIHRvIHByZXZlbnQgdW5ib3VuZGVkIG9mZnNldHMgbGVhZGluZyB0byBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYXMgYSByZWdpc3RlciB0aGF0JiMzOTtzICphc3N1bWVkKiBub24tbnVsbCBjYW4gYmVjb21lIG51bGwgYWZ0ZXIgYXBwbHlpbmcgYW4gZXhjZXNzaXZlbHkgbGFyZ2Ugb2Zmc2V0IHRvIGl0LiBUaGlzIGlzbiYjMzk7dCBpbmhlcmVudGx5IGEgS01TQU4gaXNzdWUsIGJ1dCBhIGNyaXRpY2FsIHNvdW5kbmVzcyBmaXguCgoyLiAgKipgaXNfYnJhbmNoX3Rha2VuYCBtb2RpZmljYXRpb246KiogIElnbm9yaW5nIHRoZSAzMi1iaXQgY29tcGFyaXNvbiByZXN1bHQgaW4gc29tZSBjYXNlcyBpcyBjb3JyZWN0LiBUaGUgbG93ZXIgMzIgYml0cyBvZiBhIHZhbGlkIHBvaW50ZXIgY2FuIGJlIHplcm8sIHNvIHdlIGNhbiYjMzk7dCBhc3N1bWUgYSBicmFuY2ggaXMgdGFrZW4gaWYgdGhlIGNvbXBhcmlzb24gaXMgemVyby4gVGhpcyBzZWVtcyBsaWtlIGEgc2FuaXR5IGNoZWNrLCBtb3JlIG9mIGEgc2FmZXR5IGZpeCwgYW5kIGRvZXMgbm90IHBvc2UgYSBkaXJlY3QgS01TQU4gcmlzay4KCjMuICAqKmBjaGVja19jb25kX2ptcF9vcGAgYWRqdXN0bWVudHM6KiogIE1vdmluZyB0aGUgYGNvbGxlY3RfbGlua2VkX3JlZ3NgIGNhbGwgYmVmb3JlIHNhdmluZyB0cnVlL2ZhbHNlIHJlZ2lzdGVyIGNvcGllcyBpcyBjcnVjaWFsLiBUaGUgb3JpZ2luYWwgb3JkZXIgY2F1c2VkIHByb2JsZW1zIHdoZXJlIGBjb2xsZWN0X2xpbmtlZF9yZWdzYCBtaWdodCBkcm9wIHJlZ2lzdGVyIElEcywgYW5kIHRob3NlIGRyb3BwZWQgSURzIGdldCByZXN1cnJlY3RlZCB3aGVuIHdlIGNvcHkgdGhlIHNhdmVkIGB0cnVlL2ZhbHNlYCByZWdpc3RlcnMuIEl0JiMzOTtzIGEgc291bmRuZXNzIGZpeCwgZ3VhcmRpbmcgYWdhaW5zdCBpbmNvcnJlY3Qgc3RhdGUgcmVzdG9yYXRpb24gYW5kIHBvc3NpYmxlIG1lbW9yeSBjb3JydXB0aW9uLgoKNC4gICoqYGNoZWNrX2NvbmRfam1wX29wYCBhZGRpdGlvbjoqKiBNYXJraW5nIGNoYWluIHByZWNpc2lvbiBmb3IgYHNyY19yZWdgIHdoZW4gaXQmIzM5O3MgcGFydCBvZiBhIGJyYW5jaCBjb25kaXRpb24sIGVzcGVjaWFsbHkgaWYgdGhlIHNvdXJjZSByZWdpc3RlciBpcyBzY2FsYXIsIGlzIGFsc28gYSBzb3VuZG5lc3MgZml4LiBUaGlzIHByZXZlbnRzIHVuc291bmQgc3RhdGUgcHJ1bmluZyBkdXJpbmcgdmVyaWZpY2F0aW9uLCBjcml0aWNhbCBmb3IgcHJldmVudGluZyBidWdzIGZyb20gYmVpbmcgZXhwbG9pdGVkLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgdGlnaHRlbmluZyB1cCB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRvIHByZXZlbnQgcG90ZW50aWFsIHNvdW5kbmVzcyBidWdzLiBUaGUgdmVyaWZpZXIgdHJhY2tzIHBvaW50ZXJzIGFuZCBzY2FsYXJzLCBlbnN1cmluZyB0aGF0IEJQRiBwcm9ncmFtcyBhcmUgc2FmZSB0byBleGVjdXRlLgoKTm93LCBsZXQmIzM5O3MgbWFwIHRoaXMgYWdhaW5zdCBLTVNBTiBjcml0ZXJpYS4gRG9lcyB0aGlzIHRvdWNoIGFueSBrZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlIHZpYSBhbnkgb2YgdGhlIHN0YW5kYXJkIG1ldGhvZHMsIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGEgcHJvYmxlbT8gTm8sIHRoZSB2YXJpYWJsZXMgdGhlIHZlcmlmaWVyIGRlYWxzIHdpdGggYXJlIGludGVybmFsIHZlcmlmaWVyIHN0YXRlIHN0cnVjdHMsIHN1Y2ggYXMgYGxpbmtlZF9yZWdzYCBhbmQgYGVudmAsIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCB2ZXJpZmllciBzdHJ1Y3RzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gRG9lcyBpdCBtZXNzIHdpdGggYWxsb2NhdGluZyBvciBpbml0aWFsaXppbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gQWdhaW4sIG5vLiBJcyB0aGVyZSBhbnkgYm91bmRzIGNoZWNrIG9yIGxlbmd0aCBsb2dpYyBjaGFuZ2VkIHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IFN0aWxsIG5vLiBUaGUgZml4ZXMgYXJlIHRhcmdldGVkIGF0IHRoZSB2ZXJpZmllciYjMzk7cyBpbnRlcm5hbCBzdGF0ZS10cmFja2luZyBsb2dpYywgYWltZWQgYXQgcHJldmVudGluZyBleHBsb2l0YWJsZSBidWdzLgoKVGhlc2UgYnVncyB3b3VsZCB0eXBpY2FsbHkgbGVhZCB0byBhcmJpdHJhcnkga2VybmVsIG1lbW9yeSByZWFkL3dyaXRlIGlmIGV4cGxvaXRlZCwgYSBjbGFzc2ljIEtBU0FOIGlzc3VlLCBvciB2ZXJpZmllciBzdGF0ZSB0cmFja2luZyBpc3N1ZXMuIFNvLCBpdCBpcyBtb3JlIGxpa2UgcHJldmVudGluZyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG5vdCBLTVNBTi1yZWxhdGVkIHByb2JsZW1zLiBUaGUgQlBGIHZlcmlmaWVyIGxvZ2ljIG9wZXJhdGVzIG9uIGluaXRpYWxpemVkIEMgc3RydWN0cy4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGxpbmtlZF9yZWdzYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU7IHdlcmUgdGhlIHN0cnVjdHMgYGxpbmtlZF9yZWdzYCBpbml0aWFsaXplZCB3aXRoIGBzdHJ1Y3QgbGlua2VkX3JlZ3MgbGlua2VkX3JlZ3MgPSB7fTtgIG9yIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBmYWxzZV9yZWcxLCBmYWxzZV9yZWcyO2A/IExldCBtZSBxdWlja2x5IGdyZXAgZm9yIGBjaGVja19jb25kX2ptcF9vcGAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gY29uZmlybSB0aGF0IGBsaW5rZWRfcmVnc2AgaXMgYmVpbmcgY29ycmVjdGx5IGluaXRpYWxpemVkLiBBc3N1bWluZyB0aGV5IGFyZSBpbml0aWFsaXplZCwgdGhlbiBJIHRoaW5rIEtNU0FOIGlzbiYjMzk7dCB0aGUgcHJpbWFyeSBjb25jZXJuIGhlcmUuIEtBU0FOIGlzIHRoZSBtb3N0IGltcG9ydGFudCBjaGVjayBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbGlua2VkX3JlZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTMyNDU9c3RydWN0IGxpbmtlZF9yZWcge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjUzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyNTQ6c3RydWN0IGxpbmtlZF9yZWdzIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjU1LVx0aW50IGNudDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI1OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjU5OnN0YXRpYyBzdHJ1Y3QgbGlua2VkX3JlZyAqbGlua2VkX3JlZ3NfcHVzaChzdHJ1Y3QgbGlua2VkX3JlZ3MgKnMpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI2MC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNzQtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI3NTpzdGF0aWMgdTY0IGxpbmtlZF9yZWdzX3BhY2soc3RydWN0IGxpbmtlZF9yZWdzICpzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNzYte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjk1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyOTY6c3RhdGljIHZvaWQgbGlua2VkX3JlZ3NfdW5wYWNrKHU2NCB2YWwsIHN0cnVjdCBsaW5rZWRfcmVncyAqcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjk3LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzM0NT12b2lkIGJwZl9idF9zeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCBzdHJ1Y3QgYnBmX2ptcF9oaXN0b3J5X2VudHJ5ICpoaXN0KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzNDYte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMzNDc6XHRzdHJ1Y3QgbGlua2VkX3JlZ3MgbGlua2VkX3JlZ3M7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM0OC1cdGJvb2wgc29tZV9wcmVjaXNlID0gZmFsc2U7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NTg2PXN0YXRpYyBib29sIHRyeV9tYXRjaF9wa3RfcG9pbnRlcnMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjY5MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY5MTpzdGF0aWMgdm9pZCBfX2NvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGxpbmtlZF9yZWdzICpyZWdfc2V0LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjkyLVx0XHRcdFx0ICB1MzIgaWQsIHUzMiBmcmFtZW5vLCB1MzIgc3BpX29yX3JlZywgYm9vbCBpc19yZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NzEzPXN0YXRpYyB2b2lkIGNvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY3MTUtXHRcdFx0XHR1MzIgaWQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY3MTY6XHRcdFx0XHRzdHJ1Y3QgbGlua2VkX3JlZ3MgKmxpbmtlZF9yZWdzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NzE3LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3NDY9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY3NDc6XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqa25vd25fcmVnLCBzdHJ1Y3QgbGlua2VkX3JlZ3MgKmxpbmtlZF9yZWdzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NzQ4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY4MDE9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwOC1cdHN0cnVjdCBicGZfcmVnX3N0YXRlICplcV9icmFuY2hfcmVncztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgwOTpcdHN0cnVjdCBsaW5rZWRfcmVncyBsaW5rZWRfcmVncyA9IHt9O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODEwLVx0dTggb3Bjb2RlID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3OTcKCQkJCQkJCW91dHB1dDogMjY4CgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlLiBJdCBzdGFydHMgYnkgaW5pdGlhbGl6aW5nIGBsaW5rZWRfcmVnc2Ag4oCTIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDogYHt9YC4gVGhlIGNvcmUgb2YgdGhpcyBpcyBhYm91dCBCUEYgdmVyaWZpZXIgbG9naWMsIHNwZWNpZmljYWxseSBlbnN1cmluZyBpdCYjMzk7cyBjb3JyZWN0LiBJIHNlZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIHNldmVyYWwgY3J1Y2lhbCBhcmVhczoKCiogICBGaXJzdCwgYHJlZ19ub3RfbnVsbGAgaXMgZ2V0dGluZyBhIGNsb3NlciBsb29rIGZvciBhbnkgYm91bmRzIG9yIG92ZXJmbG93IGlzc3VlcyB3aXRoIHBvaW50ZXIgb2Zmc2V0cy4gVGhhdCYjMzk7cyBnb29kOyB0aG9zZSBjYW4gYmUgbmFzdHkgdG8gdHJhY2sgZG93biBsYXRlci4KKiAgIFRoZW4sIHRoZXkmIzM5O3JlIGRpZ2dpbmcgaW50byB0aGUgbnVhbmNlcyBvZiBob3cganVtcCBwb2ludGVyIGNvbXBhcmlzb25zIHdvcmssIGVzcGVjaWFsbHkgdGhlIDMyLWJpdCB2ZXJzdXMgNjQtYml0IGJlaGF2aW9yIHdpdGhpbiBgaXNfYnJhbmNoX3Rha2VuYC4gVGhpcyBjYW4gZ2V0IHJlYWxseSBoYWlyeSB3aXRoIHBvaW50ZXIgYXJpdGhtZXRpYywgc28gdGhvcm91Z2huZXNzIGhlcmUgaXMgY3JpdGljYWwuCiogICBUaGV5JiMzOTtyZSBhbHNvIGFkanVzdGluZyB0aGUgdGltaW5nIG9mIGBjb2xsZWN0X2xpbmtlZF9yZWdzYCBpbiByZWxhdGlvbiB0byBzYXZpbmcgcmVnaXN0ZXJzIHdpdGhpbiBgY2hlY2tfY29uZF9qbXBfb3BgLiBUaGF0JiMzOTtzIGxpa2VseSBhYm91dCBlbnN1cmluZyB0aGUgdmVyaWZpZXIgaGFzIHRoZSByaWdodCByZWdpc3RlciBzdGF0ZSBhdCB0aGUgY29ycmVjdCBtb21lbnQgaW4gdGhlIGNvbnRyb2wgZmxvdy4gVGltaW5nIGVycm9ycyBjYW4gYmUgcmVhbGx5IHN1YnRsZS4KKiAgIEZpbmFsbHksIHRoZXJlJiMzOTtzIGF0dGVudGlvbiBiZWluZyBwYWlkIHRvIHByZWNpc2lvbiBtYXJraW5nIGZvciBgc3JjX3JlZ2AgZHVyaW5nIG51bGwgY29tcGFyaXNvbnMuIFRoaXMgaXMgYWJvdXQgbWFraW5nIHN1cmUgdGhlIHZlcmlmaWVyIGhhcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlZ2lzdGVyJiMzOTtzIHBvdGVudGlhbCB2YWx1ZSByYW5nZXMsIGVzcGVjaWFsbHkgaW4gY2FzZXMgd2hlcmUgd2UmIzM5O3JlIHRlc3RpbmcgZm9yIG51bGwuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogSSYjMzk7bSBub3Qgc2VlaW5nIGFueXRoaW5nIGluIHRoZXNlIGNoYW5nZXMgdGhhdCB0b3VjaGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2VzIHN0YWNrIG9yIGhlYXAgZGF0YSwgb3IgY29waWVzIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmLiBUaGUgZml4ZXMsIGlmIHRoZXkgd2VyZSBpbiBwbGFjZSB0byBzdGFydCB3aXRoLCBhcmUgZW50aXJlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBwcmV2ZW50aW5nIG1lbW9yeSBzYWZldHkgaXNzdWVzIGxpa2Ugb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgb3IgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gQW5kIGZyYW5rbHksIHRob3NlIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIFVCLXNhbml0aXplciBhbnl3YXksIHNvIHdlJiMzOTtyZSBjb3ZlcmVkLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IHdhcnJhbnQgYSBLTVNBTiBzY2FuLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIGZpeCBzb3VuZG5lc3MgaXNzdWVzIHJlZ2FyZGluZyByZWdpc3RlciB0cmFja2luZywgc3BlY2lmaWNhbGx5OlxuMS4gSGFuZGxpbmcgb2Zmc2V0IHdyYXBwaW5nIHRvIHplcm8gaW4gYHJlZ19ub3RfbnVsbCgpYC5cbjIuIEhhbmRsaW5nIDMyLWJpdCBwb2ludGVyLXZzLXNjYWxhciBjb21wYXJpc29ucyBpbiBgaXNfYnJhbmNoX3Rha2VuKClgLlxuMy4gRW5zdXJpbmcgbGlua2VkIHJlZ2lzdGVycyBhcmUgY29sbGVjdGVkIGJlZm9yZSBzYXZpbmcgcmVnaXN0ZXJzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cbjQuIE1hcmtpbmcgcHJlY2lzaW9uIG9uIGBzcmNfcmVnYCB3aGVuIGNoZWNraW5nIG51bGxuZXNzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIChzdWNoIGFzIGBzdHJ1Y3QgbGlua2VkX3JlZ3NgKSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgKGUuZy4sIHplcm8taW5pdGlhbGl6ZWQgb24gZGVjbGFyYXRpb24pLCBhbmQgdGhlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCB2ZXJpZmllciBpbnRlcm5hbCBjb250cm9sLWZsb3cgYW5kIHJlZ2lzdGVyIHN0YXRlIGxvZ2ljLiBBbnkgcG90ZW50aWFsIG1pc2JlaGF2aW9yIHByZXZlbnRlZCBieSB0aGVzZSBmaXhlcyByZWxhdGVzIHRvIEJQRiB2ZXJpZmljYXRpb24gc291bmRuZXNzIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIGRlcmVmZXJlbmNlcyksIHdoaWNoIGlzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBmaXggc291bmRuZXNzIGlzc3VlcyByZWdhcmRpbmcgcmVnaXN0ZXIgdHJhY2tpbmcsIHNwZWNpZmljYWxseTpcbjEuIEhhbmRsaW5nIG9mZnNldCB3cmFwcGluZyB0byB6ZXJvIGluIGByZWdfbm90X251bGwoKWAuXG4yLiBIYW5kbGluZyAzMi1iaXQgcG9pbnRlci12cy1zY2FsYXIgY29tcGFyaXNvbnMgaW4gYGlzX2JyYW5jaF90YWtlbigpYC5cbjMuIEVuc3VyaW5nIGxpbmtlZCByZWdpc3RlcnMgYXJlIGNvbGxlY3RlZCBiZWZvcmUgc2F2aW5nIHJlZ2lzdGVycyBpbiBgY2hlY2tfY29uZF9qbXBfb3AoKWAuXG40LiBNYXJraW5nIHByZWNpc2lvbiBvbiBgc3JjX3JlZ2Agd2hlbiBjaGVja2luZyBudWxsbmVzcyBpbiBgY2hlY2tfY29uZF9qbXBfb3AoKWAuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGUgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCAoc3VjaCBhcyBgc3RydWN0IGxpbmtlZF9yZWdzYCkgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IChlLmcuLCB6ZXJvLWluaXRpYWxpemVkIG9uIGRlY2xhcmF0aW9uKSwgYW5kIHRoZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgdmVyaWZpZXIgaW50ZXJuYWwgY29udHJvbC1mbG93IGFuZCByZWdpc3RlciBzdGF0ZSBsb2dpYy4gQW55IHBvdGVudGlhbCBtaXNiZWhhdmlvciBwcmV2ZW50ZWQgYnkgdGhlc2UgZml4ZXMgcmVsYXRlcyB0byBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBkZXJlZmVyZW5jZXMpLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MDIuMjY0NTkwMDMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxODYwMDA2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19jb25kX2ptcF9vcFwiLFxuICAgIFwiaXNfYnJhbmNoX3Rha2VuXCIsXG4gICAgXCJyZWdfbm90X251bGxcIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIGZpeCBzb3VuZG5lc3MgaXNzdWVzIHJlZ2FyZGluZyByZWdpc3RlciB0cmFja2luZywgc3BlY2lmaWNhbGx5OlxcbjEuIEhhbmRsaW5nIG9mZnNldCB3cmFwcGluZyB0byB6ZXJvIGluIGByZWdfbm90X251bGwoKWAuXFxuMi4gSGFuZGxpbmcgMzItYml0IHBvaW50ZXItdnMtc2NhbGFyIGNvbXBhcmlzb25zIGluIGBpc19icmFuY2hfdGFrZW4oKWAuXFxuMy4gRW5zdXJpbmcgbGlua2VkIHJlZ2lzdGVycyBhcmUgY29sbGVjdGVkIGJlZm9yZSBzYXZpbmcgcmVnaXN0ZXJzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cXG40LiBNYXJraW5nIHByZWNpc2lvbiBvbiBgc3JjX3JlZ2Agd2hlbiBjaGVja2luZyBudWxsbmVzcyBpbiBgY2hlY2tfY29uZF9qbXBfb3AoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIChzdWNoIGFzIGBzdHJ1Y3QgbGlua2VkX3JlZ3NgKSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgKGUuZy4sIHplcm8taW5pdGlhbGl6ZWQgb24gZGVjbGFyYXRpb24pLCBhbmQgdGhlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCB2ZXJpZmllciBpbnRlcm5hbCBjb250cm9sLWZsb3cgYW5kIHJlZ2lzdGVyIHN0YXRlIGxvZ2ljLiBBbnkgcG90ZW50aWFsIG1pc2JlaGF2aW9yIHByZXZlbnRlZCBieSB0aGVzZSBmaXhlcyByZWxhdGVzIHRvIEJQRiB2ZXJpZmljYXRpb24gc291bmRuZXNzIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIGRlcmVmZXJlbmNlcyksIHdoaWNoIGlzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgZm9yIHBvaW50ZXIgbnVsbG5lc3MgaW5mZXJlbmNlLCAzMi1iaXQganVtcCBicmFuY2ggcHJlZGljdGlvbiwgbGlua2VkIHJlZ2lzdGVycyBjb2xsZWN0aW9uIHRpbWluZywgYW5kIHByZWNpc2lvbiB0cmFja2luZyBvbiByZWdpc3RlciBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZlcmlmaWNhdGlvbiBwYXRocyB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MDIuMjY0NTk0NzUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA1MjM0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTc6Mzg6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZTY0MDM1NjgzNzk1MS4uNzA5YjQ3OTNlOGViNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMzUyLDYgKzM1MiwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdFxcbiBcXHRpZiAodHlwZV9tYXlfYmVfbnVsbCh0eXBlKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIHR5cGVzIGJlbG93IGd1YXJhbnRlZSBhIG5vbi1OVUxMIGJhc2UsIGFuIHVuYm91bmRlZCBvZmZzZXQgY2FuXFxuK1xcdCAqIHN0aWxsIHdyYXAgYmFzZSArIG9mZnNldCB0byB6ZXJvLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJlZ19zbWluKHJlZykgXFx1MDAzYz0gLUJQRl9NQVhfVkFSX09GRiB8fCByZWdfc21heChyZWcpIFxcdTAwM2U9IEJQRl9NQVhfVkFSX09GRilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0dHlwZSA9IGJhc2VfdHlwZSh0eXBlKTtcXG4gXFx0cmV0dXJuIHR5cGUgPT0gUFRSX1RPX1NPQ0tFVCB8fFxcbiBcXHRcXHR0eXBlID09IFBUUl9UT19UQ1BfU09DSyB8fFxcbkBAIC0xNjMwMiw2ICsxNjMwOSwxMyBAQCBzdGF0aWMgaW50IGlzX2JyYW5jaF90YWtlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqclxcbiBcXHRpZiAoX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcxKSB8fCBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzIpKSB7XFxuIFxcdFxcdHU2NCB2YWw7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIG1heSB3ZWxsIGJlIHplcm8sIGhlbmNlXFxuK1xcdFxcdCAqIG5vdGhpbmcgYmVsb3cgYXBwbGllcyB0byBhIDMyLWJpdCBjb21wYXJpc29uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGlzX2ptcDMyKVxcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbiBcXHRcXHQvKiBhcnJhbmdlIHRoYXQgcmVnMiBpcyBhIHNjYWxhciwgYW5kIHJlZzEgaXMgYSBwb2ludGVyICovXFxuIFxcdFxcdGlmICghaXNfcmVnX2NvbnN0KHJlZzIsIGlzX2ptcDMyKSkge1xcbiBcXHRcXHRcXHRvcGNvZGUgPSBmbGlwX29wY29kZShvcGNvZGUpO1xcbkBAIC0xNjg2Myw2ICsxNjg3NywxNiBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIENvbGxlY3QgdGhlIGxpbmtlZCByZWdpc3RlcnMgYmVmb3JlIGVudi1cXHUwMDNle3RydWUsZmFsc2V9X3JlZ3sxLDJ9IHNldHVwLFxcbitcXHQgKiBvdGhlcndpc2UgaWRzIGRyb3BwZWQgYnkgY29sbGVjdF9saW5rZWRfcmVncygpIHdvdWxkIGJlIHJlc3VycmVjdGVkXFxuK1xcdCAqIHdoZW4gZW52LVxcdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gYXJlIGNvcGllZCBiYWNrLlxcbitcXHQgKi9cXG4rXFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1ggXFx1MDAyNlxcdTAwMjYgc3JjX3JlZy1cXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUgXFx1MDAyNlxcdTAwMjYgc3JjX3JlZy1cXHUwMDNlaWQpXFxuK1xcdFxcdGNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgc3JjX3JlZy1cXHUwMDNlaWQsIFxcdTAwMjZsaW5rZWRfcmVncyk7XFxuK1xcdGlmIChkc3RfcmVnLVxcdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcXHUwMDI2XFx1MDAyNiBkc3RfcmVnLVxcdTAwM2VpZClcXG4rXFx0XFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBkc3RfcmVnLVxcdTAwM2VpZCwgXFx1MDAyNmxpbmtlZF9yZWdzKTtcXG4rXFxuIFxcdGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9KTVAzMjtcXG4gXFx0ZW52LVxcdTAwM2VmYWxzZV9yZWcxID0gKmRzdF9yZWc7XFxuIFxcdGVudi1cXHUwMDNlZmFsc2VfcmVnMiA9ICpzcmNfcmVnO1xcbkBAIC0xNjkxNywxMCArMTY5NDEsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdCAqICd0aGlzX2JyYW5jaCcgYW5kICdvdGhlcl9icmFuY2gnIHNoYXJlIHRoaXMgaGlzdG9yeVxcbiBcXHQgKiBpZiBwYXJlbnQgc3RhdGUgaXMgY3JlYXRlZC5cXG4gXFx0ICovXFxuLVxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YIFxcdTAwMjZcXHUwMDI2IHNyY19yZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFxcdTAwMjZcXHUwMDI2IHNyY19yZWctXFx1MDAzZWlkKVxcbi1cXHRcXHRjb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWctXFx1MDAzZWlkLCBcXHUwMDI2bGlua2VkX3JlZ3MpO1xcbi1cXHRpZiAoZHN0X3JlZy1cXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUgXFx1MDAyNlxcdTAwMjYgZHN0X3JlZy1cXHUwMDNlaWQpXFxuLVxcdFxcdGNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgZHN0X3JlZy1cXHUwMDNlaWQsIFxcdTAwMjZsaW5rZWRfcmVncyk7XFxuIFxcdGlmIChsaW5rZWRfcmVncy5jbnQgXFx1MDAzZSAxKSB7XFxuIFxcdFxcdGVyciA9IGJwZl9wdXNoX2ptcF9oaXN0b3J5KGVudiwgdGhpc19icmFuY2gsIDAsIDAsIDAsIGxpbmtlZF9yZWdzX3BhY2soXFx1MDAyNmxpbmtlZF9yZWdzKSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTE3MDA0LDYgKzE3MDI0LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0ICAgIHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICgoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSyBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gPT0gMCkgfHxcXG4gXFx0ICAgICAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCBcXHUwMDI2XFx1MDAyNiBicGZfcmVnaXN0ZXJfaXNfbnVsbChzcmNfcmVnKSkpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEZvciBCUEZfWCB0aGUgemVybyBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZXhlY3V0aW9uIHBhdGgsXFxuK1xcdFxcdCAqIGhlbmNlIHNyY19yZWcgaGFzIHRvIGJlIHByZWNpc2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xcbitcXHRcXHRcXHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIGluc24tXFx1MDAzZXNyY19yZWcpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuIFxcdFxcdC8qIE1hcmsgYWxsIGlkZW50aWNhbCByZWdpc3RlcnMgaW4gZWFjaCBicmFuY2ggYXMgZWl0aGVyXFxuIFxcdFxcdCAqIHNhZmUgb3IgdW5rbm93biBkZXBlbmRpbmcgUiA9PSAwIG9yIFIgIT0gMCBjb25kaXRpb25hbC5cXG4gXFx0XFx0ICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xcbmluZGV4IGI0MTJhNTQyZWY3NmYuLjNjNzg5YzU2NWIxOGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXFxuQEAgLTMxMSw2ICszMTEsMTQ3IEBAIF9fbmFrZWQgdm9pZCB1bnRydXN0ZWRfbWVtX2RvZXNfbm90X2luZmVyX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKVxcbiBcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBBIHBvaW50ZXIgd2l0aCBhbiBvZmZzZXQgdGhhdCBpcyBub3QgYm91bmRlZCBmcm9tIGFib3ZlIG1heSBiZSBudWxsIGF0XFxuKyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguXFxuKyAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fZmFpbHVyZVxcbitfX21zZyhcXFwiZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjcgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpXFxcIilcXG4rX19uYWtlZCB2b2lkIHVuYm91bmRlZF9vZmZzZXRfZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFxcdTAwMjYwKTsgKi9cXHRcXFxcXFxuK1xcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gJVttYXBfaGFzaF0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9IHIxMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyICs9IC04O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1xcdFxcdFxcdFxcXFxcXG4rXFx0aWYgcjAgPT0gMCBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI3ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXFx1MDAyNjEpOyAqL1xcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSAxO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAlW21hcF9oYXNoXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XFx0XFx0XFx0XFxcXFxcbitcXHRyNyA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi9cXHRcXFxcXFxuK1xcdHI4ID0gcjc7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCAtPSByNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI4IGlzIGluIFswLCBTNjRfTUFYXSAqL1xcdFxcdFxcdFxcXFxcXG4rXFx0cjggXFx1MDAzY1xcdTAwM2M9IDE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCBcXHUwMDNlXFx1MDAzZT0gMTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI2IG1heSB3cmFwIHRvIHplcm8gYXQgcnVudGltZSAqL1xcdFxcdFxcXFxcXG4rXFx0cjYgKz0gcjg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByNyAhPSByNiBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAqKHU4ICopKHI3ICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxcbitcXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19uYWtlZCB2b2lkIGJvdW5kZWRfb2Zmc2V0X2luZmVyc19tYXBfdmFsdWVfbm9uX251bGwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXFx1MDAyNjApOyAqL1xcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSAwO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAlW21hcF9oYXNoXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCA9PSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LyogcjcgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcXHUwMDI2MSk7ICovXFx0XFxcXFxcbitcXHQqKHU2NCAqKShyMTAgLSA4KSA9IDE7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSByMTA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiArPSAtODtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHI3ID0gcjA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQvKiBwb2ludGVyIC0gcG9pbnRlciBpcyBhbiB1bmtub3duIHNjYWxhciAqL1xcdFxcXFxcXG4rXFx0cjggPSByNztcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI4IC09IHI2O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LyogcjggaXMgaW4gWzAsIDNdICovXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCBcXHUwMDI2PSAzO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgKz0gcjg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByNyAhPSByNiBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAqKHU4ICopKHI3ICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxcbitcXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoZSBsb3cgMzIgYml0cyBvZiBhIG1hcCB2YWx1ZSBwb2ludGVyIG1heSBiZSB6ZXJvLCBoZW5jZSBhIDMyLWJpdFxcbisgKiBjb21wYXJlIHdpdGggemVybyBjYW5ub3QgYmUgcHJlZGljdGVkIGZyb20gdGhlIHBvaW50ZXIgYmVpbmcgbm9uLU5VTExcXG4rICogYW5kIGJvdGggc3VjY2Vzc29ycyBvZiBzdWNoIGEganVtcCBoYXZlIHRvIGJlIHZlcmlmaWVkLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgYWNjZXNzIHRvIG1hcCB2YWx1ZSwgdmFsdWVfc2l6ZT00IG9mZj0zMiBzaXplPTRcXFwiKVxcbitfX25ha2VkIHZvaWQgam1wMzJfcHRyX3ZzX3plcm9fam5lKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFxcdTAwMjZrZXkpOyAqL1xcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSAwO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAlW21hcF9oYXNoXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCA9PSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiB3MCAhPSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9ICoodTMyICopKHIwICsgMzIpO1xcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcXG4rXFx0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBUaGUgYmVsb3cgcHJvZ3JhbSBpcyBleHBsb3JlZCBpbiB0d28gcGF0aHM6IHI2ID09IDAgYW5kIHI2ID09IDEuXFxuKyAqIE9uIHRoZSBmaXJzdCBwYXRoIGNvbXBhcmlzb24gXFxcImlmIHIwID09IHI2IGdvdG8gMmZcXFwiIHNob3VsZCBtYXJrIHI2IGFzIHByZWNpc2UsXFxuKyAqIG90aGVyd2lzZSB1bnNhZmUgcGF0aCB3aXRoIHI2ID09IDEgd291bGQgYmUgaW5jb3JyZWN0bHkgcHJ1bmVkLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2ZhaWx1cmVcXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcXG4rX19tc2coXFxcImVycm9yOiBpbnZhbGlkIGRlcmVmZXJlbmNlIG9mIFIwIChhIG51bGxhYmxlIG1hcCB2YWx1ZSBwb2ludGVyKVxcXCIpXFxuK19fbmFrZWQgdm9pZCBpbXByZWNpc2VfemVyb19kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI2IGlzIDAgb24gdGhlIHBhdGggZXhwbG9yZWQgZmlyc3QsIDEgb24gdGhlIG90aGVyICovXFxcXFxcbitcXHRyNiA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCA9PSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFxcdTAwMjYwKTsgKi9cXHRcXFxcXFxuKzE6XFx0Kih1NjQgKikocjEwIC0gOCkgPSAwO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAlW21hcF9oYXNoXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCA9PSByNiBnb3RvIDJmO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAqKHU4ICopKHIwICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbisyOlxcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpLFxcbitcXHQgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxcbitcXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuIHZvaWQga2Z1bmNfcm9vdCh2b2lkKVxcbiB7XFxuIFxcdGJwZl9yZG9ubHlfY2FzdCgwLCAwKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmNcXG5pbmRleCA2NjNkMTVmYzVmZDI2Li4yNTY1NDcwNDhjYzQ1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXFxuQEAgLTM4MCwxMyArMzgwLDE0IEBAIFNFQyhcXFwic29ja2V0XFxcIilcXG4gX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuIF9fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXFxuIC8qXFxuLSAqIGNoZWNrIHRoYXQgcjAgYW5kIHI1IGhhdmUgZGlmZmVyZW50IElEcyBhZnRlciAnaWYnLFxcbi0gKiBjb2xsZWN0X2xpbmtlZF9yZWdzKCkgY2FuJ3QgdGllIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbi5cXG4rICogY2hlY2sgdGhhdCByNSBpcyB1bmxpbmtlZCBhZnRlciAnaWYnLCBjb2xsZWN0X2xpbmtlZF9yZWdzKCkgY2FuJ3QgdGllXFxuKyAqIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbiBhbmQgdGhlIHJlZ2lzdGVyIGNvbXBhcmVkIGJ5XFxuKyAqIHRoZSBqdW1wIGlzIG5vdCBleGVtcHQgZnJvbSB0aGF0LlxcbiAgKi9cXG4tX19tc2coXFxcIjc6ICgyNSkgaWYgcjAgXFx1MDAzZSAweDcgZ290byBwYyswICAgICAgICAgOyBSMD1zY2FsYXIoaWQ9MVxcXCIpXFxuK19fbXNnKFxcXCI3OiAoMjUpIGlmIHI1IFxcdTAwM2UgMHg3IGdvdG8gcGMrMCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49XFxcIilcXG4gX19tc2coXFxcIjEyOiAoYmYpIHI1ID0gcjUgICAgICAgICAgICAgICAgICAgICAgOyBSNT1zY2FsYXIoaWQ9MlxcXCIpXFxuIC8qIGNoZWNrIHRoYXQgcnswLTR9IGFyZSBtYXJrZWQgcHJlY2lzZSBhZnRlciAnaWYnICovXFxuLV9fbXNnKFxcXCJmcmFtZTA6IHJlZ3M9cjAgc3RhY2s9IGJlZm9yZSA3OiAoMjUpIGlmIHIwIFxcdTAwM2UgMHg3IGdvdG8gcGMrMFxcXCIpXFxuK19fbXNnKFxcXCJmcmFtZTA6IHJlZ3M9cjAgc3RhY2s9IGJlZm9yZSA3OiAoMjUpIGlmIHI1IFxcdTAwM2UgMHg3IGdvdG8gcGMrMFxcXCIpXFxuIF9fbXNnKFxcXCJmcmFtZTA6IHBhcmVudCBzdGF0ZSByZWdzPXIwLHIxLHIyLHIzLHI0IHN0YWNrPTpcXFwiKVxcbiBfX25ha2VkIHZvaWQgbGlua2VkX3JlZ3NfdG9vX21hbnlfcmVncyh2b2lkKVxcbiB7XFxuQEAgLTQwMCw4ICs0MDEsOCBAQCBfX25ha2VkIHZvaWQgbGlua2VkX3JlZ3NfdG9vX21hbnlfcmVncyh2b2lkKVxcbiBcXHRcXFwicjMgPSByMDtcXFwiXFxuIFxcdFxcXCJyNCA9IHIwO1xcXCJcXG4gXFx0XFxcInI1ID0gcjA7XFxcIlxcbi1cXHQvKiBwcm9wYWdhdGUgcmFuZ2UgZm9yIHJ7MC01fSAqL1xcbi1cXHRcXFwiaWYgcjAgXFx1MDAzZSA3IGdvdG8gKzA7XFxcIlxcbitcXHQvKiByezAtNH0gZmlsbCB0aGUgcmVjb3JkLCByNSBkb2VzIG5vdCBmaXQgYW5kIGlzIHVubGlua2VkICovXFxuK1xcdFxcXCJpZiByNSBcXHUwMDNlIDcgZ290byArMDtcXFwiXFxuIFxcdC8qIGtlZXAgcnsxLTR9IGxpdmUgKi9cXG4gXFx0XFxcInIxID0gcjE7XFxcIlxcbiBcXHRcXFwicjIgPSByMjtcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjAyLjc0NTc4MzMwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc2NzA0NjI4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19jb25kX2ptcF9vcFwiLFxuICAgIFwiaXNfYnJhbmNoX3Rha2VuXCIsXG4gICAgXCJyZWdfbm90X251bGxcIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgZm9yIHBvaW50ZXIgbnVsbG5lc3MgaW5mZXJlbmNlLCAzMi1iaXQganVtcCBicmFuY2ggcHJlZGljdGlvbiwgbGlua2VkIHJlZ2lzdGVycyBjb2xsZWN0aW9uIHRpbWluZywgYW5kIHByZWNpc2lvbiB0cmFja2luZyBvbiByZWdpc3RlciBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZlcmlmaWNhdGlvbiBwYXRocyB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzozODowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTY0MDM1NjgzNzk1MS4uNzA5YjQ3OTNlOGViNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMzUyLDYgKzM1MiwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdFxuIFx0aWYgKHR5cGVfbWF5X2JlX251bGwodHlwZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdC8qXG4rXHQgKiBUaGUgdHlwZXMgYmVsb3cgZ3VhcmFudGVlIGEgbm9uLU5VTEwgYmFzZSwgYW4gdW5ib3VuZGVkIG9mZnNldCBjYW5cbitcdCAqIHN0aWxsIHdyYXAgYmFzZSArIG9mZnNldCB0byB6ZXJvLlxuK1x0ICovXG4rXHRpZiAocmVnX3NtaW4ocmVnKSBcdTAwM2M9IC1CUEZfTUFYX1ZBUl9PRkYgfHwgcmVnX3NtYXgocmVnKSBcdTAwM2U9IEJQRl9NQVhfVkFSX09GRilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0dHlwZSA9IGJhc2VfdHlwZSh0eXBlKTtcbiBcdHJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHxcbiBcdFx0dHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHxcbkBAIC0xNjMwMiw2ICsxNjMwOSwxMyBAQCBzdGF0aWMgaW50IGlzX2JyYW5jaF90YWtlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqclxuIFx0aWYgKF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgcmVnMSkgfHwgX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcyKSkge1xuIFx0XHR1NjQgdmFsO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIG1heSB3ZWxsIGJlIHplcm8sIGhlbmNlXG4rXHRcdCAqIG5vdGhpbmcgYmVsb3cgYXBwbGllcyB0byBhIDMyLWJpdCBjb21wYXJpc29uLlxuK1x0XHQgKi9cbitcdFx0aWYgKGlzX2ptcDMyKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbiBcdFx0LyogYXJyYW5nZSB0aGF0IHJlZzIgaXMgYSBzY2FsYXIsIGFuZCByZWcxIGlzIGEgcG9pbnRlciAqL1xuIFx0XHRpZiAoIWlzX3JlZ19jb25zdChyZWcyLCBpc19qbXAzMikpIHtcbiBcdFx0XHRvcGNvZGUgPSBmbGlwX29wY29kZShvcGNvZGUpO1xuQEAgLTE2ODYzLDYgKzE2ODc3LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIENvbGxlY3QgdGhlIGxpbmtlZCByZWdpc3RlcnMgYmVmb3JlIGVudi1cdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gc2V0dXAsXG4rXHQgKiBvdGhlcndpc2UgaWRzIGRyb3BwZWQgYnkgY29sbGVjdF9saW5rZWRfcmVncygpIHdvdWxkIGJlIHJlc3VycmVjdGVkXG4rXHQgKiB3aGVuIGVudi1cdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gYXJlIGNvcGllZCBiYWNrLlxuK1x0ICovXG4rXHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNiBzcmNfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBzcmNfcmVnLVx1MDAzZWlkKVxuK1x0XHRjb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWctXHUwMDNlaWQsIFx1MDAyNmxpbmtlZF9yZWdzKTtcbitcdGlmIChkc3RfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBkc3RfcmVnLVx1MDAzZWlkKVxuK1x0XHRjb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctXHUwMDNlaWQsIFx1MDAyNmxpbmtlZF9yZWdzKTtcbitcbiBcdGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0pNUDMyO1xuIFx0ZW52LVx1MDAzZWZhbHNlX3JlZzEgPSAqZHN0X3JlZztcbiBcdGVudi1cdTAwM2VmYWxzZV9yZWcyID0gKnNyY19yZWc7XG5AQCAtMTY5MTcsMTAgKzE2OTQxLDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICogJ3RoaXNfYnJhbmNoJyBhbmQgJ290aGVyX2JyYW5jaCcgc2hhcmUgdGhpcyBoaXN0b3J5XG4gXHQgKiBpZiBwYXJlbnQgc3RhdGUgaXMgY3JlYXRlZC5cbiBcdCAqL1xuLVx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZClcbi1cdFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBzcmNfcmVnLVx1MDAzZWlkLCBcdTAwMjZsaW5rZWRfcmVncyk7XG4tXHRpZiAoZHN0X3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgZHN0X3JlZy1cdTAwM2VpZClcbi1cdFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBkc3RfcmVnLVx1MDAzZWlkLCBcdTAwMjZsaW5rZWRfcmVncyk7XG4gXHRpZiAobGlua2VkX3JlZ3MuY250IFx1MDAzZSAxKSB7XG4gXHRcdGVyciA9IGJwZl9wdXNoX2ptcF9oaXN0b3J5KGVudiwgdGhpc19icmFuY2gsIDAsIDAsIDAsIGxpbmtlZF9yZWdzX3BhY2soXHUwMDI2bGlua2VkX3JlZ3MpKTtcbiBcdFx0aWYgKGVycilcbkBAIC0xNzAwNCw2ICsxNzAyNCwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgICAgdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICgoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9LIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSAwKSB8fFxuIFx0ICAgICAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNiBicGZfcmVnaXN0ZXJfaXNfbnVsbChzcmNfcmVnKSkpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEZvciBCUEZfWCB0aGUgemVybyBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZXhlY3V0aW9uIHBhdGgsXG4rXHRcdCAqIGhlbmNlIHNyY19yZWcgaGFzIHRvIGJlIHByZWNpc2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKSB7XG4rXHRcdFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4gXHRcdC8qIE1hcmsgYWxsIGlkZW50aWNhbCByZWdpc3RlcnMgaW4gZWFjaCBicmFuY2ggYXMgZWl0aGVyXG4gXHRcdCAqIHNhZmUgb3IgdW5rbm93biBkZXBlbmRpbmcgUiA9PSAwIG9yIFIgIT0gMCBjb25kaXRpb25hbC5cbiBcdFx0ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXG5pbmRleCBiNDEyYTU0MmVmNzZmLi4zYzc4OWM1NjViMThmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbkBAIC0zMTEsNiArMzExLDE0NyBAQCBfX25ha2VkIHZvaWQgdW50cnVzdGVkX21lbV9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuKy8qXG4rICogQSBwb2ludGVyIHdpdGggYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGJvdW5kZWQgZnJvbSBhYm92ZSBtYXkgYmUgbnVsbCBhdFxuKyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlXG4rX19tc2coXCJlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSNyAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcilcIilcbitfX25ha2VkIHZvaWQgdW5ib3VuZGVkX29mZnNldF9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHQvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjApOyAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0LyogcjcgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjYxKTsgKi9cdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IDE7XHRcdFx0XHRcXFxuK1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4rXHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIyICs9IC04O1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1x0XHRcdFxcXG4rXHRyNyA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0LyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi9cdFxcXG4rXHRyOCA9IHI3O1x0XHRcdFx0XHRcXFxuK1x0cjggLT0gcjY7XHRcdFx0XHRcdFxcXG4rXHQvKiByOCBpcyBpbiBbMCwgUzY0X01BWF0gKi9cdFx0XHRcXFxuK1x0cjggXHUwMDNjXHUwMDNjPSAxO1x0XHRcdFx0XHRcXFxuK1x0cjggXHUwMDNlXHUwMDNlPSAxO1x0XHRcdFx0XHRcXFxuK1x0LyogcjYgbWF5IHdyYXAgdG8gemVybyBhdCBydW50aW1lICovXHRcdFxcXG4rXHRyNiArPSByODtcdFx0XHRcdFx0XFxcbitcdGlmIHI3ICE9IHI2IGdvdG8gMWY7XHRcdFx0XHRcXFxuK1x0cjAgPSAqKHU4ICopKHI3ICsgMCk7XHRcdFx0XHRcXFxuKzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbitcdCAgX19pbW1fYWRkcihtYXBfaGFzaClcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgYm91bmRlZF9vZmZzZXRfaW5mZXJzX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdC8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXHUwMDI2MCk7ICovXHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbitcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyMiArPSAtODtcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHQvKiByNyA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjEpOyAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gMTtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdHI3ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHQvKiBwb2ludGVyIC0gcG9pbnRlciBpcyBhbiB1bmtub3duIHNjYWxhciAqL1x0XFxcbitcdHI4ID0gcjc7XHRcdFx0XHRcdFxcXG4rXHRyOCAtPSByNjtcdFx0XHRcdFx0XFxcbitcdC8qIHI4IGlzIGluIFswLCAzXSAqL1x0XHRcdFx0XFxcbitcdHI4IFx1MDAyNj0gMztcdFx0XHRcdFx0XFxcbitcdHI2ICs9IHI4O1x0XHRcdFx0XHRcXFxuK1x0aWYgcjcgIT0gcjYgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTggKikocjcgKyAwKTtcdFx0XHRcdFxcXG4rMTpcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxuK1x0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSBtYXAgdmFsdWUgcG9pbnRlciBtYXkgYmUgemVybywgaGVuY2UgYSAzMi1iaXRcbisgKiBjb21wYXJlIHdpdGggemVybyBjYW5ub3QgYmUgcHJlZGljdGVkIGZyb20gdGhlIHBvaW50ZXIgYmVpbmcgbm9uLU5VTExcbisgKiBhbmQgYm90aCBzdWNjZXNzb3JzIG9mIHN1Y2ggYSBqdW1wIGhhdmUgdG8gYmUgdmVyaWZpZWQuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBhY2Nlc3MgdG8gbWFwIHZhbHVlLCB2YWx1ZV9zaXplPTQgb2ZmPTMyIHNpemU9NFwiKVxuK19fbmFrZWQgdm9pZCBqbXAzMl9wdHJfdnNfemVyb19qbmUodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNmtleSk7ICovXHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbitcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyMiArPSAtODtcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdGlmIHcwICE9IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHIwICsgMzIpO1x0XHRcdFx0XFxcbisxOlx0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4rXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIFRoZSBiZWxvdyBwcm9ncmFtIGlzIGV4cGxvcmVkIGluIHR3byBwYXRoczogcjYgPT0gMCBhbmQgcjYgPT0gMS5cbisgKiBPbiB0aGUgZmlyc3QgcGF0aCBjb21wYXJpc29uIFwiaWYgcjAgPT0gcjYgZ290byAyZlwiIHNob3VsZCBtYXJrIHI2IGFzIHByZWNpc2UsXG4rICogb3RoZXJ3aXNlIHVuc2FmZSBwYXRoIHdpdGggcjYgPT0gMSB3b3VsZCBiZSBpbmNvcnJlY3RseSBwcnVuZWQuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitfX21zZyhcImVycm9yOiBpbnZhbGlkIGRlcmVmZXJlbmNlIG9mIFIwIChhIG51bGxhYmxlIG1hcCB2YWx1ZSBwb2ludGVyKVwiKVxuK19fbmFrZWQgdm9pZCBpbXByZWNpc2VfemVyb19kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdC8qIHI2IGlzIDAgb24gdGhlIHBhdGggZXhwbG9yZWQgZmlyc3QsIDEgb24gdGhlIG90aGVyICovXFxcbitcdHI2ID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHI2ID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0LyogcjAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjYwKTsgKi9cdFxcXG4rMTpcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdGlmIHIwID09IHI2IGdvdG8gMmY7XHRcdFx0XHRcXFxuK1x0cjAgPSAqKHU4ICopKHIwICsgMCk7XHRcdFx0XHRcXFxuKzI6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcbitcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4rXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiB2b2lkIGtmdW5jX3Jvb3Qodm9pZClcbiB7XG4gXHRicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmNcbmluZGV4IDY2M2QxNWZjNWZkMjYuLjI1NjU0NzA0OGNjNDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG5AQCAtMzgwLDEzICszODAsMTQgQEAgU0VDKFwic29ja2V0XCIpXG4gX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4gX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiAvKlxuLSAqIGNoZWNrIHRoYXQgcjAgYW5kIHI1IGhhdmUgZGlmZmVyZW50IElEcyBhZnRlciAnaWYnLFxuLSAqIGNvbGxlY3RfbGlua2VkX3JlZ3MoKSBjYW4ndCB0aWUgbW9yZSB0aGFuIDUgcmVnaXN0ZXJzIGZvciBhIHNpbmdsZSBpbnNuLlxuKyAqIGNoZWNrIHRoYXQgcjUgaXMgdW5saW5rZWQgYWZ0ZXIgJ2lmJywgY29sbGVjdF9saW5rZWRfcmVncygpIGNhbid0IHRpZVxuKyAqIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbiBhbmQgdGhlIHJlZ2lzdGVyIGNvbXBhcmVkIGJ5XG4rICogdGhlIGp1bXAgaXMgbm90IGV4ZW1wdCBmcm9tIHRoYXQuXG4gICovXG4tX19tc2coXCI3OiAoMjUpIGlmIHIwIFx1MDAzZSAweDcgZ290byBwYyswICAgICAgICAgOyBSMD1zY2FsYXIoaWQ9MVwiKVxuK19fbXNnKFwiNzogKDI1KSBpZiByNSBcdTAwM2UgMHg3IGdvdG8gcGMrMCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49XCIpXG4gX19tc2coXCIxMjogKGJmKSByNSA9IHI1ICAgICAgICAgICAgICAgICAgICAgIDsgUjU9c2NhbGFyKGlkPTJcIilcbiAvKiBjaGVjayB0aGF0IHJ7MC00fSBhcmUgbWFya2VkIHByZWNpc2UgYWZ0ZXIgJ2lmJyAqL1xuLV9fbXNnKFwiZnJhbWUwOiByZWdzPXIwIHN0YWNrPSBiZWZvcmUgNzogKDI1KSBpZiByMCBcdTAwM2UgMHg3IGdvdG8gcGMrMFwiKVxuK19fbXNnKFwiZnJhbWUwOiByZWdzPXIwIHN0YWNrPSBiZWZvcmUgNzogKDI1KSBpZiByNSBcdTAwM2UgMHg3IGdvdG8gcGMrMFwiKVxuIF9fbXNnKFwiZnJhbWUwOiBwYXJlbnQgc3RhdGUgcmVncz1yMCxyMSxyMixyMyxyNCBzdGFjaz06XCIpXG4gX19uYWtlZCB2b2lkIGxpbmtlZF9yZWdzX3Rvb19tYW55X3JlZ3Modm9pZClcbiB7XG5AQCAtNDAwLDggKzQwMSw4IEBAIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpXG4gXHRcInIzID0gcjA7XCJcbiBcdFwicjQgPSByMDtcIlxuIFx0XCJyNSA9IHIwO1wiXG4tXHQvKiBwcm9wYWdhdGUgcmFuZ2UgZm9yIHJ7MC01fSAqL1xuLVx0XCJpZiByMCBcdTAwM2UgNyBnb3RvICswO1wiXG4rXHQvKiByezAtNH0gZmlsbCB0aGUgcmVjb3JkLCByNSBkb2VzIG5vdCBmaXQgYW5kIGlzIHVubGlua2VkICovXG4rXHRcImlmIHI1IFx1MDAzZSA3IGdvdG8gKzA7XCJcbiBcdC8qIGtlZXAgcnsxLTR9IGxpdmUgKi9cbiBcdFwicjEgPSByMTtcIlxuIFx0XCJyMiA9IHIyO1wiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODowMi43NDU3ODQ4MzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTMxNTAyMDI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCB0aGUgYXNzb2NpYXRlZCBzZWxmdGVzdHMuIFRoZSB2ZXJpZmllciwgb2YgY291cnNlLCBpcyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgZXhlY3V0ZWQgd2hlbmV2ZXIgYSBCUEYgcHJvZ3JhbSBpcyBsb2FkZWQgdmlhIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAuIFNvLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbmVlZHMgY2FyZWZ1bCBzY3J1dGlueS4gQW5kIHRoZSBpbXBhY3QgaXMgaW1tZWRpYXRlbHkgb2J2aW91cywgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24uIFRoaXMgbWVhbnMgaXQncyBwb3RlbnRpYWxseSByZWFjaGFibGUgYnkgYm90aCB1bnByaXZpbGVnZWQgYW5kIHByaXZpbGVnZWQgdXNlcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgYSBmZXcga2V5IGFyZWFzIG9mIGNoYW5nZTpcblxuMS4gIEluIGByZWdfbm90X251bGxgLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyBudWxsIHBvaW50ZXIgY2hlY2tzIGFyZSBwZXJmb3JtZWQgcmVsYXRlZCB0byBvZmZzZXQgYm91bmRzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGAtQlBGX01BWF9WQVJfT0ZGYCBhbmQgYEJQRl9NQVhfVkFSX09GRmAuXG5cbjIuICBgaXNfYnJhbmNoX3Rha2VuYCBhbHNvIGhhcyBjaGFuZ2VzLCB3aGljaCByZWxhdGVzIHRvIG51bGwgY2hlY2tzIHdpdGggcG9pbnRlciBjb21wYXJpc29ucywgcGFydGljdWxhcmx5IGFyb3VuZCBgaXNfam1wMzJgICgzMiBiaXQgY29tcGFyaXNvbnMpLlxuXG4zLiAgYGNoZWNrX2NvbmRfam1wX29wYCBhcHBlYXJzIHRvIGJlIGdldHRpbmcgc29tZSBzaWduaWZpY2FudCByZXdvcmsuIFRoZSBgY29sbGVjdF9saW5rZWRfcmVnc2AgZnVuY3Rpb24gaXMgYmVpbmcgbW92ZWQsIGFuZCBgbWFya19jaGFpbl9wcmVjaXNpb25gIGlzIGJlaW5nIGFkZGVkIGluIHRoZSBwb2ludGVyLXZzLW51bGwgY2hlY2tpbmcgbG9naWMgd2hlbiBkZWFsaW5nIHdpdGggYEJQRl9YYCBzb3VyY2Ugb3BlcmFuZCBhbmQgdGhlIHNvdXJjZSByZWdpc3RlciBiZWluZyBudWxsLlxuXG5UaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHN0aWxsIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmOiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSB0aGUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBlbnRyeSBwb2ludHMgdGhyb3VnaCBgYnBmX2NoZWNrYCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIGByZWdfbm90X251bGxgLCBgaXNfYnJhbmNoX3Rha2VuYCwgYW5kIGBjaGVja19jb25kX2ptcF9vcGAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGNoYW5nZXMgZmxvdyB0aHJvdWdoIHRoZSBjb3JlIHZlcmlmaWVyIGxvZ2ljLlxuXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgb3IganVzdCBkaXJlY3RseSBleGFtaW5lIHRoZSBmaWxlIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgc3ltYm9scyBhbmQgY29uZmlncyByaWdodC4gVGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkLCBidXQgaXRzIGltcGxpY2F0aW9ucyBvbiBwb2ludGVyIGhhbmRsaW5nIGFuZCBjb25kaXRpb25hbCBqdW1wcyBpbiBCUEYgcHJvZ3JhbXMgY291bGQgYmUgc3Vic3RhbnRpYWwsIHNvIEkgbmVlZCB0byBnbyBkZWVwZXIgaW50byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY2OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjE0LjA2MDgwODY0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE2OTEyNjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjE0LjI0MjUwOTYyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjE1ODI0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgQlBGX1NZU0NBTEwgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBCUEZfU1lTQ0FMTGAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCB3aXRoIGBLY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMgYXJlIHNldCwgc28gYEJQRl9TWVNDQUxMYCwgYmVpbmcgYSBtYWNybyBsaWtlbHkgdGllZCB0byBhIGZlYXR1cmUgb3IgZnVuY3Rpb25hbGl0eSwgKnNob3VsZCogYmUgZGVmaW5lZCBpbiBhIGBLY29uZmlnYCBmaWxlIHNvbWV3aGVyZS4gVGhlIGNoYWxsZW5nZSBub3cgaXMgZmlndXJpbmcgb3V0IHdoZXJlIHRoYXQgYEtjb25maWdgIGlzLiBJJ2xsIG5lZWQgdG8gZG8gc29tZSBkaWdnaW5nLCBwcm9iYWJseSB1c2luZyBgZ3JlcGAgb3Igc2ltaWxhciB0b29scywgc2VhcmNoaW5nIHRoZSBzb3VyY2UgdHJlZSBmb3IgcmVmZXJlbmNlcyBvciBkZWZpbml0aW9ucy4gSSdtIGV4cGVjdGluZyBpdCB0byBiZSBuZXN0ZWQgd2l0aGluIGEgZmVhdHVyZSB0aGF0IGhhcyB0byBiZSBjb25maWd1cmVkIHdoZW4gdGhlIGtlcm5lbCBpcyBjb21waWxlZC4gT25jZSBJIGxvY2F0ZSB0aGUgZmlsZSwgSSBjYW4gYW5hbHl6ZSB0aGUgYXNzb2NpYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGBCUEZfU1lTQ0FMTGAgYW5kLCBjcnVjaWFsbHksIHVuZGVyc3RhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gd29yayB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzEwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MTYuNjY0MDk0NTE4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTE4MTMzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MTguMzc1OTE1MDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ1NjA2NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBCUEYgdmVyaWZpZXIgaXMgbWFuYWdpbmcgY29uZGl0aW9uYWwganVtcHMgYW5kIHJlZ2lzdGVyIHZhbGlkaXR5LiBNeSBodW5jaCBpcyB0aGF0IGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgd2lsbCByZXZlYWwgc29tZSBrZXkgZGV0YWlscy4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIGZ1bmN0aW9ucyBsaWtlIGByZWdfbm90X251bGxgLCBgaXNfYnJhbmNoX3Rha2VuYCwgYW5kIGBjaGVja19jb25kX2ptcF9vcGAgYXJlIGRlZmluZWQgd2l0aCBzdGF0aWMgbGlua2FnZSBvciBpZiB0aGV5IGFyZSBhY2Nlc3NpYmxlIGdsb2JhbGx5IHdpdGhpbiB0aGUgdmVyaWZpZXIncyBzY29wZS4gVGhlaXIgc2NvcGUgd2lsbCBpbmZsdWVuY2UgaG93IGVhc2lseSB0aGV5IGNhbiBiZSByZS11c2VkIGFuZCBleHRlbmRlZC4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byB0cmFjZSB0aGVpciBjYWxsIHNpdGVzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlICpjYWxsZWQqIHByb3ZpZGVzIHZpdGFsIGNvbnRleHQgZm9yIHRoZWlyIGZ1bmN0aW9uYWxpdHksIGFuZCB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgdmVyaWZpZXIncyBjb250cm9sIGZsb3cgYW5kIGRlY2lzaW9uLW1ha2luZyBsb2dpYywgcGFydGljdWxhcmx5IGFyb3VuZCBjb25kaXRpb25hbCBqdW1wcyBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcuIFRoaXMgaW5mb3JtYXRpb24gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcsIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6aW5nLCB0aGUgQlBGIHZlcmlmaWVyJ3Mgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDYzLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MjAuNjIxNTI0MjMzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODA5ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihyZWdfbm90X251bGx8aXNfYnJhbmNoX3Rha2VufGNoZWNrX2NvbmRfam1wX29wKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTU4PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAtICogUFRSX1RPX01BUF9WQUxVRSBhbmQgdGhlIHNhbWUgcmVnaXN0ZXIgY2hhbmdlcyBzdGF0ZSB0byBDT05TVF9JTU0gaW4gdGhlIGZhbHNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTogKiBicmFuY2guIFNlZSBjaGVja19jb25kX2ptcF9vcCgpLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjItICpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjY9c3RhdGljIHZvaWQgdmVyYm9zZV9pbnZhbGlkX3NjYWxhcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQ3OnN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MjU2PXN0YXRpYyBpbnQgaXNfcGt0X3B0cl9icmFuY2hfdGFrZW4oc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzMDItICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzAzOnN0YXRpYyBpbnQgaXNfYnJhbmNoX3Rha2VuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMwNC1cXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMiwgdTggb3Bjb2RlLCBib29sIGlzX2ptcDMyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzI3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjMyODpcXHRcXHRpZiAoIXJlZ19ub3RfbnVsbChlbnYsIHJlZzEpKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMyOS1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3NDY9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODAxOnN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCAqaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4OTQtXFx0ZW52LVxcdTAwM2V0cnVlX3JlZzIgPSAqc3JjX3JlZztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY4OTU6XFx0cHJlZCA9IGlzX2JyYW5jaF90YWtlbihlbnYsIGRzdF9yZWcsIHNyY19yZWcsIG9wY29kZSwgaXNfam1wMzIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjg5Ni1cXHRpZiAocHJlZCBcXHUwMDNlPSAwKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODk3LVxcdFxcdC8qIElmIHdlIGdldCBoZXJlIHdpdGggYSBkc3RfcmVnIHBvaW50ZXIgdHlwZSBpdCBpcyBiZWNhdXNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODk4OlxcdFxcdCAqIGFib3ZlIGlzX2JyYW5jaF90YWtlbigpIHNwZWNpYWwgY2FzZWQgdGhlIDAgY29tcGFyaXNvbi5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4OTktXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcwMDgtXFx0XFx0XFx0Lyogc3JjID09IGRzdCBcXHUwMDI2XFx1MDAyNiBkc3QgIT0gTlVMTCA9XFx1MDAzZSBzcmMgIT0gTlVMTCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzAwOTpcXHRcXHRcXHRpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgXFx1MDAyNlxcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLVxcdTAwM2V0eXBlKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcwMTAtXFx0XFx0XFx0XFx0bWFya19wdHJfbm90X251bGxfcmVnKFxcdTAwMjZlcV9icmFuY2hfcmVnc1tpbnNuLVxcdTAwM2VzcmNfcmVnXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MDExLVxcdFxcdFxcdC8qIHNyYyA9PSBkc3QgXFx1MDAyNlxcdTAwMjYgc3JjICE9IE5VTEwgPVxcdTAwM2UgZHN0ICE9IE5VTEwgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcwMTI6XFx0XFx0XFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIHNyY19yZWcpIFxcdTAwMjZcXHUwMDI2IHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cXHUwMDNldHlwZSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MDEzLVxcdFxcdFxcdFxcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ10pO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTA3PXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE5My1cXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTk0OlxcdFxcdHJldHVybiBjaGVja19jb25kX2ptcF9vcChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxOTUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODoyMC42NzQzMzc4NDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzIwMjU4Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHBlcnNwZWN0aXZlIG9uIHRoaXMgc3BlY2lmaWMgbGluZSBvZiBpbnF1aXJ5OlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9jaGVja2AgaW4gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGJyb2FkZW4gb3VyIHNjb3BlIGEgYml0LiBXaGlsZSB3ZSd2ZSBiZWVuIGV4YW1pbmluZyBvdGhlciBhcmVhcywgSSdtIGZlZWxpbmcgYSBuYWdnaW5nIHNlbnNhdGlvbiB0aGF0IHdlIG1pZ2h0IGJlIG92ZXJsb29raW5nIHNvbWV0aGluZyBjcnVjaWFsLiBTcGVjaWZpY2FsbHksIEknbSBub3cgdGhpbmtpbmcgd2Ugc2hvdWxkIHJlYWxseSB0YWtlIGEgaGFyZCBsb29rIGF0IGBicGZfY2hlY2tgIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHdob2xlIEJQRiB2ZXJpZmljYXRpb24gcHJvY2VzcywgYW5kIGlmIHRoZXJlJ3MgYW4gaXNzdWUgbWFuaWZlc3RpbmcsIGl0J3MgdmVyeSBsaWtlbHkgdGllZCB0byB0aGlzIHBhcnRpY3VsYXIgYXJlYS4gTGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGV4cGxvcmVkIHRoYXQgc2VjdGlvbiB0aG9yb3VnaGx5OyBpdCB3YXJyYW50cyBpbW1lZGlhdGUgYXR0ZW50aW9uLiBNeSBndXQgc2F5cyBpdCdzIGxpa2VseSBsaW5rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODoyNS4zOTQ1OTk2NTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzIzMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBicGZfY2hlY2tcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTIwODk2PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDEyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTAxMzppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMTQtXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjI1LjQ1MDkzMjY1M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQzNjUxMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEJQRiBWZXJpZmllcioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRvIHRhcmdldCBmb3IgZnV6emluZy4gRmlyc3QsIEknbSBnb2luZyB0byBwdWxsIG91dCB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSBpdCdzIHRoZXNlIGZ1bmN0aW9uczogYGNoZWNrX2NvbmRfam1wX29wYCwgYGlzX2JyYW5jaF90YWtlbmAsIGByZWdfbm90X251bGxgLCBhbmQgYGJwZl9jaGVja2AuIEdvdCBpdC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guIEJhc2VkIG9uIG15IGFuYWx5c2lzLCBpdCBzZWVtcyBsaWtlIHRoZXNlIHdlcmUgYWxsIHRvdWNoZWQ6IGByZWdfbm90X251bGxgLCBgaXNfYnJhbmNoX3Rha2VuYCwgYGNoZWNrX2NvbmRfam1wX29wYCwgYWxsIGxvY2F0ZWQgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBhbmQgdGhlIG90aGVyIHRocmVlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIGFuZCB3ZXJlIG1vZGlmaWVkLiBPa2F5LlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgZnV6emluZyB3b3J0aGluZXNzLiBUaGUgQlBGIHZlcmlmaWVyIGlzIGRlZmluaXRlbHkgYSBjb3JlIHN1YnN5c3RlbeKAlGl0J3MgcmlnaHQgdGhlcmUgaW4gQlBGLiBUaGUgcGF0Y2ggZGV0YWlscyBtb2RpZmljYXRpb25zIGluIHJhbmdlIHRyYWNraW5nLCBwb2ludGVyIG51bGxuZXNzLCBicmFuY2ggcHJlZGljdGlvbiwgcmVnaXN0ZXIgbGlua2luZywgYW5kIHByZWNpc2lvbiB0cmFja2luZy4gU2lnbmlmaWNhbnQgc3R1ZmYuIEFsc28sIEkgY2FuIHJlYWNoIGl0IHZpYSB0aGUgYHN5c19icGZgIHN5c2NhbGwgd2l0aCBgQlBGX1BST0dfTE9BRGAuICpEZWZpbml0ZWx5KiBXb3J0aEZ1enppbmc9dHJ1ZS4gTm8gcXVlc3Rpb24uXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIHJlbGV2YW50IG9uZSBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAsIHVuZGVyIHRoZSBcIkJQRiBzdWJzeXN0ZW1cIiBtZW51LiBHb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkLlxuXG5MZXQncyByZXZpZXcgdGhlIGZvY3VzIHN5bWJvbCBydWxlcyB0byBtYWtlIHN1cmUgSSdtIGRvaW5nIHRoaXMgcmlnaHQuIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIHNwZWNpZmljLCBub24tdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zLCB0YXJnZXRpbmcgZnVuY3Rpb25zIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGFjdGluZyBhcyBkaXJlY3QgY2FsbGVyIGVudHJ5cG9pbnRzLiBUaGUgb25lcyBJJ3ZlIHNlbGVjdGVkLCBgY2hlY2tfY29uZF9qbXBfb3BgLCBgaXNfYnJhbmNoX3Rha2VuYCwgYHJlZ19ub3RfbnVsbGAsIGFuZCBgYnBmX2NoZWNrYCwgZml0IHRoZSBiaWxsIHBlcmZlY3RseS5cblxuRmluYWxseSwganVzdCBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiB0aGUgZGlmZiBhbmQgYWxsIG1vZGlmaWVkIGZpbGVzIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBMb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB3aXRoIHNvbWUgYXNzb2NpYXRlZCBzZWxmLXRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYC4gVGhlIHNlbGYtdGVzdHMgYXJlIHVzZXItc3BhY2UsIHNvIEkgZG9uJ3QgbmVlZCBhbnkgc3ltYm9scyBmcm9tIHRoZW0uIEFsbCBjbGVhci4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzMsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjMwLjI5NDU4Njc2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTY1NTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19jb25kX2ptcF9vcFwiLFxuICAgIFwiaXNfYnJhbmNoX3Rha2VuXCIsXG4gICAgXCJyZWdfbm90X251bGxcIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgZm9yIHBvaW50ZXIgbnVsbG5lc3MgaW5mZXJlbmNlLCAzMi1iaXQganVtcCBicmFuY2ggcHJlZGljdGlvbiwgbGlua2VkIHJlZ2lzdGVycyBjb2xsZWN0aW9uIHRpbWluZywgYW5kIHByZWNpc2lvbiB0cmFja2luZyBvbiByZWdpc3RlciBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZlcmlmaWNhdGlvbiBwYXRocyB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX2NvbmRfam1wX29wXCIsXG4gICAgXCJpc19icmFuY2hfdGFrZW5cIixcbiAgICBcInJlZ19ub3RfbnVsbFwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBmb3IgcG9pbnRlciBudWxsbmVzcyBpbmZlcmVuY2UsIDMyLWJpdCBqdW1wIGJyYW5jaCBwcmVkaWN0aW9uLCBsaW5rZWQgcmVnaXN0ZXJzIGNvbGxlY3Rpb24gdGltaW5nLCBhbmQgcHJlY2lzaW9uIHRyYWNraW5nIG9uIHJlZ2lzdGVyIGNvbXBhcmlzb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmVyaWZpY2F0aW9uIHBhdGhzIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODozMC40MTYyNTAwNjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDM0MzI1MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MzAuNDE2Nzc3MjkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUwMzM3OTA1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBmaXggc291bmRuZXNzIGlzc3VlcyByZWdhcmRpbmcgcmVnaXN0ZXIgdHJhY2tpbmcsIHNwZWNpZmljYWxseTpcXG4xLiBIYW5kbGluZyBvZmZzZXQgd3JhcHBpbmcgdG8gemVybyBpbiBgcmVnX25vdF9udWxsKClgLlxcbjIuIEhhbmRsaW5nIDMyLWJpdCBwb2ludGVyLXZzLXNjYWxhciBjb21wYXJpc29ucyBpbiBgaXNfYnJhbmNoX3Rha2VuKClgLlxcbjMuIEVuc3VyaW5nIGxpbmtlZCByZWdpc3RlcnMgYXJlIGNvbGxlY3RlZCBiZWZvcmUgc2F2aW5nIHJlZ2lzdGVycyBpbiBgY2hlY2tfY29uZF9qbXBfb3AoKWAuXFxuNC4gTWFya2luZyBwcmVjaXNpb24gb24gYHNyY19yZWdgIHdoZW4gY2hlY2tpbmcgbnVsbG5lc3MgaW4gYGNoZWNrX2NvbmRfam1wX29wKClgLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGUgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCAoc3VjaCBhcyBgc3RydWN0IGxpbmtlZF9yZWdzYCkgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IChlLmcuLCB6ZXJvLWluaXRpYWxpemVkIG9uIGRlY2xhcmF0aW9uKSwgYW5kIHRoZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgdmVyaWZpZXIgaW50ZXJuYWwgY29udHJvbC1mbG93IGFuZCByZWdpc3RlciBzdGF0ZSBsb2dpYy4gQW55IHBvdGVudGlhbCBtaXNiZWhhdmlvciBwcmV2ZW50ZWQgYnkgdGhlc2UgZml4ZXMgcmVsYXRlcyB0byBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBkZXJlZmVyZW5jZXMpLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzozODowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTY0MDM1NjgzNzk1MS4uNzA5YjQ3OTNlOGViNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMzUyLDYgKzM1MiwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdFxuIFx0aWYgKHR5cGVfbWF5X2JlX251bGwodHlwZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdC8qXG4rXHQgKiBUaGUgdHlwZXMgYmVsb3cgZ3VhcmFudGVlIGEgbm9uLU5VTEwgYmFzZSwgYW4gdW5ib3VuZGVkIG9mZnNldCBjYW5cbitcdCAqIHN0aWxsIHdyYXAgYmFzZSArIG9mZnNldCB0byB6ZXJvLlxuK1x0ICovXG4rXHRpZiAocmVnX3NtaW4ocmVnKSBcdTAwM2M9IC1CUEZfTUFYX1ZBUl9PRkYgfHwgcmVnX3NtYXgocmVnKSBcdTAwM2U9IEJQRl9NQVhfVkFSX09GRilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0dHlwZSA9IGJhc2VfdHlwZSh0eXBlKTtcbiBcdHJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHxcbiBcdFx0dHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHxcbkBAIC0xNjMwMiw2ICsxNjMwOSwxMyBAQCBzdGF0aWMgaW50IGlzX2JyYW5jaF90YWtlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqclxuIFx0aWYgKF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgcmVnMSkgfHwgX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcyKSkge1xuIFx0XHR1NjQgdmFsO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIG1heSB3ZWxsIGJlIHplcm8sIGhlbmNlXG4rXHRcdCAqIG5vdGhpbmcgYmVsb3cgYXBwbGllcyB0byBhIDMyLWJpdCBjb21wYXJpc29uLlxuK1x0XHQgKi9cbitcdFx0aWYgKGlzX2ptcDMyKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbiBcdFx0LyogYXJyYW5nZSB0aGF0IHJlZzIgaXMgYSBzY2FsYXIsIGFuZCByZWcxIGlzIGEgcG9pbnRlciAqL1xuIFx0XHRpZiAoIWlzX3JlZ19jb25zdChyZWcyLCBpc19qbXAzMikpIHtcbiBcdFx0XHRvcGNvZGUgPSBmbGlwX29wY29kZShvcGNvZGUpO1xuQEAgLTE2ODYzLDYgKzE2ODc3LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIENvbGxlY3QgdGhlIGxpbmtlZCByZWdpc3RlcnMgYmVmb3JlIGVudi1cdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gc2V0dXAsXG4rXHQgKiBvdGhlcndpc2UgaWRzIGRyb3BwZWQgYnkgY29sbGVjdF9saW5rZWRfcmVncygpIHdvdWxkIGJlIHJlc3VycmVjdGVkXG4rXHQgKiB3aGVuIGVudi1cdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gYXJlIGNvcGllZCBiYWNrLlxuK1x0ICovXG4rXHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNiBzcmNfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBzcmNfcmVnLVx1MDAzZWlkKVxuK1x0XHRjb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWctXHUwMDNlaWQsIFx1MDAyNmxpbmtlZF9yZWdzKTtcbitcdGlmIChkc3RfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBkc3RfcmVnLVx1MDAzZWlkKVxuK1x0XHRjb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctXHUwMDNlaWQsIFx1MDAyNmxpbmtlZF9yZWdzKTtcbitcbiBcdGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0pNUDMyO1xuIFx0ZW52LVx1MDAzZWZhbHNlX3JlZzEgPSAqZHN0X3JlZztcbiBcdGVudi1cdTAwM2VmYWxzZV9yZWcyID0gKnNyY19yZWc7XG5AQCAtMTY5MTcsMTAgKzE2OTQxLDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICogJ3RoaXNfYnJhbmNoJyBhbmQgJ290aGVyX2JyYW5jaCcgc2hhcmUgdGhpcyBoaXN0b3J5XG4gXHQgKiBpZiBwYXJlbnQgc3RhdGUgaXMgY3JlYXRlZC5cbiBcdCAqL1xuLVx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZClcbi1cdFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBzcmNfcmVnLVx1MDAzZWlkLCBcdTAwMjZsaW5rZWRfcmVncyk7XG4tXHRpZiAoZHN0X3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgZHN0X3JlZy1cdTAwM2VpZClcbi1cdFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBkc3RfcmVnLVx1MDAzZWlkLCBcdTAwMjZsaW5rZWRfcmVncyk7XG4gXHRpZiAobGlua2VkX3JlZ3MuY250IFx1MDAzZSAxKSB7XG4gXHRcdGVyciA9IGJwZl9wdXNoX2ptcF9oaXN0b3J5KGVudiwgdGhpc19icmFuY2gsIDAsIDAsIDAsIGxpbmtlZF9yZWdzX3BhY2soXHUwMDI2bGlua2VkX3JlZ3MpKTtcbiBcdFx0aWYgKGVycilcbkBAIC0xNzAwNCw2ICsxNzAyNCwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgICAgdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICgoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9LIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSAwKSB8fFxuIFx0ICAgICAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNiBicGZfcmVnaXN0ZXJfaXNfbnVsbChzcmNfcmVnKSkpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEZvciBCUEZfWCB0aGUgemVybyBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZXhlY3V0aW9uIHBhdGgsXG4rXHRcdCAqIGhlbmNlIHNyY19yZWcgaGFzIHRvIGJlIHByZWNpc2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKSB7XG4rXHRcdFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4gXHRcdC8qIE1hcmsgYWxsIGlkZW50aWNhbCByZWdpc3RlcnMgaW4gZWFjaCBicmFuY2ggYXMgZWl0aGVyXG4gXHRcdCAqIHNhZmUgb3IgdW5rbm93biBkZXBlbmRpbmcgUiA9PSAwIG9yIFIgIT0gMCBjb25kaXRpb25hbC5cbiBcdFx0ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXG5pbmRleCBiNDEyYTU0MmVmNzZmLi4zYzc4OWM1NjViMThmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbkBAIC0zMTEsNiArMzExLDE0NyBAQCBfX25ha2VkIHZvaWQgdW50cnVzdGVkX21lbV9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuKy8qXG4rICogQSBwb2ludGVyIHdpdGggYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGJvdW5kZWQgZnJvbSBhYm92ZSBtYXkgYmUgbnVsbCBhdFxuKyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlXG4rX19tc2coXCJlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSNyAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcilcIilcbitfX25ha2VkIHZvaWQgdW5ib3VuZGVkX29mZnNldF9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHQvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjApOyAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0LyogcjcgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjYxKTsgKi9cdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IDE7XHRcdFx0XHRcXFxuK1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4rXHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIyICs9IC04O1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1x0XHRcdFxcXG4rXHRyNyA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0LyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi9cdFxcXG4rXHRyOCA9IHI3O1x0XHRcdFx0XHRcXFxuK1x0cjggLT0gcjY7XHRcdFx0XHRcdFxcXG4rXHQvKiByOCBpcyBpbiBbMCwgUzY0X01BWF0gKi9cdFx0XHRcXFxuK1x0cjggXHUwMDNjXHUwMDNjPSAxO1x0XHRcdFx0XHRcXFxuK1x0cjggXHUwMDNlXHUwMDNlPSAxO1x0XHRcdFx0XHRcXFxuK1x0LyogcjYgbWF5IHdyYXAgdG8gemVybyBhdCBydW50aW1lICovXHRcdFxcXG4rXHRyNiArPSByODtcdFx0XHRcdFx0XFxcbitcdGlmIHI3ICE9IHI2IGdvdG8gMWY7XHRcdFx0XHRcXFxuK1x0cjAgPSAqKHU4ICopKHI3ICsgMCk7XHRcdFx0XHRcXFxuKzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbitcdCAgX19pbW1fYWRkcihtYXBfaGFzaClcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgYm91bmRlZF9vZmZzZXRfaW5mZXJzX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdC8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXHUwMDI2MCk7ICovXHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbitcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyMiArPSAtODtcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHQvKiByNyA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjEpOyAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gMTtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdHI3ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHQvKiBwb2ludGVyIC0gcG9pbnRlciBpcyBhbiB1bmtub3duIHNjYWxhciAqL1x0XFxcbitcdHI4ID0gcjc7XHRcdFx0XHRcdFxcXG4rXHRyOCAtPSByNjtcdFx0XHRcdFx0XFxcbitcdC8qIHI4IGlzIGluIFswLCAzXSAqL1x0XHRcdFx0XFxcbitcdHI4IFx1MDAyNj0gMztcdFx0XHRcdFx0XFxcbitcdHI2ICs9IHI4O1x0XHRcdFx0XHRcXFxuK1x0aWYgcjcgIT0gcjYgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTggKikocjcgKyAwKTtcdFx0XHRcdFxcXG4rMTpcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxuK1x0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSBtYXAgdmFsdWUgcG9pbnRlciBtYXkgYmUgemVybywgaGVuY2UgYSAzMi1iaXRcbisgKiBjb21wYXJlIHdpdGggemVybyBjYW5ub3QgYmUgcHJlZGljdGVkIGZyb20gdGhlIHBvaW50ZXIgYmVpbmcgbm9uLU5VTExcbisgKiBhbmQgYm90aCBzdWNjZXNzb3JzIG9mIHN1Y2ggYSBqdW1wIGhhdmUgdG8gYmUgdmVyaWZpZWQuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBhY2Nlc3MgdG8gbWFwIHZhbHVlLCB2YWx1ZV9zaXplPTQgb2ZmPTMyIHNpemU9NFwiKVxuK19fbmFrZWQgdm9pZCBqbXAzMl9wdHJfdnNfemVyb19qbmUodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNmtleSk7ICovXHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbitcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyMiArPSAtODtcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdGlmIHcwICE9IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHIwICsgMzIpO1x0XHRcdFx0XFxcbisxOlx0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4rXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIFRoZSBiZWxvdyBwcm9ncmFtIGlzIGV4cGxvcmVkIGluIHR3byBwYXRoczogcjYgPT0gMCBhbmQgcjYgPT0gMS5cbisgKiBPbiB0aGUgZmlyc3QgcGF0aCBjb21wYXJpc29uIFwiaWYgcjAgPT0gcjYgZ290byAyZlwiIHNob3VsZCBtYXJrIHI2IGFzIHByZWNpc2UsXG4rICogb3RoZXJ3aXNlIHVuc2FmZSBwYXRoIHdpdGggcjYgPT0gMSB3b3VsZCBiZSBpbmNvcnJlY3RseSBwcnVuZWQuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitfX21zZyhcImVycm9yOiBpbnZhbGlkIGRlcmVmZXJlbmNlIG9mIFIwIChhIG51bGxhYmxlIG1hcCB2YWx1ZSBwb2ludGVyKVwiKVxuK19fbmFrZWQgdm9pZCBpbXByZWNpc2VfemVyb19kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdC8qIHI2IGlzIDAgb24gdGhlIHBhdGggZXhwbG9yZWQgZmlyc3QsIDEgb24gdGhlIG90aGVyICovXFxcbitcdHI2ID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHI2ID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0LyogcjAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjYwKTsgKi9cdFxcXG4rMTpcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdGlmIHIwID09IHI2IGdvdG8gMmY7XHRcdFx0XHRcXFxuK1x0cjAgPSAqKHU4ICopKHIwICsgMCk7XHRcdFx0XHRcXFxuKzI6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcbitcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4rXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiB2b2lkIGtmdW5jX3Jvb3Qodm9pZClcbiB7XG4gXHRicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmNcbmluZGV4IDY2M2QxNWZjNWZkMjYuLjI1NjU0NzA0OGNjNDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG5AQCAtMzgwLDEzICszODAsMTQgQEAgU0VDKFwic29ja2V0XCIpXG4gX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4gX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiAvKlxuLSAqIGNoZWNrIHRoYXQgcjAgYW5kIHI1IGhhdmUgZGlmZmVyZW50IElEcyBhZnRlciAnaWYnLFxuLSAqIGNvbGxlY3RfbGlua2VkX3JlZ3MoKSBjYW4ndCB0aWUgbW9yZSB0aGFuIDUgcmVnaXN0ZXJzIGZvciBhIHNpbmdsZSBpbnNuLlxuKyAqIGNoZWNrIHRoYXQgcjUgaXMgdW5saW5rZWQgYWZ0ZXIgJ2lmJywgY29sbGVjdF9saW5rZWRfcmVncygpIGNhbid0IHRpZVxuKyAqIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbiBhbmQgdGhlIHJlZ2lzdGVyIGNvbXBhcmVkIGJ5XG4rICogdGhlIGp1bXAgaXMgbm90IGV4ZW1wdCBmcm9tIHRoYXQuXG4gICovXG4tX19tc2coXCI3OiAoMjUpIGlmIHIwIFx1MDAzZSAweDcgZ290byBwYyswICAgICAgICAgOyBSMD1zY2FsYXIoaWQ9MVwiKVxuK19fbXNnKFwiNzogKDI1KSBpZiByNSBcdTAwM2UgMHg3IGdvdG8gcGMrMCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49XCIpXG4gX19tc2coXCIxMjogKGJmKSByNSA9IHI1ICAgICAgICAgICAgICAgICAgICAgIDsgUjU9c2NhbGFyKGlkPTJcIilcbiAvKiBjaGVjayB0aGF0IHJ7MC00fSBhcmUgbWFya2VkIHByZWNpc2UgYWZ0ZXIgJ2lmJyAqL1xuLV9fbXNnKFwiZnJhbWUwOiByZWdzPXIwIHN0YWNrPSBiZWZvcmUgNzogKDI1KSBpZiByMCBcdTAwM2UgMHg3IGdvdG8gcGMrMFwiKVxuK19fbXNnKFwiZnJhbWUwOiByZWdzPXIwIHN0YWNrPSBiZWZvcmUgNzogKDI1KSBpZiByNSBcdTAwM2UgMHg3IGdvdG8gcGMrMFwiKVxuIF9fbXNnKFwiZnJhbWUwOiBwYXJlbnQgc3RhdGUgcmVncz1yMCxyMSxyMixyMyxyNCBzdGFjaz06XCIpXG4gX19uYWtlZCB2b2lkIGxpbmtlZF9yZWdzX3Rvb19tYW55X3JlZ3Modm9pZClcbiB7XG5AQCAtNDAwLDggKzQwMSw4IEBAIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpXG4gXHRcInIzID0gcjA7XCJcbiBcdFwicjQgPSByMDtcIlxuIFx0XCJyNSA9IHIwO1wiXG4tXHQvKiBwcm9wYWdhdGUgcmFuZ2UgZm9yIHJ7MC01fSAqL1xuLVx0XCJpZiByMCBcdTAwM2UgNyBnb3RvICswO1wiXG4rXHQvKiByezAtNH0gZmlsbCB0aGUgcmVjb3JkLCByNSBkb2VzIG5vdCBmaXQgYW5kIGlzIHVubGlua2VkICovXG4rXHRcImlmIHI1IFx1MDAzZSA3IGdvdG8gKzA7XCJcbiBcdC8qIGtlZXAgcnsxLTR9IGxpdmUgKi9cbiBcdFwicjEgPSByMTtcIlxuIFx0XCJyMiA9IHIyO1wiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODozMC40MTY3ODAwODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4NjY2MzczOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEtNU0FOIFJlbGV2YW5jZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBjb25zaWRlciBLTVNBTiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gdGhyb3VnaCB0aGUgY2hhbmdlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgc2VsZnRlc3RzLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cbkZpcnN0LCBJJ2xsIGV4YW1pbmUgdGhlIGNvZGUgY2hhbmdlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBpbiBkZXRhaWw6XG5cbjEuICAqKmByZWdfbm90X251bGxgIGNoYW5nZToqKiBUaGUgYWRkaXRpb24gb2YgdGhlIG9mZnNldCBjaGVjayBtYWtlcyBzZW5zZS4gV2UgbmVlZCB0byBwcmV2ZW50IHVuYm91bmRlZCBvZmZzZXRzIGxlYWRpbmcgdG8gcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFzIGEgcmVnaXN0ZXIgdGhhdCdzICphc3N1bWVkKiBub24tbnVsbCBjYW4gYmVjb21lIG51bGwgYWZ0ZXIgYXBwbHlpbmcgYW4gZXhjZXNzaXZlbHkgbGFyZ2Ugb2Zmc2V0IHRvIGl0LiBUaGlzIGlzbid0IGluaGVyZW50bHkgYSBLTVNBTiBpc3N1ZSwgYnV0IGEgY3JpdGljYWwgc291bmRuZXNzIGZpeC5cblxuMi4gICoqYGlzX2JyYW5jaF90YWtlbmAgbW9kaWZpY2F0aW9uOioqICBJZ25vcmluZyB0aGUgMzItYml0IGNvbXBhcmlzb24gcmVzdWx0IGluIHNvbWUgY2FzZXMgaXMgY29ycmVjdC4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIGNhbiBiZSB6ZXJvLCBzbyB3ZSBjYW4ndCBhc3N1bWUgYSBicmFuY2ggaXMgdGFrZW4gaWYgdGhlIGNvbXBhcmlzb24gaXMgemVyby4gVGhpcyBzZWVtcyBsaWtlIGEgc2FuaXR5IGNoZWNrLCBtb3JlIG9mIGEgc2FmZXR5IGZpeCwgYW5kIGRvZXMgbm90IHBvc2UgYSBkaXJlY3QgS01TQU4gcmlzay5cblxuMy4gICoqYGNoZWNrX2NvbmRfam1wX29wYCBhZGp1c3RtZW50czoqKiAgTW92aW5nIHRoZSBgY29sbGVjdF9saW5rZWRfcmVnc2AgY2FsbCBiZWZvcmUgc2F2aW5nIHRydWUvZmFsc2UgcmVnaXN0ZXIgY29waWVzIGlzIGNydWNpYWwuIFRoZSBvcmlnaW5hbCBvcmRlciBjYXVzZWQgcHJvYmxlbXMgd2hlcmUgYGNvbGxlY3RfbGlua2VkX3JlZ3NgIG1pZ2h0IGRyb3AgcmVnaXN0ZXIgSURzLCBhbmQgdGhvc2UgZHJvcHBlZCBJRHMgZ2V0IHJlc3VycmVjdGVkIHdoZW4gd2UgY29weSB0aGUgc2F2ZWQgYHRydWUvZmFsc2VgIHJlZ2lzdGVycy4gSXQncyBhIHNvdW5kbmVzcyBmaXgsIGd1YXJkaW5nIGFnYWluc3QgaW5jb3JyZWN0IHN0YXRlIHJlc3RvcmF0aW9uIGFuZCBwb3NzaWJsZSBtZW1vcnkgY29ycnVwdGlvbi5cblxuNC4gICoqYGNoZWNrX2NvbmRfam1wX29wYCBhZGRpdGlvbjoqKiBNYXJraW5nIGNoYWluIHByZWNpc2lvbiBmb3IgYHNyY19yZWdgIHdoZW4gaXQncyBwYXJ0IG9mIGEgYnJhbmNoIGNvbmRpdGlvbiwgZXNwZWNpYWxseSBpZiB0aGUgc291cmNlIHJlZ2lzdGVyIGlzIHNjYWxhciwgaXMgYWxzbyBhIHNvdW5kbmVzcyBmaXguIFRoaXMgcHJldmVudHMgdW5zb3VuZCBzdGF0ZSBwcnVuaW5nIGR1cmluZyB2ZXJpZmljYXRpb24sIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIGJ1Z3MgZnJvbSBiZWluZyBleHBsb2l0ZWQuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIHRpZ2h0ZW5pbmcgdXAgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyB0byBwcmV2ZW50IHBvdGVudGlhbCBzb3VuZG5lc3MgYnVncy4gVGhlIHZlcmlmaWVyIHRyYWNrcyBwb2ludGVycyBhbmQgc2NhbGFycywgZW5zdXJpbmcgdGhhdCBCUEYgcHJvZ3JhbXMgYXJlIHNhZmUgdG8gZXhlY3V0ZS5cblxuTm93LCBsZXQncyBtYXAgdGhpcyBhZ2FpbnN0IEtNU0FOIGNyaXRlcmlhLiBEb2VzIHRoaXMgdG91Y2ggYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UgdmlhIGFueSBvZiB0aGUgc3RhbmRhcmQgbWV0aG9kcywgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgYSBwcm9ibGVtPyBObywgdGhlIHZhcmlhYmxlcyB0aGUgdmVyaWZpZXIgZGVhbHMgd2l0aCBhcmUgaW50ZXJuYWwgdmVyaWZpZXIgc3RhdGUgc3RydWN0cywgc3VjaCBhcyBgbGlua2VkX3JlZ3NgIGFuZCBgZW52YCwgd2hpY2ggYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIHZlcmlmaWVyIHN0cnVjdHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBEb2VzIGl0IG1lc3Mgd2l0aCBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBBZ2Fpbiwgbm8uIElzIHRoZXJlIGFueSBib3VuZHMgY2hlY2sgb3IgbGVuZ3RoIGxvZ2ljIGNoYW5nZWQgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcz8gU3RpbGwgbm8uIFRoZSBmaXhlcyBhcmUgdGFyZ2V0ZWQgYXQgdGhlIHZlcmlmaWVyJ3MgaW50ZXJuYWwgc3RhdGUtdHJhY2tpbmcgbG9naWMsIGFpbWVkIGF0IHByZXZlbnRpbmcgZXhwbG9pdGFibGUgYnVncy5cblxuVGhlc2UgYnVncyB3b3VsZCB0eXBpY2FsbHkgbGVhZCB0byBhcmJpdHJhcnkga2VybmVsIG1lbW9yeSByZWFkL3dyaXRlIGlmIGV4cGxvaXRlZCwgYSBjbGFzc2ljIEtBU0FOIGlzc3VlLCBvciB2ZXJpZmllciBzdGF0ZSB0cmFja2luZyBpc3N1ZXMuIFNvLCBpdCBpcyBtb3JlIGxpa2UgcHJldmVudGluZyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG5vdCBLTVNBTi1yZWxhdGVkIHByb2JsZW1zLiBUaGUgQlBGIHZlcmlmaWVyIGxvZ2ljIG9wZXJhdGVzIG9uIGluaXRpYWxpemVkIEMgc3RydWN0cy5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgbGlua2VkX3JlZ3NgIHRvIGJlIGFic29sdXRlbHkgc3VyZTsgd2VyZSB0aGUgc3RydWN0cyBgbGlua2VkX3JlZ3NgIGluaXRpYWxpemVkIHdpdGggYHN0cnVjdCBsaW5rZWRfcmVncyBsaW5rZWRfcmVncyA9IHt9O2Agb3IgYHN0cnVjdCBicGZfcmVnX3N0YXRlIGZhbHNlX3JlZzEsIGZhbHNlX3JlZzI7YD8gTGV0IG1lIHF1aWNrbHkgZ3JlcCBmb3IgYGNoZWNrX2NvbmRfam1wX29wYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBjb25maXJtIHRoYXQgYGxpbmtlZF9yZWdzYCBpcyBiZWluZyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIEFzc3VtaW5nIHRoZXkgYXJlIGluaXRpYWxpemVkLCB0aGVuIEkgdGhpbmsgS01TQU4gaXNuJ3QgdGhlIHByaW1hcnkgY29uY2VybiBoZXJlLiBLQVNBTiBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgY2hlY2sgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODo0MS4yODM0MjMxNjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODIwMjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbGlua2VkX3JlZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjQ1PXN0cnVjdCBsaW5rZWRfcmVnIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjUzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjU0OnN0cnVjdCBsaW5rZWRfcmVncyB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNTUtXFx0aW50IGNudDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjU4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjU5OnN0YXRpYyBzdHJ1Y3QgbGlua2VkX3JlZyAqbGlua2VkX3JlZ3NfcHVzaChzdHJ1Y3QgbGlua2VkX3JlZ3MgKnMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNjAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNzQtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyNzU6c3RhdGljIHU2NCBsaW5rZWRfcmVnc19wYWNrKHN0cnVjdCBsaW5rZWRfcmVncyAqcylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI3Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI5NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI5NjpzdGF0aWMgdm9pZCBsaW5rZWRfcmVnc191bnBhY2sodTY0IHZhbCwgc3RydWN0IGxpbmtlZF9yZWdzICpzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjk3LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzQ1PXZvaWQgYnBmX2J0X3N5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQsIHN0cnVjdCBicGZfam1wX2hpc3RvcnlfZW50cnkgKmhpc3QpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzNDYte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMzQ3OlxcdHN0cnVjdCBsaW5rZWRfcmVncyBsaW5rZWRfcmVncztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM0OC1cXHRib29sIHNvbWVfcHJlY2lzZSA9IGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NTg2PXN0YXRpYyBib29sIHRyeV9tYXRjaF9wa3RfcG9pbnRlcnMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjkwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY5MTpzdGF0aWMgdm9pZCBfX2NvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGxpbmtlZF9yZWdzICpyZWdfc2V0LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjY5Mi1cXHRcXHRcXHRcXHQgIHUzMiBpZCwgdTMyIGZyYW1lbm8sIHUzMiBzcGlfb3JfcmVnLCBib29sIGlzX3JlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjcxMz1zdGF0aWMgdm9pZCBjb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY3MTUtXFx0XFx0XFx0XFx0dTMyIGlkLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjcxNjpcXHRcXHRcXHRcXHRzdHJ1Y3QgbGlua2VkX3JlZ3MgKmxpbmtlZF9yZWdzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjcxNy17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3NDY9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2NzQ3OlxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmtub3duX3JlZywgc3RydWN0IGxpbmtlZF9yZWdzICpsaW5rZWRfcmVncylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY3NDgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2ODAxPXN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwOC1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZXFfYnJhbmNoX3JlZ3M7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODA5OlxcdHN0cnVjdCBsaW5rZWRfcmVncyBsaW5rZWRfcmVncyA9IHt9O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgxMC1cXHR1OCBvcGNvZGUgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjQxLjQwMTYzMjQwN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDQ4OTA2Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyBteSB0YWtlLiBJdCBzdGFydHMgYnkgaW5pdGlhbGl6aW5nIGBsaW5rZWRfcmVnc2Ag4oCTIHRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBge31gLiBUaGUgY29yZSBvZiB0aGlzIGlzIGFib3V0IEJQRiB2ZXJpZmllciBsb2dpYywgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIGl0J3MgY29ycmVjdC4gSSBzZWUgdGhleSdyZSBhZGRyZXNzaW5nIHNldmVyYWwgY3J1Y2lhbCBhcmVhczpcblxuKiAgIEZpcnN0LCBgcmVnX25vdF9udWxsYCBpcyBnZXR0aW5nIGEgY2xvc2VyIGxvb2sgZm9yIGFueSBib3VuZHMgb3Igb3ZlcmZsb3cgaXNzdWVzIHdpdGggcG9pbnRlciBvZmZzZXRzLiBUaGF0J3MgZ29vZDsgdGhvc2UgY2FuIGJlIG5hc3R5IHRvIHRyYWNrIGRvd24gbGF0ZXIuXG4qICAgVGhlbiwgdGhleSdyZSBkaWdnaW5nIGludG8gdGhlIG51YW5jZXMgb2YgaG93IGp1bXAgcG9pbnRlciBjb21wYXJpc29ucyB3b3JrLCBlc3BlY2lhbGx5IHRoZSAzMi1iaXQgdmVyc3VzIDY0LWJpdCBiZWhhdmlvciB3aXRoaW4gYGlzX2JyYW5jaF90YWtlbmAuIFRoaXMgY2FuIGdldCByZWFsbHkgaGFpcnkgd2l0aCBwb2ludGVyIGFyaXRobWV0aWMsIHNvIHRob3JvdWdobmVzcyBoZXJlIGlzIGNyaXRpY2FsLlxuKiAgIFRoZXkncmUgYWxzbyBhZGp1c3RpbmcgdGhlIHRpbWluZyBvZiBgY29sbGVjdF9saW5rZWRfcmVnc2AgaW4gcmVsYXRpb24gdG8gc2F2aW5nIHJlZ2lzdGVycyB3aXRoaW4gYGNoZWNrX2NvbmRfam1wX29wYC4gVGhhdCdzIGxpa2VseSBhYm91dCBlbnN1cmluZyB0aGUgdmVyaWZpZXIgaGFzIHRoZSByaWdodCByZWdpc3RlciBzdGF0ZSBhdCB0aGUgY29ycmVjdCBtb21lbnQgaW4gdGhlIGNvbnRyb2wgZmxvdy4gVGltaW5nIGVycm9ycyBjYW4gYmUgcmVhbGx5IHN1YnRsZS5cbiogICBGaW5hbGx5LCB0aGVyZSdzIGF0dGVudGlvbiBiZWluZyBwYWlkIHRvIHByZWNpc2lvbiBtYXJraW5nIGZvciBgc3JjX3JlZ2AgZHVyaW5nIG51bGwgY29tcGFyaXNvbnMuIFRoaXMgaXMgYWJvdXQgbWFraW5nIHN1cmUgdGhlIHZlcmlmaWVyIGhhcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlZ2lzdGVyJ3MgcG90ZW50aWFsIHZhbHVlIHJhbmdlcywgZXNwZWNpYWxseSBpbiBjYXNlcyB3aGVyZSB3ZSdyZSB0ZXN0aW5nIGZvciBudWxsLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogSSdtIG5vdCBzZWVpbmcgYW55dGhpbmcgaW4gdGhlc2UgY2hhbmdlcyB0aGF0IHRvdWNoZXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZXMgc3RhY2sgb3IgaGVhcCBkYXRhLCBvciBjb3BpZXMgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGF0J3MgYSBodWdlIHJlbGllZi4gVGhlIGZpeGVzLCBpZiB0aGV5IHdlcmUgaW4gcGxhY2UgdG8gc3RhcnQgd2l0aCwgYXJlIGVudGlyZWx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgcHJldmVudGluZyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEFuZCBmcmFua2x5LCB0aG9zZSBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBVQi1zYW5pdGl6ZXIgYW55d2F5LCBzbyB3ZSdyZSBjb3ZlcmVkLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgcGF0Y2ggZG9lc24ndCB3YXJyYW50IGEgS01TQU4gc2Nhbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzk3LCJPdXRwdXRUb2tlbnMiOjI2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODo0NS40NTA1NDIwMjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBmaXggc291bmRuZXNzIGlzc3VlcyByZWdhcmRpbmcgcmVnaXN0ZXIgdHJhY2tpbmcsIHNwZWNpZmljYWxseTpcXG4xLiBIYW5kbGluZyBvZmZzZXQgd3JhcHBpbmcgdG8gemVybyBpbiBgcmVnX25vdF9udWxsKClgLlxcbjIuIEhhbmRsaW5nIDMyLWJpdCBwb2ludGVyLXZzLXNjYWxhciBjb21wYXJpc29ucyBpbiBgaXNfYnJhbmNoX3Rha2VuKClgLlxcbjMuIEVuc3VyaW5nIGxpbmtlZCByZWdpc3RlcnMgYXJlIGNvbGxlY3RlZCBiZWZvcmUgc2F2aW5nIHJlZ2lzdGVycyBpbiBgY2hlY2tfY29uZF9qbXBfb3AoKWAuXFxuNC4gTWFya2luZyBwcmVjaXNpb24gb24gYHNyY19yZWdgIHdoZW4gY2hlY2tpbmcgbnVsbG5lc3MgaW4gYGNoZWNrX2NvbmRfam1wX29wKClgLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGUgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCAoc3VjaCBhcyBgc3RydWN0IGxpbmtlZF9yZWdzYCkgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IChlLmcuLCB6ZXJvLWluaXRpYWxpemVkIG9uIGRlY2xhcmF0aW9uKSwgYW5kIHRoZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgdmVyaWZpZXIgaW50ZXJuYWwgY29udHJvbC1mbG93IGFuZCByZWdpc3RlciBzdGF0ZSBsb2dpYy4gQW55IHBvdGVudGlhbCBtaXNiZWhhdmlvciBwcmV2ZW50ZWQgYnkgdGhlc2UgZml4ZXMgcmVsYXRlcyB0byBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBkZXJlZmVyZW5jZXMpLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgbG9naWMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gZml4IHNvdW5kbmVzcyBpc3N1ZXMgcmVnYXJkaW5nIHJlZ2lzdGVyIHRyYWNraW5nLCBzcGVjaWZpY2FsbHk6XFxuMS4gSGFuZGxpbmcgb2Zmc2V0IHdyYXBwaW5nIHRvIHplcm8gaW4gYHJlZ19ub3RfbnVsbCgpYC5cXG4yLiBIYW5kbGluZyAzMi1iaXQgcG9pbnRlci12cy1zY2FsYXIgY29tcGFyaXNvbnMgaW4gYGlzX2JyYW5jaF90YWtlbigpYC5cXG4zLiBFbnN1cmluZyBsaW5rZWQgcmVnaXN0ZXJzIGFyZSBjb2xsZWN0ZWQgYmVmb3JlIHNhdmluZyByZWdpc3RlcnMgaW4gYGNoZWNrX2NvbmRfam1wX29wKClgLlxcbjQuIE1hcmtpbmcgcHJlY2lzaW9uIG9uIGBzcmNfcmVnYCB3aGVuIGNoZWNraW5nIG51bGxuZXNzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZywgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlIHN0cnVjdHVyZXMgbWFuaXB1bGF0ZWQgKHN1Y2ggYXMgYHN0cnVjdCBsaW5rZWRfcmVnc2ApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSAoZS5nLiwgemVyby1pbml0aWFsaXplZCBvbiBkZWNsYXJhdGlvbiksIGFuZCB0aGUgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IHZlcmlmaWVyIGludGVybmFsIGNvbnRyb2wtZmxvdyBhbmQgcmVnaXN0ZXIgc3RhdGUgbG9naWMuIEFueSBwb3RlbnRpYWwgbWlzYmVoYXZpb3IgcHJldmVudGVkIGJ5IHRoZXNlIGZpeGVzIHJlbGF0ZXMgdG8gQlBGIHZlcmlmaWNhdGlvbiBzb3VuZG5lc3MgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgZGVyZWZlcmVuY2VzKSwgd2hpY2ggaXMgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lcsf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 17:19:40 +0000 UTC FinishedAt: 2026-09-05 17:38:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7ac9662189069914a088ec61ad85dc46b5cb1563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7ac9662189069914a088ec61ad85dc46b5cb1563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "858384af-3a30-448a-81a0-29fc0e390bbd" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_cond_jmp_op", "is_branch_taken", "reg_not_null", "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfY29uZF9qbXBfb3AmIzM0OywKICAgICYjMzQ7aXNfYnJhbmNoX3Rha2VuJiMzNDssCiAgICAmIzM0O3JlZ19ub3RfbnVsbCYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIGZpeCBzb3VuZG5lc3MgaXNzdWVzIHJlZ2FyZGluZyByZWdpc3RlciB0cmFja2luZywgc3BlY2lmaWNhbGx5OlxuMS4gSGFuZGxpbmcgb2Zmc2V0IHdyYXBwaW5nIHRvIHplcm8gaW4gYHJlZ19ub3RfbnVsbCgpYC5cbjIuIEhhbmRsaW5nIDMyLWJpdCBwb2ludGVyLXZzLXNjYWxhciBjb21wYXJpc29ucyBpbiBgaXNfYnJhbmNoX3Rha2VuKClgLlxuMy4gRW5zdXJpbmcgbGlua2VkIHJlZ2lzdGVycyBhcmUgY29sbGVjdGVkIGJlZm9yZSBzYXZpbmcgcmVnaXN0ZXJzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cbjQuIE1hcmtpbmcgcHJlY2lzaW9uIG9uIGBzcmNfcmVnYCB3aGVuIGNoZWNraW5nIG51bGxuZXNzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIChzdWNoIGFzIGBzdHJ1Y3QgbGlua2VkX3JlZ3NgKSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgKGUuZy4sIHplcm8taW5pdGlhbGl6ZWQgb24gZGVjbGFyYXRpb24pLCBhbmQgdGhlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCB2ZXJpZmllciBpbnRlcm5hbCBjb250cm9sLWZsb3cgYW5kIHJlZ2lzdGVyIHN0YXRlIGxvZ2ljLiBBbnkgcG90ZW50aWFsIG1pc2JlaGF2aW9yIHByZXZlbnRlZCBieSB0aGVzZSBmaXhlcyByZWxhdGVzIHRvIEJQRiB2ZXJpZmljYXRpb24gc291bmRuZXNzIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIGRlcmVmZXJlbmNlcyksIHdoaWNoIGlzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGZvciBwb2ludGVyIG51bGxuZXNzIGluZmVyZW5jZSwgMzItYml0IGp1bXAgYnJhbmNoIHByZWRpY3Rpb24sIGxpbmtlZCByZWdpc3RlcnMgY29sbGVjdGlvbiB0aW1pbmcsIGFuZCBwcmVjaXNpb24gdHJhY2tpbmcgb24gcmVnaXN0ZXIgY29tcGFyaXNvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2ZXJpZmljYXRpb24gcGF0aHMgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzozODowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2NDAzNTY4Mzc5NTEuLjcwOWI0NzkzZThlYjcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTM1Miw2ICYjNDM7MzUyLDEzIEBAIHN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0XG4gXHRpZiAodHlwZV9tYXlfYmVfbnVsbCh0eXBlKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHR5cGVzIGJlbG93IGd1YXJhbnRlZSBhIG5vbi1OVUxMIGJhc2UsIGFuIHVuYm91bmRlZCBvZmZzZXQgY2FuXG4mIzQzO1x0ICogc3RpbGwgd3JhcCBiYXNlICYjNDM7IG9mZnNldCB0byB6ZXJvLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZWdfc21pbihyZWcpIFx1MDAzYz0gLUJQRl9NQVhfVkFSX09GRiB8fCByZWdfc21heChyZWcpIFx1MDAzZT0gQlBGX01BWF9WQVJfT0ZGKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHR5cGUgPSBiYXNlX3R5cGUodHlwZSk7XG4gXHRyZXR1cm4gdHlwZSA9PSBQVFJfVE9fU09DS0VUIHx8XG4gXHRcdHR5cGUgPT0gUFRSX1RPX1RDUF9TT0NLIHx8XG5AQCAtMTYzMDIsNiAmIzQzOzE2MzA5LDEzIEBAIHN0YXRpYyBpbnQgaXNfYnJhbmNoX3Rha2VuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyXG4gXHRpZiAoX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcxKSB8fCBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzIpKSB7XG4gXHRcdHU2NCB2YWw7XG4gXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGxvdyAzMiBiaXRzIG9mIGEgdmFsaWQgcG9pbnRlciBtYXkgd2VsbCBiZSB6ZXJvLCBoZW5jZVxuJiM0MztcdFx0ICogbm90aGluZyBiZWxvdyBhcHBsaWVzIHRvIGEgMzItYml0IGNvbXBhcmlzb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChpc19qbXAzMilcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiBcdFx0LyogYXJyYW5nZSB0aGF0IHJlZzIgaXMgYSBzY2FsYXIsIGFuZCByZWcxIGlzIGEgcG9pbnRlciAqL1xuIFx0XHRpZiAoIWlzX3JlZ19jb25zdChyZWcyLCBpc19qbXAzMikpIHtcbiBcdFx0XHRvcGNvZGUgPSBmbGlwX29wY29kZShvcGNvZGUpO1xuQEAgLTE2ODYzLDYgJiM0MzsxNjg3NywxNiBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvbGxlY3QgdGhlIGxpbmtlZCByZWdpc3RlcnMgYmVmb3JlIGVudi1cdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gc2V0dXAsXG4mIzQzO1x0ICogb3RoZXJ3aXNlIGlkcyBkcm9wcGVkIGJ5IGNvbGxlY3RfbGlua2VkX3JlZ3MoKSB3b3VsZCBiZSByZXN1cnJlY3RlZFxuJiM0MztcdCAqIHdoZW4gZW52LVx1MDAzZXt0cnVlLGZhbHNlfV9yZWd7MSwyfSBhcmUgY29waWVkIGJhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZClcbiYjNDM7XHRcdGNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgc3JjX3JlZy1cdTAwM2VpZCwgXHUwMDI2bGlua2VkX3JlZ3MpO1xuJiM0MztcdGlmIChkc3RfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBkc3RfcmVnLVx1MDAzZWlkKVxuJiM0MztcdFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBkc3RfcmVnLVx1MDAzZWlkLCBcdTAwMjZsaW5rZWRfcmVncyk7XG4mIzQzO1xuIFx0aXNfam1wMzIgPSBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSk1QMzI7XG4gXHRlbnYtXHUwMDNlZmFsc2VfcmVnMSA9ICpkc3RfcmVnO1xuIFx0ZW52LVx1MDAzZWZhbHNlX3JlZzIgPSAqc3JjX3JlZztcbkBAIC0xNjkxNywxMCAmIzQzOzE2OTQxLDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICogJiMzOTt0aGlzX2JyYW5jaCYjMzk7IGFuZCAmIzM5O290aGVyX2JyYW5jaCYjMzk7IHNoYXJlIHRoaXMgaGlzdG9yeVxuIFx0ICogaWYgcGFyZW50IHN0YXRlIGlzIGNyZWF0ZWQuXG4gXHQgKi9cbi1cdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1ggXHUwMDI2XHUwMDI2IHNyY19yZWctXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUgXHUwMDI2XHUwMDI2IHNyY19yZWctXHUwMDNlaWQpXG4tXHRcdGNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgc3JjX3JlZy1cdTAwM2VpZCwgXHUwMDI2bGlua2VkX3JlZ3MpO1xuLVx0aWYgKGRzdF9yZWctXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUgXHUwMDI2XHUwMDI2IGRzdF9yZWctXHUwMDNlaWQpXG4tXHRcdGNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgZHN0X3JlZy1cdTAwM2VpZCwgXHUwMDI2bGlua2VkX3JlZ3MpO1xuIFx0aWYgKGxpbmtlZF9yZWdzLmNudCBcdTAwM2UgMSkge1xuIFx0XHRlcnIgPSBicGZfcHVzaF9qbXBfaGlzdG9yeShlbnYsIHRoaXNfYnJhbmNoLCAwLCAwLCAwLCBsaW5rZWRfcmVnc19wYWNrKFx1MDAyNmxpbmtlZF9yZWdzKSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtMTcwMDQsNiAmIzQzOzE3MDI0LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdCAgICB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgKChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0sgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tID09IDApIHx8XG4gXHQgICAgIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1ggXHUwMDI2XHUwMDI2IGJwZl9yZWdpc3Rlcl9pc19udWxsKHNyY19yZWcpKSkpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBGb3IgQlBGX1ggdGhlIHplcm8gaXMgYSBwcm9wZXJ0eSBvZiB0aGlzIGV4ZWN1dGlvbiBwYXRoLFxuJiM0MztcdFx0ICogaGVuY2Ugc3JjX3JlZyBoYXMgdG8gYmUgcHJlY2lzZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuJiM0MztcdFx0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIGluc24tXHUwMDNlc3JjX3JlZyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiBcdFx0LyogTWFyayBhbGwgaWRlbnRpY2FsIHJlZ2lzdGVycyBpbiBlYWNoIGJyYW5jaCBhcyBlaXRoZXJcbiBcdFx0ICogc2FmZSBvciB1bmtub3duIGRlcGVuZGluZyBSID09IDAgb3IgUiAhPSAwIGNvbmRpdGlvbmFsLlxuIFx0XHQgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbmluZGV4IGI0MTJhNTQyZWY3NmYuLjNjNzg5YzU2NWIxOGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xuQEAgLTMxMSw2ICYjNDM7MzExLDE0NyBAQCBfX25ha2VkIHZvaWQgdW50cnVzdGVkX21lbV9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBIHBvaW50ZXIgd2l0aCBhbiBvZmZzZXQgdGhhdCBpcyBub3QgYm91bmRlZCBmcm9tIGFib3ZlIG1heSBiZSBudWxsIGF0XG4mIzQzOyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmVcbiYjNDM7X19tc2coXCYjMzQ7ZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjcgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgdW5ib3VuZGVkX29mZnNldF9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogcjYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjYwKTsgKi9cdFxcXG4mIzQzO1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbiYjNDM7XHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiAmIzQzOz0gLTg7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1x0XHRcdFxcXG4mIzQzO1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdC8qIHI3ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXHUwMDI2MSk7ICovXHRcXFxuJiM0MztcdCoodTY0ICopKHIxMCAtIDgpID0gMTtcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjIgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuJiM0MztcdHI3ID0gcjA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi9cdFxcXG4mIzQzO1x0cjggPSByNztcdFx0XHRcdFx0XFxcbiYjNDM7XHRyOCAtPSByNjtcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByOCBpcyBpbiBbMCwgUzY0X01BWF0gKi9cdFx0XHRcXFxuJiM0MztcdHI4IFx1MDAzY1x1MDAzYz0gMTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyOCBcdTAwM2VcdTAwM2U9IDE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogcjYgbWF5IHdyYXAgdG8gemVybyBhdCBydW50aW1lICovXHRcdFxcXG4mIzQzO1x0cjYgJiM0Mzs9IHI4O1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHI3ICE9IHI2IGdvdG8gMWY7XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1OCAqKShyNyAmIzQzOyAwKTtcdFx0XHRcdFxcXG4mIzQzOzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4mIzQzO1x0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19fbmFrZWQgdm9pZCBib3VuZGVkX29mZnNldF9pbmZlcnNfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdC8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXHUwMDI2MCk7ICovXHRcXFxuJiM0MztcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjIgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuJiM0MztcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4mIzQzO1x0cjYgPSByMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByNyA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjEpOyAqL1x0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSA4KSA9IDE7XHRcdFx0XHRcXFxuJiM0MztcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIyICYjNDM7PSAtODtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbiYjNDM7XHRyNyA9IHIwO1x0XHRcdFx0XHRcXFxuJiM0MztcdC8qIHBvaW50ZXIgLSBwb2ludGVyIGlzIGFuIHVua25vd24gc2NhbGFyICovXHRcXFxuJiM0MztcdHI4ID0gcjc7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjggLT0gcjY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogcjggaXMgaW4gWzAsIDNdICovXHRcdFx0XHRcXFxuJiM0MztcdHI4IFx1MDAyNj0gMztcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNiAmIzQzOz0gcjg7XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgcjcgIT0gcjYgZ290byAxZjtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAqKHU4ICopKHI3ICYjNDM7IDApO1x0XHRcdFx0XFxcbiYjNDM7MTpcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbiYjNDM7XHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIGxvdyAzMiBiaXRzIG9mIGEgbWFwIHZhbHVlIHBvaW50ZXIgbWF5IGJlIHplcm8sIGhlbmNlIGEgMzItYml0XG4mIzQzOyAqIGNvbXBhcmUgd2l0aCB6ZXJvIGNhbm5vdCBiZSBwcmVkaWN0ZWQgZnJvbSB0aGUgcG9pbnRlciBiZWluZyBub24tTlVMTFxuJiM0MzsgKiBhbmQgYm90aCBzdWNjZXNzb3JzIG9mIHN1Y2ggYSBqdW1wIGhhdmUgdG8gYmUgdmVyaWZpZWQuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBhY2Nlc3MgdG8gbWFwIHZhbHVlLCB2YWx1ZV9zaXplPTQgb2ZmPTMyIHNpemU9NFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGptcDMyX3B0cl92c196ZXJvX2puZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNmtleSk7ICovXHRcXFxuJiM0MztcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjIgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuJiM0MztcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4mIzQzO1x0aWYgdzAgIT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9ICoodTMyICopKHIwICYjNDM7IDMyKTtcdFx0XHRcdFxcXG4mIzQzOzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4mIzQzO1x0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBiZWxvdyBwcm9ncmFtIGlzIGV4cGxvcmVkIGluIHR3byBwYXRoczogcjYgPT0gMCBhbmQgcjYgPT0gMS5cbiYjNDM7ICogT24gdGhlIGZpcnN0IHBhdGggY29tcGFyaXNvbiBcJiMzNDtpZiByMCA9PSByNiBnb3RvIDJmXCYjMzQ7IHNob3VsZCBtYXJrIHI2IGFzIHByZWNpc2UsXG4mIzQzOyAqIG90aGVyd2lzZSB1bnNhZmUgcGF0aCB3aXRoIHI2ID09IDEgd291bGQgYmUgaW5jb3JyZWN0bHkgcHJ1bmVkLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19mYWlsdXJlXG4mIzQzO19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXG4mIzQzO19fbXNnKFwmIzM0O2Vycm9yOiBpbnZhbGlkIGRlcmVmZXJlbmNlIG9mIFIwIChhIG51bGxhYmxlIG1hcCB2YWx1ZSBwb2ludGVyKVwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIGltcHJlY2lzZV96ZXJvX2RvZXNfbm90X2luZmVyX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHQvKiByNiBpcyAwIG9uIHRoZSBwYXRoIGV4cGxvcmVkIGZpcnN0LCAxIG9uIHRoZSBvdGhlciAqL1xcXG4mIzQzO1x0cjYgPSAxO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbiYjNDM7XHRyNiA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjApOyAqL1x0XFxcbiYjNDM7MTpcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjIgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuJiM0MztcdGlmIHIwID09IHI2IGdvdG8gMmY7XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1OCAqKShyMCAmIzQzOyAwKTtcdFx0XHRcdFxcXG4mIzQzOzI6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXG4mIzQzO1x0ICBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbiYjNDM7XHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGtmdW5jX3Jvb3Qodm9pZClcbiB7XG4gXHRicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmNcbmluZGV4IDY2M2QxNWZjNWZkMjYuLjI1NjU0NzA0OGNjNDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG5AQCAtMzgwLDEzICYjNDM7MzgwLDE0IEBAIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4gX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiAvKlxuLSAqIGNoZWNrIHRoYXQgcjAgYW5kIHI1IGhhdmUgZGlmZmVyZW50IElEcyBhZnRlciAmIzM5O2lmJiMzOTssXG4tICogY29sbGVjdF9saW5rZWRfcmVncygpIGNhbiYjMzk7dCB0aWUgbW9yZSB0aGFuIDUgcmVnaXN0ZXJzIGZvciBhIHNpbmdsZSBpbnNuLlxuJiM0MzsgKiBjaGVjayB0aGF0IHI1IGlzIHVubGlua2VkIGFmdGVyICYjMzk7aWYmIzM5OywgY29sbGVjdF9saW5rZWRfcmVncygpIGNhbiYjMzk7dCB0aWVcbiYjNDM7ICogbW9yZSB0aGFuIDUgcmVnaXN0ZXJzIGZvciBhIHNpbmdsZSBpbnNuIGFuZCB0aGUgcmVnaXN0ZXIgY29tcGFyZWQgYnlcbiYjNDM7ICogdGhlIGp1bXAgaXMgbm90IGV4ZW1wdCBmcm9tIHRoYXQuXG4gICovXG4tX19tc2coXCYjMzQ7NzogKDI1KSBpZiByMCBcdTAwM2UgMHg3IGdvdG8gcGMmIzQzOzAgICAgICAgICA7IFIwPXNjYWxhcihpZD0xXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDs3OiAoMjUpIGlmIHI1IFx1MDAzZSAweDcgZ290byBwYyYjNDM7MCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49XCYjMzQ7KVxuIF9fbXNnKFwmIzM0OzEyOiAoYmYpIHI1ID0gcjUgICAgICAgICAgICAgICAgICAgICAgOyBSNT1zY2FsYXIoaWQ9MlwmIzM0OylcbiAvKiBjaGVjayB0aGF0IHJ7MC00fSBhcmUgbWFya2VkIHByZWNpc2UgYWZ0ZXIgJiMzOTtpZiYjMzk7ICovXG4tX19tc2coXCYjMzQ7ZnJhbWUwOiByZWdzPXIwIHN0YWNrPSBiZWZvcmUgNzogKDI1KSBpZiByMCBcdTAwM2UgMHg3IGdvdG8gcGMmIzQzOzBcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O2ZyYW1lMDogcmVncz1yMCBzdGFjaz0gYmVmb3JlIDc6ICgyNSkgaWYgcjUgXHUwMDNlIDB4NyBnb3RvIHBjJiM0MzswXCYjMzQ7KVxuIF9fbXNnKFwmIzM0O2ZyYW1lMDogcGFyZW50IHN0YXRlIHJlZ3M9cjAscjEscjIscjMscjQgc3RhY2s9OlwmIzM0OylcbiBfX25ha2VkIHZvaWQgbGlua2VkX3JlZ3NfdG9vX21hbnlfcmVncyh2b2lkKVxuIHtcbkBAIC00MDAsOCAmIzQzOzQwMSw4IEBAIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpXG4gXHRcJiMzNDtyMyA9IHIwO1wmIzM0O1xuIFx0XCYjMzQ7cjQgPSByMDtcJiMzNDtcbiBcdFwmIzM0O3I1ID0gcjA7XCYjMzQ7XG4tXHQvKiBwcm9wYWdhdGUgcmFuZ2UgZm9yIHJ7MC01fSAqL1xuLVx0XCYjMzQ7aWYgcjAgXHUwMDNlIDcgZ290byAmIzQzOzA7XCYjMzQ7XG4mIzQzO1x0LyogcnswLTR9IGZpbGwgdGhlIHJlY29yZCwgcjUgZG9lcyBub3QgZml0IGFuZCBpcyB1bmxpbmtlZCAqL1xuJiM0MztcdFwmIzM0O2lmIHI1IFx1MDAzZSA3IGdvdG8gJiM0MzswO1wmIzM0O1xuIFx0Lyoga2VlcCByezEtNH0gbGl2ZSAqL1xuIFx0XCYjMzQ7cjEgPSByMTtcJiMzNDtcbiBcdFwmIzM0O3IyID0gcjI7XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19jb25kX2ptcF9vcCYjMzQ7LAogICAgJiMzNDtpc19icmFuY2hfdGFrZW4mIzM0OywKICAgICYjMzQ7cmVnX25vdF9udWxsJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jIGZvciBwb2ludGVyIG51bGxuZXNzIGluZmVyZW5jZSwgMzItYml0IGp1bXAgYnJhbmNoIHByZWRpY3Rpb24sIGxpbmtlZCByZWdpc3RlcnMgY29sbGVjdGlvbiB0aW1pbmcsIGFuZCBwcmVjaXNpb24gdHJhY2tpbmcgb24gcmVnaXN0ZXIgY29tcGFyaXNvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSB2ZXJpZmljYXRpb24gcGF0aHMgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNzozODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNjQwMzU2ODM3OTUxLi43MDliNDc5M2U4ZWI3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0zNTIsNiAmIzQzOzM1MiwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdAogCWlmICh0eXBlX21heV9iZV9udWxsKHR5cGUpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhlIHR5cGVzIGJlbG93IGd1YXJhbnRlZSBhIG5vbi1OVUxMIGJhc2UsIGFuIHVuYm91bmRlZCBvZmZzZXQgY2FuCiYjNDM7CSAqIHN0aWxsIHdyYXAgYmFzZSAmIzQzOyBvZmZzZXQgdG8gemVyby4KJiM0MzsJICovCiYjNDM7CWlmIChyZWdfc21pbihyZWcpICZsdDs9IC1CUEZfTUFYX1ZBUl9PRkYgfHwgcmVnX3NtYXgocmVnKSAmZ3Q7PSBCUEZfTUFYX1ZBUl9PRkYpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJdHlwZSA9IGJhc2VfdHlwZSh0eXBlKTsKIAlyZXR1cm4gdHlwZSA9PSBQVFJfVE9fU09DS0VUIHx8CiAJCXR5cGUgPT0gUFRSX1RPX1RDUF9TT0NLIHx8CkBAIC0xNjMwMiw2ICYjNDM7MTYzMDksMTMgQEAgc3RhdGljIGludCBpc19icmFuY2hfdGFrZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnIKIAlpZiAoX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcxKSB8fCBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzIpKSB7CiAJCXU2NCB2YWw7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIG1heSB3ZWxsIGJlIHplcm8sIGhlbmNlCiYjNDM7CQkgKiBub3RoaW5nIGJlbG93IGFwcGxpZXMgdG8gYSAzMi1iaXQgY29tcGFyaXNvbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGlzX2ptcDMyKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsKIAkJLyogYXJyYW5nZSB0aGF0IHJlZzIgaXMgYSBzY2FsYXIsIGFuZCByZWcxIGlzIGEgcG9pbnRlciAqLwogCQlpZiAoIWlzX3JlZ19jb25zdChyZWcyLCBpc19qbXAzMikpIHsKIAkJCW9wY29kZSA9IGZsaXBfb3Bjb2RlKG9wY29kZSk7CkBAIC0xNjg2Myw2ICYjNDM7MTY4NzcsMTYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJcmV0dXJuIGVycjsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQ29sbGVjdCB0aGUgbGlua2VkIHJlZ2lzdGVycyBiZWZvcmUgZW52LSZndDt7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gc2V0dXAsCiYjNDM7CSAqIG90aGVyd2lzZSBpZHMgZHJvcHBlZCBieSBjb2xsZWN0X2xpbmtlZF9yZWdzKCkgd291bGQgYmUgcmVzdXJyZWN0ZWQKJiM0MzsJICogd2hlbiBlbnYtJmd0O3t0cnVlLGZhbHNlfV9yZWd7MSwyfSBhcmUgY29waWVkIGJhY2suCiYjNDM7CSAqLwomIzQzOwlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7IHNyY19yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgc3JjX3JlZy0mZ3Q7aWQpCiYjNDM7CQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKJiM0MzsJaWYgKGRzdF9yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgZHN0X3JlZy0mZ3Q7aWQpCiYjNDM7CQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKJiM0MzsKIAlpc19qbXAzMiA9IEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfSk1QMzI7CiAJZW52LSZndDtmYWxzZV9yZWcxID0gKmRzdF9yZWc7CiAJZW52LSZndDtmYWxzZV9yZWcyID0gKnNyY19yZWc7CkBAIC0xNjkxNywxMCAmIzQzOzE2OTQxLDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCSAqICYjMzk7dGhpc19icmFuY2gmIzM5OyBhbmQgJiMzOTtvdGhlcl9icmFuY2gmIzM5OyBzaGFyZSB0aGlzIGhpc3RvcnkKIAkgKiBpZiBwYXJlbnQgc3RhdGUgaXMgY3JlYXRlZC4KIAkgKi8KLQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7IHNyY19yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgc3JjX3JlZy0mZ3Q7aWQpCi0JCWNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgc3JjX3JlZy0mZ3Q7aWQsICZhbXA7bGlua2VkX3JlZ3MpOwotCWlmIChkc3RfcmVnLSZndDt0eXBlID09IFNDQUxBUl9WQUxVRSAmYW1wOyZhbXA7IGRzdF9yZWctJmd0O2lkKQotCQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKIAlpZiAobGlua2VkX3JlZ3MuY250ICZndDsgMSkgewogCQllcnIgPSBicGZfcHVzaF9qbXBfaGlzdG9yeShlbnYsIHRoaXNfYnJhbmNoLCAwLCAwLCAwLCBsaW5rZWRfcmVnc19wYWNrKCZhbXA7bGlua2VkX3JlZ3MpKTsKIAkJaWYgKGVycikKQEAgLTE3MDA0LDYgJiM0MzsxNzAyNCwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJICAgIHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwogCSAgICAoKEJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0sgJmFtcDsmYW1wOyBpbnNuLSZndDtpbW0gPT0gMCkgfHwKIAkgICAgIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9YICZhbXA7JmFtcDsgYnBmX3JlZ2lzdGVyX2lzX251bGwoc3JjX3JlZykpKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEZvciBCUEZfWCB0aGUgemVybyBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZXhlY3V0aW9uIHBhdGgsCiYjNDM7CQkgKiBoZW5jZSBzcmNfcmVnIGhhcyB0byBiZSBwcmVjaXNlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewomIzQzOwkJCWVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KIAkJLyogTWFyayBhbGwgaWRlbnRpY2FsIHJlZ2lzdGVycyBpbiBlYWNoIGJyYW5jaCBhcyBlaXRoZXIKIAkJICogc2FmZSBvciB1bmtub3duIGRlcGVuZGluZyBSID09IDAgb3IgUiAhPSAwIGNvbmRpdGlvbmFsLgogCQkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYwppbmRleCBiNDEyYTU0MmVmNzZmLi4zYzc4OWM1NjViMThmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jCkBAIC0zMTEsNiAmIzQzOzMxMSwxNDcgQEAgX19uYWtlZCB2b2lkIHVudHJ1c3RlZF9tZW1fZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpCiAJOiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSBwb2ludGVyIHdpdGggYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGJvdW5kZWQgZnJvbSBhYm92ZSBtYXkgYmUgbnVsbCBhdAomIzQzOyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSNyAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcikmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgdW5ib3VuZGVkX29mZnNldF9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJLyogcjYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCAmYW1wOzApOyAqLwlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CWlmIHIwID09IDAgZ290byAxZjsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJXAomIzQzOwkvKiByNyA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7MSk7ICovCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSAxOwkJCQlcCiYjNDM7CXIxID0gJVttYXBfaGFzaF0gbGw7CQkJCVwKJiM0MzsJcjIgPSByMTA7CQkJCQlcCiYjNDM7CXIyICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dOwkJCVwKJiM0MzsJcjcgPSByMDsJCQkJCVwKJiM0MzsJLyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi8JXAomIzQzOwlyOCA9IHI3OwkJCQkJXAomIzQzOwlyOCAtPSByNjsJCQkJCVwKJiM0MzsJLyogcjggaXMgaW4gWzAsIFM2NF9NQVhdICovCQkJXAomIzQzOwlyOCAmbHQ7Jmx0Oz0gMTsJCQkJCVwKJiM0MzsJcjggJmd0OyZndDs9IDE7CQkJCQlcCiYjNDM7CS8qIHI2IG1heSB3cmFwIHRvIHplcm8gYXQgcnVudGltZSAqLwkJXAomIzQzOwlyNiAmIzQzOz0gcjg7CQkJCQlcCiYjNDM7CWlmIHI3ICE9IHI2IGdvdG8gMWY7CQkJCVwKJiM0MzsJcjAgPSAqKHU4ICopKHI3ICYjNDM7IDApOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgYm91bmRlZF9vZmZzZXRfaW5mZXJzX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwkvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7MCk7ICovCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSAwOwkJCQlcCiYjNDM7CXIxID0gJVttYXBfaGFzaF0gbGw7CQkJCVwKJiM0MzsJcjIgPSByMTA7CQkJCQlcCiYjNDM7CXIyICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dOwkJCVwKJiM0MzsJaWYgcjAgPT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQlcCiYjNDM7CS8qIHI3ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDsxKTsgKi8JXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IDE7CQkJCVwKJiM0MzsJcjEgPSAlW21hcF9oYXNoXSBsbDsJCQkJXAomIzQzOwlyMiA9IHIxMDsJCQkJCVwKJiM0MzsJcjIgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07CQkJXAomIzQzOwlyNyA9IHIwOwkJCQkJXAomIzQzOwkvKiBwb2ludGVyIC0gcG9pbnRlciBpcyBhbiB1bmtub3duIHNjYWxhciAqLwlcCiYjNDM7CXI4ID0gcjc7CQkJCQlcCiYjNDM7CXI4IC09IHI2OwkJCQkJXAomIzQzOwkvKiByOCBpcyBpbiBbMCwgM10gKi8JCQkJXAomIzQzOwlyOCAmYW1wOz0gMzsJCQkJCVwKJiM0MzsJcjYgJiM0Mzs9IHI4OwkJCQkJXAomIzQzOwlpZiByNyAhPSByNiBnb3RvIDFmOwkJCQlcCiYjNDM7CXIwID0gKih1OCAqKShyNyAmIzQzOyAwKTsJCQkJXAomIzQzOzE6CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSwKJiM0MzsJICBfX2ltbV9hZGRyKG1hcF9oYXNoKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBsb3cgMzIgYml0cyBvZiBhIG1hcCB2YWx1ZSBwb2ludGVyIG1heSBiZSB6ZXJvLCBoZW5jZSBhIDMyLWJpdAomIzQzOyAqIGNvbXBhcmUgd2l0aCB6ZXJvIGNhbm5vdCBiZSBwcmVkaWN0ZWQgZnJvbSB0aGUgcG9pbnRlciBiZWluZyBub24tTlVMTAomIzQzOyAqIGFuZCBib3RoIHN1Y2Nlc3NvcnMgb2Ygc3VjaCBhIGp1bXAgaGF2ZSB0byBiZSB2ZXJpZmllZC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIGFjY2VzcyB0byBtYXAgdmFsdWUsIHZhbHVlX3NpemU9NCBvZmY9MzIgc2l6ZT00JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGptcDMyX3B0cl92c196ZXJvX2puZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwkvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7a2V5KTsgKi8JXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IDA7CQkJCVwKJiM0MzsJcjEgPSAlW21hcF9oYXNoXSBsbDsJCQkJXAomIzQzOwlyMiA9IHIxMDsJCQkJCVwKJiM0MzsJcjIgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07CQkJXAomIzQzOwlpZiByMCA9PSAwIGdvdG8gMWY7CQkJCVwKJiM0MzsJaWYgdzAgIT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXIwID0gKih1MzIgKikocjAgJiM0MzsgMzIpOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIGJlbG93IHByb2dyYW0gaXMgZXhwbG9yZWQgaW4gdHdvIHBhdGhzOiByNiA9PSAwIGFuZCByNiA9PSAxLgomIzQzOyAqIE9uIHRoZSBmaXJzdCBwYXRoIGNvbXBhcmlzb24gJiMzNDtpZiByMCA9PSByNiBnb3RvIDJmJiMzNDsgc2hvdWxkIG1hcmsgcjYgYXMgcHJlY2lzZSwKJiM0MzsgKiBvdGhlcndpc2UgdW5zYWZlIHBhdGggd2l0aCByNiA9PSAxIHdvdWxkIGJlIGluY29ycmVjdGx5IHBydW5lZC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKQomIzQzO19fbXNnKCYjMzQ7ZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjAgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGltcHJlY2lzZV96ZXJvX2RvZXNfbm90X2luZmVyX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJXAomIzQzOwkvKiByNiBpcyAwIG9uIHRoZSBwYXRoIGV4cGxvcmVkIGZpcnN0LCAxIG9uIHRoZSBvdGhlciAqL1wKJiM0MzsJcjYgPSAxOwkJCQkJCVwKJiM0MzsJaWYgcjAgPT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXI2ID0gMDsJCQkJCQlcCiYjNDM7CS8qIHIwID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDswKTsgKi8JXAomIzQzOzE6CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CWlmIHIwID09IHI2IGdvdG8gMmY7CQkJCVwKJiM0MzsJcjAgPSAqKHU4ICopKHIwICYjNDM7IDApOwkJCQlcCiYjNDM7MjoJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpLAomIzQzOwkgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogdm9pZCBrZnVuY19yb290KHZvaWQpCiB7CiAJYnBmX3Jkb25seV9jYXN0KDAsIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmMKaW5kZXggNjYzZDE1ZmM1ZmQyNi4uMjU2NTQ3MDQ4Y2M0NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jCkBAIC0zODAsMTMgJiM0MzszODAsMTQgQEAgU0VDKCYjMzQ7c29ja2V0JiMzNDspCiBfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKIF9fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiAvKgotICogY2hlY2sgdGhhdCByMCBhbmQgcjUgaGF2ZSBkaWZmZXJlbnQgSURzIGFmdGVyICYjMzk7aWYmIzM5OywKLSAqIGNvbGxlY3RfbGlua2VkX3JlZ3MoKSBjYW4mIzM5O3QgdGllIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbi4KJiM0MzsgKiBjaGVjayB0aGF0IHI1IGlzIHVubGlua2VkIGFmdGVyICYjMzk7aWYmIzM5OywgY29sbGVjdF9saW5rZWRfcmVncygpIGNhbiYjMzk7dCB0aWUKJiM0MzsgKiBtb3JlIHRoYW4gNSByZWdpc3RlcnMgZm9yIGEgc2luZ2xlIGluc24gYW5kIHRoZSByZWdpc3RlciBjb21wYXJlZCBieQomIzQzOyAqIHRoZSBqdW1wIGlzIG5vdCBleGVtcHQgZnJvbSB0aGF0LgogICovCi1fX21zZygmIzM0Ozc6ICgyNSkgaWYgcjAgJmd0OyAweDcgZ290byBwYyYjNDM7MCAgICAgICAgIDsgUjA9c2NhbGFyKGlkPTEmIzM0OykKJiM0MztfX21zZygmIzM0Ozc6ICgyNSkgaWYgcjUgJmd0OyAweDcgZ290byBwYyYjNDM7MCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49JiMzNDspCiBfX21zZygmIzM0OzEyOiAoYmYpIHI1ID0gcjUgICAgICAgICAgICAgICAgICAgICAgOyBSNT1zY2FsYXIoaWQ9MiYjMzQ7KQogLyogY2hlY2sgdGhhdCByezAtNH0gYXJlIG1hcmtlZCBwcmVjaXNlIGFmdGVyICYjMzk7aWYmIzM5OyAqLwotX19tc2coJiMzNDtmcmFtZTA6IHJlZ3M9cjAgc3RhY2s9IGJlZm9yZSA3OiAoMjUpIGlmIHIwICZndDsgMHg3IGdvdG8gcGMmIzQzOzAmIzM0OykKJiM0MztfX21zZygmIzM0O2ZyYW1lMDogcmVncz1yMCBzdGFjaz0gYmVmb3JlIDc6ICgyNSkgaWYgcjUgJmd0OyAweDcgZ290byBwYyYjNDM7MCYjMzQ7KQogX19tc2coJiMzNDtmcmFtZTA6IHBhcmVudCBzdGF0ZSByZWdzPXIwLHIxLHIyLHIzLHI0IHN0YWNrPTomIzM0OykKIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpCiB7CkBAIC00MDAsOCAmIzQzOzQwMSw4IEBAIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpCiAJJiMzNDtyMyA9IHIwOyYjMzQ7CiAJJiMzNDtyNCA9IHIwOyYjMzQ7CiAJJiMzNDtyNSA9IHIwOyYjMzQ7Ci0JLyogcHJvcGFnYXRlIHJhbmdlIGZvciByezAtNX0gKi8KLQkmIzM0O2lmIHIwICZndDsgNyBnb3RvICYjNDM7MDsmIzM0OwomIzQzOwkvKiByezAtNH0gZmlsbCB0aGUgcmVjb3JkLCByNSBkb2VzIG5vdCBmaXQgYW5kIGlzIHVubGlua2VkICovCiYjNDM7CSYjMzQ7aWYgcjUgJmd0OyA3IGdvdG8gJiM0MzswOyYjMzQ7CiAJLyoga2VlcCByezEtNH0gbGl2ZSAqLwogCSYjMzQ7cjEgPSByMTsmIzM0OwogCSYjMzQ7cjIgPSByMjsmIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjY5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgdGhlIGFzc29jaWF0ZWQgc2VsZnRlc3RzLiBUaGUgdmVyaWZpZXIsIG9mIGNvdXJzZSwgaXMgYSBjcml0aWNhbCBjb21wb25lbnQsIGV4ZWN1dGVkIHdoZW5ldmVyIGEgQlBGIHByb2dyYW0gaXMgbG9hZGVkIHZpYSBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyBjYXJlZnVsIHNjcnV0aW55LiBBbmQgdGhlIGltcGFjdCBpcyBpbW1lZGlhdGVseSBvYnZpb3VzLCBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIG9wdGlvbi4gVGhpcyBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSByZWFjaGFibGUgYnkgYm90aCB1bnByaXZpbGVnZWQgYW5kIHByaXZpbGVnZWQgdXNlcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIGEgZmV3IGtleSBhcmVhcyBvZiBjaGFuZ2U6CgoxLiAgSW4gYHJlZ19ub3RfbnVsbGAsIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyBudWxsIHBvaW50ZXIgY2hlY2tzIGFyZSBwZXJmb3JtZWQgcmVsYXRlZCB0byBvZmZzZXQgYm91bmRzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGAtQlBGX01BWF9WQVJfT0ZGYCBhbmQgYEJQRl9NQVhfVkFSX09GRmAuCgoyLiAgYGlzX2JyYW5jaF90YWtlbmAgYWxzbyBoYXMgY2hhbmdlcywgd2hpY2ggcmVsYXRlcyB0byBudWxsIGNoZWNrcyB3aXRoIHBvaW50ZXIgY29tcGFyaXNvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgYGlzX2ptcDMyYCAoMzIgYml0IGNvbXBhcmlzb25zKS4KCjMuICBgY2hlY2tfY29uZF9qbXBfb3BgIGFwcGVhcnMgdG8gYmUgZ2V0dGluZyBzb21lIHNpZ25pZmljYW50IHJld29yay4gVGhlIGBjb2xsZWN0X2xpbmtlZF9yZWdzYCBmdW5jdGlvbiBpcyBiZWluZyBtb3ZlZCwgYW5kIGBtYXJrX2NoYWluX3ByZWNpc2lvbmAgaXMgYmVpbmcgYWRkZWQgaW4gdGhlIHBvaW50ZXItdnMtbnVsbCBjaGVja2luZyBsb2dpYyB3aGVuIGRlYWxpbmcgd2l0aCBgQlBGX1hgIHNvdXJjZSBvcGVyYW5kIGFuZCB0aGUgc291cmNlIHJlZ2lzdGVyIGJlaW5nIG51bGwuCgpUaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHN0aWxsIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmOiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSB0aGUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZW50cnkgcG9pbnRzIHRocm91Z2ggYGJwZl9jaGVja2AgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byBgcmVnX25vdF9udWxsYCwgYGlzX2JyYW5jaF90YWtlbmAsIGFuZCBgY2hlY2tfY29uZF9qbXBfb3BgLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGZsb3cgdGhyb3VnaCB0aGUgY29yZSB2ZXJpZmllciBsb2dpYy4KCkkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IganVzdCBkaXJlY3RseSBleGFtaW5lIHRoZSBmaWxlIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgc3ltYm9scyBhbmQgY29uZmlncyByaWdodC4gVGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkLCBidXQgaXRzIGltcGxpY2F0aW9ucyBvbiBwb2ludGVyIGhhbmRsaW5nIGFuZCBjb25kaXRpb25hbCBqdW1wcyBpbiBCUEYgcHJvZ3JhbXMgY291bGQgYmUgc3Vic3RhbnRpYWwsIHNvIEkgbmVlZCB0byBnbyBkZWVwZXIgaW50byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgQlBGX1NZU0NBTEwgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgQlBGX1NZU0NBTExgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgd2l0aCBgS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBhcmUgc2V0LCBzbyBgQlBGX1NZU0NBTExgLCBiZWluZyBhIG1hY3JvIGxpa2VseSB0aWVkIHRvIGEgZmVhdHVyZSBvciBmdW5jdGlvbmFsaXR5LCAqc2hvdWxkKiBiZSBkZWZpbmVkIGluIGEgYEtjb25maWdgIGZpbGUgc29tZXdoZXJlLiBUaGUgY2hhbGxlbmdlIG5vdyBpcyBmaWd1cmluZyBvdXQgd2hlcmUgdGhhdCBgS2NvbmZpZ2AgaXMuIEkmIzM5O2xsIG5lZWQgdG8gZG8gc29tZSBkaWdnaW5nLCBwcm9iYWJseSB1c2luZyBgZ3JlcGAgb3Igc2ltaWxhciB0b29scywgc2VhcmNoaW5nIHRoZSBzb3VyY2UgdHJlZSBmb3IgcmVmZXJlbmNlcyBvciBkZWZpbml0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gYmUgbmVzdGVkIHdpdGhpbiBhIGZlYXR1cmUgdGhhdCBoYXMgdG8gYmUgY29uZmlndXJlZCB3aGVuIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQuIE9uY2UgSSBsb2NhdGUgdGhlIGZpbGUsIEkgY2FuIGFuYWx5emUgdGhlIGFzc29jaWF0ZWQgYEtjb25maWdgIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBgQlBGX1NZU0NBTExgIGFuZCwgY3J1Y2lhbGx5LCB1bmRlcnN0YW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHdvcmsgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDYzCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIEJQRiB2ZXJpZmllciBpcyBtYW5hZ2luZyBjb25kaXRpb25hbCBqdW1wcyBhbmQgcmVnaXN0ZXIgdmFsaWRpdHkuIE15IGh1bmNoIGlzIHRoYXQgYSBkZWVwIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCBzb21lIGtleSBkZXRhaWxzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIGZ1bmN0aW9ucyBsaWtlIGByZWdfbm90X251bGxgLCBgaXNfYnJhbmNoX3Rha2VuYCwgYW5kIGBjaGVja19jb25kX2ptcF9vcGAgYXJlIGRlZmluZWQgd2l0aCBzdGF0aWMgbGlua2FnZSBvciBpZiB0aGV5IGFyZSBhY2Nlc3NpYmxlIGdsb2JhbGx5IHdpdGhpbiB0aGUgdmVyaWZpZXImIzM5O3Mgc2NvcGUuIFRoZWlyIHNjb3BlIHdpbGwgaW5mbHVlbmNlIGhvdyBlYXNpbHkgdGhleSBjYW4gYmUgcmUtdXNlZCBhbmQgZXh0ZW5kZWQuIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8gdHJhY2UgdGhlaXIgY2FsbCBzaXRlcy4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSAqY2FsbGVkKiBwcm92aWRlcyB2aXRhbCBjb250ZXh0IGZvciB0aGVpciBmdW5jdGlvbmFsaXR5LCBhbmQgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIHZlcmlmaWVyJiMzOTtzIGNvbnRyb2wgZmxvdyBhbmQgZGVjaXNpb24tbWFraW5nIGxvZ2ljLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGNvbmRpdGlvbmFsIGp1bXBzIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZywgYW5kIHBvdGVudGlhbGx5IG9wdGltaXppbmcsIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhyZWdfbm90X251bGx8aXNfYnJhbmNoX3Rha2VufGNoZWNrX2NvbmRfam1wX29wKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTg9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAtICogUFRSX1RPX01BUF9WQUxVRSBhbmQgdGhlIHNhbWUgcmVnaXN0ZXIgY2hhbmdlcyBzdGF0ZSB0byBDT05TVF9JTU0gaW4gdGhlIGZhbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYxOiAqIGJyYW5jaC4gU2VlIGNoZWNrX2NvbmRfam1wX29wKCkuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyLSAqXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTMyNj1zdGF0aWMgdm9pZCB2ZXJib3NlX2ludmFsaWRfc2NhbGFyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDc6c3RhdGljIGJvb2wgcmVnX25vdF9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYyNTY9c3RhdGljIGludCBpc19wa3RfcHRyX2JyYW5jaF90YWtlbihzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzMDItICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMDM6c3RhdGljIGludCBpc19icmFuY2hfdGFrZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzEsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzMDQtXHRcdFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzIsIHU4IG9wY29kZSwgYm9vbCBpc19qbXAzMilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzMjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMjg6XHRcdGlmICghcmVnX25vdF9udWxsKGVudiwgcmVnMSkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzMjktXHRcdFx0cmV0dXJuIC0xO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjc0Nj1zdGF0aWMgdm9pZCBzeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY4MDE6c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODAyLVx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgKmluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjg5NC1cdGVudi1cdTAwM2V0cnVlX3JlZzIgPSAqc3JjX3JlZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjg5NTpcdHByZWQgPSBpc19icmFuY2hfdGFrZW4oZW52LCBkc3RfcmVnLCBzcmNfcmVnLCBvcGNvZGUsIGlzX2ptcDMyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjg5Ni1cdGlmIChwcmVkIFx1MDAzZT0gMCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODk3LVx0XHQvKiBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgZHN0X3JlZyBwb2ludGVyIHR5cGUgaXQgaXMgYmVjYXVzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODk4Olx0XHQgKiBhYm92ZSBpc19icmFuY2hfdGFrZW4oKSBzcGVjaWFsIGNhc2VkIHRoZSAwIGNvbXBhcmlzb24uXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4OTktXHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzAwOC1cdFx0XHQvKiBzcmMgPT0gZHN0IFx1MDAyNlx1MDAyNiBkc3QgIT0gTlVMTCA9XHUwMDNlIHNyYyAhPSBOVUxMICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcwMDk6XHRcdFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIGRzdF9yZWcpIFx1MDAyNlx1MDAyNiB0eXBlX21heV9iZV9udWxsKHNyY19yZWctXHUwMDNldHlwZSkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcwMTAtXHRcdFx0XHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcoXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcwMTEtXHRcdFx0Lyogc3JjID09IGRzdCBcdTAwMjZcdTAwMjYgc3JjICE9IE5VTEwgPVx1MDAzZSBkc3QgIT0gTlVMTCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MDEyOlx0XHRcdGlmIChyZWdfbm90X251bGwoZW52LCBzcmNfcmVnKSBcdTAwMjZcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVx1MDAzZXR5cGUpKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MDEzLVx0XHRcdFx0bWFya19wdHJfbm90X251bGxfcmVnKFx1MDAyNmVxX2JyYW5jaF9yZWdzW2luc24tXHUwMDNlZHN0X3JlZ10pO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODEwNz1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTkzLVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxOTQ6XHRcdHJldHVybiBjaGVja19jb25kX2ptcF9vcChlbnYsIGluc24sIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxOTUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgcGVyc3BlY3RpdmUgb24gdGhpcyBzcGVjaWZpYyBsaW5lIG9mIGlucXVpcnk6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9jaGVja2AgaW4gdGhlIEJQRiBWZXJpZmllcioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gYnJvYWRlbiBvdXIgc2NvcGUgYSBiaXQuIFdoaWxlIHdlJiMzOTt2ZSBiZWVuIGV4YW1pbmluZyBvdGhlciBhcmVhcywgSSYjMzk7bSBmZWVsaW5nIGEgbmFnZ2luZyBzZW5zYXRpb24gdGhhdCB3ZSBtaWdodCBiZSBvdmVybG9va2luZyBzb21ldGhpbmcgY3J1Y2lhbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdyB0aGlua2luZyB3ZSBzaG91bGQgcmVhbGx5IHRha2UgYSBoYXJkIGxvb2sgYXQgYGJwZl9jaGVja2Agd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHdob2xlIEJQRiB2ZXJpZmljYXRpb24gcHJvY2VzcywgYW5kIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIG1hbmlmZXN0aW5nLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSB0aWVkIHRvIHRoaXMgcGFydGljdWxhciBhcmVhLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBleHBsb3JlZCB0aGF0IHNlY3Rpb24gdGhvcm91Z2hseTsgaXQgd2FycmFudHMgaW1tZWRpYXRlIGF0dGVudGlvbi4gTXkgZ3V0IHNheXMgaXQmIzM5O3MgbGlrZWx5IGxpbmtlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJwZl9jaGVja1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4OTY9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDEyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDEzOmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDE0LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzMKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogNDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEJQRiBWZXJpZmllcioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBwdWxsIG91dCB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSBpdCYjMzk7cyB0aGVzZSBmdW5jdGlvbnM6IGBjaGVja19jb25kX2ptcF9vcGAsIGBpc19icmFuY2hfdGFrZW5gLCBgcmVnX25vdF9udWxsYCwgYW5kIGBicGZfY2hlY2tgLiBHb3QgaXQuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaC4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIGl0IHNlZW1zIGxpa2UgdGhlc2Ugd2VyZSBhbGwgdG91Y2hlZDogYHJlZ19ub3RfbnVsbGAsIGBpc19icmFuY2hfdGFrZW5gLCBgY2hlY2tfY29uZF9qbXBfb3BgLCBhbGwgbG9jYXRlZCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIGBicGZfY2hlY2tgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIGFuZCB0aGUgb3RoZXIgdGhyZWUgZnVuY3Rpb25zIGFyZSBzdGF0aWMgYW5kIHdlcmUgbW9kaWZpZWQuIE9rYXkuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIGZ1enppbmcgd29ydGhpbmVzcy4gVGhlIEJQRiB2ZXJpZmllciBpcyBkZWZpbml0ZWx5IGEgY29yZSBzdWJzeXN0ZW3igJRpdCYjMzk7cyByaWdodCB0aGVyZSBpbiBCUEYuIFRoZSBwYXRjaCBkZXRhaWxzIG1vZGlmaWNhdGlvbnMgaW4gcmFuZ2UgdHJhY2tpbmcsIHBvaW50ZXIgbnVsbG5lc3MsIGJyYW5jaCBwcmVkaWN0aW9uLCByZWdpc3RlciBsaW5raW5nLCBhbmQgcHJlY2lzaW9uIHRyYWNraW5nLiBTaWduaWZpY2FudCBzdHVmZi4gQWxzbywgSSBjYW4gcmVhY2ggaXQgdmlhIHRoZSBgc3lzX2JwZmAgc3lzY2FsbCB3aXRoIGBCUEZfUFJPR19MT0FEYC4gKkRlZmluaXRlbHkqIFdvcnRoRnV6emluZz10cnVlLiBObyBxdWVzdGlvbi4KCkkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIHJlbGV2YW50IG9uZSBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAsIHVuZGVyIHRoZSAmIzM0O0JQRiBzdWJzeXN0ZW0mIzM0OyBtZW51LiBHb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZC4KCkxldCYjMzk7cyByZXZpZXcgdGhlIGZvY3VzIHN5bWJvbCBydWxlcyB0byBtYWtlIHN1cmUgSSYjMzk7bSBkb2luZyB0aGlzIHJpZ2h0LiBUaGUgZ29hbCBpcyB0byBmb2N1cyBvbiBzcGVjaWZpYywgbm9uLXViaXF1aXRvdXMga2VybmVsIGZ1bmN0aW9ucywgdGFyZ2V0aW5nIGZ1bmN0aW9ucyBkaXJlY3RseSBtb2RpZmllZCBvciBhY3RpbmcgYXMgZGlyZWN0IGNhbGxlciBlbnRyeXBvaW50cy4gVGhlIG9uZXMgSSYjMzk7dmUgc2VsZWN0ZWQsIGBjaGVja19jb25kX2ptcF9vcGAsIGBpc19icmFuY2hfdGFrZW5gLCBgcmVnX25vdF9udWxsYCwgYW5kIGBicGZfY2hlY2tgLCBmaXQgdGhlIGJpbGwgcGVyZmVjdGx5LgoKRmluYWxseSwganVzdCBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiB0aGUgZGlmZiBhbmQgYWxsIG1vZGlmaWVkIGZpbGVzIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gTG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2l0aCBzb21lIGFzc29jaWF0ZWQgc2VsZi10ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuIFRoZSBzZWxmLXRlc3RzIGFyZSB1c2VyLXNwYWNlLCBzbyBJIGRvbiYjMzk7dCBuZWVkIGFueSBzeW1ib2xzIGZyb20gdGhlbS4gQWxsIGNsZWFyLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfY29uZF9qbXBfb3AmIzM0OywKICAgICYjMzQ7aXNfYnJhbmNoX3Rha2VuJiMzNDssCiAgICAmIzM0O3JlZ19ub3RfbnVsbCYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBmb3IgcG9pbnRlciBudWxsbmVzcyBpbmZlcmVuY2UsIDMyLWJpdCBqdW1wIGJyYW5jaCBwcmVkaWN0aW9uLCBsaW5rZWQgcmVnaXN0ZXJzIGNvbGxlY3Rpb24gdGltaW5nLCBhbmQgcHJlY2lzaW9uIHRyYWNraW5nIG9uIHJlZ2lzdGVyIGNvbXBhcmlzb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmVyaWZpY2F0aW9uIHBhdGhzIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoZWNrX2NvbmRfam1wX29wJiMzNDssCiAgICAmIzM0O2lzX2JyYW5jaF90YWtlbiYjMzQ7LAogICAgJiMzNDtyZWdfbm90X251bGwmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgZm9yIHBvaW50ZXIgbnVsbG5lc3MgaW5mZXJlbmNlLCAzMi1iaXQganVtcCBicmFuY2ggcHJlZGljdGlvbiwgbGlua2VkIHJlZ2lzdGVycyBjb2xsZWN0aW9uIHRpbWluZywgYW5kIHByZWNpc2lvbiB0cmFja2luZyBvbiByZWdpc3RlciBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZlcmlmaWNhdGlvbiBwYXRocyB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gZml4IHNvdW5kbmVzcyBpc3N1ZXMgcmVnYXJkaW5nIHJlZ2lzdGVyIHRyYWNraW5nLCBzcGVjaWZpY2FsbHk6XG4xLiBIYW5kbGluZyBvZmZzZXQgd3JhcHBpbmcgdG8gemVybyBpbiBgcmVnX25vdF9udWxsKClgLlxuMi4gSGFuZGxpbmcgMzItYml0IHBvaW50ZXItdnMtc2NhbGFyIGNvbXBhcmlzb25zIGluIGBpc19icmFuY2hfdGFrZW4oKWAuXG4zLiBFbnN1cmluZyBsaW5rZWQgcmVnaXN0ZXJzIGFyZSBjb2xsZWN0ZWQgYmVmb3JlIHNhdmluZyByZWdpc3RlcnMgaW4gYGNoZWNrX2NvbmRfam1wX29wKClgLlxuNC4gTWFya2luZyBwcmVjaXNpb24gb24gYHNyY19yZWdgIHdoZW4gY2hlY2tpbmcgbnVsbG5lc3MgaW4gYGNoZWNrX2NvbmRfam1wX29wKClgLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZywgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlIHN0cnVjdHVyZXMgbWFuaXB1bGF0ZWQgKHN1Y2ggYXMgYHN0cnVjdCBsaW5rZWRfcmVnc2ApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSAoZS5nLiwgemVyby1pbml0aWFsaXplZCBvbiBkZWNsYXJhdGlvbiksIGFuZCB0aGUgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IHZlcmlmaWVyIGludGVybmFsIGNvbnRyb2wtZmxvdyBhbmQgcmVnaXN0ZXIgc3RhdGUgbG9naWMuIEFueSBwb3RlbnRpYWwgbWlzYmVoYXZpb3IgcHJldmVudGVkIGJ5IHRoZXNlIGZpeGVzIHJlbGF0ZXMgdG8gQlBGIHZlcmlmaWNhdGlvbiBzb3VuZG5lc3MgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgZGVyZWZlcmVuY2VzKSwgd2hpY2ggaXMgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNzozODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNjQwMzU2ODM3OTUxLi43MDliNDc5M2U4ZWI3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0zNTIsNiAmIzQzOzM1MiwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdAogCWlmICh0eXBlX21heV9iZV9udWxsKHR5cGUpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyoKJiM0MzsJICogVGhlIHR5cGVzIGJlbG93IGd1YXJhbnRlZSBhIG5vbi1OVUxMIGJhc2UsIGFuIHVuYm91bmRlZCBvZmZzZXQgY2FuCiYjNDM7CSAqIHN0aWxsIHdyYXAgYmFzZSAmIzQzOyBvZmZzZXQgdG8gemVyby4KJiM0MzsJICovCiYjNDM7CWlmIChyZWdfc21pbihyZWcpICZsdDs9IC1CUEZfTUFYX1ZBUl9PRkYgfHwgcmVnX3NtYXgocmVnKSAmZ3Q7PSBCUEZfTUFYX1ZBUl9PRkYpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJdHlwZSA9IGJhc2VfdHlwZSh0eXBlKTsKIAlyZXR1cm4gdHlwZSA9PSBQVFJfVE9fU09DS0VUIHx8CiAJCXR5cGUgPT0gUFRSX1RPX1RDUF9TT0NLIHx8CkBAIC0xNjMwMiw2ICYjNDM7MTYzMDksMTMgQEAgc3RhdGljIGludCBpc19icmFuY2hfdGFrZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnIKIAlpZiAoX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcxKSB8fCBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzIpKSB7CiAJCXU2NCB2YWw7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIG1heSB3ZWxsIGJlIHplcm8sIGhlbmNlCiYjNDM7CQkgKiBub3RoaW5nIGJlbG93IGFwcGxpZXMgdG8gYSAzMi1iaXQgY29tcGFyaXNvbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGlzX2ptcDMyKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsKIAkJLyogYXJyYW5nZSB0aGF0IHJlZzIgaXMgYSBzY2FsYXIsIGFuZCByZWcxIGlzIGEgcG9pbnRlciAqLwogCQlpZiAoIWlzX3JlZ19jb25zdChyZWcyLCBpc19qbXAzMikpIHsKIAkJCW9wY29kZSA9IGZsaXBfb3Bjb2RlKG9wY29kZSk7CkBAIC0xNjg2Myw2ICYjNDM7MTY4NzcsMTYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJcmV0dXJuIGVycjsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQ29sbGVjdCB0aGUgbGlua2VkIHJlZ2lzdGVycyBiZWZvcmUgZW52LSZndDt7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gc2V0dXAsCiYjNDM7CSAqIG90aGVyd2lzZSBpZHMgZHJvcHBlZCBieSBjb2xsZWN0X2xpbmtlZF9yZWdzKCkgd291bGQgYmUgcmVzdXJyZWN0ZWQKJiM0MzsJICogd2hlbiBlbnYtJmd0O3t0cnVlLGZhbHNlfV9yZWd7MSwyfSBhcmUgY29waWVkIGJhY2suCiYjNDM7CSAqLwomIzQzOwlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7IHNyY19yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgc3JjX3JlZy0mZ3Q7aWQpCiYjNDM7CQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKJiM0MzsJaWYgKGRzdF9yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgZHN0X3JlZy0mZ3Q7aWQpCiYjNDM7CQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKJiM0MzsKIAlpc19qbXAzMiA9IEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfSk1QMzI7CiAJZW52LSZndDtmYWxzZV9yZWcxID0gKmRzdF9yZWc7CiAJZW52LSZndDtmYWxzZV9yZWcyID0gKnNyY19yZWc7CkBAIC0xNjkxNywxMCAmIzQzOzE2OTQxLDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCSAqICYjMzk7dGhpc19icmFuY2gmIzM5OyBhbmQgJiMzOTtvdGhlcl9icmFuY2gmIzM5OyBzaGFyZSB0aGlzIGhpc3RvcnkKIAkgKiBpZiBwYXJlbnQgc3RhdGUgaXMgY3JlYXRlZC4KIAkgKi8KLQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7IHNyY19yZWctJmd0O3R5cGUgPT0gU0NBTEFSX1ZBTFVFICZhbXA7JmFtcDsgc3JjX3JlZy0mZ3Q7aWQpCi0JCWNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgc3JjX3JlZy0mZ3Q7aWQsICZhbXA7bGlua2VkX3JlZ3MpOwotCWlmIChkc3RfcmVnLSZndDt0eXBlID09IFNDQUxBUl9WQUxVRSAmYW1wOyZhbXA7IGRzdF9yZWctJmd0O2lkKQotCQljb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctJmd0O2lkLCAmYW1wO2xpbmtlZF9yZWdzKTsKIAlpZiAobGlua2VkX3JlZ3MuY250ICZndDsgMSkgewogCQllcnIgPSBicGZfcHVzaF9qbXBfaGlzdG9yeShlbnYsIHRoaXNfYnJhbmNoLCAwLCAwLCAwLCBsaW5rZWRfcmVnc19wYWNrKCZhbXA7bGlua2VkX3JlZ3MpKTsKIAkJaWYgKGVycikKQEAgLTE3MDA0LDYgJiM0MzsxNzAyNCwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJICAgIHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOwogCSAgICAoKEJQRl9TUkMoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0sgJmFtcDsmYW1wOyBpbnNuLSZndDtpbW0gPT0gMCkgfHwKIAkgICAgIChCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9YICZhbXA7JmFtcDsgYnBmX3JlZ2lzdGVyX2lzX251bGwoc3JjX3JlZykpKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEZvciBCUEZfWCB0aGUgemVybyBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZXhlY3V0aW9uIHBhdGgsCiYjNDM7CQkgKiBoZW5jZSBzcmNfcmVnIGhhcyB0byBiZSBwcmVjaXNlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCkgewomIzQzOwkJCWVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi0mZ3Q7c3JjX3JlZyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KIAkJLyogTWFyayBhbGwgaWRlbnRpY2FsIHJlZ2lzdGVycyBpbiBlYWNoIGJyYW5jaCBhcyBlaXRoZXIKIAkJICogc2FmZSBvciB1bmtub3duIGRlcGVuZGluZyBSID09IDAgb3IgUiAhPSAwIGNvbmRpdGlvbmFsLgogCQkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYwppbmRleCBiNDEyYTU0MmVmNzZmLi4zYzc4OWM1NjViMThmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jCkBAIC0zMTEsNiAmIzQzOzMxMSwxNDcgQEAgX19uYWtlZCB2b2lkIHVudHJ1c3RlZF9tZW1fZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpCiAJOiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogQSBwb2ludGVyIHdpdGggYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGJvdW5kZWQgZnJvbSBhYm92ZSBtYXkgYmUgbnVsbCBhdAomIzQzOyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSNyAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcikmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgdW5ib3VuZGVkX29mZnNldF9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJLyogcjYgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCAmYW1wOzApOyAqLwlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CWlmIHIwID09IDAgZ290byAxZjsJCQkJXAomIzQzOwlyNiA9IHIwOwkJCQkJXAomIzQzOwkvKiByNyA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7MSk7ICovCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSAxOwkJCQlcCiYjNDM7CXIxID0gJVttYXBfaGFzaF0gbGw7CQkJCVwKJiM0MzsJcjIgPSByMTA7CQkJCQlcCiYjNDM7CXIyICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dOwkJCVwKJiM0MzsJcjcgPSByMDsJCQkJCVwKJiM0MzsJLyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi8JXAomIzQzOwlyOCA9IHI3OwkJCQkJXAomIzQzOwlyOCAtPSByNjsJCQkJCVwKJiM0MzsJLyogcjggaXMgaW4gWzAsIFM2NF9NQVhdICovCQkJXAomIzQzOwlyOCAmbHQ7Jmx0Oz0gMTsJCQkJCVwKJiM0MzsJcjggJmd0OyZndDs9IDE7CQkJCQlcCiYjNDM7CS8qIHI2IG1heSB3cmFwIHRvIHplcm8gYXQgcnVudGltZSAqLwkJXAomIzQzOwlyNiAmIzQzOz0gcjg7CQkJCQlcCiYjNDM7CWlmIHI3ICE9IHI2IGdvdG8gMWY7CQkJCVwKJiM0MzsJcjAgPSAqKHU4ICopKHI3ICYjNDM7IDApOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgYm91bmRlZF9vZmZzZXRfaW5mZXJzX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwkvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7MCk7ICovCVwKJiM0MzsJKih1NjQgKikocjEwIC0gOCkgPSAwOwkJCQlcCiYjNDM7CXIxID0gJVttYXBfaGFzaF0gbGw7CQkJCVwKJiM0MzsJcjIgPSByMTA7CQkJCQlcCiYjNDM7CXIyICYjNDM7PSAtODsJCQkJCVwKJiM0MzsJY2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dOwkJCVwKJiM0MzsJaWYgcjAgPT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQlcCiYjNDM7CS8qIHI3ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDsxKTsgKi8JXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IDE7CQkJCVwKJiM0MzsJcjEgPSAlW21hcF9oYXNoXSBsbDsJCQkJXAomIzQzOwlyMiA9IHIxMDsJCQkJCVwKJiM0MzsJcjIgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07CQkJXAomIzQzOwlyNyA9IHIwOwkJCQkJXAomIzQzOwkvKiBwb2ludGVyIC0gcG9pbnRlciBpcyBhbiB1bmtub3duIHNjYWxhciAqLwlcCiYjNDM7CXI4ID0gcjc7CQkJCQlcCiYjNDM7CXI4IC09IHI2OwkJCQkJXAomIzQzOwkvKiByOCBpcyBpbiBbMCwgM10gKi8JCQkJXAomIzQzOwlyOCAmYW1wOz0gMzsJCQkJCVwKJiM0MzsJcjYgJiM0Mzs9IHI4OwkJCQkJXAomIzQzOwlpZiByNyAhPSByNiBnb3RvIDFmOwkJCQlcCiYjNDM7CXIwID0gKih1OCAqKShyNyAmIzQzOyAwKTsJCQkJXAomIzQzOzE6CXIwID0gMDsJCQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSwKJiM0MzsJICBfX2ltbV9hZGRyKG1hcF9oYXNoKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSBsb3cgMzIgYml0cyBvZiBhIG1hcCB2YWx1ZSBwb2ludGVyIG1heSBiZSB6ZXJvLCBoZW5jZSBhIDMyLWJpdAomIzQzOyAqIGNvbXBhcmUgd2l0aCB6ZXJvIGNhbm5vdCBiZSBwcmVkaWN0ZWQgZnJvbSB0aGUgcG9pbnRlciBiZWluZyBub24tTlVMTAomIzQzOyAqIGFuZCBib3RoIHN1Y2Nlc3NvcnMgb2Ygc3VjaCBhIGp1bXAgaGF2ZSB0byBiZSB2ZXJpZmllZC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIGFjY2VzcyB0byBtYXAgdmFsdWUsIHZhbHVlX3NpemU9NCBvZmY9MzIgc2l6ZT00JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGptcDMyX3B0cl92c196ZXJvX2puZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwkvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsICZhbXA7a2V5KTsgKi8JXAomIzQzOwkqKHU2NCAqKShyMTAgLSA4KSA9IDA7CQkJCVwKJiM0MzsJcjEgPSAlW21hcF9oYXNoXSBsbDsJCQkJXAomIzQzOwlyMiA9IHIxMDsJCQkJCVwKJiM0MzsJcjIgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07CQkJXAomIzQzOwlpZiByMCA9PSAwIGdvdG8gMWY7CQkJCVwKJiM0MzsJaWYgdzAgIT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXIwID0gKih1MzIgKikocjAgJiM0MzsgMzIpOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIGJlbG93IHByb2dyYW0gaXMgZXhwbG9yZWQgaW4gdHdvIHBhdGhzOiByNiA9PSAwIGFuZCByNiA9PSAxLgomIzQzOyAqIE9uIHRoZSBmaXJzdCBwYXRoIGNvbXBhcmlzb24gJiMzNDtpZiByMCA9PSByNiBnb3RvIDJmJiMzNDsgc2hvdWxkIG1hcmsgcjYgYXMgcHJlY2lzZSwKJiM0MzsgKiBvdGhlcndpc2UgdW5zYWZlIHBhdGggd2l0aCByNiA9PSAxIHdvdWxkIGJlIGluY29ycmVjdGx5IHBydW5lZC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2ZhaWx1cmUKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKQomIzQzO19fbXNnKCYjMzQ7ZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjAgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIGltcHJlY2lzZV96ZXJvX2RvZXNfbm90X2luZmVyX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJXAomIzQzOwkvKiByNiBpcyAwIG9uIHRoZSBwYXRoIGV4cGxvcmVkIGZpcnN0LCAxIG9uIHRoZSBvdGhlciAqL1wKJiM0MzsJcjYgPSAxOwkJCQkJCVwKJiM0MzsJaWYgcjAgPT0gMCBnb3RvIDFmOwkJCQlcCiYjNDM7CXI2ID0gMDsJCQkJCQlcCiYjNDM7CS8qIHIwID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDswKTsgKi8JXAomIzQzOzE6CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CWlmIHIwID09IHI2IGdvdG8gMmY7CQkJCVwKJiM0MzsJcjAgPSAqKHU4ICopKHIwICYjNDM7IDApOwkJCQlcCiYjNDM7MjoJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpLAomIzQzOwkgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLAomIzQzOwkgIF9faW1tX2FkZHIobWFwX2hhc2gpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogdm9pZCBrZnVuY19yb290KHZvaWQpCiB7CiAJYnBmX3Jkb25seV9jYXN0KDAsIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmMKaW5kZXggNjYzZDE1ZmM1ZmQyNi4uMjU2NTQ3MDQ4Y2M0NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jCkBAIC0zODAsMTMgJiM0MzszODAsMTQgQEAgU0VDKCYjMzQ7c29ja2V0JiMzNDspCiBfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKIF9fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpCiAvKgotICogY2hlY2sgdGhhdCByMCBhbmQgcjUgaGF2ZSBkaWZmZXJlbnQgSURzIGFmdGVyICYjMzk7aWYmIzM5OywKLSAqIGNvbGxlY3RfbGlua2VkX3JlZ3MoKSBjYW4mIzM5O3QgdGllIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbi4KJiM0MzsgKiBjaGVjayB0aGF0IHI1IGlzIHVubGlua2VkIGFmdGVyICYjMzk7aWYmIzM5OywgY29sbGVjdF9saW5rZWRfcmVncygpIGNhbiYjMzk7dCB0aWUKJiM0MzsgKiBtb3JlIHRoYW4gNSByZWdpc3RlcnMgZm9yIGEgc2luZ2xlIGluc24gYW5kIHRoZSByZWdpc3RlciBjb21wYXJlZCBieQomIzQzOyAqIHRoZSBqdW1wIGlzIG5vdCBleGVtcHQgZnJvbSB0aGF0LgogICovCi1fX21zZygmIzM0Ozc6ICgyNSkgaWYgcjAgJmd0OyAweDcgZ290byBwYyYjNDM7MCAgICAgICAgIDsgUjA9c2NhbGFyKGlkPTEmIzM0OykKJiM0MztfX21zZygmIzM0Ozc6ICgyNSkgaWYgcjUgJmd0OyAweDcgZ290byBwYyYjNDM7MCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49JiMzNDspCiBfX21zZygmIzM0OzEyOiAoYmYpIHI1ID0gcjUgICAgICAgICAgICAgICAgICAgICAgOyBSNT1zY2FsYXIoaWQ9MiYjMzQ7KQogLyogY2hlY2sgdGhhdCByezAtNH0gYXJlIG1hcmtlZCBwcmVjaXNlIGFmdGVyICYjMzk7aWYmIzM5OyAqLwotX19tc2coJiMzNDtmcmFtZTA6IHJlZ3M9cjAgc3RhY2s9IGJlZm9yZSA3OiAoMjUpIGlmIHIwICZndDsgMHg3IGdvdG8gcGMmIzQzOzAmIzM0OykKJiM0MztfX21zZygmIzM0O2ZyYW1lMDogcmVncz1yMCBzdGFjaz0gYmVmb3JlIDc6ICgyNSkgaWYgcjUgJmd0OyAweDcgZ290byBwYyYjNDM7MCYjMzQ7KQogX19tc2coJiMzNDtmcmFtZTA6IHBhcmVudCBzdGF0ZSByZWdzPXIwLHIxLHIyLHIzLHI0IHN0YWNrPTomIzM0OykKIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpCiB7CkBAIC00MDAsOCAmIzQzOzQwMSw4IEBAIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpCiAJJiMzNDtyMyA9IHIwOyYjMzQ7CiAJJiMzNDtyNCA9IHIwOyYjMzQ7CiAJJiMzNDtyNSA9IHIwOyYjMzQ7Ci0JLyogcHJvcGFnYXRlIHJhbmdlIGZvciByezAtNX0gKi8KLQkmIzM0O2lmIHIwICZndDsgNyBnb3RvICYjNDM7MDsmIzM0OwomIzQzOwkvKiByezAtNH0gZmlsbCB0aGUgcmVjb3JkLCByNSBkb2VzIG5vdCBmaXQgYW5kIGlzIHVubGlua2VkICovCiYjNDM7CSYjMzQ7aWYgcjUgJmd0OyA3IGdvdG8gJiM0MzswOyYjMzQ7CiAJLyoga2VlcCByezEtNH0gbGl2ZSAqLwogCSYjMzQ7cjEgPSByMTsmIzM0OwogCSYjMzQ7cjIgPSByMjsmIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEtNU0FOIFJlbGV2YW5jZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGNvbnNpZGVyIEtNU0FOIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyB0aHJvdWdoIHRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBzZWxmdGVzdHMsIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCkZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBjb2RlIGNoYW5nZXMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgaW4gZGV0YWlsOgoKMS4gICoqYHJlZ19ub3RfbnVsbGAgY2hhbmdlOioqIFRoZSBhZGRpdGlvbiBvZiB0aGUgb2Zmc2V0IGNoZWNrIG1ha2VzIHNlbnNlLiBXZSBuZWVkIHRvIHByZXZlbnQgdW5ib3VuZGVkIG9mZnNldHMgbGVhZGluZyB0byBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYXMgYSByZWdpc3RlciB0aGF0JiMzOTtzICphc3N1bWVkKiBub24tbnVsbCBjYW4gYmVjb21lIG51bGwgYWZ0ZXIgYXBwbHlpbmcgYW4gZXhjZXNzaXZlbHkgbGFyZ2Ugb2Zmc2V0IHRvIGl0LiBUaGlzIGlzbiYjMzk7dCBpbmhlcmVudGx5IGEgS01TQU4gaXNzdWUsIGJ1dCBhIGNyaXRpY2FsIHNvdW5kbmVzcyBmaXguCgoyLiAgKipgaXNfYnJhbmNoX3Rha2VuYCBtb2RpZmljYXRpb246KiogIElnbm9yaW5nIHRoZSAzMi1iaXQgY29tcGFyaXNvbiByZXN1bHQgaW4gc29tZSBjYXNlcyBpcyBjb3JyZWN0LiBUaGUgbG93ZXIgMzIgYml0cyBvZiBhIHZhbGlkIHBvaW50ZXIgY2FuIGJlIHplcm8sIHNvIHdlIGNhbiYjMzk7dCBhc3N1bWUgYSBicmFuY2ggaXMgdGFrZW4gaWYgdGhlIGNvbXBhcmlzb24gaXMgemVyby4gVGhpcyBzZWVtcyBsaWtlIGEgc2FuaXR5IGNoZWNrLCBtb3JlIG9mIGEgc2FmZXR5IGZpeCwgYW5kIGRvZXMgbm90IHBvc2UgYSBkaXJlY3QgS01TQU4gcmlzay4KCjMuICAqKmBjaGVja19jb25kX2ptcF9vcGAgYWRqdXN0bWVudHM6KiogIE1vdmluZyB0aGUgYGNvbGxlY3RfbGlua2VkX3JlZ3NgIGNhbGwgYmVmb3JlIHNhdmluZyB0cnVlL2ZhbHNlIHJlZ2lzdGVyIGNvcGllcyBpcyBjcnVjaWFsLiBUaGUgb3JpZ2luYWwgb3JkZXIgY2F1c2VkIHByb2JsZW1zIHdoZXJlIGBjb2xsZWN0X2xpbmtlZF9yZWdzYCBtaWdodCBkcm9wIHJlZ2lzdGVyIElEcywgYW5kIHRob3NlIGRyb3BwZWQgSURzIGdldCByZXN1cnJlY3RlZCB3aGVuIHdlIGNvcHkgdGhlIHNhdmVkIGB0cnVlL2ZhbHNlYCByZWdpc3RlcnMuIEl0JiMzOTtzIGEgc291bmRuZXNzIGZpeCwgZ3VhcmRpbmcgYWdhaW5zdCBpbmNvcnJlY3Qgc3RhdGUgcmVzdG9yYXRpb24gYW5kIHBvc3NpYmxlIG1lbW9yeSBjb3JydXB0aW9uLgoKNC4gICoqYGNoZWNrX2NvbmRfam1wX29wYCBhZGRpdGlvbjoqKiBNYXJraW5nIGNoYWluIHByZWNpc2lvbiBmb3IgYHNyY19yZWdgIHdoZW4gaXQmIzM5O3MgcGFydCBvZiBhIGJyYW5jaCBjb25kaXRpb24sIGVzcGVjaWFsbHkgaWYgdGhlIHNvdXJjZSByZWdpc3RlciBpcyBzY2FsYXIsIGlzIGFsc28gYSBzb3VuZG5lc3MgZml4LiBUaGlzIHByZXZlbnRzIHVuc291bmQgc3RhdGUgcHJ1bmluZyBkdXJpbmcgdmVyaWZpY2F0aW9uLCBjcml0aWNhbCBmb3IgcHJldmVudGluZyBidWdzIGZyb20gYmVpbmcgZXhwbG9pdGVkLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgdGlnaHRlbmluZyB1cCB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRvIHByZXZlbnQgcG90ZW50aWFsIHNvdW5kbmVzcyBidWdzLiBUaGUgdmVyaWZpZXIgdHJhY2tzIHBvaW50ZXJzIGFuZCBzY2FsYXJzLCBlbnN1cmluZyB0aGF0IEJQRiBwcm9ncmFtcyBhcmUgc2FmZSB0byBleGVjdXRlLgoKTm93LCBsZXQmIzM5O3MgbWFwIHRoaXMgYWdhaW5zdCBLTVNBTiBjcml0ZXJpYS4gRG9lcyB0aGlzIHRvdWNoIGFueSBrZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlIHZpYSBhbnkgb2YgdGhlIHN0YW5kYXJkIG1ldGhvZHMsIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGEgcHJvYmxlbT8gTm8sIHRoZSB2YXJpYWJsZXMgdGhlIHZlcmlmaWVyIGRlYWxzIHdpdGggYXJlIGludGVybmFsIHZlcmlmaWVyIHN0YXRlIHN0cnVjdHMsIHN1Y2ggYXMgYGxpbmtlZF9yZWdzYCBhbmQgYGVudmAsIHdoaWNoIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCB2ZXJpZmllciBzdHJ1Y3RzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gRG9lcyBpdCBtZXNzIHdpdGggYWxsb2NhdGluZyBvciBpbml0aWFsaXppbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gQWdhaW4sIG5vLiBJcyB0aGVyZSBhbnkgYm91bmRzIGNoZWNrIG9yIGxlbmd0aCBsb2dpYyBjaGFuZ2VkIHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IFN0aWxsIG5vLiBUaGUgZml4ZXMgYXJlIHRhcmdldGVkIGF0IHRoZSB2ZXJpZmllciYjMzk7cyBpbnRlcm5hbCBzdGF0ZS10cmFja2luZyBsb2dpYywgYWltZWQgYXQgcHJldmVudGluZyBleHBsb2l0YWJsZSBidWdzLgoKVGhlc2UgYnVncyB3b3VsZCB0eXBpY2FsbHkgbGVhZCB0byBhcmJpdHJhcnkga2VybmVsIG1lbW9yeSByZWFkL3dyaXRlIGlmIGV4cGxvaXRlZCwgYSBjbGFzc2ljIEtBU0FOIGlzc3VlLCBvciB2ZXJpZmllciBzdGF0ZSB0cmFja2luZyBpc3N1ZXMuIFNvLCBpdCBpcyBtb3JlIGxpa2UgcHJldmVudGluZyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG5vdCBLTVNBTi1yZWxhdGVkIHByb2JsZW1zLiBUaGUgQlBGIHZlcmlmaWVyIGxvZ2ljIG9wZXJhdGVzIG9uIGluaXRpYWxpemVkIEMgc3RydWN0cy4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGxpbmtlZF9yZWdzYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU7IHdlcmUgdGhlIHN0cnVjdHMgYGxpbmtlZF9yZWdzYCBpbml0aWFsaXplZCB3aXRoIGBzdHJ1Y3QgbGlua2VkX3JlZ3MgbGlua2VkX3JlZ3MgPSB7fTtgIG9yIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSBmYWxzZV9yZWcxLCBmYWxzZV9yZWcyO2A/IExldCBtZSBxdWlja2x5IGdyZXAgZm9yIGBjaGVja19jb25kX2ptcF9vcGAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gY29uZmlybSB0aGF0IGBsaW5rZWRfcmVnc2AgaXMgYmVpbmcgY29ycmVjdGx5IGluaXRpYWxpemVkLiBBc3N1bWluZyB0aGV5IGFyZSBpbml0aWFsaXplZCwgdGhlbiBJIHRoaW5rIEtNU0FOIGlzbiYjMzk7dCB0aGUgcHJpbWFyeSBjb25jZXJuIGhlcmUuIEtBU0FOIGlzIHRoZSBtb3N0IGltcG9ydGFudCBjaGVjayBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbGlua2VkX3JlZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTMyNDU9c3RydWN0IGxpbmtlZF9yZWcge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjUzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyNTQ6c3RydWN0IGxpbmtlZF9yZWdzIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjU1LVx0aW50IGNudDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI1OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjU5OnN0YXRpYyBzdHJ1Y3QgbGlua2VkX3JlZyAqbGlua2VkX3JlZ3NfcHVzaChzdHJ1Y3QgbGlua2VkX3JlZ3MgKnMpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI2MC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNzQtICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI3NTpzdGF0aWMgdTY0IGxpbmtlZF9yZWdzX3BhY2soc3RydWN0IGxpbmtlZF9yZWdzICpzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNzYte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjk1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyOTY6c3RhdGljIHZvaWQgbGlua2VkX3JlZ3NfdW5wYWNrKHU2NCB2YWwsIHN0cnVjdCBsaW5rZWRfcmVncyAqcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjk3LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzM0NT12b2lkIGJwZl9idF9zeW5jX2xpbmtlZF9yZWdzKHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCBzdHJ1Y3QgYnBmX2ptcF9oaXN0b3J5X2VudHJ5ICpoaXN0KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzNDYte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjMzNDc6XHRzdHJ1Y3QgbGlua2VkX3JlZ3MgbGlua2VkX3JlZ3M7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM0OC1cdGJvb2wgc29tZV9wcmVjaXNlID0gZmFsc2U7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NTg2PXN0YXRpYyBib29sIHRyeV9tYXRjaF9wa3RfcG9pbnRlcnMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjY5MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY5MTpzdGF0aWMgdm9pZCBfX2NvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGxpbmtlZF9yZWdzICpyZWdfc2V0LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjkyLVx0XHRcdFx0ICB1MzIgaWQsIHUzMiBmcmFtZW5vLCB1MzIgc3BpX29yX3JlZywgYm9vbCBpc19yZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NzEzPXN0YXRpYyB2b2lkIGNvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY3MTUtXHRcdFx0XHR1MzIgaWQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY3MTY6XHRcdFx0XHRzdHJ1Y3QgbGlua2VkX3JlZ3MgKmxpbmtlZF9yZWdzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NzE3LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3NDY9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY3NDc6XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqa25vd25fcmVnLCBzdHJ1Y3QgbGlua2VkX3JlZ3MgKmxpbmtlZF9yZWdzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NzQ4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY4MDE9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwOC1cdHN0cnVjdCBicGZfcmVnX3N0YXRlICplcV9icmFuY2hfcmVncztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjgwOTpcdHN0cnVjdCBsaW5rZWRfcmVncyBsaW5rZWRfcmVncyA9IHt9O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODEwLVx0dTggb3Bjb2RlID0gQlBGX09QKGluc24tXHUwMDNlY29kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3OTcKCQkJCQkJCW91dHB1dDogMjY4CgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlLiBJdCBzdGFydHMgYnkgaW5pdGlhbGl6aW5nIGBsaW5rZWRfcmVnc2Ag4oCTIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDogYHt9YC4gVGhlIGNvcmUgb2YgdGhpcyBpcyBhYm91dCBCUEYgdmVyaWZpZXIgbG9naWMsIHNwZWNpZmljYWxseSBlbnN1cmluZyBpdCYjMzk7cyBjb3JyZWN0LiBJIHNlZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIHNldmVyYWwgY3J1Y2lhbCBhcmVhczoKCiogICBGaXJzdCwgYHJlZ19ub3RfbnVsbGAgaXMgZ2V0dGluZyBhIGNsb3NlciBsb29rIGZvciBhbnkgYm91bmRzIG9yIG92ZXJmbG93IGlzc3VlcyB3aXRoIHBvaW50ZXIgb2Zmc2V0cy4gVGhhdCYjMzk7cyBnb29kOyB0aG9zZSBjYW4gYmUgbmFzdHkgdG8gdHJhY2sgZG93biBsYXRlci4KKiAgIFRoZW4sIHRoZXkmIzM5O3JlIGRpZ2dpbmcgaW50byB0aGUgbnVhbmNlcyBvZiBob3cganVtcCBwb2ludGVyIGNvbXBhcmlzb25zIHdvcmssIGVzcGVjaWFsbHkgdGhlIDMyLWJpdCB2ZXJzdXMgNjQtYml0IGJlaGF2aW9yIHdpdGhpbiBgaXNfYnJhbmNoX3Rha2VuYC4gVGhpcyBjYW4gZ2V0IHJlYWxseSBoYWlyeSB3aXRoIHBvaW50ZXIgYXJpdGhtZXRpYywgc28gdGhvcm91Z2huZXNzIGhlcmUgaXMgY3JpdGljYWwuCiogICBUaGV5JiMzOTtyZSBhbHNvIGFkanVzdGluZyB0aGUgdGltaW5nIG9mIGBjb2xsZWN0X2xpbmtlZF9yZWdzYCBpbiByZWxhdGlvbiB0byBzYXZpbmcgcmVnaXN0ZXJzIHdpdGhpbiBgY2hlY2tfY29uZF9qbXBfb3BgLiBUaGF0JiMzOTtzIGxpa2VseSBhYm91dCBlbnN1cmluZyB0aGUgdmVyaWZpZXIgaGFzIHRoZSByaWdodCByZWdpc3RlciBzdGF0ZSBhdCB0aGUgY29ycmVjdCBtb21lbnQgaW4gdGhlIGNvbnRyb2wgZmxvdy4gVGltaW5nIGVycm9ycyBjYW4gYmUgcmVhbGx5IHN1YnRsZS4KKiAgIEZpbmFsbHksIHRoZXJlJiMzOTtzIGF0dGVudGlvbiBiZWluZyBwYWlkIHRvIHByZWNpc2lvbiBtYXJraW5nIGZvciBgc3JjX3JlZ2AgZHVyaW5nIG51bGwgY29tcGFyaXNvbnMuIFRoaXMgaXMgYWJvdXQgbWFraW5nIHN1cmUgdGhlIHZlcmlmaWVyIGhhcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlZ2lzdGVyJiMzOTtzIHBvdGVudGlhbCB2YWx1ZSByYW5nZXMsIGVzcGVjaWFsbHkgaW4gY2FzZXMgd2hlcmUgd2UmIzM5O3JlIHRlc3RpbmcgZm9yIG51bGwuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogSSYjMzk7bSBub3Qgc2VlaW5nIGFueXRoaW5nIGluIHRoZXNlIGNoYW5nZXMgdGhhdCB0b3VjaGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2VzIHN0YWNrIG9yIGhlYXAgZGF0YSwgb3IgY29waWVzIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmLiBUaGUgZml4ZXMsIGlmIHRoZXkgd2VyZSBpbiBwbGFjZSB0byBzdGFydCB3aXRoLCBhcmUgZW50aXJlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBwcmV2ZW50aW5nIG1lbW9yeSBzYWZldHkgaXNzdWVzIGxpa2Ugb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgb3IgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gQW5kIGZyYW5rbHksIHRob3NlIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIFVCLXNhbml0aXplciBhbnl3YXksIHNvIHdlJiMzOTtyZSBjb3ZlcmVkLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IHdhcnJhbnQgYSBLTVNBTiBzY2FuLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIGZpeCBzb3VuZG5lc3MgaXNzdWVzIHJlZ2FyZGluZyByZWdpc3RlciB0cmFja2luZywgc3BlY2lmaWNhbGx5OlxuMS4gSGFuZGxpbmcgb2Zmc2V0IHdyYXBwaW5nIHRvIHplcm8gaW4gYHJlZ19ub3RfbnVsbCgpYC5cbjIuIEhhbmRsaW5nIDMyLWJpdCBwb2ludGVyLXZzLXNjYWxhciBjb21wYXJpc29ucyBpbiBgaXNfYnJhbmNoX3Rha2VuKClgLlxuMy4gRW5zdXJpbmcgbGlua2VkIHJlZ2lzdGVycyBhcmUgY29sbGVjdGVkIGJlZm9yZSBzYXZpbmcgcmVnaXN0ZXJzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cbjQuIE1hcmtpbmcgcHJlY2lzaW9uIG9uIGBzcmNfcmVnYCB3aGVuIGNoZWNraW5nIG51bGxuZXNzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIChzdWNoIGFzIGBzdHJ1Y3QgbGlua2VkX3JlZ3NgKSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgKGUuZy4sIHplcm8taW5pdGlhbGl6ZWQgb24gZGVjbGFyYXRpb24pLCBhbmQgdGhlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCB2ZXJpZmllciBpbnRlcm5hbCBjb250cm9sLWZsb3cgYW5kIHJlZ2lzdGVyIHN0YXRlIGxvZ2ljLiBBbnkgcG90ZW50aWFsIG1pc2JlaGF2aW9yIHByZXZlbnRlZCBieSB0aGVzZSBmaXhlcyByZWxhdGVzIHRvIEJQRiB2ZXJpZmljYXRpb24gc291bmRuZXNzIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIGRlcmVmZXJlbmNlcyksIHdoaWNoIGlzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBmaXggc291bmRuZXNzIGlzc3VlcyByZWdhcmRpbmcgcmVnaXN0ZXIgdHJhY2tpbmcsIHNwZWNpZmljYWxseTpcbjEuIEhhbmRsaW5nIG9mZnNldCB3cmFwcGluZyB0byB6ZXJvIGluIGByZWdfbm90X251bGwoKWAuXG4yLiBIYW5kbGluZyAzMi1iaXQgcG9pbnRlci12cy1zY2FsYXIgY29tcGFyaXNvbnMgaW4gYGlzX2JyYW5jaF90YWtlbigpYC5cbjMuIEVuc3VyaW5nIGxpbmtlZCByZWdpc3RlcnMgYXJlIGNvbGxlY3RlZCBiZWZvcmUgc2F2aW5nIHJlZ2lzdGVycyBpbiBgY2hlY2tfY29uZF9qbXBfb3AoKWAuXG40LiBNYXJraW5nIHByZWNpc2lvbiBvbiBgc3JjX3JlZ2Agd2hlbiBjaGVja2luZyBudWxsbmVzcyBpbiBgY2hlY2tfY29uZF9qbXBfb3AoKWAuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGUgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCAoc3VjaCBhcyBgc3RydWN0IGxpbmtlZF9yZWdzYCkgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IChlLmcuLCB6ZXJvLWluaXRpYWxpemVkIG9uIGRlY2xhcmF0aW9uKSwgYW5kIHRoZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgdmVyaWZpZXIgaW50ZXJuYWwgY29udHJvbC1mbG93IGFuZCByZWdpc3RlciBzdGF0ZSBsb2dpYy4gQW55IHBvdGVudGlhbCBtaXNiZWhhdmlvciBwcmV2ZW50ZWQgYnkgdGhlc2UgZml4ZXMgcmVsYXRlcyB0byBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBkZXJlZmVyZW5jZXMpLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MDIuMjY0NTkwMDMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxODYwMDA2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19jb25kX2ptcF9vcFwiLFxuICAgIFwiaXNfYnJhbmNoX3Rha2VuXCIsXG4gICAgXCJyZWdfbm90X251bGxcIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIGZpeCBzb3VuZG5lc3MgaXNzdWVzIHJlZ2FyZGluZyByZWdpc3RlciB0cmFja2luZywgc3BlY2lmaWNhbGx5OlxcbjEuIEhhbmRsaW5nIG9mZnNldCB3cmFwcGluZyB0byB6ZXJvIGluIGByZWdfbm90X251bGwoKWAuXFxuMi4gSGFuZGxpbmcgMzItYml0IHBvaW50ZXItdnMtc2NhbGFyIGNvbXBhcmlzb25zIGluIGBpc19icmFuY2hfdGFrZW4oKWAuXFxuMy4gRW5zdXJpbmcgbGlua2VkIHJlZ2lzdGVycyBhcmUgY29sbGVjdGVkIGJlZm9yZSBzYXZpbmcgcmVnaXN0ZXJzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cXG40LiBNYXJraW5nIHByZWNpc2lvbiBvbiBgc3JjX3JlZ2Agd2hlbiBjaGVja2luZyBudWxsbmVzcyBpbiBgY2hlY2tfY29uZF9qbXBfb3AoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcsIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZSBzdHJ1Y3R1cmVzIG1hbmlwdWxhdGVkIChzdWNoIGFzIGBzdHJ1Y3QgbGlua2VkX3JlZ3NgKSBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgKGUuZy4sIHplcm8taW5pdGlhbGl6ZWQgb24gZGVjbGFyYXRpb24pLCBhbmQgdGhlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCB2ZXJpZmllciBpbnRlcm5hbCBjb250cm9sLWZsb3cgYW5kIHJlZ2lzdGVyIHN0YXRlIGxvZ2ljLiBBbnkgcG90ZW50aWFsIG1pc2JlaGF2aW9yIHByZXZlbnRlZCBieSB0aGVzZSBmaXhlcyByZWxhdGVzIHRvIEJQRiB2ZXJpZmljYXRpb24gc291bmRuZXNzIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIGRlcmVmZXJlbmNlcyksIHdoaWNoIGlzIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgZm9yIHBvaW50ZXIgbnVsbG5lc3MgaW5mZXJlbmNlLCAzMi1iaXQganVtcCBicmFuY2ggcHJlZGljdGlvbiwgbGlua2VkIHJlZ2lzdGVycyBjb2xsZWN0aW9uIHRpbWluZywgYW5kIHByZWNpc2lvbiB0cmFja2luZyBvbiByZWdpc3RlciBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZlcmlmaWNhdGlvbiBwYXRocyB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MDIuMjY0NTk0NzUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA1MjM0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTc6Mzg6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZTY0MDM1NjgzNzk1MS4uNzA5YjQ3OTNlOGViNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMzUyLDYgKzM1MiwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdFxcbiBcXHRpZiAodHlwZV9tYXlfYmVfbnVsbCh0eXBlKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIHR5cGVzIGJlbG93IGd1YXJhbnRlZSBhIG5vbi1OVUxMIGJhc2UsIGFuIHVuYm91bmRlZCBvZmZzZXQgY2FuXFxuK1xcdCAqIHN0aWxsIHdyYXAgYmFzZSArIG9mZnNldCB0byB6ZXJvLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJlZ19zbWluKHJlZykgXFx1MDAzYz0gLUJQRl9NQVhfVkFSX09GRiB8fCByZWdfc21heChyZWcpIFxcdTAwM2U9IEJQRl9NQVhfVkFSX09GRilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0dHlwZSA9IGJhc2VfdHlwZSh0eXBlKTtcXG4gXFx0cmV0dXJuIHR5cGUgPT0gUFRSX1RPX1NPQ0tFVCB8fFxcbiBcXHRcXHR0eXBlID09IFBUUl9UT19UQ1BfU09DSyB8fFxcbkBAIC0xNjMwMiw2ICsxNjMwOSwxMyBAQCBzdGF0aWMgaW50IGlzX2JyYW5jaF90YWtlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqclxcbiBcXHRpZiAoX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcxKSB8fCBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzIpKSB7XFxuIFxcdFxcdHU2NCB2YWw7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIG1heSB3ZWxsIGJlIHplcm8sIGhlbmNlXFxuK1xcdFxcdCAqIG5vdGhpbmcgYmVsb3cgYXBwbGllcyB0byBhIDMyLWJpdCBjb21wYXJpc29uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGlzX2ptcDMyKVxcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbiBcXHRcXHQvKiBhcnJhbmdlIHRoYXQgcmVnMiBpcyBhIHNjYWxhciwgYW5kIHJlZzEgaXMgYSBwb2ludGVyICovXFxuIFxcdFxcdGlmICghaXNfcmVnX2NvbnN0KHJlZzIsIGlzX2ptcDMyKSkge1xcbiBcXHRcXHRcXHRvcGNvZGUgPSBmbGlwX29wY29kZShvcGNvZGUpO1xcbkBAIC0xNjg2Myw2ICsxNjg3NywxNiBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIENvbGxlY3QgdGhlIGxpbmtlZCByZWdpc3RlcnMgYmVmb3JlIGVudi1cXHUwMDNle3RydWUsZmFsc2V9X3JlZ3sxLDJ9IHNldHVwLFxcbitcXHQgKiBvdGhlcndpc2UgaWRzIGRyb3BwZWQgYnkgY29sbGVjdF9saW5rZWRfcmVncygpIHdvdWxkIGJlIHJlc3VycmVjdGVkXFxuK1xcdCAqIHdoZW4gZW52LVxcdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gYXJlIGNvcGllZCBiYWNrLlxcbitcXHQgKi9cXG4rXFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1ggXFx1MDAyNlxcdTAwMjYgc3JjX3JlZy1cXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUgXFx1MDAyNlxcdTAwMjYgc3JjX3JlZy1cXHUwMDNlaWQpXFxuK1xcdFxcdGNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgc3JjX3JlZy1cXHUwMDNlaWQsIFxcdTAwMjZsaW5rZWRfcmVncyk7XFxuK1xcdGlmIChkc3RfcmVnLVxcdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcXHUwMDI2XFx1MDAyNiBkc3RfcmVnLVxcdTAwM2VpZClcXG4rXFx0XFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBkc3RfcmVnLVxcdTAwM2VpZCwgXFx1MDAyNmxpbmtlZF9yZWdzKTtcXG4rXFxuIFxcdGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9KTVAzMjtcXG4gXFx0ZW52LVxcdTAwM2VmYWxzZV9yZWcxID0gKmRzdF9yZWc7XFxuIFxcdGVudi1cXHUwMDNlZmFsc2VfcmVnMiA9ICpzcmNfcmVnO1xcbkBAIC0xNjkxNywxMCArMTY5NDEsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdCAqICd0aGlzX2JyYW5jaCcgYW5kICdvdGhlcl9icmFuY2gnIHNoYXJlIHRoaXMgaGlzdG9yeVxcbiBcXHQgKiBpZiBwYXJlbnQgc3RhdGUgaXMgY3JlYXRlZC5cXG4gXFx0ICovXFxuLVxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YIFxcdTAwMjZcXHUwMDI2IHNyY19yZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFxcdTAwMjZcXHUwMDI2IHNyY19yZWctXFx1MDAzZWlkKVxcbi1cXHRcXHRjb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWctXFx1MDAzZWlkLCBcXHUwMDI2bGlua2VkX3JlZ3MpO1xcbi1cXHRpZiAoZHN0X3JlZy1cXHUwMDNldHlwZSA9PSBTQ0FMQVJfVkFMVUUgXFx1MDAyNlxcdTAwMjYgZHN0X3JlZy1cXHUwMDNlaWQpXFxuLVxcdFxcdGNvbGxlY3RfbGlua2VkX3JlZ3MoZW52LCB0aGlzX2JyYW5jaCwgZHN0X3JlZy1cXHUwMDNlaWQsIFxcdTAwMjZsaW5rZWRfcmVncyk7XFxuIFxcdGlmIChsaW5rZWRfcmVncy5jbnQgXFx1MDAzZSAxKSB7XFxuIFxcdFxcdGVyciA9IGJwZl9wdXNoX2ptcF9oaXN0b3J5KGVudiwgdGhpc19icmFuY2gsIDAsIDAsIDAsIGxpbmtlZF9yZWdzX3BhY2soXFx1MDAyNmxpbmtlZF9yZWdzKSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTE3MDA0LDYgKzE3MDI0LDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0ICAgIHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICgoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSyBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gPT0gMCkgfHxcXG4gXFx0ICAgICAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCBcXHUwMDI2XFx1MDAyNiBicGZfcmVnaXN0ZXJfaXNfbnVsbChzcmNfcmVnKSkpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEZvciBCUEZfWCB0aGUgemVybyBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZXhlY3V0aW9uIHBhdGgsXFxuK1xcdFxcdCAqIGhlbmNlIHNyY19yZWcgaGFzIHRvIGJlIHByZWNpc2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xcbitcXHRcXHRcXHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIGluc24tXFx1MDAzZXNyY19yZWcpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuIFxcdFxcdC8qIE1hcmsgYWxsIGlkZW50aWNhbCByZWdpc3RlcnMgaW4gZWFjaCBicmFuY2ggYXMgZWl0aGVyXFxuIFxcdFxcdCAqIHNhZmUgb3IgdW5rbm93biBkZXBlbmRpbmcgUiA9PSAwIG9yIFIgIT0gMCBjb25kaXRpb25hbC5cXG4gXFx0XFx0ICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xcbmluZGV4IGI0MTJhNTQyZWY3NmYuLjNjNzg5YzU2NWIxOGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXFxuQEAgLTMxMSw2ICszMTEsMTQ3IEBAIF9fbmFrZWQgdm9pZCB1bnRydXN0ZWRfbWVtX2RvZXNfbm90X2luZmVyX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKVxcbiBcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBBIHBvaW50ZXIgd2l0aCBhbiBvZmZzZXQgdGhhdCBpcyBub3QgYm91bmRlZCBmcm9tIGFib3ZlIG1heSBiZSBudWxsIGF0XFxuKyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguXFxuKyAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fZmFpbHVyZVxcbitfX21zZyhcXFwiZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjcgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpXFxcIilcXG4rX19uYWtlZCB2b2lkIHVuYm91bmRlZF9vZmZzZXRfZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFxcdTAwMjYwKTsgKi9cXHRcXFxcXFxuK1xcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gJVttYXBfaGFzaF0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9IHIxMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyICs9IC04O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1xcdFxcdFxcdFxcXFxcXG4rXFx0aWYgcjAgPT0gMCBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI3ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXFx1MDAyNjEpOyAqL1xcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSAxO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAlW21hcF9oYXNoXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XFx0XFx0XFx0XFxcXFxcbitcXHRyNyA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi9cXHRcXFxcXFxuK1xcdHI4ID0gcjc7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCAtPSByNjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI4IGlzIGluIFswLCBTNjRfTUFYXSAqL1xcdFxcdFxcdFxcXFxcXG4rXFx0cjggXFx1MDAzY1xcdTAwM2M9IDE7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCBcXHUwMDNlXFx1MDAzZT0gMTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI2IG1heSB3cmFwIHRvIHplcm8gYXQgcnVudGltZSAqL1xcdFxcdFxcXFxcXG4rXFx0cjYgKz0gcjg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByNyAhPSByNiBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAqKHU4ICopKHI3ICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxcbitcXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19uYWtlZCB2b2lkIGJvdW5kZWRfb2Zmc2V0X2luZmVyc19tYXBfdmFsdWVfbm9uX251bGwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXFx1MDAyNjApOyAqL1xcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSAwO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAlW21hcF9oYXNoXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCA9PSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LyogcjcgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcXHUwMDI2MSk7ICovXFx0XFxcXFxcbitcXHQqKHU2NCAqKShyMTAgLSA4KSA9IDE7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSByMTA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiArPSAtODtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcXHRcXHRcXHRcXFxcXFxuK1xcdHI3ID0gcjA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQvKiBwb2ludGVyIC0gcG9pbnRlciBpcyBhbiB1bmtub3duIHNjYWxhciAqL1xcdFxcXFxcXG4rXFx0cjggPSByNztcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI4IC09IHI2O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LyogcjggaXMgaW4gWzAsIDNdICovXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCBcXHUwMDI2PSAzO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgKz0gcjg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByNyAhPSByNiBnb3RvIDFmO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAqKHU4ICopKHI3ICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxcbitcXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoZSBsb3cgMzIgYml0cyBvZiBhIG1hcCB2YWx1ZSBwb2ludGVyIG1heSBiZSB6ZXJvLCBoZW5jZSBhIDMyLWJpdFxcbisgKiBjb21wYXJlIHdpdGggemVybyBjYW5ub3QgYmUgcHJlZGljdGVkIGZyb20gdGhlIHBvaW50ZXIgYmVpbmcgbm9uLU5VTExcXG4rICogYW5kIGJvdGggc3VjY2Vzc29ycyBvZiBzdWNoIGEganVtcCBoYXZlIHRvIGJlIHZlcmlmaWVkLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgYWNjZXNzIHRvIG1hcCB2YWx1ZSwgdmFsdWVfc2l6ZT00IG9mZj0zMiBzaXplPTRcXFwiKVxcbitfX25ha2VkIHZvaWQgam1wMzJfcHRyX3ZzX3plcm9fam5lKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFxcdTAwMjZrZXkpOyAqL1xcdFxcXFxcXG4rXFx0Kih1NjQgKikocjEwIC0gOCkgPSAwO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAlW21hcF9oYXNoXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCA9PSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiB3MCAhPSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9ICoodTMyICopKHIwICsgMzIpO1xcdFxcdFxcdFxcdFxcXFxcXG4rMTpcXHRyMCA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcXG4rXFx0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBUaGUgYmVsb3cgcHJvZ3JhbSBpcyBleHBsb3JlZCBpbiB0d28gcGF0aHM6IHI2ID09IDAgYW5kIHI2ID09IDEuXFxuKyAqIE9uIHRoZSBmaXJzdCBwYXRoIGNvbXBhcmlzb24gXFxcImlmIHIwID09IHI2IGdvdG8gMmZcXFwiIHNob3VsZCBtYXJrIHI2IGFzIHByZWNpc2UsXFxuKyAqIG90aGVyd2lzZSB1bnNhZmUgcGF0aCB3aXRoIHI2ID09IDEgd291bGQgYmUgaW5jb3JyZWN0bHkgcHJ1bmVkLlxcbisgKi9cXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2ZhaWx1cmVcXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcXG4rX19tc2coXFxcImVycm9yOiBpbnZhbGlkIGRlcmVmZXJlbmNlIG9mIFIwIChhIG51bGxhYmxlIG1hcCB2YWx1ZSBwb2ludGVyKVxcXCIpXFxuK19fbmFrZWQgdm9pZCBpbXByZWNpc2VfemVyb19kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI2IGlzIDAgb24gdGhlIHBhdGggZXhwbG9yZWQgZmlyc3QsIDEgb24gdGhlIG90aGVyICovXFxcXFxcbitcXHRyNiA9IDE7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCA9PSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFxcdTAwMjYwKTsgKi9cXHRcXFxcXFxuKzE6XFx0Kih1NjQgKikocjEwIC0gOCkgPSAwO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAlW21hcF9oYXNoXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyID0gcjEwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgKz0gLTg7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiByMCA9PSByNiBnb3RvIDJmO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAqKHU4ICopKHIwICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbisyOlxcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpLFxcbitcXHQgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxcbitcXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuIHZvaWQga2Z1bmNfcm9vdCh2b2lkKVxcbiB7XFxuIFxcdGJwZl9yZG9ubHlfY2FzdCgwLCAwKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmNcXG5pbmRleCA2NjNkMTVmYzVmZDI2Li4yNTY1NDcwNDhjYzQ1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXFxuQEAgLTM4MCwxMyArMzgwLDE0IEBAIFNFQyhcXFwic29ja2V0XFxcIilcXG4gX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXFxuIF9fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXFxuIC8qXFxuLSAqIGNoZWNrIHRoYXQgcjAgYW5kIHI1IGhhdmUgZGlmZmVyZW50IElEcyBhZnRlciAnaWYnLFxcbi0gKiBjb2xsZWN0X2xpbmtlZF9yZWdzKCkgY2FuJ3QgdGllIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbi5cXG4rICogY2hlY2sgdGhhdCByNSBpcyB1bmxpbmtlZCBhZnRlciAnaWYnLCBjb2xsZWN0X2xpbmtlZF9yZWdzKCkgY2FuJ3QgdGllXFxuKyAqIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbiBhbmQgdGhlIHJlZ2lzdGVyIGNvbXBhcmVkIGJ5XFxuKyAqIHRoZSBqdW1wIGlzIG5vdCBleGVtcHQgZnJvbSB0aGF0LlxcbiAgKi9cXG4tX19tc2coXFxcIjc6ICgyNSkgaWYgcjAgXFx1MDAzZSAweDcgZ290byBwYyswICAgICAgICAgOyBSMD1zY2FsYXIoaWQ9MVxcXCIpXFxuK19fbXNnKFxcXCI3OiAoMjUpIGlmIHI1IFxcdTAwM2UgMHg3IGdvdG8gcGMrMCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49XFxcIilcXG4gX19tc2coXFxcIjEyOiAoYmYpIHI1ID0gcjUgICAgICAgICAgICAgICAgICAgICAgOyBSNT1zY2FsYXIoaWQ9MlxcXCIpXFxuIC8qIGNoZWNrIHRoYXQgcnswLTR9IGFyZSBtYXJrZWQgcHJlY2lzZSBhZnRlciAnaWYnICovXFxuLV9fbXNnKFxcXCJmcmFtZTA6IHJlZ3M9cjAgc3RhY2s9IGJlZm9yZSA3OiAoMjUpIGlmIHIwIFxcdTAwM2UgMHg3IGdvdG8gcGMrMFxcXCIpXFxuK19fbXNnKFxcXCJmcmFtZTA6IHJlZ3M9cjAgc3RhY2s9IGJlZm9yZSA3OiAoMjUpIGlmIHI1IFxcdTAwM2UgMHg3IGdvdG8gcGMrMFxcXCIpXFxuIF9fbXNnKFxcXCJmcmFtZTA6IHBhcmVudCBzdGF0ZSByZWdzPXIwLHIxLHIyLHIzLHI0IHN0YWNrPTpcXFwiKVxcbiBfX25ha2VkIHZvaWQgbGlua2VkX3JlZ3NfdG9vX21hbnlfcmVncyh2b2lkKVxcbiB7XFxuQEAgLTQwMCw4ICs0MDEsOCBAQCBfX25ha2VkIHZvaWQgbGlua2VkX3JlZ3NfdG9vX21hbnlfcmVncyh2b2lkKVxcbiBcXHRcXFwicjMgPSByMDtcXFwiXFxuIFxcdFxcXCJyNCA9IHIwO1xcXCJcXG4gXFx0XFxcInI1ID0gcjA7XFxcIlxcbi1cXHQvKiBwcm9wYWdhdGUgcmFuZ2UgZm9yIHJ7MC01fSAqL1xcbi1cXHRcXFwiaWYgcjAgXFx1MDAzZSA3IGdvdG8gKzA7XFxcIlxcbitcXHQvKiByezAtNH0gZmlsbCB0aGUgcmVjb3JkLCByNSBkb2VzIG5vdCBmaXQgYW5kIGlzIHVubGlua2VkICovXFxuK1xcdFxcXCJpZiByNSBcXHUwMDNlIDcgZ290byArMDtcXFwiXFxuIFxcdC8qIGtlZXAgcnsxLTR9IGxpdmUgKi9cXG4gXFx0XFxcInIxID0gcjE7XFxcIlxcbiBcXHRcXFwicjIgPSByMjtcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjAyLjc0NTc4MzMwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc2NzA0NjI4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19jb25kX2ptcF9vcFwiLFxuICAgIFwiaXNfYnJhbmNoX3Rha2VuXCIsXG4gICAgXCJyZWdfbm90X251bGxcIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgZm9yIHBvaW50ZXIgbnVsbG5lc3MgaW5mZXJlbmNlLCAzMi1iaXQganVtcCBicmFuY2ggcHJlZGljdGlvbiwgbGlua2VkIHJlZ2lzdGVycyBjb2xsZWN0aW9uIHRpbWluZywgYW5kIHByZWNpc2lvbiB0cmFja2luZyBvbiByZWdpc3RlciBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZlcmlmaWNhdGlvbiBwYXRocyB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzozODowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTY0MDM1NjgzNzk1MS4uNzA5YjQ3OTNlOGViNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMzUyLDYgKzM1MiwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdFxuIFx0aWYgKHR5cGVfbWF5X2JlX251bGwodHlwZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdC8qXG4rXHQgKiBUaGUgdHlwZXMgYmVsb3cgZ3VhcmFudGVlIGEgbm9uLU5VTEwgYmFzZSwgYW4gdW5ib3VuZGVkIG9mZnNldCBjYW5cbitcdCAqIHN0aWxsIHdyYXAgYmFzZSArIG9mZnNldCB0byB6ZXJvLlxuK1x0ICovXG4rXHRpZiAocmVnX3NtaW4ocmVnKSBcdTAwM2M9IC1CUEZfTUFYX1ZBUl9PRkYgfHwgcmVnX3NtYXgocmVnKSBcdTAwM2U9IEJQRl9NQVhfVkFSX09GRilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0dHlwZSA9IGJhc2VfdHlwZSh0eXBlKTtcbiBcdHJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHxcbiBcdFx0dHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHxcbkBAIC0xNjMwMiw2ICsxNjMwOSwxMyBAQCBzdGF0aWMgaW50IGlzX2JyYW5jaF90YWtlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqclxuIFx0aWYgKF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgcmVnMSkgfHwgX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcyKSkge1xuIFx0XHR1NjQgdmFsO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIG1heSB3ZWxsIGJlIHplcm8sIGhlbmNlXG4rXHRcdCAqIG5vdGhpbmcgYmVsb3cgYXBwbGllcyB0byBhIDMyLWJpdCBjb21wYXJpc29uLlxuK1x0XHQgKi9cbitcdFx0aWYgKGlzX2ptcDMyKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbiBcdFx0LyogYXJyYW5nZSB0aGF0IHJlZzIgaXMgYSBzY2FsYXIsIGFuZCByZWcxIGlzIGEgcG9pbnRlciAqL1xuIFx0XHRpZiAoIWlzX3JlZ19jb25zdChyZWcyLCBpc19qbXAzMikpIHtcbiBcdFx0XHRvcGNvZGUgPSBmbGlwX29wY29kZShvcGNvZGUpO1xuQEAgLTE2ODYzLDYgKzE2ODc3LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIENvbGxlY3QgdGhlIGxpbmtlZCByZWdpc3RlcnMgYmVmb3JlIGVudi1cdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gc2V0dXAsXG4rXHQgKiBvdGhlcndpc2UgaWRzIGRyb3BwZWQgYnkgY29sbGVjdF9saW5rZWRfcmVncygpIHdvdWxkIGJlIHJlc3VycmVjdGVkXG4rXHQgKiB3aGVuIGVudi1cdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gYXJlIGNvcGllZCBiYWNrLlxuK1x0ICovXG4rXHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNiBzcmNfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBzcmNfcmVnLVx1MDAzZWlkKVxuK1x0XHRjb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWctXHUwMDNlaWQsIFx1MDAyNmxpbmtlZF9yZWdzKTtcbitcdGlmIChkc3RfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBkc3RfcmVnLVx1MDAzZWlkKVxuK1x0XHRjb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctXHUwMDNlaWQsIFx1MDAyNmxpbmtlZF9yZWdzKTtcbitcbiBcdGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0pNUDMyO1xuIFx0ZW52LVx1MDAzZWZhbHNlX3JlZzEgPSAqZHN0X3JlZztcbiBcdGVudi1cdTAwM2VmYWxzZV9yZWcyID0gKnNyY19yZWc7XG5AQCAtMTY5MTcsMTAgKzE2OTQxLDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICogJ3RoaXNfYnJhbmNoJyBhbmQgJ290aGVyX2JyYW5jaCcgc2hhcmUgdGhpcyBoaXN0b3J5XG4gXHQgKiBpZiBwYXJlbnQgc3RhdGUgaXMgY3JlYXRlZC5cbiBcdCAqL1xuLVx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZClcbi1cdFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBzcmNfcmVnLVx1MDAzZWlkLCBcdTAwMjZsaW5rZWRfcmVncyk7XG4tXHRpZiAoZHN0X3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgZHN0X3JlZy1cdTAwM2VpZClcbi1cdFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBkc3RfcmVnLVx1MDAzZWlkLCBcdTAwMjZsaW5rZWRfcmVncyk7XG4gXHRpZiAobGlua2VkX3JlZ3MuY250IFx1MDAzZSAxKSB7XG4gXHRcdGVyciA9IGJwZl9wdXNoX2ptcF9oaXN0b3J5KGVudiwgdGhpc19icmFuY2gsIDAsIDAsIDAsIGxpbmtlZF9yZWdzX3BhY2soXHUwMDI2bGlua2VkX3JlZ3MpKTtcbiBcdFx0aWYgKGVycilcbkBAIC0xNzAwNCw2ICsxNzAyNCwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgICAgdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICgoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9LIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSAwKSB8fFxuIFx0ICAgICAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNiBicGZfcmVnaXN0ZXJfaXNfbnVsbChzcmNfcmVnKSkpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEZvciBCUEZfWCB0aGUgemVybyBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZXhlY3V0aW9uIHBhdGgsXG4rXHRcdCAqIGhlbmNlIHNyY19yZWcgaGFzIHRvIGJlIHByZWNpc2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKSB7XG4rXHRcdFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4gXHRcdC8qIE1hcmsgYWxsIGlkZW50aWNhbCByZWdpc3RlcnMgaW4gZWFjaCBicmFuY2ggYXMgZWl0aGVyXG4gXHRcdCAqIHNhZmUgb3IgdW5rbm93biBkZXBlbmRpbmcgUiA9PSAwIG9yIFIgIT0gMCBjb25kaXRpb25hbC5cbiBcdFx0ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXG5pbmRleCBiNDEyYTU0MmVmNzZmLi4zYzc4OWM1NjViMThmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbkBAIC0zMTEsNiArMzExLDE0NyBAQCBfX25ha2VkIHZvaWQgdW50cnVzdGVkX21lbV9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuKy8qXG4rICogQSBwb2ludGVyIHdpdGggYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGJvdW5kZWQgZnJvbSBhYm92ZSBtYXkgYmUgbnVsbCBhdFxuKyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlXG4rX19tc2coXCJlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSNyAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcilcIilcbitfX25ha2VkIHZvaWQgdW5ib3VuZGVkX29mZnNldF9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHQvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjApOyAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0LyogcjcgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjYxKTsgKi9cdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IDE7XHRcdFx0XHRcXFxuK1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4rXHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIyICs9IC04O1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1x0XHRcdFxcXG4rXHRyNyA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0LyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi9cdFxcXG4rXHRyOCA9IHI3O1x0XHRcdFx0XHRcXFxuK1x0cjggLT0gcjY7XHRcdFx0XHRcdFxcXG4rXHQvKiByOCBpcyBpbiBbMCwgUzY0X01BWF0gKi9cdFx0XHRcXFxuK1x0cjggXHUwMDNjXHUwMDNjPSAxO1x0XHRcdFx0XHRcXFxuK1x0cjggXHUwMDNlXHUwMDNlPSAxO1x0XHRcdFx0XHRcXFxuK1x0LyogcjYgbWF5IHdyYXAgdG8gemVybyBhdCBydW50aW1lICovXHRcdFxcXG4rXHRyNiArPSByODtcdFx0XHRcdFx0XFxcbitcdGlmIHI3ICE9IHI2IGdvdG8gMWY7XHRcdFx0XHRcXFxuK1x0cjAgPSAqKHU4ICopKHI3ICsgMCk7XHRcdFx0XHRcXFxuKzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbitcdCAgX19pbW1fYWRkcihtYXBfaGFzaClcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgYm91bmRlZF9vZmZzZXRfaW5mZXJzX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdC8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXHUwMDI2MCk7ICovXHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbitcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyMiArPSAtODtcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHQvKiByNyA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjEpOyAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gMTtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdHI3ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHQvKiBwb2ludGVyIC0gcG9pbnRlciBpcyBhbiB1bmtub3duIHNjYWxhciAqL1x0XFxcbitcdHI4ID0gcjc7XHRcdFx0XHRcdFxcXG4rXHRyOCAtPSByNjtcdFx0XHRcdFx0XFxcbitcdC8qIHI4IGlzIGluIFswLCAzXSAqL1x0XHRcdFx0XFxcbitcdHI4IFx1MDAyNj0gMztcdFx0XHRcdFx0XFxcbitcdHI2ICs9IHI4O1x0XHRcdFx0XHRcXFxuK1x0aWYgcjcgIT0gcjYgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTggKikocjcgKyAwKTtcdFx0XHRcdFxcXG4rMTpcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxuK1x0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSBtYXAgdmFsdWUgcG9pbnRlciBtYXkgYmUgemVybywgaGVuY2UgYSAzMi1iaXRcbisgKiBjb21wYXJlIHdpdGggemVybyBjYW5ub3QgYmUgcHJlZGljdGVkIGZyb20gdGhlIHBvaW50ZXIgYmVpbmcgbm9uLU5VTExcbisgKiBhbmQgYm90aCBzdWNjZXNzb3JzIG9mIHN1Y2ggYSBqdW1wIGhhdmUgdG8gYmUgdmVyaWZpZWQuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBhY2Nlc3MgdG8gbWFwIHZhbHVlLCB2YWx1ZV9zaXplPTQgb2ZmPTMyIHNpemU9NFwiKVxuK19fbmFrZWQgdm9pZCBqbXAzMl9wdHJfdnNfemVyb19qbmUodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNmtleSk7ICovXHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbitcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyMiArPSAtODtcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdGlmIHcwICE9IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHIwICsgMzIpO1x0XHRcdFx0XFxcbisxOlx0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4rXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIFRoZSBiZWxvdyBwcm9ncmFtIGlzIGV4cGxvcmVkIGluIHR3byBwYXRoczogcjYgPT0gMCBhbmQgcjYgPT0gMS5cbisgKiBPbiB0aGUgZmlyc3QgcGF0aCBjb21wYXJpc29uIFwiaWYgcjAgPT0gcjYgZ290byAyZlwiIHNob3VsZCBtYXJrIHI2IGFzIHByZWNpc2UsXG4rICogb3RoZXJ3aXNlIHVuc2FmZSBwYXRoIHdpdGggcjYgPT0gMSB3b3VsZCBiZSBpbmNvcnJlY3RseSBwcnVuZWQuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitfX21zZyhcImVycm9yOiBpbnZhbGlkIGRlcmVmZXJlbmNlIG9mIFIwIChhIG51bGxhYmxlIG1hcCB2YWx1ZSBwb2ludGVyKVwiKVxuK19fbmFrZWQgdm9pZCBpbXByZWNpc2VfemVyb19kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdC8qIHI2IGlzIDAgb24gdGhlIHBhdGggZXhwbG9yZWQgZmlyc3QsIDEgb24gdGhlIG90aGVyICovXFxcbitcdHI2ID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHI2ID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0LyogcjAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjYwKTsgKi9cdFxcXG4rMTpcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdGlmIHIwID09IHI2IGdvdG8gMmY7XHRcdFx0XHRcXFxuK1x0cjAgPSAqKHU4ICopKHIwICsgMCk7XHRcdFx0XHRcXFxuKzI6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcbitcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4rXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiB2b2lkIGtmdW5jX3Jvb3Qodm9pZClcbiB7XG4gXHRicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmNcbmluZGV4IDY2M2QxNWZjNWZkMjYuLjI1NjU0NzA0OGNjNDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG5AQCAtMzgwLDEzICszODAsMTQgQEAgU0VDKFwic29ja2V0XCIpXG4gX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4gX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiAvKlxuLSAqIGNoZWNrIHRoYXQgcjAgYW5kIHI1IGhhdmUgZGlmZmVyZW50IElEcyBhZnRlciAnaWYnLFxuLSAqIGNvbGxlY3RfbGlua2VkX3JlZ3MoKSBjYW4ndCB0aWUgbW9yZSB0aGFuIDUgcmVnaXN0ZXJzIGZvciBhIHNpbmdsZSBpbnNuLlxuKyAqIGNoZWNrIHRoYXQgcjUgaXMgdW5saW5rZWQgYWZ0ZXIgJ2lmJywgY29sbGVjdF9saW5rZWRfcmVncygpIGNhbid0IHRpZVxuKyAqIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbiBhbmQgdGhlIHJlZ2lzdGVyIGNvbXBhcmVkIGJ5XG4rICogdGhlIGp1bXAgaXMgbm90IGV4ZW1wdCBmcm9tIHRoYXQuXG4gICovXG4tX19tc2coXCI3OiAoMjUpIGlmIHIwIFx1MDAzZSAweDcgZ290byBwYyswICAgICAgICAgOyBSMD1zY2FsYXIoaWQ9MVwiKVxuK19fbXNnKFwiNzogKDI1KSBpZiByNSBcdTAwM2UgMHg3IGdvdG8gcGMrMCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49XCIpXG4gX19tc2coXCIxMjogKGJmKSByNSA9IHI1ICAgICAgICAgICAgICAgICAgICAgIDsgUjU9c2NhbGFyKGlkPTJcIilcbiAvKiBjaGVjayB0aGF0IHJ7MC00fSBhcmUgbWFya2VkIHByZWNpc2UgYWZ0ZXIgJ2lmJyAqL1xuLV9fbXNnKFwiZnJhbWUwOiByZWdzPXIwIHN0YWNrPSBiZWZvcmUgNzogKDI1KSBpZiByMCBcdTAwM2UgMHg3IGdvdG8gcGMrMFwiKVxuK19fbXNnKFwiZnJhbWUwOiByZWdzPXIwIHN0YWNrPSBiZWZvcmUgNzogKDI1KSBpZiByNSBcdTAwM2UgMHg3IGdvdG8gcGMrMFwiKVxuIF9fbXNnKFwiZnJhbWUwOiBwYXJlbnQgc3RhdGUgcmVncz1yMCxyMSxyMixyMyxyNCBzdGFjaz06XCIpXG4gX19uYWtlZCB2b2lkIGxpbmtlZF9yZWdzX3Rvb19tYW55X3JlZ3Modm9pZClcbiB7XG5AQCAtNDAwLDggKzQwMSw4IEBAIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpXG4gXHRcInIzID0gcjA7XCJcbiBcdFwicjQgPSByMDtcIlxuIFx0XCJyNSA9IHIwO1wiXG4tXHQvKiBwcm9wYWdhdGUgcmFuZ2UgZm9yIHJ7MC01fSAqL1xuLVx0XCJpZiByMCBcdTAwM2UgNyBnb3RvICswO1wiXG4rXHQvKiByezAtNH0gZmlsbCB0aGUgcmVjb3JkLCByNSBkb2VzIG5vdCBmaXQgYW5kIGlzIHVubGlua2VkICovXG4rXHRcImlmIHI1IFx1MDAzZSA3IGdvdG8gKzA7XCJcbiBcdC8qIGtlZXAgcnsxLTR9IGxpdmUgKi9cbiBcdFwicjEgPSByMTtcIlxuIFx0XCJyMiA9IHIyO1wiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODowMi43NDU3ODQ4MzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTMxNTAyMDI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCB0aGUgYXNzb2NpYXRlZCBzZWxmdGVzdHMuIFRoZSB2ZXJpZmllciwgb2YgY291cnNlLCBpcyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgZXhlY3V0ZWQgd2hlbmV2ZXIgYSBCUEYgcHJvZ3JhbSBpcyBsb2FkZWQgdmlhIGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAuIFNvLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbmVlZHMgY2FyZWZ1bCBzY3J1dGlueS4gQW5kIHRoZSBpbXBhY3QgaXMgaW1tZWRpYXRlbHkgb2J2aW91cywgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb24uIFRoaXMgbWVhbnMgaXQncyBwb3RlbnRpYWxseSByZWFjaGFibGUgYnkgYm90aCB1bnByaXZpbGVnZWQgYW5kIHByaXZpbGVnZWQgdXNlcnMgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgYSBmZXcga2V5IGFyZWFzIG9mIGNoYW5nZTpcblxuMS4gIEluIGByZWdfbm90X251bGxgLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyBudWxsIHBvaW50ZXIgY2hlY2tzIGFyZSBwZXJmb3JtZWQgcmVsYXRlZCB0byBvZmZzZXQgYm91bmRzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGAtQlBGX01BWF9WQVJfT0ZGYCBhbmQgYEJQRl9NQVhfVkFSX09GRmAuXG5cbjIuICBgaXNfYnJhbmNoX3Rha2VuYCBhbHNvIGhhcyBjaGFuZ2VzLCB3aGljaCByZWxhdGVzIHRvIG51bGwgY2hlY2tzIHdpdGggcG9pbnRlciBjb21wYXJpc29ucywgcGFydGljdWxhcmx5IGFyb3VuZCBgaXNfam1wMzJgICgzMiBiaXQgY29tcGFyaXNvbnMpLlxuXG4zLiAgYGNoZWNrX2NvbmRfam1wX29wYCBhcHBlYXJzIHRvIGJlIGdldHRpbmcgc29tZSBzaWduaWZpY2FudCByZXdvcmsuIFRoZSBgY29sbGVjdF9saW5rZWRfcmVnc2AgZnVuY3Rpb24gaXMgYmVpbmcgbW92ZWQsIGFuZCBgbWFya19jaGFpbl9wcmVjaXNpb25gIGlzIGJlaW5nIGFkZGVkIGluIHRoZSBwb2ludGVyLXZzLW51bGwgY2hlY2tpbmcgbG9naWMgd2hlbiBkZWFsaW5nIHdpdGggYEJQRl9YYCBzb3VyY2Ugb3BlcmFuZCBhbmQgdGhlIHNvdXJjZSByZWdpc3RlciBiZWluZyBudWxsLlxuXG5UaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHN0aWxsIHRoZSBCUEYgdmVyaWZpZXIgaXRzZWxmOiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSB0aGUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBlbnRyeSBwb2ludHMgdGhyb3VnaCBgYnBmX2NoZWNrYCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIGByZWdfbm90X251bGxgLCBgaXNfYnJhbmNoX3Rha2VuYCwgYW5kIGBjaGVja19jb25kX2ptcF9vcGAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGNoYW5nZXMgZmxvdyB0aHJvdWdoIHRoZSBjb3JlIHZlcmlmaWVyIGxvZ2ljLlxuXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgb3IganVzdCBkaXJlY3RseSBleGFtaW5lIHRoZSBmaWxlIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgc3ltYm9scyBhbmQgY29uZmlncyByaWdodC4gVGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkLCBidXQgaXRzIGltcGxpY2F0aW9ucyBvbiBwb2ludGVyIGhhbmRsaW5nIGFuZCBjb25kaXRpb25hbCBqdW1wcyBpbiBCUEYgcHJvZ3JhbXMgY291bGQgYmUgc3Vic3RhbnRpYWwsIHNvIEkgbmVlZCB0byBnbyBkZWVwZXIgaW50byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY2OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjE0LjA2MDgwODY0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE2OTEyNjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjE0LjI0MjUwOTYyOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MjE1ODI0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgQlBGX1NZU0NBTEwgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBCUEZfU1lTQ0FMTGAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCB3aXRoIGBLY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMgYXJlIHNldCwgc28gYEJQRl9TWVNDQUxMYCwgYmVpbmcgYSBtYWNybyBsaWtlbHkgdGllZCB0byBhIGZlYXR1cmUgb3IgZnVuY3Rpb25hbGl0eSwgKnNob3VsZCogYmUgZGVmaW5lZCBpbiBhIGBLY29uZmlnYCBmaWxlIHNvbWV3aGVyZS4gVGhlIGNoYWxsZW5nZSBub3cgaXMgZmlndXJpbmcgb3V0IHdoZXJlIHRoYXQgYEtjb25maWdgIGlzLiBJJ2xsIG5lZWQgdG8gZG8gc29tZSBkaWdnaW5nLCBwcm9iYWJseSB1c2luZyBgZ3JlcGAgb3Igc2ltaWxhciB0b29scywgc2VhcmNoaW5nIHRoZSBzb3VyY2UgdHJlZSBmb3IgcmVmZXJlbmNlcyBvciBkZWZpbml0aW9ucy4gSSdtIGV4cGVjdGluZyBpdCB0byBiZSBuZXN0ZWQgd2l0aGluIGEgZmVhdHVyZSB0aGF0IGhhcyB0byBiZSBjb25maWd1cmVkIHdoZW4gdGhlIGtlcm5lbCBpcyBjb21waWxlZC4gT25jZSBJIGxvY2F0ZSB0aGUgZmlsZSwgSSBjYW4gYW5hbHl6ZSB0aGUgYXNzb2NpYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGBCUEZfU1lTQ0FMTGAgYW5kLCBjcnVjaWFsbHksIHVuZGVyc3RhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gd29yayB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzEwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MTYuNjY0MDk0NTE4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTE4MTMzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MTguMzc1OTE1MDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ1NjA2NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBCUEYgdmVyaWZpZXIgaXMgbWFuYWdpbmcgY29uZGl0aW9uYWwganVtcHMgYW5kIHJlZ2lzdGVyIHZhbGlkaXR5LiBNeSBodW5jaCBpcyB0aGF0IGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgd2lsbCByZXZlYWwgc29tZSBrZXkgZGV0YWlscy4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIGZ1bmN0aW9ucyBsaWtlIGByZWdfbm90X251bGxgLCBgaXNfYnJhbmNoX3Rha2VuYCwgYW5kIGBjaGVja19jb25kX2ptcF9vcGAgYXJlIGRlZmluZWQgd2l0aCBzdGF0aWMgbGlua2FnZSBvciBpZiB0aGV5IGFyZSBhY2Nlc3NpYmxlIGdsb2JhbGx5IHdpdGhpbiB0aGUgdmVyaWZpZXIncyBzY29wZS4gVGhlaXIgc2NvcGUgd2lsbCBpbmZsdWVuY2UgaG93IGVhc2lseSB0aGV5IGNhbiBiZSByZS11c2VkIGFuZCBleHRlbmRlZC4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byB0cmFjZSB0aGVpciBjYWxsIHNpdGVzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlICpjYWxsZWQqIHByb3ZpZGVzIHZpdGFsIGNvbnRleHQgZm9yIHRoZWlyIGZ1bmN0aW9uYWxpdHksIGFuZCB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgdmVyaWZpZXIncyBjb250cm9sIGZsb3cgYW5kIGRlY2lzaW9uLW1ha2luZyBsb2dpYywgcGFydGljdWxhcmx5IGFyb3VuZCBjb25kaXRpb25hbCBqdW1wcyBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcuIFRoaXMgaW5mb3JtYXRpb24gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcsIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6aW5nLCB0aGUgQlBGIHZlcmlmaWVyJ3Mgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDYzLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MjAuNjIxNTI0MjMzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODA5ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihyZWdfbm90X251bGx8aXNfYnJhbmNoX3Rha2VufGNoZWNrX2NvbmRfam1wX29wKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTU4PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAtICogUFRSX1RPX01BUF9WQUxVRSBhbmQgdGhlIHNhbWUgcmVnaXN0ZXIgY2hhbmdlcyBzdGF0ZSB0byBDT05TVF9JTU0gaW4gdGhlIGZhbHNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTogKiBicmFuY2guIFNlZSBjaGVja19jb25kX2ptcF9vcCgpLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjItICpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjY9c3RhdGljIHZvaWQgdmVyYm9zZV9pbnZhbGlkX3NjYWxhcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzQ3OnN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MjU2PXN0YXRpYyBpbnQgaXNfcGt0X3B0cl9icmFuY2hfdGFrZW4oc3RydWN0IGJwZl9yZWdfc3RhdGUgKmRzdF9yZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzMDItICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzAzOnN0YXRpYyBpbnQgaXNfYnJhbmNoX3Rha2VuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMwNC1cXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnMiwgdTggb3Bjb2RlLCBib29sIGlzX2ptcDMyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzI3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjMyODpcXHRcXHRpZiAoIXJlZ19ub3RfbnVsbChlbnYsIHJlZzEpKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMyOS1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3NDY9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODAxOnN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4MDItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCAqaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4OTQtXFx0ZW52LVxcdTAwM2V0cnVlX3JlZzIgPSAqc3JjX3JlZztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY4OTU6XFx0cHJlZCA9IGlzX2JyYW5jaF90YWtlbihlbnYsIGRzdF9yZWcsIHNyY19yZWcsIG9wY29kZSwgaXNfam1wMzIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjg5Ni1cXHRpZiAocHJlZCBcXHUwMDNlPSAwKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2ODk3LVxcdFxcdC8qIElmIHdlIGdldCBoZXJlIHdpdGggYSBkc3RfcmVnIHBvaW50ZXIgdHlwZSBpdCBpcyBiZWNhdXNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODk4OlxcdFxcdCAqIGFib3ZlIGlzX2JyYW5jaF90YWtlbigpIHNwZWNpYWwgY2FzZWQgdGhlIDAgY29tcGFyaXNvbi5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY4OTktXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcwMDgtXFx0XFx0XFx0Lyogc3JjID09IGRzdCBcXHUwMDI2XFx1MDAyNiBkc3QgIT0gTlVMTCA9XFx1MDAzZSBzcmMgIT0gTlVMTCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzAwOTpcXHRcXHRcXHRpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgXFx1MDAyNlxcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLVxcdTAwM2V0eXBlKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcwMTAtXFx0XFx0XFx0XFx0bWFya19wdHJfbm90X251bGxfcmVnKFxcdTAwMjZlcV9icmFuY2hfcmVnc1tpbnNuLVxcdTAwM2VzcmNfcmVnXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MDExLVxcdFxcdFxcdC8qIHNyYyA9PSBkc3QgXFx1MDAyNlxcdTAwMjYgc3JjICE9IE5VTEwgPVxcdTAwM2UgZHN0ICE9IE5VTEwgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcwMTI6XFx0XFx0XFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIHNyY19yZWcpIFxcdTAwMjZcXHUwMDI2IHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cXHUwMDNldHlwZSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MDEzLVxcdFxcdFxcdFxcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ10pO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTA3PXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE5My1cXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTk0OlxcdFxcdHJldHVybiBjaGVja19jb25kX2ptcF9vcChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxOTUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODoyMC42NzQzMzc4NDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzIwMjU4Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHBlcnNwZWN0aXZlIG9uIHRoaXMgc3BlY2lmaWMgbGluZSBvZiBpbnF1aXJ5OlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl9jaGVja2AgaW4gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGJyb2FkZW4gb3VyIHNjb3BlIGEgYml0LiBXaGlsZSB3ZSd2ZSBiZWVuIGV4YW1pbmluZyBvdGhlciBhcmVhcywgSSdtIGZlZWxpbmcgYSBuYWdnaW5nIHNlbnNhdGlvbiB0aGF0IHdlIG1pZ2h0IGJlIG92ZXJsb29raW5nIHNvbWV0aGluZyBjcnVjaWFsLiBTcGVjaWZpY2FsbHksIEknbSBub3cgdGhpbmtpbmcgd2Ugc2hvdWxkIHJlYWxseSB0YWtlIGEgaGFyZCBsb29rIGF0IGBicGZfY2hlY2tgIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHdob2xlIEJQRiB2ZXJpZmljYXRpb24gcHJvY2VzcywgYW5kIGlmIHRoZXJlJ3MgYW4gaXNzdWUgbWFuaWZlc3RpbmcsIGl0J3MgdmVyeSBsaWtlbHkgdGllZCB0byB0aGlzIHBhcnRpY3VsYXIgYXJlYS4gTGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGV4cGxvcmVkIHRoYXQgc2VjdGlvbiB0aG9yb3VnaGx5OyBpdCB3YXJyYW50cyBpbW1lZGlhdGUgYXR0ZW50aW9uLiBNeSBndXQgc2F5cyBpdCdzIGxpa2VseSBsaW5rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODoyNS4zOTQ1OTk2NTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzIzMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBicGZfY2hlY2tcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTIwODk2PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDEyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTAxMzppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMTQtXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjI1LjQ1MDkzMjY1M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQzNjUxMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEJQRiBWZXJpZmllcioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRvIHRhcmdldCBmb3IgZnV6emluZy4gRmlyc3QsIEknbSBnb2luZyB0byBwdWxsIG91dCB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSBpdCdzIHRoZXNlIGZ1bmN0aW9uczogYGNoZWNrX2NvbmRfam1wX29wYCwgYGlzX2JyYW5jaF90YWtlbmAsIGByZWdfbm90X251bGxgLCBhbmQgYGJwZl9jaGVja2AuIEdvdCBpdC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guIEJhc2VkIG9uIG15IGFuYWx5c2lzLCBpdCBzZWVtcyBsaWtlIHRoZXNlIHdlcmUgYWxsIHRvdWNoZWQ6IGByZWdfbm90X251bGxgLCBgaXNfYnJhbmNoX3Rha2VuYCwgYGNoZWNrX2NvbmRfam1wX29wYCwgYWxsIGxvY2F0ZWQgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBhbmQgdGhlIG90aGVyIHRocmVlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIGFuZCB3ZXJlIG1vZGlmaWVkLiBPa2F5LlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgZnV6emluZyB3b3J0aGluZXNzLiBUaGUgQlBGIHZlcmlmaWVyIGlzIGRlZmluaXRlbHkgYSBjb3JlIHN1YnN5c3RlbeKAlGl0J3MgcmlnaHQgdGhlcmUgaW4gQlBGLiBUaGUgcGF0Y2ggZGV0YWlscyBtb2RpZmljYXRpb25zIGluIHJhbmdlIHRyYWNraW5nLCBwb2ludGVyIG51bGxuZXNzLCBicmFuY2ggcHJlZGljdGlvbiwgcmVnaXN0ZXIgbGlua2luZywgYW5kIHByZWNpc2lvbiB0cmFja2luZy4gU2lnbmlmaWNhbnQgc3R1ZmYuIEFsc28sIEkgY2FuIHJlYWNoIGl0IHZpYSB0aGUgYHN5c19icGZgIHN5c2NhbGwgd2l0aCBgQlBGX1BST0dfTE9BRGAuICpEZWZpbml0ZWx5KiBXb3J0aEZ1enppbmc9dHJ1ZS4gTm8gcXVlc3Rpb24uXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIHJlbGV2YW50IG9uZSBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAsIHVuZGVyIHRoZSBcIkJQRiBzdWJzeXN0ZW1cIiBtZW51LiBHb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkLlxuXG5MZXQncyByZXZpZXcgdGhlIGZvY3VzIHN5bWJvbCBydWxlcyB0byBtYWtlIHN1cmUgSSdtIGRvaW5nIHRoaXMgcmlnaHQuIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIHNwZWNpZmljLCBub24tdWJpcXVpdG91cyBrZXJuZWwgZnVuY3Rpb25zLCB0YXJnZXRpbmcgZnVuY3Rpb25zIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGFjdGluZyBhcyBkaXJlY3QgY2FsbGVyIGVudHJ5cG9pbnRzLiBUaGUgb25lcyBJJ3ZlIHNlbGVjdGVkLCBgY2hlY2tfY29uZF9qbXBfb3BgLCBgaXNfYnJhbmNoX3Rha2VuYCwgYHJlZ19ub3RfbnVsbGAsIGFuZCBgYnBmX2NoZWNrYCwgZml0IHRoZSBiaWxsIHBlcmZlY3RseS5cblxuRmluYWxseSwganVzdCBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiB0aGUgZGlmZiBhbmQgYWxsIG1vZGlmaWVkIGZpbGVzIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBMb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB3aXRoIHNvbWUgYXNzb2NpYXRlZCBzZWxmLXRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYC4gVGhlIHNlbGYtdGVzdHMgYXJlIHVzZXItc3BhY2UsIHNvIEkgZG9uJ3QgbmVlZCBhbnkgc3ltYm9scyBmcm9tIHRoZW0uIEFsbCBjbGVhci4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzMsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjMwLjI5NDU4Njc2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTY1NTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19jb25kX2ptcF9vcFwiLFxuICAgIFwiaXNfYnJhbmNoX3Rha2VuXCIsXG4gICAgXCJyZWdfbm90X251bGxcIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBsb2dpYyBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMgZm9yIHBvaW50ZXIgbnVsbG5lc3MgaW5mZXJlbmNlLCAzMi1iaXQganVtcCBicmFuY2ggcHJlZGljdGlvbiwgbGlua2VkIHJlZ2lzdGVycyBjb2xsZWN0aW9uIHRpbWluZywgYW5kIHByZWNpc2lvbiB0cmFja2luZyBvbiByZWdpc3RlciBjb21wYXJpc29ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIHZlcmlmaWNhdGlvbiBwYXRocyB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX2NvbmRfam1wX29wXCIsXG4gICAgXCJpc19icmFuY2hfdGFrZW5cIixcbiAgICBcInJlZ19ub3RfbnVsbFwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYyBmb3IgcG9pbnRlciBudWxsbmVzcyBpbmZlcmVuY2UsIDMyLWJpdCBqdW1wIGJyYW5jaCBwcmVkaWN0aW9uLCBsaW5rZWQgcmVnaXN0ZXJzIGNvbGxlY3Rpb24gdGltaW5nLCBhbmQgcHJlY2lzaW9uIHRyYWNraW5nIG9uIHJlZ2lzdGVyIGNvbXBhcmlzb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgdmVyaWZpY2F0aW9uIHBhdGhzIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODozMC40MTYyNTAwNjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDM0MzI1MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTc6Mzg6MzAuNDE2Nzc3MjkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUwMzM3OTA1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBmaXggc291bmRuZXNzIGlzc3VlcyByZWdhcmRpbmcgcmVnaXN0ZXIgdHJhY2tpbmcsIHNwZWNpZmljYWxseTpcXG4xLiBIYW5kbGluZyBvZmZzZXQgd3JhcHBpbmcgdG8gemVybyBpbiBgcmVnX25vdF9udWxsKClgLlxcbjIuIEhhbmRsaW5nIDMyLWJpdCBwb2ludGVyLXZzLXNjYWxhciBjb21wYXJpc29ucyBpbiBgaXNfYnJhbmNoX3Rha2VuKClgLlxcbjMuIEVuc3VyaW5nIGxpbmtlZCByZWdpc3RlcnMgYXJlIGNvbGxlY3RlZCBiZWZvcmUgc2F2aW5nIHJlZ2lzdGVycyBpbiBgY2hlY2tfY29uZF9qbXBfb3AoKWAuXFxuNC4gTWFya2luZyBwcmVjaXNpb24gb24gYHNyY19yZWdgIHdoZW4gY2hlY2tpbmcgbnVsbG5lc3MgaW4gYGNoZWNrX2NvbmRfam1wX29wKClgLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGUgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCAoc3VjaCBhcyBgc3RydWN0IGxpbmtlZF9yZWdzYCkgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IChlLmcuLCB6ZXJvLWluaXRpYWxpemVkIG9uIGRlY2xhcmF0aW9uKSwgYW5kIHRoZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgdmVyaWZpZXIgaW50ZXJuYWwgY29udHJvbC1mbG93IGFuZCByZWdpc3RlciBzdGF0ZSBsb2dpYy4gQW55IHBvdGVudGlhbCBtaXNiZWhhdmlvciBwcmV2ZW50ZWQgYnkgdGhlc2UgZml4ZXMgcmVsYXRlcyB0byBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBkZXJlZmVyZW5jZXMpLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNGM1ZGY2MWNmYjU5YzUyMDg0NmU3YmUwZjE4MjdmMjEyODg5N2U2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNzozODowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTY0MDM1NjgzNzk1MS4uNzA5YjQ3OTNlOGViNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMzUyLDYgKzM1MiwxMyBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdFxuIFx0aWYgKHR5cGVfbWF5X2JlX251bGwodHlwZSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdC8qXG4rXHQgKiBUaGUgdHlwZXMgYmVsb3cgZ3VhcmFudGVlIGEgbm9uLU5VTEwgYmFzZSwgYW4gdW5ib3VuZGVkIG9mZnNldCBjYW5cbitcdCAqIHN0aWxsIHdyYXAgYmFzZSArIG9mZnNldCB0byB6ZXJvLlxuK1x0ICovXG4rXHRpZiAocmVnX3NtaW4ocmVnKSBcdTAwM2M9IC1CUEZfTUFYX1ZBUl9PRkYgfHwgcmVnX3NtYXgocmVnKSBcdTAwM2U9IEJQRl9NQVhfVkFSX09GRilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0dHlwZSA9IGJhc2VfdHlwZSh0eXBlKTtcbiBcdHJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHxcbiBcdFx0dHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHxcbkBAIC0xNjMwMiw2ICsxNjMwOSwxMyBAQCBzdGF0aWMgaW50IGlzX2JyYW5jaF90YWtlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqclxuIFx0aWYgKF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgcmVnMSkgfHwgX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCByZWcyKSkge1xuIFx0XHR1NjQgdmFsO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIG1heSB3ZWxsIGJlIHplcm8sIGhlbmNlXG4rXHRcdCAqIG5vdGhpbmcgYmVsb3cgYXBwbGllcyB0byBhIDMyLWJpdCBjb21wYXJpc29uLlxuK1x0XHQgKi9cbitcdFx0aWYgKGlzX2ptcDMyKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbiBcdFx0LyogYXJyYW5nZSB0aGF0IHJlZzIgaXMgYSBzY2FsYXIsIGFuZCByZWcxIGlzIGEgcG9pbnRlciAqL1xuIFx0XHRpZiAoIWlzX3JlZ19jb25zdChyZWcyLCBpc19qbXAzMikpIHtcbiBcdFx0XHRvcGNvZGUgPSBmbGlwX29wY29kZShvcGNvZGUpO1xuQEAgLTE2ODYzLDYgKzE2ODc3LDE2IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIENvbGxlY3QgdGhlIGxpbmtlZCByZWdpc3RlcnMgYmVmb3JlIGVudi1cdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gc2V0dXAsXG4rXHQgKiBvdGhlcndpc2UgaWRzIGRyb3BwZWQgYnkgY29sbGVjdF9saW5rZWRfcmVncygpIHdvdWxkIGJlIHJlc3VycmVjdGVkXG4rXHQgKiB3aGVuIGVudi1cdTAwM2V7dHJ1ZSxmYWxzZX1fcmVnezEsMn0gYXJlIGNvcGllZCBiYWNrLlxuK1x0ICovXG4rXHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNiBzcmNfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBzcmNfcmVnLVx1MDAzZWlkKVxuK1x0XHRjb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWctXHUwMDNlaWQsIFx1MDAyNmxpbmtlZF9yZWdzKTtcbitcdGlmIChkc3RfcmVnLVx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFx1MDAyNlx1MDAyNiBkc3RfcmVnLVx1MDAzZWlkKVxuK1x0XHRjb2xsZWN0X2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIGRzdF9yZWctXHUwMDNlaWQsIFx1MDAyNmxpbmtlZF9yZWdzKTtcbitcbiBcdGlzX2ptcDMyID0gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0pNUDMyO1xuIFx0ZW52LVx1MDAzZWZhbHNlX3JlZzEgPSAqZHN0X3JlZztcbiBcdGVudi1cdTAwM2VmYWxzZV9yZWcyID0gKnNyY19yZWc7XG5AQCAtMTY5MTcsMTAgKzE2OTQxLDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICogJ3RoaXNfYnJhbmNoJyBhbmQgJ290aGVyX2JyYW5jaCcgc2hhcmUgdGhpcyBoaXN0b3J5XG4gXHQgKiBpZiBwYXJlbnQgc3RhdGUgaXMgY3JlYXRlZC5cbiBcdCAqL1xuLVx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZClcbi1cdFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBzcmNfcmVnLVx1MDAzZWlkLCBcdTAwMjZsaW5rZWRfcmVncyk7XG4tXHRpZiAoZHN0X3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgZHN0X3JlZy1cdTAwM2VpZClcbi1cdFx0Y29sbGVjdF9saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBkc3RfcmVnLVx1MDAzZWlkLCBcdTAwMjZsaW5rZWRfcmVncyk7XG4gXHRpZiAobGlua2VkX3JlZ3MuY250IFx1MDAzZSAxKSB7XG4gXHRcdGVyciA9IGJwZl9wdXNoX2ptcF9oaXN0b3J5KGVudiwgdGhpc19icmFuY2gsIDAsIDAsIDAsIGxpbmtlZF9yZWdzX3BhY2soXHUwMDI2bGlua2VkX3JlZ3MpKTtcbiBcdFx0aWYgKGVycilcbkBAIC0xNzAwNCw2ICsxNzAyNCwxNSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgICAgdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICgoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9LIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSA9PSAwKSB8fFxuIFx0ICAgICAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNiBicGZfcmVnaXN0ZXJfaXNfbnVsbChzcmNfcmVnKSkpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEZvciBCUEZfWCB0aGUgemVybyBpcyBhIHByb3BlcnR5IG9mIHRoaXMgZXhlY3V0aW9uIHBhdGgsXG4rXHRcdCAqIGhlbmNlIHNyY19yZWcgaGFzIHRvIGJlIHByZWNpc2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKSB7XG4rXHRcdFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4gXHRcdC8qIE1hcmsgYWxsIGlkZW50aWNhbCByZWdpc3RlcnMgaW4gZWFjaCBicmFuY2ggYXMgZWl0aGVyXG4gXHRcdCAqIHNhZmUgb3IgdW5rbm93biBkZXBlbmRpbmcgUiA9PSAwIG9yIFIgIT0gMCBjb25kaXRpb25hbC5cbiBcdFx0ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXG5pbmRleCBiNDEyYTU0MmVmNzZmLi4zYzc4OWM1NjViMThmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbkBAIC0zMTEsNiArMzExLDE0NyBAQCBfX25ha2VkIHZvaWQgdW50cnVzdGVkX21lbV9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuKy8qXG4rICogQSBwb2ludGVyIHdpdGggYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGJvdW5kZWQgZnJvbSBhYm92ZSBtYXkgYmUgbnVsbCBhdFxuKyAqIHJ1bnRpbWUsIGhlbmNlIGl0IGlzIG5vdCBhIHdpdG5lc3MgZm9yIHRoZSBwb2ludGVyIGl0IGlzIGNvbXBhcmVkIHdpdGguXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlXG4rX19tc2coXCJlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSNyAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcilcIilcbitfX25ha2VkIHZvaWQgdW5ib3VuZGVkX29mZnNldF9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHQvKiByNiA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjApOyAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdGlmIHIwID09IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyNiA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0LyogcjcgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjYxKTsgKi9cdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IDE7XHRcdFx0XHRcXFxuK1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4rXHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIyICs9IC04O1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1x0XHRcdFxcXG4rXHRyNyA9IHIwO1x0XHRcdFx0XHRcXFxuK1x0LyogcG9pbnRlciAtIHBvaW50ZXIgaXMgYW4gdW5rbm93biBzY2FsYXIgKi9cdFxcXG4rXHRyOCA9IHI3O1x0XHRcdFx0XHRcXFxuK1x0cjggLT0gcjY7XHRcdFx0XHRcdFxcXG4rXHQvKiByOCBpcyBpbiBbMCwgUzY0X01BWF0gKi9cdFx0XHRcXFxuK1x0cjggXHUwMDNjXHUwMDNjPSAxO1x0XHRcdFx0XHRcXFxuK1x0cjggXHUwMDNlXHUwMDNlPSAxO1x0XHRcdFx0XHRcXFxuK1x0LyogcjYgbWF5IHdyYXAgdG8gemVybyBhdCBydW50aW1lICovXHRcdFxcXG4rXHRyNiArPSByODtcdFx0XHRcdFx0XFxcbitcdGlmIHI3ICE9IHI2IGdvdG8gMWY7XHRcdFx0XHRcXFxuK1x0cjAgPSAqKHU4ICopKHI3ICsgMCk7XHRcdFx0XHRcXFxuKzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbitcdCAgX19pbW1fYWRkcihtYXBfaGFzaClcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIFNhbWUsIGJ1dCB0aGUgb2Zmc2V0IGlzIGJvdW5kZWQsIHNvIHRoZSBpbmZlcmVuY2UgaXMgc3RpbGwgZG9uZS4gKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgYm91bmRlZF9vZmZzZXRfaW5mZXJzX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdC8qIHI2ID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXHUwMDI2MCk7ICovXHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbitcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyMiArPSAtODtcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHQvKiByNyA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNjEpOyAqL1x0XFxcbitcdCoodTY0ICopKHIxMCAtIDgpID0gMTtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdHI3ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHQvKiBwb2ludGVyIC0gcG9pbnRlciBpcyBhbiB1bmtub3duIHNjYWxhciAqL1x0XFxcbitcdHI4ID0gcjc7XHRcdFx0XHRcdFxcXG4rXHRyOCAtPSByNjtcdFx0XHRcdFx0XFxcbitcdC8qIHI4IGlzIGluIFswLCAzXSAqL1x0XHRcdFx0XFxcbitcdHI4IFx1MDAyNj0gMztcdFx0XHRcdFx0XFxcbitcdHI2ICs9IHI4O1x0XHRcdFx0XHRcXFxuK1x0aWYgcjcgIT0gcjYgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTggKikocjcgKyAwKTtcdFx0XHRcdFxcXG4rMTpcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxuK1x0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBUaGUgbG93IDMyIGJpdHMgb2YgYSBtYXAgdmFsdWUgcG9pbnRlciBtYXkgYmUgemVybywgaGVuY2UgYSAzMi1iaXRcbisgKiBjb21wYXJlIHdpdGggemVybyBjYW5ub3QgYmUgcHJlZGljdGVkIGZyb20gdGhlIHBvaW50ZXIgYmVpbmcgbm9uLU5VTExcbisgKiBhbmQgYm90aCBzdWNjZXNzb3JzIG9mIHN1Y2ggYSBqdW1wIGhhdmUgdG8gYmUgdmVyaWZpZWQuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBhY2Nlc3MgdG8gbWFwIHZhbHVlLCB2YWx1ZV9zaXplPTQgb2ZmPTMyIHNpemU9NFwiKVxuK19fbmFrZWQgdm9pZCBqbXAzMl9wdHJfdnNfemVyb19qbmUodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNmtleSk7ICovXHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbitcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyMiArPSAtODtcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdGlmIHcwICE9IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHIwICsgMzIpO1x0XHRcdFx0XFxcbisxOlx0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4rXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIFRoZSBiZWxvdyBwcm9ncmFtIGlzIGV4cGxvcmVkIGluIHR3byBwYXRoczogcjYgPT0gMCBhbmQgcjYgPT0gMS5cbisgKiBPbiB0aGUgZmlyc3QgcGF0aCBjb21wYXJpc29uIFwiaWYgcjAgPT0gcjYgZ290byAyZlwiIHNob3VsZCBtYXJrIHI2IGFzIHByZWNpc2UsXG4rICogb3RoZXJ3aXNlIHVuc2FmZSBwYXRoIHdpdGggcjYgPT0gMSB3b3VsZCBiZSBpbmNvcnJlY3RseSBwcnVuZWQuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19mYWlsdXJlXG4rX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbitfX21zZyhcImVycm9yOiBpbnZhbGlkIGRlcmVmZXJlbmNlIG9mIFIwIChhIG51bGxhYmxlIG1hcCB2YWx1ZSBwb2ludGVyKVwiKVxuK19fbmFrZWQgdm9pZCBpbXByZWNpc2VfemVyb19kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdC8qIHI2IGlzIDAgb24gdGhlIHBhdGggZXhwbG9yZWQgZmlyc3QsIDEgb24gdGhlIG90aGVyICovXFxcbitcdHI2ID0gMTtcdFx0XHRcdFx0XHRcXFxuK1x0aWYgcjAgPT0gMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHI2ID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0LyogcjAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjYwKTsgKi9cdFxcXG4rMTpcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcdFx0XHRcdFxcXG4rXHRyMSA9ICVbbWFwX2hhc2hdIGxsO1x0XHRcdFx0XFxcbitcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuK1x0cjIgKz0gLTg7XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbitcdGlmIHIwID09IHI2IGdvdG8gMmY7XHRcdFx0XHRcXFxuK1x0cjAgPSAqKHU4ICopKHIwICsgMCk7XHRcdFx0XHRcXFxuKzI6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcbitcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXG4rXHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiB2b2lkIGtmdW5jX3Jvb3Qodm9pZClcbiB7XG4gXHRicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NjYWxhcl9pZHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zY2FsYXJfaWRzLmNcbmluZGV4IDY2M2QxNWZjNWZkMjYuLjI1NjU0NzA0OGNjNDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc2NhbGFyX2lkcy5jXG5AQCAtMzgwLDEzICszODAsMTQgQEAgU0VDKFwic29ja2V0XCIpXG4gX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4gX19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiAvKlxuLSAqIGNoZWNrIHRoYXQgcjAgYW5kIHI1IGhhdmUgZGlmZmVyZW50IElEcyBhZnRlciAnaWYnLFxuLSAqIGNvbGxlY3RfbGlua2VkX3JlZ3MoKSBjYW4ndCB0aWUgbW9yZSB0aGFuIDUgcmVnaXN0ZXJzIGZvciBhIHNpbmdsZSBpbnNuLlxuKyAqIGNoZWNrIHRoYXQgcjUgaXMgdW5saW5rZWQgYWZ0ZXIgJ2lmJywgY29sbGVjdF9saW5rZWRfcmVncygpIGNhbid0IHRpZVxuKyAqIG1vcmUgdGhhbiA1IHJlZ2lzdGVycyBmb3IgYSBzaW5nbGUgaW5zbiBhbmQgdGhlIHJlZ2lzdGVyIGNvbXBhcmVkIGJ5XG4rICogdGhlIGp1bXAgaXMgbm90IGV4ZW1wdCBmcm9tIHRoYXQuXG4gICovXG4tX19tc2coXCI3OiAoMjUpIGlmIHIwIFx1MDAzZSAweDcgZ290byBwYyswICAgICAgICAgOyBSMD1zY2FsYXIoaWQ9MVwiKVxuK19fbXNnKFwiNzogKDI1KSBpZiByNSBcdTAwM2UgMHg3IGdvdG8gcGMrMCAgICAgICAgIDsgUjU9c2NhbGFyKHNtaW49XCIpXG4gX19tc2coXCIxMjogKGJmKSByNSA9IHI1ICAgICAgICAgICAgICAgICAgICAgIDsgUjU9c2NhbGFyKGlkPTJcIilcbiAvKiBjaGVjayB0aGF0IHJ7MC00fSBhcmUgbWFya2VkIHByZWNpc2UgYWZ0ZXIgJ2lmJyAqL1xuLV9fbXNnKFwiZnJhbWUwOiByZWdzPXIwIHN0YWNrPSBiZWZvcmUgNzogKDI1KSBpZiByMCBcdTAwM2UgMHg3IGdvdG8gcGMrMFwiKVxuK19fbXNnKFwiZnJhbWUwOiByZWdzPXIwIHN0YWNrPSBiZWZvcmUgNzogKDI1KSBpZiByNSBcdTAwM2UgMHg3IGdvdG8gcGMrMFwiKVxuIF9fbXNnKFwiZnJhbWUwOiBwYXJlbnQgc3RhdGUgcmVncz1yMCxyMSxyMixyMyxyNCBzdGFjaz06XCIpXG4gX19uYWtlZCB2b2lkIGxpbmtlZF9yZWdzX3Rvb19tYW55X3JlZ3Modm9pZClcbiB7XG5AQCAtNDAwLDggKzQwMSw4IEBAIF9fbmFrZWQgdm9pZCBsaW5rZWRfcmVnc190b29fbWFueV9yZWdzKHZvaWQpXG4gXHRcInIzID0gcjA7XCJcbiBcdFwicjQgPSByMDtcIlxuIFx0XCJyNSA9IHIwO1wiXG4tXHQvKiBwcm9wYWdhdGUgcmFuZ2UgZm9yIHJ7MC01fSAqL1xuLVx0XCJpZiByMCBcdTAwM2UgNyBnb3RvICswO1wiXG4rXHQvKiByezAtNH0gZmlsbCB0aGUgcmVjb3JkLCByNSBkb2VzIG5vdCBmaXQgYW5kIGlzIHVubGlua2VkICovXG4rXHRcImlmIHI1IFx1MDAzZSA3IGdvdG8gKzA7XCJcbiBcdC8qIGtlZXAgcnsxLTR9IGxpdmUgKi9cbiBcdFwicjEgPSByMTtcIlxuIFx0XCJyMiA9IHIyO1wiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODozMC40MTY3ODAwODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4NjY2MzczOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEtNU0FOIFJlbGV2YW5jZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBjb25zaWRlciBLTVNBTiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gdGhyb3VnaCB0aGUgY2hhbmdlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgc2VsZnRlc3RzLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cbkZpcnN0LCBJJ2xsIGV4YW1pbmUgdGhlIGNvZGUgY2hhbmdlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBpbiBkZXRhaWw6XG5cbjEuICAqKmByZWdfbm90X251bGxgIGNoYW5nZToqKiBUaGUgYWRkaXRpb24gb2YgdGhlIG9mZnNldCBjaGVjayBtYWtlcyBzZW5zZS4gV2UgbmVlZCB0byBwcmV2ZW50IHVuYm91bmRlZCBvZmZzZXRzIGxlYWRpbmcgdG8gcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFzIGEgcmVnaXN0ZXIgdGhhdCdzICphc3N1bWVkKiBub24tbnVsbCBjYW4gYmVjb21lIG51bGwgYWZ0ZXIgYXBwbHlpbmcgYW4gZXhjZXNzaXZlbHkgbGFyZ2Ugb2Zmc2V0IHRvIGl0LiBUaGlzIGlzbid0IGluaGVyZW50bHkgYSBLTVNBTiBpc3N1ZSwgYnV0IGEgY3JpdGljYWwgc291bmRuZXNzIGZpeC5cblxuMi4gICoqYGlzX2JyYW5jaF90YWtlbmAgbW9kaWZpY2F0aW9uOioqICBJZ25vcmluZyB0aGUgMzItYml0IGNvbXBhcmlzb24gcmVzdWx0IGluIHNvbWUgY2FzZXMgaXMgY29ycmVjdC4gVGhlIGxvd2VyIDMyIGJpdHMgb2YgYSB2YWxpZCBwb2ludGVyIGNhbiBiZSB6ZXJvLCBzbyB3ZSBjYW4ndCBhc3N1bWUgYSBicmFuY2ggaXMgdGFrZW4gaWYgdGhlIGNvbXBhcmlzb24gaXMgemVyby4gVGhpcyBzZWVtcyBsaWtlIGEgc2FuaXR5IGNoZWNrLCBtb3JlIG9mIGEgc2FmZXR5IGZpeCwgYW5kIGRvZXMgbm90IHBvc2UgYSBkaXJlY3QgS01TQU4gcmlzay5cblxuMy4gICoqYGNoZWNrX2NvbmRfam1wX29wYCBhZGp1c3RtZW50czoqKiAgTW92aW5nIHRoZSBgY29sbGVjdF9saW5rZWRfcmVnc2AgY2FsbCBiZWZvcmUgc2F2aW5nIHRydWUvZmFsc2UgcmVnaXN0ZXIgY29waWVzIGlzIGNydWNpYWwuIFRoZSBvcmlnaW5hbCBvcmRlciBjYXVzZWQgcHJvYmxlbXMgd2hlcmUgYGNvbGxlY3RfbGlua2VkX3JlZ3NgIG1pZ2h0IGRyb3AgcmVnaXN0ZXIgSURzLCBhbmQgdGhvc2UgZHJvcHBlZCBJRHMgZ2V0IHJlc3VycmVjdGVkIHdoZW4gd2UgY29weSB0aGUgc2F2ZWQgYHRydWUvZmFsc2VgIHJlZ2lzdGVycy4gSXQncyBhIHNvdW5kbmVzcyBmaXgsIGd1YXJkaW5nIGFnYWluc3QgaW5jb3JyZWN0IHN0YXRlIHJlc3RvcmF0aW9uIGFuZCBwb3NzaWJsZSBtZW1vcnkgY29ycnVwdGlvbi5cblxuNC4gICoqYGNoZWNrX2NvbmRfam1wX29wYCBhZGRpdGlvbjoqKiBNYXJraW5nIGNoYWluIHByZWNpc2lvbiBmb3IgYHNyY19yZWdgIHdoZW4gaXQncyBwYXJ0IG9mIGEgYnJhbmNoIGNvbmRpdGlvbiwgZXNwZWNpYWxseSBpZiB0aGUgc291cmNlIHJlZ2lzdGVyIGlzIHNjYWxhciwgaXMgYWxzbyBhIHNvdW5kbmVzcyBmaXguIFRoaXMgcHJldmVudHMgdW5zb3VuZCBzdGF0ZSBwcnVuaW5nIGR1cmluZyB2ZXJpZmljYXRpb24sIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIGJ1Z3MgZnJvbSBiZWluZyBleHBsb2l0ZWQuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIHRpZ2h0ZW5pbmcgdXAgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyB0byBwcmV2ZW50IHBvdGVudGlhbCBzb3VuZG5lc3MgYnVncy4gVGhlIHZlcmlmaWVyIHRyYWNrcyBwb2ludGVycyBhbmQgc2NhbGFycywgZW5zdXJpbmcgdGhhdCBCUEYgcHJvZ3JhbXMgYXJlIHNhZmUgdG8gZXhlY3V0ZS5cblxuTm93LCBsZXQncyBtYXAgdGhpcyBhZ2FpbnN0IEtNU0FOIGNyaXRlcmlhLiBEb2VzIHRoaXMgdG91Y2ggYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UgdmlhIGFueSBvZiB0aGUgc3RhbmRhcmQgbWV0aG9kcywgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgYSBwcm9ibGVtPyBObywgdGhlIHZhcmlhYmxlcyB0aGUgdmVyaWZpZXIgZGVhbHMgd2l0aCBhcmUgaW50ZXJuYWwgdmVyaWZpZXIgc3RhdGUgc3RydWN0cywgc3VjaCBhcyBgbGlua2VkX3JlZ3NgIGFuZCBgZW52YCwgd2hpY2ggYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIHZlcmlmaWVyIHN0cnVjdHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBEb2VzIGl0IG1lc3Mgd2l0aCBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBBZ2Fpbiwgbm8uIElzIHRoZXJlIGFueSBib3VuZHMgY2hlY2sgb3IgbGVuZ3RoIGxvZ2ljIGNoYW5nZWQgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcz8gU3RpbGwgbm8uIFRoZSBmaXhlcyBhcmUgdGFyZ2V0ZWQgYXQgdGhlIHZlcmlmaWVyJ3MgaW50ZXJuYWwgc3RhdGUtdHJhY2tpbmcgbG9naWMsIGFpbWVkIGF0IHByZXZlbnRpbmcgZXhwbG9pdGFibGUgYnVncy5cblxuVGhlc2UgYnVncyB3b3VsZCB0eXBpY2FsbHkgbGVhZCB0byBhcmJpdHJhcnkga2VybmVsIG1lbW9yeSByZWFkL3dyaXRlIGlmIGV4cGxvaXRlZCwgYSBjbGFzc2ljIEtBU0FOIGlzc3VlLCBvciB2ZXJpZmllciBzdGF0ZSB0cmFja2luZyBpc3N1ZXMuIFNvLCBpdCBpcyBtb3JlIGxpa2UgcHJldmVudGluZyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG5vdCBLTVNBTi1yZWxhdGVkIHByb2JsZW1zLiBUaGUgQlBGIHZlcmlmaWVyIGxvZ2ljIG9wZXJhdGVzIG9uIGluaXRpYWxpemVkIEMgc3RydWN0cy5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgbGlua2VkX3JlZ3NgIHRvIGJlIGFic29sdXRlbHkgc3VyZTsgd2VyZSB0aGUgc3RydWN0cyBgbGlua2VkX3JlZ3NgIGluaXRpYWxpemVkIHdpdGggYHN0cnVjdCBsaW5rZWRfcmVncyBsaW5rZWRfcmVncyA9IHt9O2Agb3IgYHN0cnVjdCBicGZfcmVnX3N0YXRlIGZhbHNlX3JlZzEsIGZhbHNlX3JlZzI7YD8gTGV0IG1lIHF1aWNrbHkgZ3JlcCBmb3IgYGNoZWNrX2NvbmRfam1wX29wYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBjb25maXJtIHRoYXQgYGxpbmtlZF9yZWdzYCBpcyBiZWluZyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIEFzc3VtaW5nIHRoZXkgYXJlIGluaXRpYWxpemVkLCB0aGVuIEkgdGhpbmsgS01TQU4gaXNuJ3QgdGhlIHByaW1hcnkgY29uY2VybiBoZXJlLiBLQVNBTiBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgY2hlY2sgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODo0MS4yODM0MjMxNjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODIwMjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbGlua2VkX3JlZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjQ1PXN0cnVjdCBsaW5rZWRfcmVnIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjUzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjU0OnN0cnVjdCBsaW5rZWRfcmVncyB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNTUtXFx0aW50IGNudDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjU4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjU5OnN0YXRpYyBzdHJ1Y3QgbGlua2VkX3JlZyAqbGlua2VkX3JlZ3NfcHVzaChzdHJ1Y3QgbGlua2VkX3JlZ3MgKnMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNjAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyNzQtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyNzU6c3RhdGljIHU2NCBsaW5rZWRfcmVnc19wYWNrKHN0cnVjdCBsaW5rZWRfcmVncyAqcylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI3Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzI5NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzI5NjpzdGF0aWMgdm9pZCBsaW5rZWRfcmVnc191bnBhY2sodTY0IHZhbCwgc3RydWN0IGxpbmtlZF9yZWdzICpzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMjk3LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzQ1PXZvaWQgYnBmX2J0X3N5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQsIHN0cnVjdCBicGZfam1wX2hpc3RvcnlfZW50cnkgKmhpc3QpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzNDYte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMzQ3OlxcdHN0cnVjdCBsaW5rZWRfcmVncyBsaW5rZWRfcmVncztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM0OC1cXHRib29sIHNvbWVfcHJlY2lzZSA9IGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NTg2PXN0YXRpYyBib29sIHRyeV9tYXRjaF9wa3RfcG9pbnRlcnMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjkwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY5MTpzdGF0aWMgdm9pZCBfX2NvbGxlY3RfbGlua2VkX3JlZ3Moc3RydWN0IGxpbmtlZF9yZWdzICpyZWdfc2V0LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjY5Mi1cXHRcXHRcXHRcXHQgIHUzMiBpZCwgdTMyIGZyYW1lbm8sIHUzMiBzcGlfb3JfcmVnLCBib29sIGlzX3JlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjcxMz1zdGF0aWMgdm9pZCBjb2xsZWN0X2xpbmtlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY3MTUtXFx0XFx0XFx0XFx0dTMyIGlkLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjcxNjpcXHRcXHRcXHRcXHRzdHJ1Y3QgbGlua2VkX3JlZ3MgKmxpbmtlZF9yZWdzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjcxNy17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY3NDY9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2NzQ3OlxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKmtub3duX3JlZywgc3RydWN0IGxpbmtlZF9yZWdzICpsaW5rZWRfcmVncylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY3NDgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2ODAxPXN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgwOC1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZXFfYnJhbmNoX3JlZ3M7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2ODA5OlxcdHN0cnVjdCBsaW5rZWRfcmVncyBsaW5rZWRfcmVncyA9IHt9O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjgxMC1cXHR1OCBvcGNvZGUgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE3OjM4OjQxLjQwMTYzMjQwN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDQ4OTA2Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyBteSB0YWtlLiBJdCBzdGFydHMgYnkgaW5pdGlhbGl6aW5nIGBsaW5rZWRfcmVnc2Ag4oCTIHRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiBge31gLiBUaGUgY29yZSBvZiB0aGlzIGlzIGFib3V0IEJQRiB2ZXJpZmllciBsb2dpYywgc3BlY2lmaWNhbGx5IGVuc3VyaW5nIGl0J3MgY29ycmVjdC4gSSBzZWUgdGhleSdyZSBhZGRyZXNzaW5nIHNldmVyYWwgY3J1Y2lhbCBhcmVhczpcblxuKiAgIEZpcnN0LCBgcmVnX25vdF9udWxsYCBpcyBnZXR0aW5nIGEgY2xvc2VyIGxvb2sgZm9yIGFueSBib3VuZHMgb3Igb3ZlcmZsb3cgaXNzdWVzIHdpdGggcG9pbnRlciBvZmZzZXRzLiBUaGF0J3MgZ29vZDsgdGhvc2UgY2FuIGJlIG5hc3R5IHRvIHRyYWNrIGRvd24gbGF0ZXIuXG4qICAgVGhlbiwgdGhleSdyZSBkaWdnaW5nIGludG8gdGhlIG51YW5jZXMgb2YgaG93IGp1bXAgcG9pbnRlciBjb21wYXJpc29ucyB3b3JrLCBlc3BlY2lhbGx5IHRoZSAzMi1iaXQgdmVyc3VzIDY0LWJpdCBiZWhhdmlvciB3aXRoaW4gYGlzX2JyYW5jaF90YWtlbmAuIFRoaXMgY2FuIGdldCByZWFsbHkgaGFpcnkgd2l0aCBwb2ludGVyIGFyaXRobWV0aWMsIHNvIHRob3JvdWdobmVzcyBoZXJlIGlzIGNyaXRpY2FsLlxuKiAgIFRoZXkncmUgYWxzbyBhZGp1c3RpbmcgdGhlIHRpbWluZyBvZiBgY29sbGVjdF9saW5rZWRfcmVnc2AgaW4gcmVsYXRpb24gdG8gc2F2aW5nIHJlZ2lzdGVycyB3aXRoaW4gYGNoZWNrX2NvbmRfam1wX29wYC4gVGhhdCdzIGxpa2VseSBhYm91dCBlbnN1cmluZyB0aGUgdmVyaWZpZXIgaGFzIHRoZSByaWdodCByZWdpc3RlciBzdGF0ZSBhdCB0aGUgY29ycmVjdCBtb21lbnQgaW4gdGhlIGNvbnRyb2wgZmxvdy4gVGltaW5nIGVycm9ycyBjYW4gYmUgcmVhbGx5IHN1YnRsZS5cbiogICBGaW5hbGx5LCB0aGVyZSdzIGF0dGVudGlvbiBiZWluZyBwYWlkIHRvIHByZWNpc2lvbiBtYXJraW5nIGZvciBgc3JjX3JlZ2AgZHVyaW5nIG51bGwgY29tcGFyaXNvbnMuIFRoaXMgaXMgYWJvdXQgbWFraW5nIHN1cmUgdGhlIHZlcmlmaWVyIGhhcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlZ2lzdGVyJ3MgcG90ZW50aWFsIHZhbHVlIHJhbmdlcywgZXNwZWNpYWxseSBpbiBjYXNlcyB3aGVyZSB3ZSdyZSB0ZXN0aW5nIGZvciBudWxsLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogSSdtIG5vdCBzZWVpbmcgYW55dGhpbmcgaW4gdGhlc2UgY2hhbmdlcyB0aGF0IHRvdWNoZXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZXMgc3RhY2sgb3IgaGVhcCBkYXRhLCBvciBjb3BpZXMgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGF0J3MgYSBodWdlIHJlbGllZi4gVGhlIGZpeGVzLCBpZiB0aGV5IHdlcmUgaW4gcGxhY2UgdG8gc3RhcnQgd2l0aCwgYXJlIGVudGlyZWx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgcHJldmVudGluZyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEFuZCBmcmFua2x5LCB0aG9zZSBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBVQi1zYW5pdGl6ZXIgYW55d2F5LCBzbyB3ZSdyZSBjb3ZlcmVkLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgcGF0Y2ggZG9lc24ndCB3YXJyYW50IGEgS01TQU4gc2Nhbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzk3LCJPdXRwdXRUb2tlbnMiOjI2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNzozODo0NS40NTA1NDIwMjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBmaXggc291bmRuZXNzIGlzc3VlcyByZWdhcmRpbmcgcmVnaXN0ZXIgdHJhY2tpbmcsIHNwZWNpZmljYWxseTpcXG4xLiBIYW5kbGluZyBvZmZzZXQgd3JhcHBpbmcgdG8gemVybyBpbiBgcmVnX25vdF9udWxsKClgLlxcbjIuIEhhbmRsaW5nIDMyLWJpdCBwb2ludGVyLXZzLXNjYWxhciBjb21wYXJpc29ucyBpbiBgaXNfYnJhbmNoX3Rha2VuKClgLlxcbjMuIEVuc3VyaW5nIGxpbmtlZCByZWdpc3RlcnMgYXJlIGNvbGxlY3RlZCBiZWZvcmUgc2F2aW5nIHJlZ2lzdGVycyBpbiBgY2hlY2tfY29uZF9qbXBfb3AoKWAuXFxuNC4gTWFya2luZyBwcmVjaXNpb24gb24gYHNyY19yZWdgIHdoZW4gY2hlY2tpbmcgbnVsbG5lc3MgaW4gYGNoZWNrX2NvbmRfam1wX29wKClgLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nLCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGUgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCAoc3VjaCBhcyBgc3RydWN0IGxpbmtlZF9yZWdzYCkgYXJlIGluaXRpYWxpemVkIHByb3Blcmx5IChlLmcuLCB6ZXJvLWluaXRpYWxpemVkIG9uIGRlY2xhcmF0aW9uKSwgYW5kIHRoZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgdmVyaWZpZXIgaW50ZXJuYWwgY29udHJvbC1mbG93IGFuZCByZWdpc3RlciBzdGF0ZSBsb2dpYy4gQW55IHBvdGVudGlhbCBtaXNiZWhhdmlvciBwcmV2ZW50ZWQgYnkgdGhlc2UgZml4ZXMgcmVsYXRlcyB0byBCUEYgdmVyaWZpY2F0aW9uIHNvdW5kbmVzcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBkZXJlZmVyZW5jZXMpLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgbG9naWMgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gZml4IHNvdW5kbmVzcyBpc3N1ZXMgcmVnYXJkaW5nIHJlZ2lzdGVyIHRyYWNraW5nLCBzcGVjaWZpY2FsbHk6XFxuMS4gSGFuZGxpbmcgb2Zmc2V0IHdyYXBwaW5nIHRvIHplcm8gaW4gYHJlZ19ub3RfbnVsbCgpYC5cXG4yLiBIYW5kbGluZyAzMi1iaXQgcG9pbnRlci12cy1zY2FsYXIgY29tcGFyaXNvbnMgaW4gYGlzX2JyYW5jaF90YWtlbigpYC5cXG4zLiBFbnN1cmluZyBsaW5rZWQgcmVnaXN0ZXJzIGFyZSBjb2xsZWN0ZWQgYmVmb3JlIHNhdmluZyByZWdpc3RlcnMgaW4gYGNoZWNrX2NvbmRfam1wX29wKClgLlxcbjQuIE1hcmtpbmcgcHJlY2lzaW9uIG9uIGBzcmNfcmVnYCB3aGVuIGNoZWNraW5nIG51bGxuZXNzIGluIGBjaGVja19jb25kX2ptcF9vcCgpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZywgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlIHN0cnVjdHVyZXMgbWFuaXB1bGF0ZWQgKHN1Y2ggYXMgYHN0cnVjdCBsaW5rZWRfcmVnc2ApIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseSAoZS5nLiwgemVyby1pbml0aWFsaXplZCBvbiBkZWNsYXJhdGlvbiksIGFuZCB0aGUgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IHZlcmlmaWVyIGludGVybmFsIGNvbnRyb2wtZmxvdyBhbmQgcmVnaXN0ZXIgc3RhdGUgbG9naWMuIEFueSBwb3RlbnRpYWwgbWlzYmVoYXZpb3IgcHJldmVudGVkIGJ5IHRoZXNlIGZpeGVzIHJlbGF0ZXMgdG8gQlBGIHZlcmlmaWNhdGlvbiBzb3VuZG5lc3MgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgZGVyZWZlcmVuY2VzKSwgd2hpY2ggaXMgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lcsf[1] Phase: Succeeded StartedAt: 2026-09-05 17:38:56 +0000 UTC FinishedAt: 2026-09-05 17:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 17:38:56 +0000 UTC FinishedAt: 2026-09-05 17:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2] Phase: Succeeded StartedAt: 2026-09-05 17:38:56 +0000 UTC FinishedAt: 2026-09-05 21:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 17:38:56 +0000 UTC FinishedAt: 2026-09-05 21:19:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 17:38:56 +0000 UTC FinishedAt: 2026-09-05 17:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 17:38:56 +0000 UTC FinishedAt: 2026-09-05 17:39:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow9lcsf/series-workflow9lcsf-convert-artifact-508291265/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 17:39:27 +0000 UTC FinishedAt: 2026-09-05 17:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 17:39:27 +0000 UTC FinishedAt: 2026-09-05 17:57:21 +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:*bc500424-19a9-45a9-8ac0-1970f95a2b4e,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-workflow9lcsf/series-workflow9lcsf-convert-artifact-508291265/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": "62548ecf-fd65-4c59-bc36-beed821711b4", "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-workflow9lcsf/series-workflow9lcsf-build-action-3629715183/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 17:39:27 +0000 UTC FinishedAt: 2026-09-05 17:57:11 +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:*bc500424-19a9-45a9-8ac0-1970f95a2b4e,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-workflow9lcsf/series-workflow9lcsf-convert-artifact-508291265/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": "62548ecf-fd65-4c59-bc36-beed821711b4", "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-workflow9lcsf/series-workflow9lcsf-build-action-3629715183/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 17:57:21 +0000 UTC FinishedAt: 2026-09-05 17:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 17:57:21 +0000 UTC FinishedAt: 2026-09-05 17:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 17:57:21 +0000 UTC FinishedAt: 2026-09-05 17:57:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 17:57:21 +0000 UTC FinishedAt: 2026-09-05 17:57:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow9lcsf/series-workflow9lcsf-convert-artifact-3558167956/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 17:57:31 +0000 UTC FinishedAt: 2026-09-05 17:59:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 17:57:31 +0000 UTC FinishedAt: 2026-09-05 17:59:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*62548ecf-fd65-4c59-bc36-beed821711b4,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-workflow9lcsf/series-workflow9lcsf-build-action-3629715183/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-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 17:59:33 +0000 UTC FinishedAt: 2026-09-05 17:59:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 17:59:33 +0000 UTC FinishedAt: 2026-09-05 17:59:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 17:59:33 +0000 UTC FinishedAt: 2026-09-05 18:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 17:59:33 +0000 UTC FinishedAt: 2026-09-05 18:15:46 +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:*bc500424-19a9-45a9-8ac0-1970f95a2b4e,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-workflow9lcsf/series-workflow9lcsf-convert-artifact-3558167956/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": "2c588662-bdd5-4c08-99a1-e83958c12289", "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-workflow9lcsf/series-workflow9lcsf-build-action-1230880352/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 17:59:33 +0000 UTC FinishedAt: 2026-09-05 18:15:36 +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:*bc500424-19a9-45a9-8ac0-1970f95a2b4e,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-workflow9lcsf/series-workflow9lcsf-convert-artifact-3558167956/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": "2c588662-bdd5-4c08-99a1-e83958c12289", "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-workflow9lcsf/series-workflow9lcsf-build-action-1230880352/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 18:15:46 +0000 UTC FinishedAt: 2026-09-05 18:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 18:15:46 +0000 UTC FinishedAt: 2026-09-05 18:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 18:15:46 +0000 UTC FinishedAt: 2026-09-05 18:17:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 18:15:46 +0000 UTC FinishedAt: 2026-09-05 18:17:11 +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:*2c588662-bdd5-4c08-99a1-e83958c12289,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-workflow9lcsf/series-workflow9lcsf-build-action-1230880352/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-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 18:17:21 +0000 UTC FinishedAt: 2026-09-05 21:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 18:17:21 +0000 UTC FinishedAt: 2026-09-05 21:19:41 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*62548ecf-fd65-4c59-bc36-beed821711b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2c588662-bdd5-4c08-99a1-e83958c12289,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-workflow9lcsf/series-workflow9lcsf-build-action-3629715183/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-workflow9lcsf/series-workflow9lcsf-build-action-1230880352/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 18:17:21 +0000 UTC FinishedAt: 2026-09-05 18:17:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 18:17:21 +0000 UTC FinishedAt: 2026-09-05 18:17:26 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9lcsf/series-workflow9lcsf-convert-artifact-3527837373/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 18:17:21 +0000 UTC FinishedAt: 2026-09-05 18:17:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 18:17:21 +0000 UTC FinishedAt: 2026-09-05 18:17:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 18:17:21 +0000 UTC FinishedAt: 2026-09-05 18:17:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 18:17:31 +0000 UTC FinishedAt: 2026-09-05 21:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9lcsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["check_cond_jmp_op","is_branch_taken","reg_not_null","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7ac9662189069914a088ec61ad85dc46b5cb1563","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"858384af-3a30-448a-81a0-29fc0e390bbd","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 18:17:31 +0000 UTC FinishedAt: 2026-09-05 21:19:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*62548ecf-fd65-4c59-bc36-beed821711b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2c588662-bdd5-4c08-99a1-e83958c12289,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-workflow9lcsf/series-workflow9lcsf-build-action-3629715183/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-workflow9lcsf/series-workflow9lcsf-build-action-1230880352/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-workflow9lcsf/series-workflow9lcsf-convert-artifact-3527837373/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,}