Name: series-workflowmbhgq Phase: Succeeded StartedAt: 2026-06-20 15:16:03 +0000 UTC FinishedAt: 2026-06-20 19:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[0] Phase: Succeeded StartedAt: 2026-06-20 15:16:03 +0000 UTC FinishedAt: 2026-06-20 15:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[0].run-triage Phase: Succeeded StartedAt: 2026-06-20 15:16:03 +0000 UTC FinishedAt: 2026-06-20 15:26:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "a381355c-2cdc-49f0-b397-5f9262bc9ede" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_kfunc_args", "check_func_arg_reg_off" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfYXJncyYjMzQ7LAogICAgJiMzNDtjaGVja19mdW5jX2FyZ19yZWdfb2ZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIgd2hlcmUgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgaGF2aW5nIGEgbm9uLXplcm8gZml4ZWQgb2Zmc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiB0eXBlIGZsYWcgYFBUUl9aRVJPX09GRmAgYW5kIGVuZm9yY2VzIGl0IGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIxMmQ1N2RhODM0YzhjODQzYzk1NzFmYzJkNmM0ZmFmZjVjYTkwOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1biAyMCAxNToyNDowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzcxOWY2NTI4NDQ1NjAuLmI5YjdkMTljYjgxN2I1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTg1OSw2ICYjNDM7ODU5LDkgQEAgZW51bSBicGZfdHlwZV9mbGFnIHtcbiBcdC8qIERZTlBUUiBwb2ludHMgdG8gZmlsZSAqL1xuIFx0RFlOUFRSX1RZUEVfRklMRVx0PSBCSVQoMjAgJiM0MzsgQlBGX0JBU0VfVFlQRV9CSVRTKSxcbiBcbiYjNDM7XHQvKiBQVFIgYXJndW1lbnQgY2Fubm90IGhhdmUgYSBmaXhlZCBvZmZzZXQuICovXG4mIzQzO1x0UFRSX1pFUk9fT0ZGXHRcdD0gQklUKDIxICYjNDM7IEJQRl9CQVNFX1RZUEVfQklUUyksXG4mIzQzO1xuIFx0X19CUEZfVFlQRV9GTEFHX01BWCxcbiBcdF9fQlBGX1RZUEVfTEFTVF9GTEFHXHQ9IF9fQlBGX1RZUEVfRkxBR19NQVggLSAxLFxuIH07XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAyYWJjNzlkYmYyODFjMi4uYjQxYWVlOGM2MzBjMjQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTc5OTQsOCAmIzQzOzc5OTQsMTEgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4gXHRcdFx0XHQgIGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlKVxuIHtcbiYjNDM7XHRib29sIGZpeGVkX29mZl9vayA9ICEoYXJnX3R5cGUgXHUwMDI2IFBUUl9aRVJPX09GRik7XG4gXHR1MzIgdHlwZSA9IHJlZy1cdTAwM2V0eXBlO1xuIFxuJiM0MztcdGFyZ190eXBlIFx1MDAyNj0gflBUUl9aRVJPX09GRjtcbiYjNDM7XG4gXHQvKiBXaGVuIHJlZmVyZW5jZWQgcmVnaXN0ZXIgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sIGl0cyBmaXhlZFxuIFx0ICogb2Zmc2V0IG11c3QgYmUgMC5cbiBcdCAqXG5AQCAtODA0OCwxMyAmIzQzOzgwNTEsMTIgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRjYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBOT05fT1dOX1JFRjpcbiBcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IE5PTl9PV05fUkVGIHwgTUVNX1JDVTpcbiBcdFx0LyogV2hlbiByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sXG4tXHRcdCAqIGl0cyBmaXhlZCBvZmZzZXQgbXVzdCBiZSAwLiBJbiB0aGUgb3RoZXIgY2FzZXMsIGZpeGVkIG9mZnNldFxuLVx0XHQgKiBjYW4gYmUgbm9uLXplcm8uIFRoaXMgd2FzIGFscmVhZHkgY2hlY2tlZCBhYm92ZS4gU28gcGFzc1xuLVx0XHQgKiBmaXhlZF9vZmZfb2sgYXMgdHJ1ZSB0byBhbGxvdyBmaXhlZCBvZmZzZXQgZm9yIGFsbCBvdGhlclxuLVx0XHQgKiBjYXNlcy4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELCBoZW5jZSB3ZVxuLVx0XHQgKiBzdGlsbCBuZWVkIHRvIGRvIGNoZWNrcyBpbnN0ZWFkIG9mIHJldHVybmluZy5cbiYjNDM7XHRcdCAqIG9yIHdoZW4gdGhlIGFyZ3VtZW50IHR5cGUgcmVxdWlyZXMgemVybyBmaXhlZCBvZmZzZXQsIGl0c1xuJiM0MztcdFx0ICogZml4ZWQgb2Zmc2V0IG11c3QgYmUgMC4gSW4gdGhlIG90aGVyIGNhc2VzLCBmaXhlZCBvZmZzZXQgY2FuXG4mIzQzO1x0XHQgKiBiZSBub24temVyby4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELFxuJiM0MztcdFx0ICogaGVuY2Ugd2Ugc3RpbGwgbmVlZCB0byBkbyBjaGVja3MgaW5zdGVhZCBvZiByZXR1cm5pbmcuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gX19jaGVja19wdHJfb2ZmX3JlZyhlbnYsIHJlZywgYXJnbm8sIHRydWUpO1xuJiM0MztcdFx0cmV0dXJuIF9fY2hlY2tfcHRyX29mZl9yZWcoZW52LCByZWcsIGFyZ25vLCBmaXhlZF9vZmZfb2spO1xuIFx0Y2FzZSBQVFJfVE9fQ1RYOlxuIFx0XHQvKlxuIFx0XHQgKiBBbGxvdyBmaXhlZCBhbmQgdmFyaWFibGUgb2Zmc2V0cyBmb3Igc3lzY2FsbCBjb250ZXh0LCBidXRcbkBAIC0xMjExNCw3ICYjNDM7MTIxMTYsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RJTUVSOlxuQEAgLTEyMTI4LDYgJiM0MzsxMjEyOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfXG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DVFg6XG4gXHRcdFx0YXJnX3R5cGUgPSBBUkdfUFRSX1RPX0NUWDtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XG4mIzQzO1x0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkY7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O3Vua25vd24ga2Z1bmMgYXJnIHR5cGUgJWRcJiMzNDssIGtmX2FyZ190eXBlKTtcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5pbmRleCA3MjQ3YTIwYzBhM2JmNS4uNWVjMzkyZTcyNzBmOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC0xMywxMiAmIzQzOzEzLDIyIEBAIHN0cnVjdCBub2RlX2FjcXVpcmUge1xuIFx0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHtcbiYjNDM7XHRsb25nIGtleTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JiX25vZGUgcmI7XG4mIzQzO1x0c3RydWN0IGJwZl9saXN0X25vZGUgbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XG4gXG4gI2RlZmluZSBwcml2YXRlKG5hbWUpIFNFQyhcJiMzNDsuZGF0YS5cJiMzNDsgI25hbWUpIF9faGlkZGVuIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKVxuIHByaXZhdGUoQSkgc3RydWN0IGJwZl9zcGluX2xvY2sgZ2xvY2s7XG4gcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xuJiM0Mztwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XG4mIzQzO3ByaXZhdGUoQikgc3RydWN0IGJwZl9yYl9yb290IHJvb3QgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIHJiKTtcbiYjNDM7cHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTtcbiBcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuIHtcbkBAIC0zMSw2ICYjNDM7NDEsMTcgQEAgc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcbiBcdHJldHVybiBub2RlX2EtXHUwMDNla2V5IFx1MDAzYyBub2RlX2ItXHUwMDNla2V5O1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgbGVzc19yZWZjb3VudGVkKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZV9hO1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgKm5vZGVfYjtcbiYjNDM7XG4mIzQzO1x0bm9kZV9hID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQsIHJiKTtcbiYjNDM7XHRub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgcmIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbm9kZV9hLVx1MDAzZWtleSBcdTAwM2Mgbm9kZV9iLVx1MDAzZWtleTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD00IGFsbG9jX2luc249e3tbMC05XSYjNDM7fX1cJiMzNDspXG4gbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzKHZvaWQgKmN0eClcbkBAIC05Myw2ICYjNDM7MTE0LDYyIEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgcHRyX25vZGVfcmVmY291bnRlZCBwdHIgUjFcJiMzNDspXG4mIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9saXN0X25vZGVfb2Zmc2V0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgKm5vZGUsICpiYXNlLCAqcmVmO1xuJiM0MztcdHN0cnVjdCBicGZfbGlzdF9ub2RlICpsaXN0X25vZGU7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBicGZfb2JqX25ldyh0eXBlb2YoKm5vZGUpKTtcbiYjNDM7XHRpZiAoIW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3NwaW5fbG9jayhcdTAwMjZsb2NrKTtcbiYjNDM7XHRicGZfbGlzdF9wdXNoX2Zyb250KFx1MDAyNmhlYWQsIFx1MDAyNm5vZGUtXHUwMDNlbGlzdCk7XG4mIzQzO1x0bGlzdF9ub2RlID0gYnBmX2xpc3RfcG9wX2Zyb250KFx1MDAyNmhlYWQpO1xuJiM0MztcdGJwZl9zcGluX3VubG9jayhcdTAwMjZsb2NrKTtcbiYjNDM7XHRpZiAoIWxpc3Rfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcbiYjNDM7XHRiYXNlID0gY29udGFpbmVyX29mKGxpc3Rfbm9kZSwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XG4mIzQzO1x0cmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobGlzdF9ub2RlKTtcbiYjNDM7XHRpZiAocmVmKVxuJiM0MztcdFx0YnBmX29ial9kcm9wKHJlZik7XG4mIzQzO1x0YnBmX29ial9kcm9wKGJhc2UpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgcHRyX25vZGVfcmVmY291bnRlZCBwdHIgUjFcJiMzNDspXG4mIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9yYnRyZWVfbm9kZV9vZmZzZXQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZSwgKmJhc2UsICpyZWY7XG4mIzQzO1x0c3RydWN0IGJwZl9yYl9ub2RlICpyYl9ub2RlO1xuJiM0MztcbiYjNDM7XHRub2RlID0gYnBmX29ial9uZXcodHlwZW9mKCpub2RlKSk7XG4mIzQzO1x0aWYgKCFub2RlKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdG5vZGUtXHUwMDNla2V5ID0gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3NwaW5fbG9jayhcdTAwMjZsb2NrKTtcbiYjNDM7XHRicGZfcmJ0cmVlX2FkZChcdTAwMjZyb290LCBcdTAwMjZub2RlLVx1MDAzZXJiLCBsZXNzX3JlZmNvdW50ZWQpO1xuJiM0MztcdHJiX25vZGUgPSBicGZfcmJ0cmVlX2ZpcnN0KFx1MDAyNnJvb3QpO1xuJiM0MztcdGlmIChyYl9ub2RlKVxuJiM0MztcdFx0cmJfbm9kZSA9IGJwZl9yYnRyZWVfcmVtb3ZlKFx1MDAyNnJvb3QsIHJiX25vZGUpO1xuJiM0MztcdGJwZl9zcGluX3VubG9jayhcdTAwMjZsb2NrKTtcbiYjNDM7XHRpZiAoIXJiX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XG4mIzQzO1x0YmFzZSA9IGNvbnRhaW5lcl9vZihyYl9ub2RlLCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkLCByYik7XG4mIzQzO1x0cmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUocmJfbm9kZSk7XG4mIzQzO1x0aWYgKHJlZilcbiYjNDM7XHRcdGJwZl9vYmpfZHJvcChyZWYpO1xuJiM0MztcdGJwZl9vYmpfZHJvcChiYXNlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7P2ZlbnRyeS5zL1wmIzM0OyBTWVNfUFJFRklYIFwmIzM0O3N5c19nZXRwZ2lkXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtmdW5jdGlvbiBjYWxscyBhcmUgbm90IGFsbG93ZWQgd2hpbGUgaG9sZGluZyBhIGxvY2tcJiMzNDspXG4gaW50IEJQRl9QUk9HKHJidHJlZV9mYWlsX3NsZWVwYWJsZV9sb2NrX2Fjcm9zc19yY3UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfYXJnX3JlZ19vZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB3aGVyZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciBoYXZpbmcgYSBub24temVybyBmaXhlZCBvZmZzZXQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgQlBGIHR5cGUgZmxhZyBgUFRSX1pFUk9fT0ZGYCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMTJkNTdkYTgzNGM4Yzg0M2M5NTcxZmMyZDZjNGZhZmY1Y2E5MDhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdW4gMjAgMTU6MjQ6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCA3NzE5ZjY1Mjg0NDU2MC4uYjliN2QxOWNiODE3YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaApAQCAtODU5LDYgJiM0Mzs4NTksOSBAQCBlbnVtIGJwZl90eXBlX2ZsYWcgewogCS8qIERZTlBUUiBwb2ludHMgdG8gZmlsZSAqLwogCURZTlBUUl9UWVBFX0ZJTEUJPSBCSVQoMjAgJiM0MzsgQlBGX0JBU0VfVFlQRV9CSVRTKSwKIAomIzQzOwkvKiBQVFIgYXJndW1lbnQgY2Fubm90IGhhdmUgYSBmaXhlZCBvZmZzZXQuICovCiYjNDM7CVBUUl9aRVJPX09GRgkJPSBCSVQoMjEgJiM0MzsgQlBGX0JBU0VfVFlQRV9CSVRTKSwKJiM0MzsKIAlfX0JQRl9UWVBFX0ZMQUdfTUFYLAogCV9fQlBGX1RZUEVfTEFTVF9GTEFHCT0gX19CUEZfVFlQRV9GTEFHX01BWCAtIDEsCiB9OwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDJhYmM3OWRiZjI4MWMyLi5iNDFhZWU4YzYzMGMyNCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNzk5NCw4ICYjNDM7Nzk5NCwxMSBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sCiAJCQkJICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSkKIHsKJiM0MzsJYm9vbCBmaXhlZF9vZmZfb2sgPSAhKGFyZ190eXBlICZhbXA7IFBUUl9aRVJPX09GRik7CiAJdTMyIHR5cGUgPSByZWctJmd0O3R5cGU7CiAKJiM0MzsJYXJnX3R5cGUgJmFtcDs9IH5QVFJfWkVST19PRkY7CiYjNDM7CiAJLyogV2hlbiByZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIHBhc3NlZCB0byByZWxlYXNlIGZ1bmN0aW9uLCBpdHMgZml4ZWQKIAkgKiBvZmZzZXQgbXVzdCBiZSAwLgogCSAqCkBAIC04MDQ4LDEzICYjNDM7ODA1MSwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAljYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBOT05fT1dOX1JFRjoKIAljYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBOT05fT1dOX1JFRiB8IE1FTV9SQ1U6CiAJCS8qIFdoZW4gcmVmZXJlbmNlZCBQVFJfVE9fQlRGX0lEIGlzIHBhc3NlZCB0byByZWxlYXNlIGZ1bmN0aW9uLAotCQkgKiBpdHMgZml4ZWQgb2Zmc2V0IG11c3QgYmUgMC4gSW4gdGhlIG90aGVyIGNhc2VzLCBmaXhlZCBvZmZzZXQKLQkJICogY2FuIGJlIG5vbi16ZXJvLiBUaGlzIHdhcyBhbHJlYWR5IGNoZWNrZWQgYWJvdmUuIFNvIHBhc3MKLQkJICogZml4ZWRfb2ZmX29rIGFzIHRydWUgdG8gYWxsb3cgZml4ZWQgb2Zmc2V0IGZvciBhbGwgb3RoZXIKLQkJICogY2FzZXMuIHZhcl9vZmYgYWx3YXlzIG11c3QgYmUgMCBmb3IgUFRSX1RPX0JURl9JRCwgaGVuY2Ugd2UKLQkJICogc3RpbGwgbmVlZCB0byBkbyBjaGVja3MgaW5zdGVhZCBvZiByZXR1cm5pbmcuCiYjNDM7CQkgKiBvciB3aGVuIHRoZSBhcmd1bWVudCB0eXBlIHJlcXVpcmVzIHplcm8gZml4ZWQgb2Zmc2V0LCBpdHMKJiM0MzsJCSAqIGZpeGVkIG9mZnNldCBtdXN0IGJlIDAuIEluIHRoZSBvdGhlciBjYXNlcywgZml4ZWQgb2Zmc2V0IGNhbgomIzQzOwkJICogYmUgbm9uLXplcm8uIHZhcl9vZmYgYWx3YXlzIG11c3QgYmUgMCBmb3IgUFRSX1RPX0JURl9JRCwKJiM0MzsJCSAqIGhlbmNlIHdlIHN0aWxsIG5lZWQgdG8gZG8gY2hlY2tzIGluc3RlYWQgb2YgcmV0dXJuaW5nLgogCQkgKi8KLQkJcmV0dXJuIF9fY2hlY2tfcHRyX29mZl9yZWcoZW52LCByZWcsIGFyZ25vLCB0cnVlKTsKJiM0MzsJCXJldHVybiBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgZml4ZWRfb2ZmX29rKTsKIAljYXNlIFBUUl9UT19DVFg6CiAJCS8qCiAJCSAqIEFsbG93IGZpeGVkIGFuZCB2YXJpYWJsZSBvZmZzZXRzIGZvciBzeXNjYWxsIGNvbnRleHQsIGJ1dApAQCAtMTIxMTQsNyAmIzQzOzEyMTE2LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF8KIAkJY2FzZSBLRl9BUkdfUFRSX1RPX01FTToKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX01FTV9TSVpFOgogCQljYXNlIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s6Ci0JCWNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19USU1FUjoKQEAgLTEyMTI4LDYgJiM0MzsxMjEyOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfCiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19DVFg6CiAJCQlhcmdfdHlwZSA9IEFSR19QVFJfVE9fQ1RYOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOgomIzQzOwkJCWFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkY7CiYjNDM7CQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl2ZXJpZmllcl9idWcoZW52LCAmIzM0O3Vua25vd24ga2Z1bmMgYXJnIHR5cGUgJWQmIzM0Oywga2ZfYXJnX3R5cGUpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCmluZGV4IDcyNDdhMjBjMGEzYmY1Li41ZWMzOTJlNzI3MGY5MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKQEAgLTEzLDEyICYjNDM7MTMsMjIgQEAgc3RydWN0IG5vZGVfYWNxdWlyZSB7CiAJc3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDsKIH07CiAKJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHsKJiM0MzsJbG9uZyBrZXk7CiYjNDM7CXN0cnVjdCBicGZfcmJfbm9kZSByYjsKJiM0MzsJc3RydWN0IGJwZl9saXN0X25vZGUgbGlzdDsKJiM0MzsJc3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDsKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiAKICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoJiMzNDsuZGF0YS4mIzM0OyAjbmFtZSkgX19oaWRkZW4gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCiBwcml2YXRlKEEpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGdsb2NrOwogcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpOwomIzQzO3ByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jazsKJiM0Mztwcml2YXRlKEIpIHN0cnVjdCBicGZfcmJfcm9vdCByb290IF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCByYik7CiYjNDM7cHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTsKIAogc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikKIHsKQEAgLTMxLDYgJiM0Mzs0MSwxNyBAQCBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKQogCXJldHVybiBub2RlX2EtJmd0O2tleSAmbHQ7IG5vZGVfYi0mZ3Q7a2V5OwogfQogCiYjNDM7c3RhdGljIGJvb2wgbGVzc19yZWZjb3VudGVkKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKQomIzQzO3sKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZV9hOwomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkICpub2RlX2I7CiYjNDM7CiYjNDM7CW5vZGVfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkLCByYik7CiYjNDM7CW5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkLCByYik7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlX2EtJmd0O2tleSAmbHQ7IG5vZGVfYi0mZ3Q7a2V5OwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oz90YyYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9NCBhbGxvY19pbnNuPXt7WzAtOV0mIzQzO319JiMzNDspCiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXModm9pZCAqY3R4KQpAQCAtOTMsNiAmIzQzOzExNCw2MiBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RlcmVmZXJlbmNlIG9mIG1vZGlmaWVkIHB0cl9ub2RlX3JlZmNvdW50ZWQgcHRyIFIxJiMzNDspCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX2xpc3Rfbm9kZV9vZmZzZXQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZSwgKmJhc2UsICpyZWY7CiYjNDM7CXN0cnVjdCBicGZfbGlzdF9ub2RlICpsaXN0X25vZGU7CiYjNDM7CiYjNDM7CW5vZGUgPSBicGZfb2JqX25ldyh0eXBlb2YoKm5vZGUpKTsKJiM0MzsJaWYgKCFub2RlKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9zcGluX2xvY2soJmFtcDtsb2NrKTsKJiM0MzsJYnBmX2xpc3RfcHVzaF9mcm9udCgmYW1wO2hlYWQsICZhbXA7bm9kZS0mZ3Q7bGlzdCk7CiYjNDM7CWxpc3Rfbm9kZSA9IGJwZl9saXN0X3BvcF9mcm9udCgmYW1wO2hlYWQpOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtsb2NrKTsKJiM0MzsJaWYgKCFsaXN0X25vZGUpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJYmFzZSA9IGNvbnRhaW5lcl9vZihsaXN0X25vZGUsIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQsIGxpc3QpOwomIzQzOwlyZWYgPSBicGZfcmVmY291bnRfYWNxdWlyZShsaXN0X25vZGUpOwomIzQzOwlpZiAocmVmKQomIzQzOwkJYnBmX29ial9kcm9wKHJlZik7CiYjNDM7CWJwZl9vYmpfZHJvcChiYXNlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RlcmVmZXJlbmNlIG9mIG1vZGlmaWVkIHB0cl9ub2RlX3JlZmNvdW50ZWQgcHRyIFIxJiMzNDspCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JidHJlZV9ub2RlX29mZnNldCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkICpub2RlLCAqYmFzZSwgKnJlZjsKJiM0MzsJc3RydWN0IGJwZl9yYl9ub2RlICpyYl9ub2RlOwomIzQzOwomIzQzOwlub2RlID0gYnBmX29ial9uZXcodHlwZW9mKCpub2RlKSk7CiYjNDM7CWlmICghbm9kZSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlub2RlLSZndDtrZXkgPSAxOwomIzQzOwomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7bG9jayk7CiYjNDM7CWJwZl9yYnRyZWVfYWRkKCZhbXA7cm9vdCwgJmFtcDtub2RlLSZndDtyYiwgbGVzc19yZWZjb3VudGVkKTsKJiM0MzsJcmJfbm9kZSA9IGJwZl9yYnRyZWVfZmlyc3QoJmFtcDtyb290KTsKJiM0MzsJaWYgKHJiX25vZGUpCiYjNDM7CQlyYl9ub2RlID0gYnBmX3JidHJlZV9yZW1vdmUoJmFtcDtyb290LCByYl9ub2RlKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7bG9jayk7CiYjNDM7CWlmICghcmJfbm9kZSkKJiM0MzsJCXJldHVybiAyOwomIzQzOwomIzQzOwliYXNlID0gY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQsIHJiKTsKJiM0MzsJcmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUocmJfbm9kZSk7CiYjNDM7CWlmIChyZWYpCiYjNDM7CQlicGZfb2JqX2Ryb3AocmVmKTsKJiM0MzsJYnBmX29ial9kcm9wKGJhc2UpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/ZmVudHJ5LnMvJiMzNDsgU1lTX1BSRUZJWCAmIzM0O3N5c19nZXRwZ2lkJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtmdW5jdGlvbiBjYWxscyBhcmUgbm90IGFsbG93ZWQgd2hpbGUgaG9sZGluZyBhIGxvY2smIzM0OykKIGludCBCUEZfUFJPRyhyYnRyZWVfZmFpbF9zbGVlcGFibGVfbG9ja19hY3Jvc3NfcmN1LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTM3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBCUEYgY29kZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L2JwZi5oYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IGZsYWcsIGBQVFJfWkVST19PRkZgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAsIHdoZXJlIHRoZXkmIzM5O3JlIHRyeWluZyB0byB0aWdodGVuIHVwIGhvdyB3ZSBoYW5kbGUgcG9pbnRlciBhcmd1bWVudHMsIG1ha2luZyBzdXJlIGNlcnRhaW4gb25lcyAqY2FuJiMzOTt0KiBoYXZlIGZpeGVkIG9mZnNldHMuIFNtYXJ0LgoKUmlnaHQsIHNvIHRoZXkmIzM5O3JlIG1vZGlmeWluZyBgY2hlY2tfa2Z1bmNfYXJnc2AgdG8gYmUgbW9yZSBzcGVjaWZpYyB3aXRoIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuIFByZXZpb3VzbHksIGl0IHNlZW1zIGxpa2Ugd2Ugd2VyZSBraW5kIG9mIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2ljLCBvciBhdCBsZWFzdCBmYWxsaW5nIHRocm91Z2ggdG8gaXQsIGFuZCB0aGF0IHdhc24mIzM5O3QgZ2l2aW5nIHVzIHRoZSBsZXZlbCBvZiBwcmVjaXNpb24gd2UgbmVlZCBmb3IgdGhpcyB0eXBlLiBIYW5nIG9uLCB3YXNuJiMzOTt0IGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgZ3JvdXBlZCB3aXRoIHRoaW5ncyBsaWtlIGBLRl9BUkdfUFRSX1RPX01FTWA/IE9rYXksIEkgKnRoaW5rKiB0aGUgb2xkIGxvZ2ljIG1pZ2h0IGhhdmUgYmVlbiB0byBmYWxsIHRocm91Z2ggdG8gYGFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSURgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHdpdGggYGNoZWNrX2tmdW5jX2FyZ3NgIGRpcmVjdGx5IGluIHRoZSBzb3VyY2UuCgpPa2F5LCB0aW1lIHRvIHB1bGwgdXAgdGhlIGNyb3NzLXJlZmVyZW5jZSB0b29scy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBjaGVja19rZnVuY19hcmdzYCBpcyBpbXBsZW1lbnRlZCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy4gVGhlIGxvZ2ljIGhlcmUgY291bGQgYmUgY3JpdGljYWwgZm9yIHRoZSBvdmVyYWxsIHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlIEJQRiBydW50aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDk2MD1lbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwOTYyLVx0S0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQsICAgIC8qIEFsbG9jYXRlZCBvYmplY3QgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDk2MzpcdEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSLCAvKiBSZWZjb3VudGVkIGxvY2FsIGtwdHIgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDk2NC1cdEtGX0FSR19QVFJfVE9fRFlOUFRSLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIzOD1nZXRfa2Z1bmNfcHRyX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI3MS1cdGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjcyOlx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzMtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTA4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTMxLVx0XHRcdGJyZWFrO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMTMyOlx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTMzLVx0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkY7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMzkyLVx0XHRcdGJyZWFrO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMzkzOlx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMzk0LVx0XHRcdGlmICghdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cdTAwM2V0eXBlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLRnVuYyBBcmd1bWVudCBUeXBlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGZvY3VzZWQgb24gdGhpcyBkaWZmIGNvbmNlcm5pbmcgYGNoZWNrX2tmdW5jX2FyZ3NgIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIHJlbW92YWwgb2YgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBmcm9tIHRoZSBncm91cCBvZiBhcmd1bWVudCB0eXBlcyBpdCB3YXMgcHJldmlvdXNseSBhc3NvY2lhdGVkIHdpdGg6IGBLRl9BUkdfUFRSX1RPX01FTWAsIGBLRl9BUkdfUFRSX1RPX01FTV9TSVpFYCwgYW5kIGBLRl9BUkdfUFRSX1RPX0NBTExCQUNLYCwgYW5kIHNvIG9uLiBUaGVzZSB3ZXJlIGFsbCBwcmV2aW91c2x5IHNldHRpbmcgYGFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSURgLgoKTm93LCBpdCYjMzk7cyBiZWluZyBoYW5kbGVkIHNlcGFyYXRlbHkuIEluc3RlYWQgb2YgdGhlIHByaW9yIGdyb3VwaW5nLCB0aGUgY29kZSBub3cgZXhwbGljaXRseSBzZXRzIGBhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGYCB3aGVuIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgaXMgZW5jb3VudGVyZWQuIFNvLCB0aGUgcmVmY291bnRlZCBrcHRyIHR5cGUgaXMgZ2V0dGluZyBhIHNwZWNpYWwgZmxhZzogYFBUUl9aRVJPX09GRmAuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHNoaWZ0IGhhcHBlbmVkLiBXaGF0JiMzOTtzIHRoZSBzcGVjaWZpYyBzZW1hbnRpYyBkaWZmZXJlbmNlIG9yIHJlcXVpcmVtZW50IHRoYXQgbmVjZXNzaXRhdGVzIHRoaXMgbmV3IGRpc3RpbmN0IGhhbmRsaW5nIGZvciBgUkVGQ09VTlRFRF9LUFRSYD8gVGhpcyBpcyBjcml0aWNhbC4gVGhlIGltcGxpY2F0aW9uIG9mIGNvbWJpbmluZyBpdCB3aXRoIGBQVFJfWkVST19PRkZgIHN1Z2dlc3RzIHRoYXQgcGVyaGFwcyB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9ucyBvciBudWxsIHBvaW50ZXIgaGFuZGxpbmcgbmVlZHMgdG8gYmUgZGlmZmVyZW50IGluIHRoaXMgc2NlbmFyaW8uIEkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBhIGJldHRlciBwaWN0dXJlLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBCVEYgaGFuZGxpbmcgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nhc2UgS0ZfQVJHX1BUUl9UT19NRU06JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkwOD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjExNS1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JCX05PREU6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIxMTY6XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxMTctXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIzMzYtXHRcdFx0YnJlYWs7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIzMzc6XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIzMzgtXHRcdFx0cmVzb2x2ZV9yZXQgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgcmVmX3QsIFx1MDAyNnR5cGVfc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYXNzdW1pbmcgaXQmIzM5O3MgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYXJvdW5kIGxpbmUgMTIxMTY6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXI6IEEgRm9jdXNlZCBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgQlBGIHZlcmlmaWVyLiBMaW5lIDEyMTE24oCmIHRoYXQmIzM5O3MgZ290IHRvIGJlIGEgY3J1Y2lhbCBzcG90LCByaWdodD8gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgZGVlcGx5IGludm9sdmVkIGluIHRoZSBwcm9ncmFtIGFuYWx5c2lzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoYXQgZXhhY3QgbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmFyb3VuZCogMTIxMTYuIElzIGl0IGEgY29uZGl0aW9uYWwgY2hlY2s/IEEgZGF0YSBzdHJ1Y3R1cmUgYXNzaWdubWVudD8gQSBjYWxsIHRvIGFub3RoZXIgZnVuY3Rpb24/IEFuZCB3aGF0IGlzIHRoZSBnZW5lcmFsIHB1cnBvc2Ugb2YgdGhlIHZlcmlmaWVyIGF0IHRoaXMgcGFydCBvZiB0aGUgY29kZT8KCkJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJJiMzOTttIGxpa2VseSB0byB6ZXJvIGluIG9uIHRoZSBleGFjdCBsb2dpYyBiZWluZyBwZXJmb3JtZWQuIFdoYXQgKnNwZWNpZmljYWxseSogaXMgYmVpbmcgdmFsaWRhdGVkIG9yIGluZmVycmVkIGhlcmU/IElzIGl0IG1lbW9yeSBzYWZldHk/IENvbnRyb2wgZmxvdyBhbmFseXNpcz8gUmVzb3VyY2UgZXhoYXVzdGlvbiBsaW1pdHM/IFRoZSB2ZXJpZmllciYjMzk7cyBqb2IgaXMgdG8gZW5zdXJlIHRoYXQgYSBCUEYgcHJvZ3JhbSBpcyBzYWZlIHRvIHJ1biB3aXRoaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBsaW5lIG11c3QgYmUgZG9pbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsIHRvIHRoYXQgcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgY2x1ZXMuIEFyZSB0aGVyZSBjaGVja3MgZm9yIHBvdGVudGlhbGx5IGludmFsaWQgcG9pbnRlciBhcml0aG1ldGljPyBBcmUgdGhlcmUgcmFuZ2UgY2hlY2tzIG9uIHJlZ2lzdGVyIHZhbHVlcz8gQXJlIHRoZXJlIGNhbGxzIHRvIGhlbHBlciBmdW5jdGlvbnMgdG8gcmV0cmlldmUga2VybmVsIGRhdGE/IEFueSBvZiB0aGVzZSB3b3VsZCBsaWtlbHkgYmUgcmlnaHQgdXAgbXkgYWxsZXkuCgpNeSBpbW1lZGlhdGUgZ29hbCB3aWxsIGJlIHRvIGRldmVsb3AgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93ICp0aGlzKiBzZWN0aW9uIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxpbmsgdGhhdCBvbmUgbGluZSBvZiBjb2RlIHRvIHRoZSByZXN0IG9mIHRoZSBjb2RlIGluIHRoZSB2ZXJpZmllci4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIGtub3cgdGhlIGxhcmdlciBvYmplY3RpdmUgb2YgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgaW5jbHVkZXMgdGhhdCBsaW5lLiBIb3cgaXMgdGhlIGFuYWx5c2lzIGJlaW5nIHBlcmZvcm1lZD8gQXJlIHRoZXJlIGFueSBvcHRpbWl6YXRpb25zIHRoYXQgdGhlIHZlcmlmaWVyIGlzIHBlcmZvcm1pbmc/IFdoYXQgaXMgaXQgYXR0ZW1wdGluZyB0byBpbmZlciBhYm91dCB0aGUgQlBGIHByb2dyYW0sIGFuZCBob3cgZG9lcyBpdCB0cmFuc2xhdGUgaW50byBrZXJuZWwgc2FmZXR5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxMTA6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjEyMTExOlx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOlxuMTIxMTI6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDpcbjEyMTEzOlx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19MSVNUX05PREU6XG4xMjExNDpcdFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkJfUk9PVDpcbjEyMTE1Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxuMTIxMTY6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcbjEyMTE3Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRTpcbjEyMTE4Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbjEyMTE5Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI6XG4xMjEyMDpcdFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fV09SS1FVRVVFOlxuMTIxMjE6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RJTUVSOlxuMTIxMjI6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RBU0tfV09SSzpcbjEyMTIzOlx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19JUlFfRkxBRzpcbjEyMTI0Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLOlxuMTIxMjU6XHRcdFx0XHRicmVhaztcbjEyMTI2Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19EWU5QVFI6XG4xMjEyNzpcdFx0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19EWU5QVFI7XG4xMjEyODpcdFx0XHRcdGJyZWFrO1xuMTIxMjk6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcbjEyMTMwOlx0XHRcdFx0YXJnX3R5cGUgPSBBUkdfUFRSX1RPX0NUWDtcbjEyMTMxOlx0XHRcdFx0YnJlYWs7XG4xMjEzMjpcdFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxuMTIxMzM6XHRcdFx0XHRhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGO1xuMTIxMzQ6XHRcdFx0XHRicmVhaztcbjEyMTM1Olx0XHRcdGRlZmF1bHQ6XG4xMjEzNjpcdFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O3Vua25vd24ga2Z1bmMgYXJnIHR5cGUgJWRcJiMzNDssIGtmX2FyZ190eXBlKTtcbjEyMTM3Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xMjEzODpcdFx0XHR9XG4xMjEzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVidWdnaW5nIGEgVHlwZSBDaGVjayoqCgpPa2F5LCBJJiMzOTttIHRyYWNraW5nIGRvd24gYSBidWcsIGFuZCBJJiMzOTttIGF0IGEgcG9pbnQgd2hlcmUgSSYjMzk7bSBleGFtaW5pbmcgdGhlIHZhbHVlIG9mIGBhcmdfdHlwZWAuIFRoZSBsb2dpYyAqc2hvdWxkKiBiZSBzb3VuZCwgYnV0IGl0JiMzOTtzIG5vdCBiZWhhdmluZyBhcyBleHBlY3RlZC4gV2FpdCBhIHNlY29uZC4uLiBJIG5lZWQgdG8gYmFjayB1cCBhbmQgdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBhcmdfdHlwZWAuIFdoZXJlIHdhcyBpdCBzZXQ/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY3JvbGwgYmFjayBhIGZldyBsaW5lcyBvZiBjb2RlIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBwaW5wb2ludCBleGFjdGx5IGhvdyB0aGlzIHZhcmlhYmxlIHdhcyBmaXJzdCBhc3NpZ25lZCBhIHZhbHVlLiBJIG5lZWQgdGhhdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIGJlaGF2aW5nIHRoaXMgd2F5IG5vdy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcHJlY2lzZSBtb21lbnQgb2YgaW5zdGFudGlhdGlvbiBvciBhc3NpZ25tZW50IHNvIEkgY2FuIGFzc2VzcyB3aGV0aGVyIHRoaXMgbGluZSBoYXMgYmVlbiBvdmVybG9va2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMDkwOlx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIwOTE6XHRcdFx0XHRcdH1cbjEyMDkyOlx0XHRcdFx0fVxuMTIwOTM6XHRcdFx0XHRtZXRhLVx1MDAzZW1hcC5wdHIgPSByZWctXHUwMDNlbWFwX3B0cjtcbjEyMDk0Olx0XHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkID0gcmVnLVx1MDAzZW1hcF91aWQ7XG4xMjA5NTpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuMTIwOTY6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDpcbjEyMDk3Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19CVEZfSUQ6XG4xMjA5ODpcdFx0XHRcdGlmICghaXNfdHJ1c3RlZF9yZWcoZW52LCByZWcpKSB7XG4xMjA5OTpcdFx0XHRcdFx0aWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHtcbjEyMTAwOlx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcblwmIzM0OyxcbjEyMTAxOlx0XHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbjEyMTAyOlx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIxMDM6XHRcdFx0XHRcdH1cbjEyMTA0Olx0XHRcdFx0XHRpZiAoIWlzX3JjdV9yZWcocmVnKSkge1xuMTIxMDU6XHRcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxcblwmIzM0OyxcbjEyMTA2Olx0XHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbjEyMTA3Olx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIxMDg6XHRcdFx0XHRcdH1cbjEyMTA5Olx0XHRcdFx0fVxuMTIxMTA6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjEyMTExOlx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOlxuMTIxMTI6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDpcbjEyMTEzOlx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19MSVNUX05PREU6XG4xMjExNDpcdFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkJfUk9PVDpcbjEyMTE1Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxuMTIxMTY6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcbjEyMTE3Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRTpcbjEyMTE4Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbjEyMTE5Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipUcmFjaW5nIFZhcmlhYmxlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGBhcmdfdHlwZWAgYmVpbmcgdXNlZCwgYnV0IGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBjbGVhciB3aGVyZSBpdCYjMzk7cyBnZXR0aW5nIGl0cyB2YWx1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCBgYXJnX3R5cGVgIGlzIGluaXRpYWxpemVkIHNvbWV3aGVyZSBlbHNlLiYjMzQ7IFRoaXMgc3VnZ2VzdHMgdGhhdCBJIG5lZWQgdG8gZm9sbG93IHRoZSB2YXJpYWJsZSYjMzk7cyBsaWZlY3ljbGUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgdG8gZmluZCB3aGVyZSBgYXJnX3R5cGVgIGlzIGFjdHVhbGx5IGFzc2lnbmVkIGEgdmFsdWUuIEkmIzM5O20gZXNzZW50aWFsbHkgaHVudGluZyBmb3IgdGhlIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQgdGhhdCBnaXZlcyBpdCBpdHMgaW5pdGlhbCBzdGF0ZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGluaXRpYWxpemF0aW9uIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIwNzA6XHRcdFx0XHRcdCAqIGlmIChpbm5lcl9tYXAxIFx1MDAyNlx1MDAyNiBpbm5lcl9tYXAyKSB7XG4xMjA3MTpcdFx0XHRcdFx0ICogICAgIHdxID0gYnBmX21hcF9sb29rdXBfZWxlbShpbm5lcl9tYXAxKTtcbjEyMDcyOlx0XHRcdFx0XHQgKiAgICAgaWYgKHdxKVxuMTIwNzM6XHRcdFx0XHRcdCAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWRcbjEyMDc0Olx0XHRcdFx0XHQgKiAgICAgICAgIGJwZl93cV9pbml0KHdxLCBpbm5lcl9tYXAyKTtcbjEyMDc1Olx0XHRcdFx0XHQgKiB9XG4xMjA3NjpcdFx0XHRcdFx0ICpcbjEyMDc3Olx0XHRcdFx0XHQgKiBDb21wYXJpbmcgbWFwX3B0ciBpcyBlbm91Z2ggdG8gZGlzdGluZ3Vpc2ggbm9ybWFsIGFuZCBvdXRlciBtYXBzLlxuMTIwNzg6XHRcdFx0XHRcdCAqL1xuMTIwNzk6XHRcdFx0XHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIgIT0gcmVnLVx1MDAzZW1hcF9wdHIgfHxcbjEyMDgwOlx0XHRcdFx0XHQgICAgbWV0YS1cdTAwM2VtYXAudWlkICE9IHJlZy1cdTAwM2VtYXBfdWlkKSB7XG4xMjA4MTpcdFx0XHRcdFx0XHRpZiAocmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKSB7XG4xMjA4MjpcdFx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LFxuMTIwODM6XHRcdFx0XHRcdFx0XHRcdFwmIzM0O2JwZl90YXNrX3dvcmsgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkIGRvZXNuJiMzOTt0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcXG5cJiMzNDssXG4xMjA4NDpcdFx0XHRcdFx0XHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkLCByZWctXHUwMDNlbWFwX3VpZCk7XG4xMjA4NTpcdFx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIwODY6XHRcdFx0XHRcdFx0fVxuMTIwODc6XHRcdFx0XHRcdFx0dmVyYm9zZShlbnYsXG4xMjA4ODpcdFx0XHRcdFx0XHRcdFwmIzM0O3dvcmtxdWV1ZSBwb2ludGVyIGluIFIxIG1hcF91aWQ9JWQgZG9lc24mIzM5O3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZFxcblwmIzM0OyxcbjEyMDg5Olx0XHRcdFx0XHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkLCByZWctXHUwMDNlbWFwX3VpZCk7XG4xMjA5MDpcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyMDkxOlx0XHRcdFx0XHR9XG4xMjA5MjpcdFx0XHRcdH1cbjEyMDkzOlx0XHRcdFx0bWV0YS1cdTAwM2VtYXAucHRyID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4xMjA5NDpcdFx0XHRcdG1ldGEtXHUwMDNlbWFwLnVpZCA9IHJlZy1cdTAwM2VtYXBfdWlkO1xuMTIwOTU6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjEyMDk2Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ6XG4xMjA5NzpcdFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQlRGX0lEOlxuMTIwOTg6XHRcdFx0XHRpZiAoIWlzX3RydXN0ZWRfcmVnKGVudiwgcmVnKSkge1xuMTIwOTk6XHRcdFx0XHRcdGlmICghaXNfa2Z1bmNfcmN1KG1ldGEpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRleHQgYW5kIHN5bnRoZXNpemUgaXRzIGNvcmUgaWRlYXMgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duIHRob3VnaHRzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtsbCBhcHByb2FjaCB0aGlzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENvbmNlcHR1YWwgTGFuZHNjYXBlKioKCkFscmlnaHQsIGJlZm9yZSBJIGdldCBpbnRvIHRoZSBzcGVjaWZpYyBjb250ZW50LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXV0aG9yJiMzOTtzIGludGVudC4gTXkgaW5pdGlhbCBpbXB1bHNlIGlzIHRvIGRpc3NlY3QgdGhlIHN0cnVjdHVyZSBhbmQgYXJndW1lbnQuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgYXJlIHRoZSBrZXkgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZT8gQW5kIG1vc3QgaW1wb3J0YW50bHksIHdoZXJlIGlzIHRoaXMgZ29pbmc/IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZvdW5kYXRpb25hbCBwcmluY2lwbGVzLCB0aGUgY2VudHJhbCBjbGFpbXMsIGFuZCBhbnkgaGlkZGVuIGFzc3VtcHRpb25zIG9yIGJpYXNlcyB0aGF0IG5lZWQgdG8gYmUgc3VyZmFjZWQuIEkgd2FudCB0byByZWFkIGJldHdlZW4gdGhlIGxpbmVzIGFzIGEgY3JpdGljYWwgZXhwZXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMDQwOlx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3JlbGVhc2Uga2Z1bmMgJXMgZXhwZWN0cyByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgcGFzc2VkIHRvICVzXFxuXCYjMzQ7LFxuMTIwNDE6XHRcdFx0XHRcdGZ1bmNfbmFtZSwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbjEyMDQyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjA0MzpcdFx0XHR9XG4xMjA0NDpcdFxuMTIwNDU6XHRcdFx0aWYgKHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcbjEyMDQ2Olx0XHRcdFx0dXBkYXRlX3JlZl9vYmooXHUwMDI2bWV0YS1cdTAwM2VyZWZfb2JqLCByZWcpO1xuMTIwNDc6XHRcbjEyMDQ4Olx0XHRcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnJlZl9pZCk7XG4xMjA0OTpcdFx0XHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4xMjA1MDpcdFxuMTIwNTE6XHRcdFx0a2ZfYXJnX3R5cGUgPSBnZXRfa2Z1bmNfcHRyX2FyZ190eXBlKGVudiwgY2FsbGVyLCByZWdzLCBtZXRhLCB0LCByZWZfdCwgcmVmX3RuYW1lLFxuMTIwNTI6XHRcdFx0XHRcdFx0XHQgICAgIGFyZ3MsIGksIG5hcmdzLCBhcmdubywgcmVnKTtcbjEyMDUzOlx0XHRcdGlmIChrZl9hcmdfdHlwZSBcdTAwM2MgMClcbjEyMDU0Olx0XHRcdFx0cmV0dXJuIGtmX2FyZ190eXBlO1xuMTIwNTU6XHRcbjEyMDU2Olx0XHRcdHN3aXRjaCAoa2ZfYXJnX3R5cGUpIHtcbjEyMDU3Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19OVUxMOlxuMTIwNTg6XHRcdFx0XHRjb250aW51ZTtcbjEyMDU5Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6XG4xMjA2MDpcdFx0XHRcdGlmICghcmVnLVx1MDAzZW1hcF9wdHIpIHtcbjEyMDYxOlx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7cG9pbnRlciBpbiAlcyBpc24mIzM5O3QgbWFwIHBvaW50ZXJcXG5cJiMzNDssXG4xMjA2MjpcdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuMTIwNjM6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIwNjQ6XHRcdFx0XHR9XG4xMjA2NTpcdFx0XHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIgXHUwMDI2XHUwMDI2IChyZWctXHUwMDNlbWFwX3B0ci1cdTAwM2VyZWNvcmQtXHUwMDNld3Ffb2ZmIFx1MDAzZT0gMCB8fFxuMTIwNjY6XHRcdFx0XHRcdFx0ICAgICAgcmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKSkge1xuMTIwNjc6XHRcdFx0XHRcdC8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6XG4xMjA2ODpcdFx0XHRcdFx0ICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKVxuMTIwNjk6XHRcdFx0XHRcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGF0IEFyZ3VtZW50IFR5cGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgYXJnX3R5cGVgIGlzIGJlaW5nIGluaXRpYWxpemVkIHdpdGggYEFSR19QVFJfVE9fQlRGX0lEYC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCB2YXJpYWJsZSYjMzk7cyBpbnRlbmRlZCB1c2UgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBhIGtleSB2YWx1ZSBmb3IgaG93IHRoZSBhcmd1bWVudCBwcm9jZXNzaW5nIGlzIGdvaW5nIHRvIHByb2NlZWQgaGVyZSwgc28gYSByYXBpZCBjaGVjayBpcyB2aXRhbCBmb3IgdGhlIGxvZ2ljIHRvIHByb2dyZXNzIHNtb290aGx5LiBMZXQmIzM5O3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvZGUmIzM5O3MgaW50ZW5kZWQgcGF0aCBjb3JyZWN0bHkuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBhcyBleHBlY3RlZCBiZWZvcmUgd2UgZ28gZnVydGhlciwgb3Igd2UgY291bGQgYmUgb3BlbmluZyB0aGUgZG9vciB0byBzb21lIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIwMTA6XHRcdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuMTIwMTE6XHRcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjAxMjpcdFx0XHRcdFx0fVxuMTIwMTM6XHRcbjEyMDE0Olx0XHRcdFx0XHRtZXRhLVx1MDAzZXIwX3NpemUgPSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbjEyMDE1Olx0XHRcdFx0XHRpZiAocmVnbm8gXHUwMDNlPSAwKVxuMTIwMTY6XHRcdFx0XHRcdFx0cmV0ID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCByZWdubyk7XG4xMjAxNzpcdFx0XHRcdFx0ZWxzZVxuMTIwMTg6XHRcdFx0XHRcdFx0cmV0ID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgaSk7XG4xMjAxOTpcdFx0XHRcdFx0aWYgKHJldClcbjEyMDIwOlx0XHRcdFx0XHRcdHJldHVybiByZXQ7XG4xMjAyMTpcdFx0XHRcdH1cbjEyMDIyOlx0XHRcdFx0Y29udGludWU7XG4xMjAyMzpcdFx0XHR9XG4xMjAyNDpcdFxuMTIwMjU6XHRcdFx0aWYgKCFidGZfdHlwZV9pc19wdHIodCkpIHtcbjEyMDI2Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1VucmVjb2duaXplZCAlcyB0eXBlICVzXFxuXCYjMzQ7LFxuMTIwMjc6XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcbjEyMDI4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjAyOTpcdFx0XHR9XG4xMjAzMDpcdFxuMTIwMzE6XHRcdFx0aWYgKChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIHx8IHR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSBcdTAwMjZcdTAwMjZcbjEyMDMyOlx0XHRcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuMTIwMzM6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCYjMzQ7LFxuMTIwMzQ6XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4xMjAzNTpcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuMTIwMzY6XHRcdFx0fVxuMTIwMzc6XHRcbjEyMDM4Olx0XHRcdGlmIChyZWdubyA9PSBtZXRhLVx1MDAzZXJlbGVhc2VfcmVnbm8gXHUwMDI2XHUwMDI2ICFpc19rZnVuY19hcmdfZHlucHRyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2ldKSBcdTAwMjZcdTAwMjZcbjEyMDM5Olx0XHRcdCAgICAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpIFx1MDAyNlx1MDAyNiAhYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogVHJhY2luZyBgYXJnX3R5cGVgKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGlzIGBhcmdfdHlwZWAgdmFyaWFibGUuIFdoZXJlIGV4YWN0bHkgaXMgdGhpcyB0aGluZyBkZWZpbmVkPyBJIG5lZWQgdG8gdHJhY2sgZG93biBpdHMgZGVjbGFyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBvcmlnaW4gYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsbHkgc2V0IHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBpbnRlcnByZXQgaXRzIHVzYWdlIGxhdGVyIG9uLiBJdCYjMzk7cyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiBkZXBlbmRzLCBhbmQgSSBjYW4mIzM5O3QgYnVpbGQgYW55IHJlbGlhYmxlIGFuYWx5c2lzIHdpdGhvdXQgaXQuIEdvdHRhIGdldCB0aGF0IHN0YXJ0aW5nIHBvaW50IGNsZWFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjAxPXN0YXRpYyBpbnQgaXJxX2ZsYWdfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MDUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA2OnN0YXRpYyBlbnVtIGJwZl9keW5wdHJfdHlwZSBhcmdfdG9fZHlucHRyX3R5cGUoZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjA3LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njc3PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Nzg6XHRcdFx0XHQgICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSwgaW50IGluc25faWR4LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3OS1cdFx0XHRcdCAgIHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfZHlucHRyX2Rlc2MgKmR5bnB0cilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA0PXN0YXRpYyBib29sIGlzX2R5bnB0cl90eXBlX2V4cGVjdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA1Olx0XHRcdFx0ICAgIGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNi17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcyMjQ9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzIyNTpcdFx0XHQgICAgICAgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LCBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjI2LVx0XHRcdCAgICAgICBzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjICpkeW5wdHIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc4MTk9c3RhdGljIGludCBjaGVja19yZWdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc4MjA6XHRcdFx0ICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODIxLVx0XHRcdCAgY29uc3QgdTMyICphcmdfYnRmX2lkLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03OTkzPXN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmdfcmVnX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5OTQtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Nzk5NTpcdFx0XHRcdCAgZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk5Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgxOTI9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTk4LVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ19zdGF0ZShlbnYsIHJlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTk5Olx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBmbi1cdTAwM2VhcmdfdHlwZVthcmddO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMDAtXHRhcmdub190IGFyZ25vID0gYXJnbm9fZnJvbV9hcmcoYXJnICYjNDM7IDEpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04ODA1PXN0YXRpYyBib29sIGNoZWNrX21lbV9hcmdfcndfZmxhZ19vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODA5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSk7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODgxMDpcdFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBmbi1cdTAwM2VhcmdfdHlwZVtpXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODExLVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04ODIxPXN0YXRpYyBib29sIGNoZWNrX3Byb3RvX3JlbGVhc2VfcmVnKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODgyNS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjg4MjY6XHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXHUwMDNlYXJnX3R5cGVbaV07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODgyNy1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MDg9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NDItXHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgKnJlZl90LCAqcmVzb2x2ZV9yZXQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NDM6XHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gQVJHX0RPTlRDQVJFO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTQ0LVx0XHRhcmdub190IGFyZ25vID0gYXJnbm9fZnJvbV9hcmcoaSAmIzQzOyAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBBcmd1bWVudCBUeXBlIExvZ2ljKioKClNvLCBJIHNlZSB0aGF0IGBhcmdfdHlwZWAgaW5pdGlhbGx5IGdldHMgc2V0IHRvIGBBUkdfRE9OVENBUkVgLiBUaGF0JiMzOTtzIGEgc2Vuc2libGUgc3RhcnRpbmcgcG9pbnQsIGVzc2VudGlhbGx5IGEgJiMzNDt3ZSBoYXZlbiYjMzk7dCBmaWd1cmVkIHRoaXMgb3V0IHlldCYjMzQ7IGtpbmQgb2Ygc3RhdGUuIFRoZSBjb2RlIHRoZW4ganVtcHMgaW50byBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBpdCYjMzk7cyBoZXJlIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgd2l0aGluIHRoZSBgY2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYmxvY2suIEFoLCByaWdodCwgYSBrZXJuZWwgZnVuY3Rpb24gYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHNvbWV0aGluZyByZWZlcmVuY2UgY291bnRlZCwgd2hpY2ggaXMgYSBrbm93biB0eXBlLiBJbiB0aGlzIGNhc2UsIEkgY2FuIHNlZSB0aGF0IGBhcmdfdHlwZWAgaXMgbm93IGJlaW5nIGFzc2lnbmVkIGEgbW9yZSBzcGVjaWZpYyB2YWx1ZTogYEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGYC4KClRoYXQmIzM5O3MgY3JpdGljYWwuIGBBUkdfUFRSX1RPX0JURl9JRGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UgbmVlZCB0byB0cmFjayB0aGlzIGFyZ3VtZW50IHdpdGggYSBCVEYgdHlwZSBJRCwgaW5kaWNhdGluZyB0aGUga2luZCBvZiBkYXRhIHRoZSBwb2ludGVyIGlzIHBvaW50aW5nIHRvLiBUaGUgaW5jbHVzaW9uIG9mIGBQVFJfWkVST19PRkZgIGFsc28gbm90ZXMgc29tZXRoaW5nIGltcG9ydGFudCBhYm91dCB0aGUgcG9pbnRlciBvZmZzZXQsIHBvc3NpYmx5IHJlbGV2YW50IGZvciBtZW1vcnkgc2FmZXR5IG9yIHN0cnVjdHVyZSBhbGlnbm1lbnQuIEl0IHRoZW4ganVtcHMgdG8gYSBjcnVjaWFsIGNoZWNrLCB0aGUgYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgIGZ1bmN0aW9uIGNhbGwsIHdoaWNoIEkgY2FuIGRlZHVjZSBpcyB3aGVyZSB3ZSB2YWxpZGF0ZSB0aGlzIGFyZ3VtZW50JiMzOTtzIHByb3BlcnRpZXMsIHNwZWNpZmljYWxseSB0aGUgcmVnaXN0ZXIgaXQmIzM5O3MgaW4gKGByZWdgKSwgaXRzIGFyZ3VtZW50IG51bWJlciAoYGFyZ25vYCksIGFuZCwgY3JpdGljYWxseSwgdGhpcyBkZXJpdmVkIGBhcmdfdHlwZWAuIEkmIzM5O2QgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gdGhlbiwgZ2l2ZW4gdGhlIG5ldyBgYXJnX3R5cGVgLCBwZXJmb3JtIGNoZWNrcyB0byBlbnN1cmUsIGZvciBleGFtcGxlLCB0aGUgcmVnaXN0ZXIgY29udGFpbnMgYSB2YWxpZCBwb2ludGVyLCB0aGF0IGl0IGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBCVEYgdHlwZSwgb3IgdGhhdCBgUFRSX1pFUk9fT0ZGYCBpcyBjb3JyZWN0bHkgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEzMDpcdFx0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19DVFg7XG4xMjEzMTpcdFx0XHRcdGJyZWFrO1xuMTIxMzI6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcbjEyMTMzOlx0XHRcdFx0YXJnX3R5cGUgPSBBUkdfUFRSX1RPX0JURl9JRCB8IFBUUl9aRVJPX09GRjtcbjEyMTM0Olx0XHRcdFx0YnJlYWs7XG4xMjEzNTpcdFx0XHRkZWZhdWx0OlxuMTIxMzY6XHRcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDt1bmtub3duIGtmdW5jIGFyZyB0eXBlICVkXCYjMzQ7LCBrZl9hcmdfdHlwZSk7XG4xMjEzNzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTIxMzg6XHRcdFx0fVxuMTIxMzk6XHRcbjEyMTQwOlx0XHRcdGlmIChyZWdubyA9PSBtZXRhLVx1MDAzZXJlbGVhc2VfcmVnbm8pXG4xMjE0MTpcdFx0XHRcdGFyZ190eXBlIHw9IE9CSl9SRUxFQVNFO1xuMTIxNDI6XHRcdFx0cmV0ID0gY2hlY2tfZnVuY19hcmdfcmVnX29mZihlbnYsIHJlZywgYXJnbm8sIGFyZ190eXBlKTtcbjEyMTQzOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMjE0NDpcdFx0XHRcdHJldHVybiByZXQ7XG4xMjE0NTpcdFxuMTIxNDY6XHRcdFx0c3dpdGNoIChrZl9hcmdfdHlwZSkge1xuMTIxNDc6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcbjEyMTQ4Olx0XHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19DVFgpIHtcbjEyMTQ5Olx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgZXhwZWN0ZWQgcG9pbnRlciB0byBjdHgsIGJ1dCBnb3QgJXNcXG5cJiMzNDssXG4xMjE1MDpcdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIHJlZ190eXBlX3N0cihlbnYsIHJlZy1cdTAwM2V0eXBlKSk7XG4xMjE1MTpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjE1MjpcdFx0XHRcdH1cbjEyMTUzOlx0XG4xMjE1NDpcdFx0XHRcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSkge1xuMTIxNTU6XHRcdFx0XHRcdHJldCA9IGdldF9rZXJuX2N0eF9idGZfaWQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVx1MDAzZXByb2cpKTtcbjEyMTU2Olx0XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTIxNTc6XHRcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjE1ODpcdFx0XHRcdFx0bWV0YS1cdTAwM2VyZXRfYnRmX2lkICA9IHJldDtcbjEyMTU5Olx0XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFyZ3VtZW50IFR5cGUgSGFuZGxpbmcqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAgKmlzKiBpbmRlZWQgY2FsbGVkIHdpdGggYGFyZ190eXBlYC4gSW50ZXJlc3RpbmcuIE5vdywgSSBoYXZlIHRvIHJld2luZCBhIGJpdC4gSSByZW1lbWJlciB0aGF0IHRoZSBoYW5kbGluZyBvZiBhcmd1bWVudCB0eXBlcyB1c2VkIHRvIGJ1bmRsZSBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIHRvZ2V0aGVyIHdpdGggb3RoZXIgdHlwZXMgbGlrZSBgS0ZfQVJHX1BUUl9UT19NRU1gLiBQcmV2aW91c2x5LCB0aGVzZSBqdXN0IHRyaWdnZXJlZCBhIHNpbXBsZSBgYnJlYWs7YCwgbGVhdmluZyBgYXJnX3R5cGVgIGFzIGBBUkdfRE9OVENBUkVgLgoKU28sIHRoZSBrZXkgaGVyZSBpcyB3aGF0IGhhcHBlbnMgd2hlbiBgYXJnX3R5cGVgIGVuZHMgdXAgYXMgYEFSR19ET05UQ0FSRWAuIFRoZSBjb2RlIHBhdGggaXMgZGlmZmVyZW50ICpub3cqLiBJIG5lZWQgdG8gZm9jdXMgb24gaG93IGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYCBoYW5kbGVzIHRoYXQgc3BlY2lmaWMgc2NlbmFyaW8gd2l0aCBgQVJHX0RPTlRDQVJFYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc5OTA6XHRcdHJldHVybiBmaWVsZDtcbjc5OTE6XHR9XG43OTkyOlx0XG43OTkzOlx0c3RhdGljIGludCBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG43OTk0Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG43OTk1Olx0XHRcdFx0XHQgIGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlKVxuNzk5NjpcdHtcbjc5OTc6XHRcdGJvb2wgZml4ZWRfb2ZmX29rID0gIShhcmdfdHlwZSBcdTAwMjYgUFRSX1pFUk9fT0ZGKTtcbjc5OTg6XHRcdHUzMiB0eXBlID0gcmVnLVx1MDAzZXR5cGU7XG43OTk5Olx0XG44MDAwOlx0XHRhcmdfdHlwZSBcdTAwMjY9IH5QVFJfWkVST19PRkY7XG44MDAxOlx0XG44MDAyOlx0XHQvKiBXaGVuIHJlZmVyZW5jZWQgcmVnaXN0ZXIgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sIGl0cyBmaXhlZFxuODAwMzpcdFx0ICogb2Zmc2V0IG11c3QgYmUgMC5cbjgwMDQ6XHRcdCAqXG44MDA1Olx0XHQgKiBXZSB3aWxsIGNoZWNrIGFyZ190eXBlX2lzX3JlbGVhc2UgcmVnIGhhcyBpZCB3aGVuIHN0b3JpbmdcbjgwMDY6XHRcdCAqIG1ldGEtXHUwMDNlcmVsZWFzZV9yZWduby5cbjgwMDc6XHRcdCAqL1xuODAwODpcdFx0aWYgKGFyZ190eXBlX2lzX3JlbGVhc2UoYXJnX3R5cGUpKSB7XG44MDA5Olx0XHRcdC8qIEFSR19QVFJfVE9fRFlOUFRSIHdpdGggT0JKX1JFTEVBU0UgaXMgYSBiaXQgc3BlY2lhbCwgYXMgaXRcbjgwMTA6XHRcdFx0ICogbWF5IG5vdCBkaXJlY3RseSBwb2ludCB0byB0aGUgb2JqZWN0IGJlaW5nIHJlbGVhc2VkLCBidXQgdG9cbjgwMTE6XHRcdFx0ICogZHlucHRyIHBvaW50aW5nIHRvIHN1Y2ggb2JqZWN0LCB3aGljaCBtaWdodCBiZSBhdCBzb21lIG9mZnNldFxuODAxMjpcdFx0XHQgKiBvbiB0aGUgc3RhY2suIEluIHRoYXQgY2FzZSwgd2Ugc2ltcGx5IHRvIGZhbGxiYWNrIHRvIHRoZVxuODAxMzpcdFx0XHQgKiBkZWZhdWx0IGhhbmRsaW5nLlxuODAxNDpcdFx0XHQgKi9cbjgwMTU6XHRcdFx0aWYgKGFyZ190eXBlX2lzX2R5bnB0cihhcmdfdHlwZSkgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUFRSX1RPX1NUQUNLKVxuODAxNjpcdFx0XHRcdHJldHVybiAwO1xuODAxNzpcdFxuODAxODpcdFx0XHQvKiBEb2luZyBjaGVja19wdHJfb2ZmX3JlZyBjaGVjayBmb3IgdGhlIG9mZnNldCB3aWxsIGNhdGNoIHRoaXNcbjgwMTk6XHRcdFx0ICogYmVjYXVzZSBmaXhlZF9vZmZfb2sgaXMgZmFsc2UsIGJ1dCBjaGVja2luZyBoZXJlIGFsbG93cyB1c1xuODAyMDpcdFx0XHQgKiB0byBnaXZlIHRoZSB1c2VyIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UuXG44MDIxOlx0XHRcdCAqL1xuODAyMjpcdFx0XHRpZiAoIXRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpIHx8IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlICE9IDApIHtcbjgwMjM6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgbXVzdCBoYXZlIHplcm8gb2Zmc2V0IHdoZW4gcGFzc2VkIHRvIHJlbGVhc2UgZnVuYyBvciB0cnVzdGVkIGFyZyB0byBrZnVuY1xcblwmIzM0OyxcbjgwMjQ6XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG44MDI1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG44MDI2Olx0XHRcdH1cbjgwMjc6XHRcdH1cbjgwMjg6XHRcbjgwMjk6XHRcdHN3aXRjaCAodHlwZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhIHN3aXRjaCBzdGF0ZW1lbnQgaW4gbXkgZXhwZXJ0IGNhcGFjaXR5OgoKKipUaGUgSW1wbGljYXRpb25zIG9mIGEgU3dpdGNoIFN0YXRlbWVudDogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gdGhlIHN3aXRjaCBzdGF0ZW1lbnQuICpIbW0qLCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIGNvbnRyb2wgZmxvdyBtZWNoYW5pc20sIGEgc3RydWN0dXJlZCAqaWYtZWxzZSogbGFkZGVyLCByZWFsbHkuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXRzIGVmZmljaWVuY3ksIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIHdpdGggbnVtZXJvdXMgY29uZGl0aW9ucy4gSXMgaXQgcmVhbGx5IHRoZSBiZXN0IGFwcHJvYWNoIGhlcmU/IFRoZSBjb21waWxlciYjMzk7cyBvcHRpbWl6YXRpb24gcGxheXMgYSAqaHVnZSogcm9sZSwgb2YgY291cnNlLiBJJiMzOTttIGNvbnNpZGVyaW5nIGlmIGl0JiMzOTtzIGNvbXBpbGluZyB0byBhIGp1bXAgdGFibGUsIG9yIGlmIGl0JiMzOTtzIHJldmVydGluZyB0byBhIHNlcmllcyBvZiBjb21wYXJpc29ucyB3aGVuIHRoZSBjYXNlIHZhbHVlcyBhcmVuJiMzOTt0IGRlbnNlIG9yIGVhc2lseSBvcHRpbWl6YWJsZS4gKlRoYXQmIzM5O3MgY3JpdGljYWwqLgoKSSYjMzk7bSBwb25kZXJpbmcgdGhlIGltcGFjdCBvbiByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5IHRvby4gQSB3ZWxsLXN0cnVjdHVyZWQgc3dpdGNoIGNhbiBiZSBmYXIgbW9yZSBlbGVnYW50IHRoYW4gYSBkZWVwbHkgbmVzdGVkICppZi1lbHNlKiBjb25zdHJ1Y3QsIHdoaWNoIEkmIzM5O3ZlIHNlZW4gc29tZSBob3Jyb3JzIGluIHRoZSBwYXN0ISBCdXQgcG9vciB1c2Ugb2YgYnJlYWsgc3RhdGVtZW50cywgb3IgZmFsbC10aHJvdWdoIGJlaGF2aW9yLi4uICpzaHVkZGVycyouIFRoYXQmIzM5O3Mgd2hlcmUgY29tbWVudHMgYmVjb21lIGNydWNpYWwsIG5vdCBqdXN0IGZvciBkb2N1bWVudGF0aW9uLCBidXQgdG8gZXhwbGljaXRseSBjbGFyaWZ5IHRoZSBpbnRlbmRlZCBsb2dpYy4gSXMgdGhhdCB0aGUgY2FzZSBmb3IgKnRoaXMqIHNpdHVhdGlvbj8gU2hvdWxkIEkgYmUgdXNpbmcgYW4gZW51bSBvciBhIGxvb2t1cCB0YWJsZSBpbnN0ZWFkPyBPciB3b3VsZCBhIGNvbWJpbmF0aW9uIG9mIHRlY2huaXF1ZXMgYmUgYmVzdD8KCkFsc28sIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuIEkgYW0gYXNraW5nIG15c2VsZiwgaXMgdGhlIHN3aXRjaCB0aGUgZmFzdGVzdCB3YXkgdG8gcm91dGUgdGhlIHByb2dyYW0gZmxvdyB0byB0aGUgY29ycmVjdCBwcm9jZXNzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgZnJlcXVlbnRseSB0aGVzZSBjb25kaXRpb25zIHdpbGwgYmUgZXZhbHVhdGVkIGR1cmluZyBleGVjdXRpb24uIEkgbmVlZCB0byBiZSBjbGVhciBhbmQgY29uY2lzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzgwMzA6XHRcdC8qIFBvaW50ZXIgdHlwZXMgd2hlcmUgYm90aCBmaXhlZCBhbmQgdmFyaWFibGUgb2Zmc2V0IGlzIGV4cGxpY2l0bHkgYWxsb3dlZDogKi9cbjgwMzE6XHRcdGNhc2UgUFRSX1RPX1NUQUNLOlxuODAzMjpcdFx0Y2FzZSBQVFJfVE9fUEFDS0VUOlxuODAzMzpcdFx0Y2FzZSBQVFJfVE9fUEFDS0VUX01FVEE6XG44MDM0Olx0XHRjYXNlIFBUUl9UT19NQVBfS0VZOlxuODAzNTpcdFx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxuODAzNjpcdFx0Y2FzZSBQVFJfVE9fTUVNOlxuODAzNzpcdFx0Y2FzZSBQVFJfVE9fTUVNIHwgTUVNX1JET05MWTpcbjgwMzg6XHRcdGNhc2UgUFRSX1RPX01FTSB8IE1FTV9SSU5HQlVGOlxuODAzOTpcdFx0Y2FzZSBQVFJfVE9fQlVGOlxuODA0MDpcdFx0Y2FzZSBQVFJfVE9fQlVGIHwgTUVNX1JET05MWTpcbjgwNDE6XHRcdGNhc2UgUFRSX1RPX0FSRU5BOlxuODA0MjpcdFx0Y2FzZSBTQ0FMQVJfVkFMVUU6XG44MDQzOlx0XHRcdHJldHVybiAwO1xuODA0NDpcdFx0LyogQWxsIHRoZSByZXN0IG11c3QgYmUgcmVqZWN0ZWQsIGV4Y2VwdCBQVFJfVE9fQlRGX0lEIHdoaWNoIGFsbG93c1xuODA0NTpcdFx0ICogZml4ZWQgb2Zmc2V0LlxuODA0NjpcdFx0ICovXG44MDQ3Olx0XHRjYXNlIFBUUl9UT19CVEZfSUQ6XG44MDQ4Olx0XHRjYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0M6XG44MDQ5Olx0XHRjYXNlIFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRDpcbjgwNTA6XHRcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9SQ1U6XG44MDUxOlx0XHRjYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBOT05fT1dOX1JFRjpcbjgwNTI6XHRcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IE5PTl9PV05fUkVGIHwgTUVNX1JDVTpcbjgwNTM6XHRcdFx0LyogV2hlbiByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sXG44MDU0Olx0XHRcdCAqIG9yIHdoZW4gdGhlIGFyZ3VtZW50IHR5cGUgcmVxdWlyZXMgemVybyBmaXhlZCBvZmZzZXQsIGl0c1xuODA1NTpcdFx0XHQgKiBmaXhlZCBvZmZzZXQgbXVzdCBiZSAwLiBJbiB0aGUgb3RoZXIgY2FzZXMsIGZpeGVkIG9mZnNldCBjYW5cbjgwNTY6XHRcdFx0ICogYmUgbm9uLXplcm8uIHZhcl9vZmYgYWx3YXlzIG11c3QgYmUgMCBmb3IgUFRSX1RPX0JURl9JRCxcbjgwNTc6XHRcdFx0ICogaGVuY2Ugd2Ugc3RpbGwgbmVlZCB0byBkbyBjaGVja3MgaW5zdGVhZCBvZiByZXR1cm5pbmcuXG44MDU4Olx0XHRcdCAqL1xuODA1OTpcdFx0XHRyZXR1cm4gX19jaGVja19wdHJfb2ZmX3JlZyhlbnYsIHJlZywgYXJnbm8sIGZpeGVkX29mZl9vayk7XG44MDYwOlx0XHRjYXNlIFBUUl9UT19DVFg6XG44MDYxOlx0XHRcdC8qXG44MDYyOlx0XHRcdCAqIEFsbG93IGZpeGVkIGFuZCB2YXJpYWJsZSBvZmZzZXRzIGZvciBzeXNjYWxsIGNvbnRleHQsIGJ1dFxuODA2MzpcdFx0XHQgKiBvbmx5IHdoZW4gdGhlIGFyZ3VtZW50IGlzIHBhc3NlZCBhcyBtZW1vcnksIG5vdCBjdHgsXG44MDY0Olx0XHRcdCAqIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IG1vZGlmaWVkIGN0eCBpbiB0YWlsIGNhbGxlZCBwcm9ncmFtcyBhbmRcbjgwNjU6XHRcdFx0ICogZ2xvYmFsIHN1YnByb2dzICh0aGF0IG1heSBhY3QgYXMgZXh0ZW5zaW9uIHByb2cgaG9va3MpLlxuODA2NjpcdFx0XHQgKi9cbjgwNjc6XHRcdFx0aWYgKGFyZ190eXBlICE9IEFSR19QVFJfVE9fQ1RYIFx1MDAyNlx1MDAyNiBpc192YXJfY3R4X29mZl9hbGxvd2VkKGVudi1cdTAwM2Vwcm9nKSlcbjgwNjg6XHRcdFx0XHRyZXR1cm4gMDtcbjgwNjk6XHRcdFx0ZmFsbHRocm91Z2g7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYFBUUl9aRVJPX09GRmAgSW1wYWN0IG9uIFBvaW50ZXIgT2Zmc2V0IEhhbmRsaW5nKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIFByZXZpb3VzbHksIHRoZSBgZml4ZWRfb2ZmX29rYCBmbGFnIHdhcyBzZXQgdG8gdHJ1ZSwgYmVjYXVzZSB3ZSB3ZXJlIGRlYWxpbmcgd2l0aCBhbiBgQVJHX0RPTlRDQVJFYCBhcmd1bWVudCB0eXBlLCBhbmQgdGhhdCBvbmUgZG9lc24mIzM5O3QgaGF2ZSB0aGUgYFBUUl9aRVJPX09GRmAgYXR0cmlidXRlLiBCdXQgbm93LCB0aGUgYGFyZ190eXBlYCBoYXMgc2hpZnRlZCB0byBgQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkZgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBQVFJfWkVST19PRkZgIGlzIHNpZ25pZmljYW50IOKAkyBpdCBmb3JjZXMgYGZpeGVkX29mZl9va2AgdG8gYmVjb21lIGBmYWxzZWAuCgpDb25zZXF1ZW50bHksIHRoaXMgY2hhbmdlIHdpbGwgYmUgcGFzc2VkIGRvd24gdG8gdGhlIGBfX2NoZWNrX3B0cl9vZmZfcmVnYCBmdW5jdGlvbiwgd2hpY2ggbm93IHJlY2VpdmVzIGBmaXhlZF9vZmZfb2sgPSBmYWxzZWAuIFRoaXMgYmFzaWNhbGx5IG1lYW5zIHRoYXQgYW55IGF0dGVtcHQgdG8gdXNlIGEgZml4ZWQgb2Zmc2V0IHdpdGhpbiB0aGUgYFBUUl9UT19CVEZfSURgIGFyZ3VtZW50IHR5cGUgd2hlbiBpdCYjMzk7cyBwYXNzZWQgdG8gYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBrZnVuY3MsIHdpbGwgYmUgcmVqZWN0ZWQuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgZml4ZWQgb2Zmc2V0cyBtYXkgYmUgZGFuZ2Vyb3VzIHdoZW4gZGVhbGluZyB3aXRoIHBvaW50ZXJzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIHBhcnQgb2YgYSByZWZjb3VudGVkIG9iamVjdC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IG1lYW5zIEkgaGF2ZSB0byBpZGVudGlmeSB0aGUga2Z1bmNzIHRoYXQgdXRpbGl6ZSBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgaW5zdGFuY2VzIG9mIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgb3IgbWF5YmUgZXZlbiBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIHdpdGhpbiB0aGUgY29kZS4gVGhpcyB3aWxsIGNsYXJpZnkgd2hpY2gga2Z1bmNzIGFyZSBhZmZlY3RlZCBieSB0aGlzIHN0cmljdGVyIG9mZnNldCBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3JlZmNvdW50X2FjcXVpcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsKHZvaWQgKnBfX2FsbG9jLCB2b2lkICptZXRhX19pZ24pXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1NC0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTU6ICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1Ni0gKiBAcF9fcmVmY291bnRlZF9rcHRyOiBub24tb3duaW5nIGxvY2FsIGtwdHJcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDYzLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ2NDpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZSh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHN0cnVjdCBidGZfc3RydWN0X21ldGEgKm1ldGEpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDgwLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4Mi17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgzOlx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODQtfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MTM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCwgS0ZfUkVMRUFTRSlcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UgfCBLRl9JTVBMSUNJVF9BUkdTKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgxNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgxNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xpc3RfcHVzaF9mcm9udCwgS0ZfSU1QTElDSVRfQVJHUylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA5ODQ9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDk4OC1cdEtGX2JwZl9vYmpfZHJvcCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDk4OTpcdEtGX2JwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA5OTA6XHRLRl9icGZfcmVmY291bnRfYWNxdWlyZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDk5MS1cdEtGX2JwZl9saXN0X3B1c2hfZnJvbnRfaW1wbCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwNjE9QlRGX0lEKGZ1bmMsIGJwZl9vYmpfZHJvcClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTA2MjpCVEZfSUQoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTA2MzpCVEZfSUQoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwNjQtQlRGX0lEKGZ1bmMsIGJwZl9saXN0X3B1c2hfZnJvbnRfaW1wbClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExNzE9c3RhdGljIGJvb2wgaXNfYnBmX3BlcmNwdV9vYmpfZHJvcF9rZnVuYyh1MzIgZnVuY19pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNzYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNzc6c3RhdGljIGJvb2wgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmModTMyIGZ1bmNfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNzgte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTc5Olx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZWZjb3VudF9hY3F1aXJlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTgwOlx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGxdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTgxLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyMDQ9c3RhdGljIGJvb2wgaXNfa2Z1bmNfcmV0X251bGwoc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjA1LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwNjpcdGlmIChpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLVx1MDAzZWZ1bmNfaWQpIFx1MDAyNlx1MDAyNiBtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjA3LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjEyPXN0YXRpYyBib29sIGlzX2JwZl9ncmFwaF9hcGlfa2Z1bmModTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2MTUtXHQgICAgICAgaXNfYnBmX3JidHJlZV9hcGlfa2Z1bmMoYnRmX2lkKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjE2Olx0ICAgICAgIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKGJ0Zl9pZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2MTctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjcxOT1zdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjgwNy1cdFx0aW5zbl9hdXgtXHUwMDNla3B0cl9zdHJ1Y3RfbWV0YSA9IHN0cnVjdF9tZXRhO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyODA4Olx0fSBlbHNlIGlmIChpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLVx1MDAzZWZ1bmNfaWQpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI4MDktXHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjg5MD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzExMC1cdFx0ICAgICAhaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEuZnVuY19pZCkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxMTE6XHRcdCAgICAgIWlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKG1ldGEuZnVuY19pZCkpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMTItXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2FjcXVpcmUga2VybmVsIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBQVFJfVE9fQlRGX0lEXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk1NjY9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MTQtXHRcdCAgIGlzX2JwZl9wZXJjcHVfb2JqX2Ryb3Bfa2Z1bmMoZGVzYy1cdTAwM2VmdW5jX2lkKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjE1Olx0XHQgICBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhkZXNjLVx1MDAzZWZ1bmNfaWQpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MTYtXHRcdHN0cnVjdCBidGZfc3RydWN0X21ldGEgKmtwdHJfc3RydWN0X21ldGEgPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ua3B0cl9zdHJ1Y3RfbWV0YTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2MjU6XHRcdGlmIChpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhkZXNjLVx1MDAzZWZ1bmNfaWQpIFx1MDAyNlx1MDAyNiAha3B0cl9zdHJ1Y3RfbWV0YSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjI2LVx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O2twdHJfc3RydWN0X21ldGEgZXhwZWN0ZWQgYXQgaW5zbl9pZHggJWRcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTIwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBhbmQgdGhlIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAga2Z1bmMgYXJndW1lbnQuIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGBicGZfcmVmY291bnRfYWNxdWlyZWAgZXhwZWN0cyBhIHBvaW50ZXIgdG8gdGhlICpvYmplY3QqIHRoYXQgY29udGFpbnMgdGhlIGBicGZfcmVmY291bnRgIGZpZWxkLiBJZiB5b3UgZ2l2ZSBpdCBhIHBvaW50ZXIgd2l0aCBhIG5vbi16ZXJvIGZpeGVkIG9mZnNldCwgbGlrZSB0byBhbiBpbm5lciBmaWVsZCB3aXRoaW4gYSBzdHJ1Y3QsIHRoaW5ncyBnbyBzb3V0aC4gU3BlY2lmaWNhbGx5LCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIHdvdWxkIGluY29ycmVjdGx5IHRyZWF0IHRoZSBvZmZzZXR0ZWQgcG9pbnRlciBhcyB0aGUgYmFzZSBvZiB0aGUgb2JqZWN0LCB3aGljaCBsZWFkcyB0byBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24g4oCTIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSBzdHVmZi4KClRoZSB0ZXN0IGNhc2UgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jYCByZWFsbHkgaWxsdXN0cmF0ZXMgdGhpcy4gSXQmIzM5O3MgY2FsbGluZyBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIHdpdGggYSBwb2ludGVyIHRvIHRoZSBgbGlzdGAgZmllbGQgKmluc2lkZSogdGhlIGBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkYCwgc3BlY2lmaWNhbGx5IGBsaXN0X25vZGVgLCBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgYmFzZSBgbm9kZWAgc3RydWN0LiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZy4gQnkgZW5mb3JjaW5nIGBQVFJfWkVST19PRkZgIGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgLCB0aGUgdmVyaWZpZXIgbm93IGVuc3VyZXMgdGhhdCB0aGUgcG9pbnRlciBwYXNzZWQgdG8gdGhlIGtmdW5jICptdXN0KiBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIG9iamVjdCwgcHJldmVudGluZyB0aGlzIGluY29ycmVjdCBpbnRlcnByZXRhdGlvbi4KClRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyIGJlY2F1c2UgaXQmIzM5O3MgcHJldmVudGluZyBhIGNsYXNzIG9mIGJ1Z3MgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0JiMzOTtzIGEgc2VjdXJpdHkgaW1wcm92ZW1lbnQsIHBsYWluIGFuZCBzaW1wbGUuCgpBbmQgdGhpcyBpcyBhbGwgcmVsZXZhbnQgYmVjYXVzZSB0aGUgQlBGIHZlcmlmaWVyIGlzIHJlYWNoYWJsZSBieSB1c2VycyB3aXRoIGBDQVBfQlBGYCBvciBgQ0FQX1NZU19BRE1JTmAsIGFuZCBpbiBzb21lIGNhc2VzLCBldmVuIHVucHJpdmlsZWdlZCB1c2VycyB3aGVuIHVucHJpdmlsZWdlZCBCUEYgaXMgZW5hYmxlZC4gU2luY2UgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBpcyBhIGtmdW5jLCBsb2FkZWQgcHJvZ3JhbXMgdXNpbmcgaXQgdXN1YWxseSBuZWVkIHByaXZpbGVnZXMsIHNvIHRoaXMgZml4IGhlbHBzIGF2b2lkIGEgbW9yZSBzZXJpb3VzIHByb2JsZW0uIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaXMgdGhlIG9ubHkga2Z1bmMgdXNpbmcgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYC4gRGVmaW5pdGVseSB3b3J0aCBjaGVja2luZywgYW5kIGZ1enppbmcgdGhlIHZlcmlmaWVyIGlzIGEgZ29vZCBpZGVhIGdpdmVuIGhvdyBpbXBvcnRhbnQgaXRzIHJvbGUgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX2tmdW5jX2FyZ19yZWZjb3VudGVkX2twdHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA3MzU9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3VuaW5pdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA3MzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA3NDA6c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDc0MS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjM4PWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjcwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjcxOlx0aWYgKGlzX2tmdW5jX2FyZ19yZWZjb3VudGVkX2twdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzItXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIHRoZSBuYW1lIGl0c2VsZiBpcyBpbmZvcm1hdGl2ZS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGRldGVybWluZSBpZiBhIGtlcm5lbCBmdW5jdGlvbiBhcmd1bWVudCwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBwb2ludGVyIChga3B0cmApLCBpcyBhc3NvY2lhdGVkIHdpdGggc29tZSBmb3JtIG9mIHJlZmVyZW5jZSBjb3VudGluZy4gVGhlICYjMzQ7ayYjMzQ7IHByZWZpeCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIGtlcm5lbC1zcGVjaWZpYywgd2hpY2ggcHJvYmFibHkgbWVhbnMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgaW50ZXJuYWxzIG9yIGEgbGV2ZWwgYmVuZWF0aCBzdGFuZGFyZCBsaWJjIG9wZXJhdGlvbnMuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBkcmF3biB0byBob3cgdGhpcyBtaWdodCBiZSBpbXBsZW1lbnRlZC4gQXJlIHdlIGNoZWNraW5nIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGtwdHJgIGl0c2VsZj8gRG9lcyBpdCBpbnZvbHZlIGxvb2tpbmcgdXAgaW5mb3JtYXRpb24gaW4gYSBrZXJuZWwtbWFuYWdlZCBkYXRhIHN0cnVjdHVyZSwgcGVyaGFwcyBhIHRhYmxlIG9yIGhhc2htYXAsIHdoZXJlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgc3RhdHVzIGlzIHRyYWNrZWQgZm9yIG9iamVjdHMgbWFuYWdlZCBieSB0aGUga2VybmVsPyBBbHRlcm5hdGl2ZWx5LCBjb3VsZCBpdCBiZSBwYXJzaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgYW5kIGNvbXBhcmluZyB0aGUgcG9pbnRlciYjMzk7cyBhdHRyaWJ1dGVzPyBJcyB0aGVyZSBhbiBhdHRyaWJ1dGUgb3IgZmxhZyBzZXQgZm9yIHBvaW50ZXIgdmFyaWFibGVzPwoKSSYjMzk7bSBpbnN0YW50bHkgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGluZm9ybWF0aW9uLiBJZiB3ZSBrbm93IGFuIGFyZ3VtZW50IGlzIHJlZmVyZW5jZS1jb3VudGVkLCBpdCBnaXZlcyB1cyB2aXRhbCBjbHVlcyBhYm91dCBob3cgdG8gaGFuZGxlIHRoZSBhcmd1bWVudC4gV2UmIzM5O2Qga25vdyB3aGV0aGVyIHdlIG5lZWQgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IHdoZW4gcGFzc2luZyBvciByZWNlaXZpbmcgdGhlIHBvaW50ZXIsIHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBvciBkb3VibGUgZnJlZXMuIFVuZGVyc3RhbmRpbmcgdGhpcyBhc3BlY3Qgd291bGQgYWxzbyBhbGxvdyBmb3IgZnVydGhlciBvcHRpbWlzYXRpb24gb3IgYnVnLWRldGVjdGlvbi4gSXMgdGhpcyBmdW5jdGlvbiBnb2luZyB0byBiZSB1c2VkIGZvciB0aGluZ3MgbGlrZSBhdXRvbWF0aWMgcmVzb3VyY2UgbWFuYWdlbWVudCwgc2FmZXR5IGNoZWNrcywgb3IgcGVyaGFwcyBldmVuIGluIGEgdG9vbCBsaWtlIGEgc3RhdGljIGFuYWx5emVyPwoKTXkgbWluZCBpcyBub3cgcmFjaW5nIHRocm91Z2ggcG9zc2libGUgdXNlIGNhc2VzLCBsaWtlIG1hbmFnaW5nIG1lbW9yeSB1c2VkIGJ5IGRyaXZlcnMsIG1vZHVsZXMsIGFuZCBtYXliZSBldmVuIHdpdGhpbiBjb3JlIGtlcm5lbCBjb21wb25lbnRzLiBJIHdvbmRlciB3aGF0IHNwZWNpZmljIHNjZW5hcmlvcyB0cmlnZ2VyIHRoZSBuZWVkIGZvciB0aGlzIGtpbmQgb2YgY2hlY2s7IGFyZSB0aGVyZSBjb21tb24gb3IgY29tcGxleCB1c2UgY2FzZXM/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIHBpdGZhbGxzIGluIHRlcm1zIG9mIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGlmIHJlZmVyZW5jZSBjb3VudGluZyBpcyBub3QgaW1wbGVtZW50ZWQgY29ycmVjdGx5LiBUaGlzIHdvdWxkIGFsbCBiZSBjcml0aWNhbCB0byBjb25zaWRlciBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDczNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDczNTpcdHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ191bmluaXQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4xMDczNjpcdHtcbjEwNzM3Olx0XHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X191bmluaXRcJiMzNDspO1xuMTA3Mzg6XHR9XG4xMDczOTpcdFxuMTA3NDA6XHRzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuMTA3NDE6XHR7XG4xMDc0MjpcdFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fcmVmY291bnRlZF9rcHRyXCYjMzQ7KTtcbjEwNzQzOlx0fVxuMTA3NDQ6XHRcbjEwNzQ1Olx0c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX251bGxhYmxlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuMTA3NDY6XHR7XG4xMDc0NzpcdFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fbnVsbGFibGVcJiMzNDspO1xuMTA3NDg6XHR9XG4xMDc0OTpcdFxuMTA3NTA6XHRzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfbm9ub3duX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4xMDc1MTpcdHtcbjEwNzUyOlx0XHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19ub25vd25fYWxsb3dlZFwmIzM0Oyk7XG4xMDc1MzpcdH1cbjEwNzU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTA2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYF9fcmVmY291bnRlZF9rcHRyYCBTdWZmaXggaW4gS2VybmVsIEZ1bmN0aW9uIEFyZ3VtZW50cyoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJdCBsb29rcyBsaWtlIHRoZSBjb2RlIGlzIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgc3VmZml4IGBfX3JlZmNvdW50ZWRfa3B0cmAuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoaW5raW5nIGFib3V0IHdoZXJlIHRoaXMgc3VmZml4IGlzIGFjdHVhbGx5ICp1c2VkKi4gTXkgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjayB0aGUgdXNhZ2Ugb2YgdGhpcyBzcGVjaWZpYyBzdWZmaXggaW4ga2Z1bmMgYXJndW1lbnRzLiBVbmRlcnN0YW5kaW5nIGhvdyBhbmQgd2hlcmUgYF9fcmVmY291bnRlZF9rcHRyYCBpcyBlbXBsb3llZCB3aWxsIHRlbGwgbWUgaG93IHRoZSBrZXJuZWwgaXMgbWFuYWdpbmcgcmVmZXJlbmNlLWNvdW50ZWQgcG9pbnRlcnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEZyb20gdGhhdCwgSSBjYW4gcXVpY2tseSBkZWR1Y2UgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIHRoZSBmdW5jdGlvbnMgaW4gcmVsYXRpb24gdG8gdGhpcyB0eXBlIG9mIHBvaW50ZXIuIEl0IHdvdWxkIGJlIGFuIGludGVyZXN0aW5nIHRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcmVmY291bnRlZF9rcHRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9MjQ0OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCh2b2lkICpwX19hbGxvYywgdm9pZCAqbWV0YV9faWduKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTUtICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ1NjogKiBAcF9fcmVmY291bnRlZF9rcHRyOiBub24tb3duaW5nIGxvY2FsIGtwdHJcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTctICogQG1ldGE6IHZlcmlmaWVyLXN1cHBsaWVkIHN0cnVjdCBtZXRhZGF0YVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1OC0gKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ1OTogKiBJbmNyZW1lbnQgdGhlIHJlZmNvdW50IGZvciBAcF9fcmVmY291bnRlZF9rcHRyLiBUaGUgdmVyaWZpZXIgcmV3cml0ZXNcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjAtICogQG1ldGE7IEJQRiBwcm9ncmFtcyBkbyBub3Qgc2V0IGl0Llxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2MS0gKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ2MjogKiBSZXR1cm46IE93bmluZyByZWZlcmVuY2UgdG8gQHBfX3JlZmNvdW50ZWRfa3B0ciwgb3IgJU5VTEwgb24gZmFpbHVyZS5cbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjMtICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDY0Ol9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjUte1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzAtXHQgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NzE6XHRyZWYgPSAoc3RydWN0IGJwZl9yZWZjb3VudCAqKShwX19yZWZjb3VudGVkX2twdHIgJiM0MzsgbWV0YS1cdTAwM2VyZWNvcmQtXHUwMDNlcmVmY291bnRfb2ZmKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzItXHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygocmVmY291bnRfdCAqKXJlZikpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ3Ny1cdCAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ3ODpcdHJldHVybiAodm9pZCAqKXBfX3JlZmNvdW50ZWRfa3B0cjtcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzktfVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4MC1cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODE6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHZvaWQgKm1ldGFfX2lnbilcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MzpcdHJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShwX19yZWZjb3VudGVkX2twdHIsIG1ldGFfX2lnbik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA3NDA9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDc0MS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA3NDI6XHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19yZWZjb3VudGVkX2twdHJcJiMzNDspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNzQzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBSZWZjb3VudCBBY3F1aXNpdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGFuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbGAg4oCTIHRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy4gVGhlIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbiBsaWVzIGluIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGNoZWNrX2tmdW5jX2FyZ3NgIGFuZCBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZyBlbmZvcmNlbWVudCBvZiBgUFRSX1pFUk9fT0ZGYCB3aGVuIGRlYWxpbmcgd2l0aCBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLCBhbmQgZnJhbmtseSwgYW55dGhpbmcgdGhhdCBtb2RpZmllcyB0aGUgdmVyaWZpZXIgbGlrZSB0aGlzIHNjcmVhbXMgJiMzNDtmdXp6aW5nIG9wcG9ydHVuaXR5LiYjMzQ7IFdlIG5lZWQgdG8gcmVhbGx5IHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXJseTogYGNoZWNrX2tmdW5jX2FyZ3NgLCBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAsIGFsb25nIHdpdGggdGhvc2UgcmVmY291bnQgZnVuY3Rpb25zLCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLCBhbmQgYGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGxgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyDigJMgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBzZWVtIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBpbmZsdWVuY2luZyB0aGlzIGFyZWEuIE1pZ2h0IGJlIHdvcnRoIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb24gYGJwZl9yZWZjb3VudF9hY3F1aXJlYCwgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSB1bnVzdWFsIGJlaGF2aW9yIHdoZW4gaXQmIzM5O3MgZW5hYmxlZCBvciBkaXNhYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3JlZmNvdW50X2FjcXVpcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsKHZvaWQgKnBfX2FsbG9jLCB2b2lkICptZXRhX19pZ24pXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1NC0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTU6ICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1Ni0gKiBAcF9fcmVmY291bnRlZF9rcHRyOiBub24tb3duaW5nIGxvY2FsIGtwdHJcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDYzLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ2NDpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZSh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHN0cnVjdCBidGZfc3RydWN0X21ldGEgKm1ldGEpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDgwLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4Mi17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgzOlx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODQtfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MTM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCwgS0ZfUkVMRUFTRSlcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UgfCBLRl9JTVBMSUNJVF9BUkdTKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgxNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgxNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xpc3RfcHVzaF9mcm9udCwgS0ZfSU1QTElDSVRfQVJHUylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5ODUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipCUEYgSGVscGVyIEZ1bmN0aW9uIExvY2F0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGh1bmNoIHBvaW50cyB0b3dhcmRzIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIFRoYXQgc2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBCUEYgaGVscGVyIGZ1bmN0aW9uYWxpdHkgdHlwaWNhbGx5IHJlc2lkZXMuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhhdCBmaWxlLCBJIHNob3VsZCByZWFsbHkgY29uZmlybSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgZ3V0IHNheXMgaXQmIzM5O3MgY29uZGl0aW9uYWwsIHByb2JhYmx5IGRlcGVuZGVudCBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBiZWluZyBlbmFibGVkLCBidXQgYSBxdWljayBjaGVjayBvZiB0aGUgTWFrZWZpbGUgZm9yIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgbW92ZS4gSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBleGFjdCBjaXJjdW1zdGFuY2VzIHRoYXQgY29kZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl04oCZcyBhbHdheXMgYmVzdCBwcmFjdGljZSB0byB2ZXJpZnkgYnVpbGQgZGVwZW5kZW5jaWVzIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSBpdHNlbGYsIGFzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29kZSBjYW4gc2hpZnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hlbHBlcnMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQwMwoJCQkJCQkJb3V0cHV0OiAxNTgKCQkJCQkJCXRob3VnaHRzOiA1NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBGaXggZm9yIEZ1enppbmcqKgoKT2theSwgc28gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIHRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gaGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBjb25maWd1cmF0aW9uIGZsYWdzIGludm9sdmVkLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSB0ZXN0IGNhc2UgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jYCB1c2VzIGBicGZfcmVmY291bnRfYWNxdWlyZWAsIGluZGljYXRpbmcgdGhpcyBpcyBhIGZ1bmRhbWVudGFsIEJQRiBjYXBhYmlsaXR5LCBhbmQgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgZGlzdGlsbCB0aGlzIGRvd246IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSB2dWxuZXJhYmlsaXR5IGluIHRoZSBCUEYgdmVyaWZpZXIgcmVsYXRlZCB0byBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCYjMzk7cyB1c2VkIHdpdGggcG9pbnRlcnMgdGhhdCBoYXZlIG5vbi16ZXJvIGZpeGVkIG9mZnNldHMuIFRoaXMgY291bGQgbGVhZCB0byBlaXRoZXIgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIG9yIGNvcnJ1cHRpb24uIFRoZSBmaXggaW50cm9kdWNlcyBhIG5ldyBCUEYgdHlwZSBmbGFnLCBgUFRSX1pFUk9fT0ZGYCwgYW5kIGVuZm9yY2VzIGl0IGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cy4KCk15IGNvcmUgZm9jdXMgc3ltYm9scyBhcmUgZ29pbmcgdG8gYmUgYGNoZWNrX2tmdW5jX2FyZ3NgIGFuZCBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gdGhvc2UgZnVuY3Rpb25zLCB0byBiZSBzdXJlIEkgYW0gY29ycmVjdCwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFllcywgdGhleSBhcmUgc3RhdGljLCBidXQgY3JpdGljYWxseSwgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnV6emluZyB0aGUgY29ycmVjdCBmdW5jdGlvbnMuIEFoYSwgYF9fY2hlY2tfcHRyX29mZl9yZWdgIGlzIGNhbGxlZCBieSBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgY29ycmVjdCwgYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AgYXJlIGRlZmluaXRlbHkgb24gdGhlIHJpZ2h0IHRyYWNrLiBJIGFsc28gc2VlIHRoYXQgYGNoZWNrX2tmdW5jX2FyZ3NgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGZpbmU7IFN5emthbGxlciBjYW4gc3RpbGwgaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmUgcmVhY2hhYmxlLiBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGJ1dCB0aGF0IGlzIGEgaG90IHBhdGggLSBJIHdvdWxkIHJhdGhlciBsb29rIGF0IGEgbW9yZSBzcGVjaWZpYyB0YXJnZXQuCgpgY2hlY2tfa2Z1bmNfYXJnc2AgaXMgY2FsbGVkIHdoZW5ldmVyIGEga2Z1bmMgaXMgY2FsbGVkLiBUaGF0IG1ha2VzIGl0IHNwZWNpZmljIGVub3VnaC4gYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgIGlzIGEgYml0IGJyb2FkZXIsIGFzIGl0JiMzOTtzIGNhbGxlZCBmb3IgdmFyaW91cyBhcmd1bWVudHMsIGJ1dCBzdGlsbCBzcGVjaWZpYyBlbm91Z2ggZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4KCkkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGRpYWxlZCBpbiB0aGUgY29ycmVjdCB0YXJnZXRzLgoKTGV0JiMzOTtzIHJlZmluZSB0aGUgRm9jdXNTeW1ib2xzIHRvOgoqICAgYGNoZWNrX2tmdW5jX2FyZ3NgCiogICBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAKCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIGlmIGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYCBpcyBhIGhvdCBwYXRoLiBJdCYjMzk7cyBjYWxsZWQgZm9yIGV2ZXJ5IGZ1bmN0aW9uIGFyZ3VtZW50IGluIEJQRiBwcm9ncmFtcywgd2hpY2ggbWVhbnMgaXQgbWF5IGJlIHF1aXRlIGhvdCwgYnV0IGl0JiMzOTtzIGRpcmVjdGx5IG1vZGlmaWVkLCBzbyBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIG9wdGlvbnMuIGBjaGVja19rZnVuY19hcmdzYCBpcyBiZXR0ZXI7IGtmdW5jIGNhbGxzIGFyZSBsZXNzIGZyZXF1ZW50IHRoYW4gZ2VuZXJhbCBoZWxwZXIgY2FsbHMsIG1ha2luZyBpdCBhIGJldHRlciB0YXJnZXQuIEkgc3RpbGwgd2FudCB0byBrZWVwIHRoZSBvdGhlciBvbmUsIGhvd2V2ZXIuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfYXJnX3JlZ19vZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB3aGVyZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciBoYXZpbmcgYSBub24temVybyBmaXhlZCBvZmZzZXQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgQlBGIHR5cGUgZmxhZyBgUFRSX1pFUk9fT0ZGYCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfZnVuY19hcmdfcmVnX29mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIGBicGZfcmVmY291bnRfYWNxdWlyZWAgY291bGQgYmUgY2FsbGVkIHdpdGggYSBwb2ludGVyIGhhdmluZyBhIG5vbi16ZXJvIGZpeGVkIG9mZnNldCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBtZW1vcnkgY29ycnVwdGlvbi4gSXQgaW50cm9kdWNlcyBhIG5ldyBCUEYgdHlwZSBmbGFnIGBQVFJfWkVST19PRkZgIGFuZCBlbmZvcmNlcyBpdCBmb3IgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBhcmd1bWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDowOC4wNTgyMzExNjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI0MDI2NjYwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19mdW5jX2FyZ19yZWdfb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB3aGVyZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciBoYXZpbmcgYSBub24temVybyBmaXhlZCBvZmZzZXQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgQlBGIHR5cGUgZmxhZyBgUFRSX1pFUk9fT0ZGYCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDowOC4wNTgyMzY4MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjYwNDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIxMmQ1N2RhODM0YzhjODQzYzk1NzFmYzJkNmM0ZmFmZjVjYTkwOGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjAgMTU6MjQ6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5pbmRleCA3NzE5ZjY1Mjg0NDU2MC4uYjliN2QxOWNiODE3YjUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtODU5LDYgKzg1OSw5IEBAIGVudW0gYnBmX3R5cGVfZmxhZyB7XFxuIFxcdC8qIERZTlBUUiBwb2ludHMgdG8gZmlsZSAqL1xcbiBcXHREWU5QVFJfVFlQRV9GSUxFXFx0PSBCSVQoMjAgKyBCUEZfQkFTRV9UWVBFX0JJVFMpLFxcbiBcXG4rXFx0LyogUFRSIGFyZ3VtZW50IGNhbm5vdCBoYXZlIGEgZml4ZWQgb2Zmc2V0LiAqL1xcbitcXHRQVFJfWkVST19PRkZcXHRcXHQ9IEJJVCgyMSArIEJQRl9CQVNFX1RZUEVfQklUUyksXFxuK1xcbiBcXHRfX0JQRl9UWVBFX0ZMQUdfTUFYLFxcbiBcXHRfX0JQRl9UWVBFX0xBU1RfRkxBR1xcdD0gX19CUEZfVFlQRV9GTEFHX01BWCAtIDEsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDJhYmM3OWRiZjI4MWMyLi5iNDFhZWU4YzYzMGMyNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNzk5NCw4ICs3OTk0LDExIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmdfcmVnX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuIFxcdFxcdFxcdFxcdCAgZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXFxuIHtcXG4rXFx0Ym9vbCBmaXhlZF9vZmZfb2sgPSAhKGFyZ190eXBlIFxcdTAwMjYgUFRSX1pFUk9fT0ZGKTtcXG4gXFx0dTMyIHR5cGUgPSByZWctXFx1MDAzZXR5cGU7XFxuIFxcbitcXHRhcmdfdHlwZSBcXHUwMDI2PSB+UFRSX1pFUk9fT0ZGO1xcbitcXG4gXFx0LyogV2hlbiByZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIHBhc3NlZCB0byByZWxlYXNlIGZ1bmN0aW9uLCBpdHMgZml4ZWRcXG4gXFx0ICogb2Zmc2V0IG11c3QgYmUgMC5cXG4gXFx0ICpcXG5AQCAtODA0OCwxMyArODA1MSwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0Y2FzZSBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DIHwgTk9OX09XTl9SRUY6XFxuIFxcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IE5PTl9PV05fUkVGIHwgTUVNX1JDVTpcXG4gXFx0XFx0LyogV2hlbiByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sXFxuLVxcdFxcdCAqIGl0cyBmaXhlZCBvZmZzZXQgbXVzdCBiZSAwLiBJbiB0aGUgb3RoZXIgY2FzZXMsIGZpeGVkIG9mZnNldFxcbi1cXHRcXHQgKiBjYW4gYmUgbm9uLXplcm8uIFRoaXMgd2FzIGFscmVhZHkgY2hlY2tlZCBhYm92ZS4gU28gcGFzc1xcbi1cXHRcXHQgKiBmaXhlZF9vZmZfb2sgYXMgdHJ1ZSB0byBhbGxvdyBmaXhlZCBvZmZzZXQgZm9yIGFsbCBvdGhlclxcbi1cXHRcXHQgKiBjYXNlcy4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELCBoZW5jZSB3ZVxcbi1cXHRcXHQgKiBzdGlsbCBuZWVkIHRvIGRvIGNoZWNrcyBpbnN0ZWFkIG9mIHJldHVybmluZy5cXG4rXFx0XFx0ICogb3Igd2hlbiB0aGUgYXJndW1lbnQgdHlwZSByZXF1aXJlcyB6ZXJvIGZpeGVkIG9mZnNldCwgaXRzXFxuK1xcdFxcdCAqIGZpeGVkIG9mZnNldCBtdXN0IGJlIDAuIEluIHRoZSBvdGhlciBjYXNlcywgZml4ZWQgb2Zmc2V0IGNhblxcbitcXHRcXHQgKiBiZSBub24temVyby4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELFxcbitcXHRcXHQgKiBoZW5jZSB3ZSBzdGlsbCBuZWVkIHRvIGRvIGNoZWNrcyBpbnN0ZWFkIG9mIHJldHVybmluZy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHJldHVybiBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgdHJ1ZSk7XFxuK1xcdFxcdHJldHVybiBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgZml4ZWRfb2ZmX29rKTtcXG4gXFx0Y2FzZSBQVFJfVE9fQ1RYOlxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBbGxvdyBmaXhlZCBhbmQgdmFyaWFibGUgb2Zmc2V0cyBmb3Igc3lzY2FsbCBjb250ZXh0LCBidXRcXG5AQCAtMTIxMTQsNyArMTIxMTYsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX1xcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcXG4tXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RJTUVSOlxcbkBAIC0xMjEyOCw2ICsxMjEyOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfXFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19DVFg6XFxuIFxcdFxcdFxcdGFyZ190eXBlID0gQVJHX1BUUl9UT19DVFg7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxcbitcXHRcXHRcXHRhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcInVua25vd24ga2Z1bmMgYXJnIHR5cGUgJWRcXFwiLCBrZl9hcmdfdHlwZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuaW5kZXggNzI0N2EyMGMwYTNiZjUuLjVlYzM5MmU3MjcwZjkyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5AQCAtMTMsMTIgKzEzLDIyIEBAIHN0cnVjdCBub2RlX2FjcXVpcmUge1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xcbiB9O1xcbiBcXG4rc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XFxuK1xcdGxvbmcga2V5O1xcbitcXHRzdHJ1Y3QgYnBmX3JiX25vZGUgcmI7XFxuK1xcdHN0cnVjdCBicGZfbGlzdF9ub2RlIGxpc3Q7XFxuK1xcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuK307XFxuK1xcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XFxuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xcbiBcXG4gI2RlZmluZSBwcml2YXRlKG5hbWUpIFNFQyhcXFwiLmRhdGEuXFxcIiAjbmFtZSkgX19oaWRkZW4gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpXFxuIHByaXZhdGUoQSkgc3RydWN0IGJwZl9zcGluX2xvY2sgZ2xvY2s7XFxuIHByaXZhdGUoQSkgc3RydWN0IGJwZl9yYl9yb290IGdyb290IF9fY29udGFpbnMobm9kZV9hY3F1aXJlLCBub2RlKTtcXG4rcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xcbitwcml2YXRlKEIpIHN0cnVjdCBicGZfcmJfcm9vdCByb290IF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCByYik7XFxuK3ByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XFxuIFxcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxcbiB7XFxuQEAgLTMxLDYgKzQxLDE3IEBAIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXFxuIFxcdHJldHVybiBub2RlX2EtXFx1MDAzZWtleSBcXHUwMDNjIG5vZGVfYi1cXHUwMDNla2V5O1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBsZXNzX3JlZmNvdW50ZWQoc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXFxuK3tcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZV9hO1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkICpub2RlX2I7XFxuK1xcbitcXHRub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgcmIpO1xcbitcXHRub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgcmIpO1xcbitcXG4rXFx0cmV0dXJuIG5vZGVfYS1cXHUwMDNla2V5IFxcdTAwM2Mgbm9kZV9iLVxcdTAwM2VrZXk7XFxuK31cXG4rXFxuIFNFQyhcXFwiP3RjXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD00IGFsbG9jX2luc249e3tbMC05XSt9fVxcXCIpXFxuIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlcyh2b2lkICpjdHgpXFxuQEAgLTkzLDYgKzExNCw2MiBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJkZXJlZmVyZW5jZSBvZiBtb2RpZmllZCBwdHJfbm9kZV9yZWZjb3VudGVkIHB0ciBSMVxcXCIpXFxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9saXN0X25vZGVfb2Zmc2V0KHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkICpub2RlLCAqYmFzZSwgKnJlZjtcXG4rXFx0c3RydWN0IGJwZl9saXN0X25vZGUgKmxpc3Rfbm9kZTtcXG4rXFxuK1xcdG5vZGUgPSBicGZfb2JqX25ldyh0eXBlb2YoKm5vZGUpKTtcXG4rXFx0aWYgKCFub2RlKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9zcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbitcXHRicGZfbGlzdF9wdXNoX2Zyb250KFxcdTAwMjZoZWFkLCBcXHUwMDI2bm9kZS1cXHUwMDNlbGlzdCk7XFxuK1xcdGxpc3Rfbm9kZSA9IGJwZl9saXN0X3BvcF9mcm9udChcXHUwMDI2aGVhZCk7XFxuK1xcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2bG9jayk7XFxuK1xcdGlmICghbGlzdF9ub2RlKVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdGJhc2UgPSBjb250YWluZXJfb2YobGlzdF9ub2RlLCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkLCBsaXN0KTtcXG4rXFx0cmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobGlzdF9ub2RlKTtcXG4rXFx0aWYgKHJlZilcXG4rXFx0XFx0YnBmX29ial9kcm9wKHJlZik7XFxuK1xcdGJwZl9vYmpfZHJvcChiYXNlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJkZXJlZmVyZW5jZSBvZiBtb2RpZmllZCBwdHJfbm9kZV9yZWZjb3VudGVkIHB0ciBSMVxcXCIpXFxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9yYnRyZWVfbm9kZV9vZmZzZXQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgKm5vZGUsICpiYXNlLCAqcmVmO1xcbitcXHRzdHJ1Y3QgYnBmX3JiX25vZGUgKnJiX25vZGU7XFxuK1xcbitcXHRub2RlID0gYnBmX29ial9uZXcodHlwZW9mKCpub2RlKSk7XFxuK1xcdGlmICghbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRub2RlLVxcdTAwM2VrZXkgPSAxO1xcbitcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuK1xcdGJwZl9yYnRyZWVfYWRkKFxcdTAwMjZyb290LCBcXHUwMDI2bm9kZS1cXHUwMDNlcmIsIGxlc3NfcmVmY291bnRlZCk7XFxuK1xcdHJiX25vZGUgPSBicGZfcmJ0cmVlX2ZpcnN0KFxcdTAwMjZyb290KTtcXG4rXFx0aWYgKHJiX25vZGUpXFxuK1xcdFxcdHJiX25vZGUgPSBicGZfcmJ0cmVlX3JlbW92ZShcXHUwMDI2cm9vdCwgcmJfbm9kZSk7XFxuK1xcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2bG9jayk7XFxuK1xcdGlmICghcmJfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcbitcXHRiYXNlID0gY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQsIHJiKTtcXG4rXFx0cmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUocmJfbm9kZSk7XFxuK1xcdGlmIChyZWYpXFxuK1xcdFxcdGJwZl9vYmpfZHJvcChyZWYpO1xcbitcXHRicGZfb2JqX2Ryb3AoYmFzZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIj9mZW50cnkucy9cXFwiIFNZU19QUkVGSVggXFxcInN5c19nZXRwZ2lkXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJmdW5jdGlvbiBjYWxscyBhcmUgbm90IGFsbG93ZWQgd2hpbGUgaG9sZGluZyBhIGxvY2tcXFwiKVxcbiBpbnQgQlBGX1BST0cocmJ0cmVlX2ZhaWxfc2xlZXBhYmxlX2xvY2tfYWNyb3NzX3JjdSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MDguNTA1NjQwNzMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE5NTUyNDYzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19mdW5jX2FyZ19yZWdfb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB3aGVyZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciBoYXZpbmcgYSBub24temVybyBmaXhlZCBvZmZzZXQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgQlBGIHR5cGUgZmxhZyBgUFRSX1pFUk9fT0ZGYCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIxMmQ1N2RhODM0YzhjODQzYzk1NzFmYzJkNmM0ZmFmZjVjYTkwOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1biAyMCAxNToyNDowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCA3NzE5ZjY1Mjg0NDU2MC4uYjliN2QxOWNiODE3YjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtODU5LDYgKzg1OSw5IEBAIGVudW0gYnBmX3R5cGVfZmxhZyB7XG4gXHQvKiBEWU5QVFIgcG9pbnRzIHRvIGZpbGUgKi9cbiBcdERZTlBUUl9UWVBFX0ZJTEVcdD0gQklUKDIwICsgQlBGX0JBU0VfVFlQRV9CSVRTKSxcbiBcbitcdC8qIFBUUiBhcmd1bWVudCBjYW5ub3QgaGF2ZSBhIGZpeGVkIG9mZnNldC4gKi9cbitcdFBUUl9aRVJPX09GRlx0XHQ9IEJJVCgyMSArIEJQRl9CQVNFX1RZUEVfQklUUyksXG4rXG4gXHRfX0JQRl9UWVBFX0ZMQUdfTUFYLFxuIFx0X19CUEZfVFlQRV9MQVNUX0ZMQUdcdD0gX19CUEZfVFlQRV9GTEFHX01BWCAtIDEsXG4gfTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDJhYmM3OWRiZjI4MWMyLi5iNDFhZWU4YzYzMGMyNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNzk5NCw4ICs3OTk0LDExIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmdfcmVnX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuIFx0XHRcdFx0ICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSlcbiB7XG4rXHRib29sIGZpeGVkX29mZl9vayA9ICEoYXJnX3R5cGUgXHUwMDI2IFBUUl9aRVJPX09GRik7XG4gXHR1MzIgdHlwZSA9IHJlZy1cdTAwM2V0eXBlO1xuIFxuK1x0YXJnX3R5cGUgXHUwMDI2PSB+UFRSX1pFUk9fT0ZGO1xuK1xuIFx0LyogV2hlbiByZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIHBhc3NlZCB0byByZWxlYXNlIGZ1bmN0aW9uLCBpdHMgZml4ZWRcbiBcdCAqIG9mZnNldCBtdXN0IGJlIDAuXG4gXHQgKlxuQEAgLTgwNDgsMTMgKzgwNTEsMTIgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRjYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBOT05fT1dOX1JFRjpcbiBcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IE5PTl9PV05fUkVGIHwgTUVNX1JDVTpcbiBcdFx0LyogV2hlbiByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sXG4tXHRcdCAqIGl0cyBmaXhlZCBvZmZzZXQgbXVzdCBiZSAwLiBJbiB0aGUgb3RoZXIgY2FzZXMsIGZpeGVkIG9mZnNldFxuLVx0XHQgKiBjYW4gYmUgbm9uLXplcm8uIFRoaXMgd2FzIGFscmVhZHkgY2hlY2tlZCBhYm92ZS4gU28gcGFzc1xuLVx0XHQgKiBmaXhlZF9vZmZfb2sgYXMgdHJ1ZSB0byBhbGxvdyBmaXhlZCBvZmZzZXQgZm9yIGFsbCBvdGhlclxuLVx0XHQgKiBjYXNlcy4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELCBoZW5jZSB3ZVxuLVx0XHQgKiBzdGlsbCBuZWVkIHRvIGRvIGNoZWNrcyBpbnN0ZWFkIG9mIHJldHVybmluZy5cbitcdFx0ICogb3Igd2hlbiB0aGUgYXJndW1lbnQgdHlwZSByZXF1aXJlcyB6ZXJvIGZpeGVkIG9mZnNldCwgaXRzXG4rXHRcdCAqIGZpeGVkIG9mZnNldCBtdXN0IGJlIDAuIEluIHRoZSBvdGhlciBjYXNlcywgZml4ZWQgb2Zmc2V0IGNhblxuK1x0XHQgKiBiZSBub24temVyby4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELFxuK1x0XHQgKiBoZW5jZSB3ZSBzdGlsbCBuZWVkIHRvIGRvIGNoZWNrcyBpbnN0ZWFkIG9mIHJldHVybmluZy5cbiBcdFx0ICovXG4tXHRcdHJldHVybiBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgdHJ1ZSk7XG4rXHRcdHJldHVybiBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgZml4ZWRfb2ZmX29rKTtcbiBcdGNhc2UgUFRSX1RPX0NUWDpcbiBcdFx0LypcbiBcdFx0ICogQWxsb3cgZml4ZWQgYW5kIHZhcmlhYmxlIG9mZnNldHMgZm9yIHN5c2NhbGwgY29udGV4dCwgYnV0XG5AQCAtMTIxMTQsNyArMTIxMTYsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RJTUVSOlxuQEAgLTEyMTI4LDYgKzEyMTI5LDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9cbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcbiBcdFx0XHRhcmdfdHlwZSA9IEFSR19QVFJfVE9fQ1RYO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxuK1x0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkY7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCJ1bmtub3duIGtmdW5jIGFyZyB0eXBlICVkXCIsIGtmX2FyZ190eXBlKTtcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5pbmRleCA3MjQ3YTIwYzBhM2JmNS4uNWVjMzkyZTcyNzBmOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC0xMywxMiArMTMsMjIgQEAgc3RydWN0IG5vZGVfYWNxdWlyZSB7XG4gXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuIH07XG4gXG4rc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XG4rXHRsb25nIGtleTtcbitcdHN0cnVjdCBicGZfcmJfbm9kZSByYjtcbitcdHN0cnVjdCBicGZfbGlzdF9ub2RlIGxpc3Q7XG4rXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuK307XG4rXG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltO1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuIFxuICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXCIuZGF0YS5cIiAjbmFtZSkgX19oaWRkZW4gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpXG4gcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBnbG9jaztcbiBwcml2YXRlKEEpIHN0cnVjdCBicGZfcmJfcm9vdCBncm9vdCBfX2NvbnRhaW5zKG5vZGVfYWNxdWlyZSwgbm9kZSk7XG4rcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xuK3ByaXZhdGUoQikgc3RydWN0IGJwZl9yYl9yb290IHJvb3QgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIHJiKTtcbitwcml2YXRlKEIpIHN0cnVjdCBicGZfbGlzdF9oZWFkIGhlYWQgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIGxpc3QpO1xuIFxuIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4ge1xuQEAgLTMxLDYgKzQxLDE3IEBAIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4gXHRyZXR1cm4gbm9kZV9hLVx1MDAzZWtleSBcdTAwM2Mgbm9kZV9iLVx1MDAzZWtleTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbGVzc19yZWZjb3VudGVkKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuK3tcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgKm5vZGVfYTtcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgKm5vZGVfYjtcbitcbitcdG5vZGVfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkLCByYik7XG4rXHRub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgcmIpO1xuK1xuK1x0cmV0dXJuIG5vZGVfYS1cdTAwM2VrZXkgXHUwMDNjIG5vZGVfYi1cdTAwM2VrZXk7XG4rfVxuK1xuIFNFQyhcIj90Y1wiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTQgYWxsb2NfaW5zbj17e1swLTldK319XCIpXG4gbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzKHZvaWQgKmN0eClcbkBAIC05Myw2ICsxMTQsNjIgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwiP3RjXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgcHRyX25vZGVfcmVmY291bnRlZCBwdHIgUjFcIilcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfbGlzdF9ub2RlX29mZnNldCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZSwgKmJhc2UsICpyZWY7XG4rXHRzdHJ1Y3QgYnBmX2xpc3Rfbm9kZSAqbGlzdF9ub2RlO1xuK1xuK1x0bm9kZSA9IGJwZl9vYmpfbmV3KHR5cGVvZigqbm9kZSkpO1xuK1x0aWYgKCFub2RlKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2bG9jayk7XG4rXHRicGZfbGlzdF9wdXNoX2Zyb250KFx1MDAyNmhlYWQsIFx1MDAyNm5vZGUtXHUwMDNlbGlzdCk7XG4rXHRsaXN0X25vZGUgPSBicGZfbGlzdF9wb3BfZnJvbnQoXHUwMDI2aGVhZCk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2bG9jayk7XG4rXHRpZiAoIWxpc3Rfbm9kZSlcbitcdFx0cmV0dXJuIDI7XG4rXG4rXHRiYXNlID0gY29udGFpbmVyX29mKGxpc3Rfbm9kZSwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XG4rXHRyZWYgPSBicGZfcmVmY291bnRfYWNxdWlyZShsaXN0X25vZGUpO1xuK1x0aWYgKHJlZilcbitcdFx0YnBmX29ial9kcm9wKHJlZik7XG4rXHRicGZfb2JqX2Ryb3AoYmFzZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3RjXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgcHRyX25vZGVfcmVmY291bnRlZCBwdHIgUjFcIilcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmJ0cmVlX25vZGVfb2Zmc2V0KHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkICpub2RlLCAqYmFzZSwgKnJlZjtcbitcdHN0cnVjdCBicGZfcmJfbm9kZSAqcmJfbm9kZTtcbitcbitcdG5vZGUgPSBicGZfb2JqX25ldyh0eXBlb2YoKm5vZGUpKTtcbitcdGlmICghbm9kZSlcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRub2RlLVx1MDAzZWtleSA9IDE7XG4rXG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuK1x0YnBmX3JidHJlZV9hZGQoXHUwMDI2cm9vdCwgXHUwMDI2bm9kZS1cdTAwM2VyYiwgbGVzc19yZWZjb3VudGVkKTtcbitcdHJiX25vZGUgPSBicGZfcmJ0cmVlX2ZpcnN0KFx1MDAyNnJvb3QpO1xuK1x0aWYgKHJiX25vZGUpXG4rXHRcdHJiX25vZGUgPSBicGZfcmJ0cmVlX3JlbW92ZShcdTAwMjZyb290LCByYl9ub2RlKTtcbitcdGJwZl9zcGluX3VubG9jayhcdTAwMjZsb2NrKTtcbitcdGlmICghcmJfbm9kZSlcbitcdFx0cmV0dXJuIDI7XG4rXG4rXHRiYXNlID0gY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQsIHJiKTtcbitcdHJlZiA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKHJiX25vZGUpO1xuK1x0aWYgKHJlZilcbitcdFx0YnBmX29ial9kcm9wKHJlZik7XG4rXHRicGZfb2JqX2Ryb3AoYmFzZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwiP2ZlbnRyeS5zL1wiIFNZU19QUkVGSVggXCJzeXNfZ2V0cGdpZFwiKVxuIF9fZmFpbHVyZSBfX21zZyhcImZ1bmN0aW9uIGNhbGxzIGFyZSBub3QgYWxsb3dlZCB3aGlsZSBob2xkaW5nIGEgbG9ja1wiKVxuIGludCBCUEZfUFJPRyhyYnRyZWVfZmFpbF9zbGVlcGFibGVfbG9ja19hY3Jvc3NfcmN1LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MDguNTA1NjQyMjEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk0MTkyNDc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIEJQRiBjb2RlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvYnBmLmhgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQncyBpbnRyb2R1Y2luZyBhIG5ldyBmbGFnLCBgUFRSX1pFUk9fT0ZGYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgLCB3aGVyZSB0aGV5J3JlIHRyeWluZyB0byB0aWdodGVuIHVwIGhvdyB3ZSBoYW5kbGUgcG9pbnRlciBhcmd1bWVudHMsIG1ha2luZyBzdXJlIGNlcnRhaW4gb25lcyAqY2FuJ3QqIGhhdmUgZml4ZWQgb2Zmc2V0cy4gU21hcnQuXG5cblJpZ2h0LCBzbyB0aGV5J3JlIG1vZGlmeWluZyBgY2hlY2tfa2Z1bmNfYXJnc2AgdG8gYmUgbW9yZSBzcGVjaWZpYyB3aXRoIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuIFByZXZpb3VzbHksIGl0IHNlZW1zIGxpa2Ugd2Ugd2VyZSBraW5kIG9mIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2ljLCBvciBhdCBsZWFzdCBmYWxsaW5nIHRocm91Z2ggdG8gaXQsIGFuZCB0aGF0IHdhc24ndCBnaXZpbmcgdXMgdGhlIGxldmVsIG9mIHByZWNpc2lvbiB3ZSBuZWVkIGZvciB0aGlzIHR5cGUuIEhhbmcgb24sIHdhc24ndCBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGdyb3VwZWQgd2l0aCB0aGluZ3MgbGlrZSBgS0ZfQVJHX1BUUl9UT19NRU1gPyBPa2F5LCBJICp0aGluayogdGhlIG9sZCBsb2dpYyBtaWdodCBoYXZlIGJlZW4gdG8gZmFsbCB0aHJvdWdoIHRvIGBhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEYC4gTGV0J3MgY29uZmlybSB0aGF0IHdpdGggYGNoZWNrX2tmdW5jX2FyZ3NgIGRpcmVjdGx5IGluIHRoZSBzb3VyY2UuXG5cbk9rYXksIHRpbWUgdG8gcHVsbCB1cCB0aGUgY3Jvc3MtcmVmZXJlbmNlIHRvb2xzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYGNoZWNrX2tmdW5jX2FyZ3NgIGlzIGltcGxlbWVudGVkIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zLiBUaGUgbG9naWMgaGVyZSBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdGhlIG92ZXJhbGwgc2FmZXR5IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGUgQlBGIHJ1bnRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoxNC40NDc1ODQ1NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4NDY4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDk2MD1lbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA5NjItXFx0S0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQsICAgIC8qIEFsbG9jYXRlZCBvYmplY3QgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA5NjM6XFx0S0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFIsIC8qIFJlZmNvdW50ZWQgbG9jYWwga3B0ciAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDk2NC1cXHRLRl9BUkdfUFRSX1RPX0RZTlBUUixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIzOD1nZXRfa2Z1bmNfcHRyX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjcxLVxcdGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjcyOlxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzMtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MDg9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjEzMS1cXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIxMzI6XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxMzMtXFx0XFx0XFx0YXJnX3R5cGUgPSBBUkdfUFRSX1RPX0JURl9JRCB8IFBUUl9aRVJPX09GRjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjM5Mi1cXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIzOTM6XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIzOTQtXFx0XFx0XFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVxcdTAwM2V0eXBlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoxNC41MDg0MzcwODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTI5MjQ3MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS0Z1bmMgQXJndW1lbnQgVHlwZSBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgZm9jdXNlZCBvbiB0aGlzIGRpZmYgY29uY2VybmluZyBgY2hlY2tfa2Z1bmNfYXJnc2Agd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGZyb20gdGhlIGdyb3VwIG9mIGFyZ3VtZW50IHR5cGVzIGl0IHdhcyBwcmV2aW91c2x5IGFzc29jaWF0ZWQgd2l0aDogYEtGX0FSR19QVFJfVE9fTUVNYCwgYEtGX0FSR19QVFJfVE9fTUVNX1NJWkVgLCBhbmQgYEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0tgLCBhbmQgc28gb24uIFRoZXNlIHdlcmUgYWxsIHByZXZpb3VzbHkgc2V0dGluZyBgYXJnX3R5cGUgPSBBUkdfUFRSX1RPX0JURl9JRGAuXG5cbk5vdywgaXQncyBiZWluZyBoYW5kbGVkIHNlcGFyYXRlbHkuIEluc3RlYWQgb2YgdGhlIHByaW9yIGdyb3VwaW5nLCB0aGUgY29kZSBub3cgZXhwbGljaXRseSBzZXRzIGBhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGYCB3aGVuIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgaXMgZW5jb3VudGVyZWQuIFNvLCB0aGUgcmVmY291bnRlZCBrcHRyIHR5cGUgaXMgZ2V0dGluZyBhIHNwZWNpYWwgZmxhZzogYFBUUl9aRVJPX09GRmAuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgc2hpZnQgaGFwcGVuZWQuIFdoYXQncyB0aGUgc3BlY2lmaWMgc2VtYW50aWMgZGlmZmVyZW5jZSBvciByZXF1aXJlbWVudCB0aGF0IG5lY2Vzc2l0YXRlcyB0aGlzIG5ldyBkaXN0aW5jdCBoYW5kbGluZyBmb3IgYFJFRkNPVU5URURfS1BUUmA/IFRoaXMgaXMgY3JpdGljYWwuIFRoZSBpbXBsaWNhdGlvbiBvZiBjb21iaW5pbmcgaXQgd2l0aCBgUFRSX1pFUk9fT0ZGYCBzdWdnZXN0cyB0aGF0IHBlcmhhcHMgdGhlIG9mZnNldCBjYWxjdWxhdGlvbnMgb3IgbnVsbCBwb2ludGVyIGhhbmRsaW5nIG5lZWRzIHRvIGJlIGRpZmZlcmVudCBpbiB0aGlzIHNjZW5hcmlvLiBJIHNob3VsZCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYSBiZXR0ZXIgcGljdHVyZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgQlRGIGhhbmRsaW5nIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoyMC42Mzc2OTQwMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczNjU0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkwOD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTE1LVxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjExNjpcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjExNy1cXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIzMzYtXFx0XFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMzM3OlxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMzM4LVxcdFxcdFxcdHJlc29sdmVfcmV0ID0gYnRmX3Jlc29sdmVfc2l6ZShidGYsIHJlZl90LCBcXHUwMDI2dHlwZV9zaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MjAuNjk1MDcwMjE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5Mzc2NzU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBhc3N1bWluZyBpdCdzIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFyb3VuZCBsaW5lIDEyMTE2OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXI6IEEgRm9jdXNlZCBFeGFtaW5hdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBCUEYgdmVyaWZpZXIuIExpbmUgMTIxMTbigKYgdGhhdCdzIGdvdCB0byBiZSBhIGNydWNpYWwgc3BvdCwgcmlnaHQ/IEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgZGVlcGx5IGludm9sdmVkIGluIHRoZSBwcm9ncmFtIGFuYWx5c2lzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoYXQgZXhhY3QgbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyAqYXJvdW5kKiAxMjExNi4gSXMgaXQgYSBjb25kaXRpb25hbCBjaGVjaz8gQSBkYXRhIHN0cnVjdHVyZSBhc3NpZ25tZW50PyBBIGNhbGwgdG8gYW5vdGhlciBmdW5jdGlvbj8gQW5kIHdoYXQgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSBvZiB0aGUgdmVyaWZpZXIgYXQgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlP1xuXG5CYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSdtIGxpa2VseSB0byB6ZXJvIGluIG9uIHRoZSBleGFjdCBsb2dpYyBiZWluZyBwZXJmb3JtZWQuIFdoYXQgKnNwZWNpZmljYWxseSogaXMgYmVpbmcgdmFsaWRhdGVkIG9yIGluZmVycmVkIGhlcmU/IElzIGl0IG1lbW9yeSBzYWZldHk/IENvbnRyb2wgZmxvdyBhbmFseXNpcz8gUmVzb3VyY2UgZXhoYXVzdGlvbiBsaW1pdHM/IFRoZSB2ZXJpZmllcidzIGpvYiBpcyB0byBlbnN1cmUgdGhhdCBhIEJQRiBwcm9ncmFtIGlzIHNhZmUgdG8gcnVuIHdpdGhpbiB0aGUga2VybmVsLCBzbyB0aGlzIGxpbmUgbXVzdCBiZSBkb2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgdG8gdGhhdCBwcm9jZXNzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNsdWVzLiBBcmUgdGhlcmUgY2hlY2tzIGZvciBwb3RlbnRpYWxseSBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYz8gQXJlIHRoZXJlIHJhbmdlIGNoZWNrcyBvbiByZWdpc3RlciB2YWx1ZXM/IEFyZSB0aGVyZSBjYWxscyB0byBoZWxwZXIgZnVuY3Rpb25zIHRvIHJldHJpZXZlIGtlcm5lbCBkYXRhPyBBbnkgb2YgdGhlc2Ugd291bGQgbGlrZWx5IGJlIHJpZ2h0IHVwIG15IGFsbGV5LlxuXG5NeSBpbW1lZGlhdGUgZ29hbCB3aWxsIGJlIHRvIGRldmVsb3AgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93ICp0aGlzKiBzZWN0aW9uIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uLiBJJ2xsIG5lZWQgdG8gbGluayB0aGF0IG9uZSBsaW5lIG9mIGNvZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgaW4gdGhlIHZlcmlmaWVyLiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8ga25vdyB0aGUgbGFyZ2VyIG9iamVjdGl2ZSBvZiB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyB0aGF0IGxpbmUuIEhvdyBpcyB0aGUgYW5hbHlzaXMgYmVpbmcgcGVyZm9ybWVkPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgdGhhdCB0aGUgdmVyaWZpZXIgaXMgcGVyZm9ybWluZz8gV2hhdCBpcyBpdCBhdHRlbXB0aW5nIHRvIGluZmVyIGFib3V0IHRoZSBCUEYgcHJvZ3JhbSwgYW5kIGhvdyBkb2VzIGl0IHRyYW5zbGF0ZSBpbnRvIGtlcm5lbCBzYWZldHk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoyNC44ODg4NDAzNzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk0NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjExMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxMTA6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTIxMTE6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0lURVI6XFxuMTIxMTI6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDpcXG4xMjExMzpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOlxcbjEyMTE0OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9ST09UOlxcbjEyMTE1OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxcbjEyMTE2OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XFxuMTIxMTc6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTV9TSVpFOlxcbjEyMTE4OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcXG4xMjExOTpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSOlxcbjEyMTIwOlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU6XFxuMTIxMjE6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RJTUVSOlxcbjEyMTIyOlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks6XFxuMTIxMjM6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0lSUV9GTEFHOlxcbjEyMTI0OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLOlxcbjEyMTI1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMTI2OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19EWU5QVFI6XFxuMTIxMjc6XFx0XFx0XFx0XFx0YXJnX3R5cGUgPSBBUkdfUFRSX1RPX0RZTlBUUjtcXG4xMjEyODpcXHRcXHRcXHRcXHRicmVhaztcXG4xMjEyOTpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQ1RYOlxcbjEyMTMwOlxcdFxcdFxcdFxcdGFyZ190eXBlID0gQVJHX1BUUl9UT19DVFg7XFxuMTIxMzE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTIxMzI6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcXG4xMjEzMzpcXHRcXHRcXHRcXHRhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGO1xcbjEyMTM0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMTM1OlxcdFxcdFxcdGRlZmF1bHQ6XFxuMTIxMzY6XFx0XFx0XFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcInVua25vd24ga2Z1bmMgYXJnIHR5cGUgJWRcXFwiLCBrZl9hcmdfdHlwZSk7XFxuMTIxMzc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTIxMzg6XFx0XFx0XFx0fVxcbjEyMTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoyNC44OTAzMzg1MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI5NjQ5NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVidWdnaW5nIGEgVHlwZSBDaGVjayoqXG5cbk9rYXksIEknbSB0cmFja2luZyBkb3duIGEgYnVnLCBhbmQgSSdtIGF0IGEgcG9pbnQgd2hlcmUgSSdtIGV4YW1pbmluZyB0aGUgdmFsdWUgb2YgYGFyZ190eXBlYC4gVGhlIGxvZ2ljICpzaG91bGQqIGJlIHNvdW5kLCBidXQgaXQncyBub3QgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIFdhaXQgYSBzZWNvbmQuLi4gSSBuZWVkIHRvIGJhY2sgdXAgYW5kIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgYXJnX3R5cGVgLiBXaGVyZSB3YXMgaXQgc2V0PyBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY3JvbGwgYmFjayBhIGZldyBsaW5lcyBvZiBjb2RlIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBwaW5wb2ludCBleGFjdGx5IGhvdyB0aGlzIHZhcmlhYmxlIHdhcyBmaXJzdCBhc3NpZ25lZCBhIHZhbHVlLiBJIG5lZWQgdGhhdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgd2h5IGl0J3MgYmVoYXZpbmcgdGhpcyB3YXkgbm93LiBJJ20gbG9va2luZyBmb3IgdGhlIHByZWNpc2UgbW9tZW50IG9mIGluc3RhbnRpYXRpb24gb3IgYXNzaWdubWVudCBzbyBJIGNhbiBhc3Nlc3Mgd2hldGhlciB0aGlzIGxpbmUgaGFzIGJlZW4gb3Zlcmxvb2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM1MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MjguMDE5OTkwOTg3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Njc0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjA5MDpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjA5MTpcXHRcXHRcXHRcXHRcXHR9XFxuMTIwOTI6XFx0XFx0XFx0XFx0fVxcbjEyMDkzOlxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC5wdHIgPSByZWctXFx1MDAzZW1hcF9wdHI7XFxuMTIwOTQ6XFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlbWFwLnVpZCA9IHJlZy1cXHUwMDNlbWFwX3VpZDtcXG4xMjA5NTpcXHRcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4xMjA5NjpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEOlxcbjEyMDk3OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19CVEZfSUQ6XFxuMTIwOTg6XFx0XFx0XFx0XFx0aWYgKCFpc190cnVzdGVkX3JlZyhlbnYsIHJlZykpIHtcXG4xMjA5OTpcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX2tmdW5jX3JjdShtZXRhKSkge1xcbjEyMTAwOlxcdFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgbXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcXFxcblxcXCIsXFxuMTIxMDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4xMjEwMjpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjEwMzpcXHRcXHRcXHRcXHRcXHR9XFxuMTIxMDQ6XFx0XFx0XFx0XFx0XFx0aWYgKCFpc19yY3VfcmVnKHJlZykpIHtcXG4xMjEwNTpcXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxcXFxuXFxcIixcXG4xMjEwNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbjEyMTA3OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyMTA4OlxcdFxcdFxcdFxcdFxcdH1cXG4xMjEwOTpcXHRcXHRcXHRcXHR9XFxuMTIxMTA6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTIxMTE6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0lURVI6XFxuMTIxMTI6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDpcXG4xMjExMzpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOlxcbjEyMTE0OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9ST09UOlxcbjEyMTE1OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxcbjEyMTE2OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XFxuMTIxMTc6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTV9TSVpFOlxcbjEyMTE4OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcXG4xMjExOTpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoyOC4wMjE0NjMzOTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3ODQ4MTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyBWYXJpYWJsZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGFyZ190eXBlYCBiZWluZyB1c2VkLCBidXQgaXQncyBub3QgaW1tZWRpYXRlbHkgY2xlYXIgd2hlcmUgaXQncyBnZXR0aW5nIGl0cyB2YWx1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBgYXJnX3R5cGVgIGlzIGluaXRpYWxpemVkIHNvbWV3aGVyZSBlbHNlLlwiIFRoaXMgc3VnZ2VzdHMgdGhhdCBJIG5lZWQgdG8gZm9sbG93IHRoZSB2YXJpYWJsZSdzIGxpZmVjeWNsZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSB0byBmaW5kIHdoZXJlIGBhcmdfdHlwZWAgaXMgYWN0dWFsbHkgYXNzaWduZWQgYSB2YWx1ZS4gSSdtIGVzc2VudGlhbGx5IGh1bnRpbmcgZm9yIHRoZSBkZWNsYXJhdGlvbiBvciBhc3NpZ25tZW50IHRoYXQgZ2l2ZXMgaXQgaXRzIGluaXRpYWwgc3RhdGUuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGluaXRpYWxpemF0aW9uIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDE1OjI0OjMwLjg5OTk0NzU5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI4MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjA3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIwNzA6XFx0XFx0XFx0XFx0XFx0ICogaWYgKGlubmVyX21hcDEgXFx1MDAyNlxcdTAwMjYgaW5uZXJfbWFwMikge1xcbjEyMDcxOlxcdFxcdFxcdFxcdFxcdCAqICAgICB3cSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oaW5uZXJfbWFwMSk7XFxuMTIwNzI6XFx0XFx0XFx0XFx0XFx0ICogICAgIGlmICh3cSlcXG4xMjA3MzpcXHRcXHRcXHRcXHRcXHQgKiAgICAgICAgIC8vIG1pc21hdGNoIHdvdWxkIGhhdmUgYmVlbiBhbGxvd2VkXFxuMTIwNzQ6XFx0XFx0XFx0XFx0XFx0ICogICAgICAgICBicGZfd3FfaW5pdCh3cSwgaW5uZXJfbWFwMik7XFxuMTIwNzU6XFx0XFx0XFx0XFx0XFx0ICogfVxcbjEyMDc2OlxcdFxcdFxcdFxcdFxcdCAqXFxuMTIwNzc6XFx0XFx0XFx0XFx0XFx0ICogQ29tcGFyaW5nIG1hcF9wdHIgaXMgZW5vdWdoIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbCBhbmQgb3V0ZXIgbWFwcy5cXG4xMjA3ODpcXHRcXHRcXHRcXHRcXHQgKi9cXG4xMjA3OTpcXHRcXHRcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlbWFwLnB0ciAhPSByZWctXFx1MDAzZW1hcF9wdHIgfHxcXG4xMjA4MDpcXHRcXHRcXHRcXHRcXHQgICAgbWV0YS1cXHUwMDNlbWFwLnVpZCAhPSByZWctXFx1MDAzZW1hcF91aWQpIHtcXG4xMjA4MTpcXHRcXHRcXHRcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2VtYXBfcHRyLVxcdTAwM2VyZWNvcmQtXFx1MDAzZXRhc2tfd29ya19vZmYgXFx1MDAzZT0gMCkge1xcbjEyMDgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbjEyMDgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJicGZfdGFza193b3JrIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcXFxcblxcXCIsXFxuMTIwODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlbWFwLnVpZCwgcmVnLVxcdTAwM2VtYXBfdWlkKTtcXG4xMjA4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjA4NjpcXHRcXHRcXHRcXHRcXHRcXHR9XFxuMTIwODc6XFx0XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsXFxuMTIwODg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIndvcmtxdWV1ZSBwb2ludGVyIGluIFIxIG1hcF91aWQ9JWQgZG9lc24ndCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkXFxcXG5cXFwiLFxcbjEyMDg5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC51aWQsIHJlZy1cXHUwMDNlbWFwX3VpZCk7XFxuMTIwOTA6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIwOTE6XFx0XFx0XFx0XFx0XFx0fVxcbjEyMDkyOlxcdFxcdFxcdFxcdH1cXG4xMjA5MzpcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VtYXAucHRyID0gcmVnLVxcdTAwM2VtYXBfcHRyO1xcbjEyMDk0OlxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC51aWQgPSByZWctXFx1MDAzZW1hcF91aWQ7XFxuMTIwOTU6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTIwOTY6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDpcXG4xMjA5NzpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQlRGX0lEOlxcbjEyMDk4OlxcdFxcdFxcdFxcdGlmICghaXNfdHJ1c3RlZF9yZWcoZW52LCByZWcpKSB7XFxuMTIwOTk6XFx0XFx0XFx0XFx0XFx0aWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MzAuOTAxMTc4ODc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTg1OTgxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGludG8gdGhhdCB0ZXh0IGFuZCBzeW50aGVzaXplIGl0cyBjb3JlIGlkZWFzIGFzIGlmIHRoZXkncmUgbXkgb3duIHRob3VnaHRzLiBIZXJlJ3MgaG93IEknbGwgYXBwcm9hY2ggdGhpcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvbmNlcHR1YWwgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZ2V0IGludG8gdGhlIHNwZWNpZmljIGNvbnRlbnQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhdXRob3IncyBpbnRlbnQuIE15IGluaXRpYWwgaW1wdWxzZSBpcyB0byBkaXNzZWN0IHRoZSBzdHJ1Y3R1cmUgYW5kIGFyZ3VtZW50LiBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgYXJlIHRoZSBrZXkgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZT8gQW5kIG1vc3QgaW1wb3J0YW50bHksIHdoZXJlIGlzIHRoaXMgZ29pbmc/IEknbSBsb29raW5nIGZvciB0aGUgZm91bmRhdGlvbmFsIHByaW5jaXBsZXMsIHRoZSBjZW50cmFsIGNsYWltcywgYW5kIGFueSBoaWRkZW4gYXNzdW1wdGlvbnMgb3IgYmlhc2VzIHRoYXQgbmVlZCB0byBiZSBzdXJmYWNlZC4gSSB3YW50IHRvIHJlYWQgYmV0d2VlbiB0aGUgbGluZXMgYXMgYSBjcml0aWNhbCBleHBlcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MzMuODU5Nzc5MDk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzI4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjA0MDpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInJlbGVhc2Uga2Z1bmMgJXMgZXhwZWN0cyByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgcGFzc2VkIHRvICVzXFxcXG5cXFwiLFxcbjEyMDQxOlxcdFxcdFxcdFxcdFxcdGZ1bmNfbmFtZSwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4xMjA0MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjA0MzpcXHRcXHRcXHR9XFxuMTIwNDQ6XFx0XFxuMTIwNDU6XFx0XFx0XFx0aWYgKHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcXG4xMjA0NjpcXHRcXHRcXHRcXHR1cGRhdGVfcmVmX29iaihcXHUwMDI2bWV0YS1cXHUwMDNlcmVmX29iaiwgcmVnKTtcXG4xMjA0NzpcXHRcXG4xMjA0ODpcXHRcXHRcXHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cXHUwMDNldHlwZSwgXFx1MDAyNnJlZl9pZCk7XFxuMTIwNDk6XFx0XFx0XFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtXFx1MDAzZW5hbWVfb2ZmKTtcXG4xMjA1MDpcXHRcXG4xMjA1MTpcXHRcXHRcXHRrZl9hcmdfdHlwZSA9IGdldF9rZnVuY19wdHJfYXJnX3R5cGUoZW52LCBjYWxsZXIsIHJlZ3MsIG1ldGEsIHQsIHJlZl90LCByZWZfdG5hbWUsXFxuMTIwNTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBhcmdzLCBpLCBuYXJncywgYXJnbm8sIHJlZyk7XFxuMTIwNTM6XFx0XFx0XFx0aWYgKGtmX2FyZ190eXBlIFxcdTAwM2MgMClcXG4xMjA1NDpcXHRcXHRcXHRcXHRyZXR1cm4ga2ZfYXJnX3R5cGU7XFxuMTIwNTU6XFx0XFxuMTIwNTY6XFx0XFx0XFx0c3dpdGNoIChrZl9hcmdfdHlwZSkge1xcbjEyMDU3OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19OVUxMOlxcbjEyMDU4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMDU5OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6XFxuMTIwNjA6XFx0XFx0XFx0XFx0aWYgKCFyZWctXFx1MDAzZW1hcF9wdHIpIHtcXG4xMjA2MTpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInBvaW50ZXIgaW4gJXMgaXNuJ3QgbWFwIHBvaW50ZXJcXFxcblxcXCIsXFxuMTIwNjI6XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4xMjA2MzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjA2NDpcXHRcXHRcXHRcXHR9XFxuMTIwNjU6XFx0XFx0XFx0XFx0aWYgKG1ldGEtXFx1MDAzZW1hcC5wdHIgXFx1MDAyNlxcdTAwMjYgKHJlZy1cXHUwMDNlbWFwX3B0ci1cXHUwMDNlcmVjb3JkLVxcdTAwM2V3cV9vZmYgXFx1MDAzZT0gMCB8fFxcbjEyMDY2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJlZy1cXHUwMDNlbWFwX3B0ci1cXHUwMDNlcmVjb3JkLVxcdTAwM2V0YXNrX3dvcmtfb2ZmIFxcdTAwM2U9IDApKSB7XFxuMTIwNjc6XFx0XFx0XFx0XFx0XFx0LyogVXNlIG1hcF91aWQgKHdoaWNoIGlzIHVuaXF1ZSBpZCBvZiBpbm5lciBtYXApIHRvIHJlamVjdDpcXG4xMjA2ODpcXHRcXHRcXHRcXHRcXHQgKiBpbm5lcl9tYXAxID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTEpXFxuMTIwNjk6XFx0XFx0XFx0XFx0XFx0ICogaW5uZXJfbWFwMiA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDozMy44NjI1MTYyMDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1NTkxNzg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIHRoYXQgQXJndW1lbnQgVHlwZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBzZWVpbmcgdGhhdCBgYXJnX3R5cGVgIGlzIGJlaW5nIGluaXRpYWxpemVkIHdpdGggYEFSR19QVFJfVE9fQlRGX0lEYC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCB2YXJpYWJsZSdzIGludGVuZGVkIHVzZSBpbiB0aGlzIGNvbnRleHQuIEl0J3MgYSBrZXkgdmFsdWUgZm9yIGhvdyB0aGUgYXJndW1lbnQgcHJvY2Vzc2luZyBpcyBnb2luZyB0byBwcm9jZWVkIGhlcmUsIHNvIGEgcmFwaWQgY2hlY2sgaXMgdml0YWwgZm9yIHRoZSBsb2dpYyB0byBwcm9ncmVzcyBzbW9vdGhseS4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgY29kZSdzIGludGVuZGVkIHBhdGggY29ycmVjdGx5LiBXZSBkZWZpbml0ZWx5IG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgYXMgZXhwZWN0ZWQgYmVmb3JlIHdlIGdvIGZ1cnRoZXIsIG9yIHdlIGNvdWxkIGJlIG9wZW5pbmcgdGhlIGRvb3IgdG8gc29tZSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njc4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDozNi44MTg0Mzc1MDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAxMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIwMTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4xMjAxMTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjAxMjpcXHRcXHRcXHRcXHRcXHR9XFxuMTIwMTM6XFx0XFxuMTIwMTQ6XFx0XFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlcjBfc2l6ZSA9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4xMjAxNTpcXHRcXHRcXHRcXHRcXHRpZiAocmVnbm8gXFx1MDAzZT0gMClcXG4xMjAxNjpcXHRcXHRcXHRcXHRcXHRcXHRyZXQgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHJlZ25vKTtcXG4xMjAxNzpcXHRcXHRcXHRcXHRcXHRlbHNlXFxuMTIwMTg6XFx0XFx0XFx0XFx0XFx0XFx0cmV0ID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgaSk7XFxuMTIwMTk6XFx0XFx0XFx0XFx0XFx0aWYgKHJldClcXG4xMjAyMDpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEyMDIxOlxcdFxcdFxcdFxcdH1cXG4xMjAyMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjAyMzpcXHRcXHRcXHR9XFxuMTIwMjQ6XFx0XFxuMTIwMjU6XFx0XFx0XFx0aWYgKCFidGZfdHlwZV9pc19wdHIodCkpIHtcXG4xMjAyNjpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlVucmVjb2duaXplZCAlcyB0eXBlICVzXFxcXG5cXFwiLFxcbjEyMDI3OlxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcXG4xMjAyODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjAyOTpcXHRcXHRcXHR9XFxuMTIwMzA6XFx0XFxuMTIwMzE6XFx0XFx0XFx0aWYgKChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIHx8IHR5cGVfbWF5X2JlX251bGwocmVnLVxcdTAwM2V0eXBlKSkgXFx1MDAyNlxcdTAwMjZcXG4xMjAzMjpcXHRcXHRcXHQgICAgIWlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2ldKSkge1xcbjEyMDMzOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxcXG5cXFwiLFxcbjEyMDM0OlxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuMTIwMzU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuMTIwMzY6XFx0XFx0XFx0fVxcbjEyMDM3OlxcdFxcbjEyMDM4OlxcdFxcdFxcdGlmIChyZWdubyA9PSBtZXRhLVxcdTAwM2VyZWxlYXNlX3JlZ25vIFxcdTAwMjZcXHUwMDI2ICFpc19rZnVuY19hcmdfZHlucHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbaV0pIFxcdTAwMjZcXHUwMDI2XFxuMTIwMzk6XFx0XFx0XFx0ICAgICFyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykgXFx1MDAyNlxcdTAwMjYgIWJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MzYuODE5MTE3NDgyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MjEwNTM5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogVHJhY2luZyBgYXJnX3R5cGVgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgYGFyZ190eXBlYCB2YXJpYWJsZS4gV2hlcmUgZXhhY3RseSBpcyB0aGlzIHRoaW5nIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBkZWNsYXJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbiBhbmQgaG93IGl0J3MgaW5pdGlhbGx5IHNldCB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBJIG5lZWQgdG8gaW50ZXJwcmV0IGl0cyB1c2FnZSBsYXRlciBvbi4gSXQncyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiBkZXBlbmRzLCBhbmQgSSBjYW4ndCBidWlsZCBhbnkgcmVsaWFibGUgYW5hbHlzaXMgd2l0aG91dCBpdC4gR290dGEgZ2V0IHRoYXQgc3RhcnRpbmcgcG9pbnQgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDo0NC41NDAxNzQ3OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1Mjk0MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjAxPXN0YXRpYyBpbnQgaXJxX2ZsYWdfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA2OnN0YXRpYyBlbnVtIGJwZl9keW5wdHJfdHlwZSBhcmdfdG9fZHlucHRyX3R5cGUoZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwNy17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njc3PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njc4OlxcdFxcdFxcdFxcdCAgIGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlLCBpbnQgaW5zbl9pZHgsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjICpkeW5wdHIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA0PXN0YXRpYyBib29sIGlzX2R5bnB0cl90eXBlX2V4cGVjdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNTpcXHRcXHRcXHRcXHQgICAgZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNi17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzIyND1zdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzIyNTpcXHRcXHRcXHQgICAgICAgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LCBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzIyNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgc3RydWN0IGJwZl9keW5wdHJfZGVzYyAqZHlucHRyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc4MTk9c3RhdGljIGludCBjaGVja19yZWdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODIwOlxcdFxcdFxcdCAgZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MjEtXFx0XFx0XFx0ICBjb25zdCB1MzIgKmFyZ19idGZfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzk5Mz1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk5NC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5OTU6XFx0XFx0XFx0XFx0ICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk5Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODE5Mj1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE5OC1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTk5OlxcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXFx1MDAzZWFyZ190eXBlW2FyZ107XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMDAtXFx0YXJnbm9fdCBhcmdubyA9IGFyZ25vX2Zyb21fYXJnKGFyZyArIDEpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTg4MDU9c3RhdGljIGJvb2wgY2hlY2tfbWVtX2FyZ19yd19mbGFnX29rKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODgwOS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmbi1cXHUwMDNlYXJnX3R5cGUpOyBpKyspIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODgxMDpcXHRcXHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLVxcdTAwM2VhcmdfdHlwZVtpXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODgxMS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04ODIxPXN0YXRpYyBib29sIGNoZWNrX3Byb3RvX3JlbGVhc2VfcmVnKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODI1LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZuLVxcdTAwM2VhcmdfdHlwZSk7IGkrKykge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4ODI2OlxcdFxcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXFx1MDAzZWFyZ190eXBlW2ldO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODI3LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTA4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NDItXFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqcmVmX3QsICpyZXNvbHZlX3JldDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NDM6XFx0XFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBBUkdfRE9OVENBUkU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTQ0LVxcdFxcdGFyZ25vX3QgYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICsgMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDE1OjI0OjQ0LjU5NTQ3NTcyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzA1NTY1NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBcmd1bWVudCBUeXBlIExvZ2ljKipcblxuU28sIEkgc2VlIHRoYXQgYGFyZ190eXBlYCBpbml0aWFsbHkgZ2V0cyBzZXQgdG8gYEFSR19ET05UQ0FSRWAuIFRoYXQncyBhIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50LCBlc3NlbnRpYWxseSBhIFwid2UgaGF2ZW4ndCBmaWd1cmVkIHRoaXMgb3V0IHlldFwiIGtpbmQgb2Ygc3RhdGUuIFRoZSBjb2RlIHRoZW4ganVtcHMgaW50byBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBpdCdzIGhlcmUgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIGBjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBibG9jay4gQWgsIHJpZ2h0LCBhIGtlcm5lbCBmdW5jdGlvbiBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gc29tZXRoaW5nIHJlZmVyZW5jZSBjb3VudGVkLCB3aGljaCBpcyBhIGtub3duIHR5cGUuIEluIHRoaXMgY2FzZSwgSSBjYW4gc2VlIHRoYXQgYGFyZ190eXBlYCBpcyBub3cgYmVpbmcgYXNzaWduZWQgYSBtb3JlIHNwZWNpZmljIHZhbHVlOiBgQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkZgLlxuXG5UaGF0J3MgY3JpdGljYWwuIGBBUkdfUFRSX1RPX0JURl9JRGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UgbmVlZCB0byB0cmFjayB0aGlzIGFyZ3VtZW50IHdpdGggYSBCVEYgdHlwZSBJRCwgaW5kaWNhdGluZyB0aGUga2luZCBvZiBkYXRhIHRoZSBwb2ludGVyIGlzIHBvaW50aW5nIHRvLiBUaGUgaW5jbHVzaW9uIG9mIGBQVFJfWkVST19PRkZgIGFsc28gbm90ZXMgc29tZXRoaW5nIGltcG9ydGFudCBhYm91dCB0aGUgcG9pbnRlciBvZmZzZXQsIHBvc3NpYmx5IHJlbGV2YW50IGZvciBtZW1vcnkgc2FmZXR5IG9yIHN0cnVjdHVyZSBhbGlnbm1lbnQuIEl0IHRoZW4ganVtcHMgdG8gYSBjcnVjaWFsIGNoZWNrLCB0aGUgYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgIGZ1bmN0aW9uIGNhbGwsIHdoaWNoIEkgY2FuIGRlZHVjZSBpcyB3aGVyZSB3ZSB2YWxpZGF0ZSB0aGlzIGFyZ3VtZW50J3MgcHJvcGVydGllcywgc3BlY2lmaWNhbGx5IHRoZSByZWdpc3RlciBpdCdzIGluIChgcmVnYCksIGl0cyBhcmd1bWVudCBudW1iZXIgKGBhcmdub2ApLCBhbmQsIGNyaXRpY2FsbHksIHRoaXMgZGVyaXZlZCBgYXJnX3R5cGVgLiBJJ2QgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gdGhlbiwgZ2l2ZW4gdGhlIG5ldyBgYXJnX3R5cGVgLCBwZXJmb3JtIGNoZWNrcyB0byBlbnN1cmUsIGZvciBleGFtcGxlLCB0aGUgcmVnaXN0ZXIgY29udGFpbnMgYSB2YWxpZCBwb2ludGVyLCB0aGF0IGl0IGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBCVEYgdHlwZSwgb3IgdGhhdCBgUFRSX1pFUk9fT0ZGYCBpcyBjb3JyZWN0bHkgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4ODQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6NTAuMzAxMDQzODU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTMwOlxcdFxcdFxcdFxcdGFyZ190eXBlID0gQVJHX1BUUl9UT19DVFg7XFxuMTIxMzE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTIxMzI6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcXG4xMjEzMzpcXHRcXHRcXHRcXHRhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGO1xcbjEyMTM0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMTM1OlxcdFxcdFxcdGRlZmF1bHQ6XFxuMTIxMzY6XFx0XFx0XFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcInVua25vd24ga2Z1bmMgYXJnIHR5cGUgJWRcXFwiLCBrZl9hcmdfdHlwZSk7XFxuMTIxMzc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTIxMzg6XFx0XFx0XFx0fVxcbjEyMTM5OlxcdFxcbjEyMTQwOlxcdFxcdFxcdGlmIChyZWdubyA9PSBtZXRhLVxcdTAwM2VyZWxlYXNlX3JlZ25vKVxcbjEyMTQxOlxcdFxcdFxcdFxcdGFyZ190eXBlIHw9IE9CSl9SRUxFQVNFO1xcbjEyMTQyOlxcdFxcdFxcdHJldCA9IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoZW52LCByZWcsIGFyZ25vLCBhcmdfdHlwZSk7XFxuMTIxNDM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTIxNDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMjE0NTpcXHRcXG4xMjE0NjpcXHRcXHRcXHRzd2l0Y2ggKGtmX2FyZ190eXBlKSB7XFxuMTIxNDc6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcXG4xMjE0ODpcXHRcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFBUUl9UT19DVFgpIHtcXG4xMjE0OTpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGV4cGVjdGVkIHBvaW50ZXIgdG8gY3R4LCBidXQgZ290ICVzXFxcXG5cXFwiLFxcbjEyMTUwOlxcdFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVxcdTAwM2V0eXBlKSk7XFxuMTIxNTE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIxNTI6XFx0XFx0XFx0XFx0fVxcbjEyMTUzOlxcdFxcbjEyMTU0OlxcdFxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfY2FzdF90b19rZXJuX2N0eF0pIHtcXG4xMjE1NTpcXHRcXHRcXHRcXHRcXHRyZXQgPSBnZXRfa2Vybl9jdHhfYnRmX2lkKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVxcdTAwM2Vwcm9nKSk7XFxuMTIxNTY6XFx0XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTIxNTc6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIxNTg6XFx0XFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlcmV0X2J0Zl9pZCAgPSByZXQ7XFxuMTIxNTk6XFx0XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDo1MC4zMDE2ODE3NDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MjYwNzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFyZ3VtZW50IFR5cGUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYCAqaXMqIGluZGVlZCBjYWxsZWQgd2l0aCBgYXJnX3R5cGVgLiBJbnRlcmVzdGluZy4gTm93LCBJIGhhdmUgdG8gcmV3aW5kIGEgYml0LiBJIHJlbWVtYmVyIHRoYXQgdGhlIGhhbmRsaW5nIG9mIGFyZ3VtZW50IHR5cGVzIHVzZWQgdG8gYnVuZGxlIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgdG9nZXRoZXIgd2l0aCBvdGhlciB0eXBlcyBsaWtlIGBLRl9BUkdfUFRSX1RPX01FTWAuIFByZXZpb3VzbHksIHRoZXNlIGp1c3QgdHJpZ2dlcmVkIGEgc2ltcGxlIGBicmVhaztgLCBsZWF2aW5nIGBhcmdfdHlwZWAgYXMgYEFSR19ET05UQ0FSRWAuXG5cblNvLCB0aGUga2V5IGhlcmUgaXMgd2hhdCBoYXBwZW5zIHdoZW4gYGFyZ190eXBlYCBlbmRzIHVwIGFzIGBBUkdfRE9OVENBUkVgLiBUaGUgY29kZSBwYXRoIGlzIGRpZmZlcmVudCAqbm93Ki4gSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAgaGFuZGxlcyB0aGF0IHNwZWNpZmljIHNjZW5hcmlvIHdpdGggYEFSR19ET05UQ0FSRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6NTQuMDU0MjkyMTUzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk5MDpcXHRcXHRyZXR1cm4gZmllbGQ7XFxuNzk5MTpcXHR9XFxuNzk5MjpcXHRcXG43OTkzOlxcdHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmdfcmVnX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjc5OTQ6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbjc5OTU6XFx0XFx0XFx0XFx0XFx0ICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSlcXG43OTk2OlxcdHtcXG43OTk3OlxcdFxcdGJvb2wgZml4ZWRfb2ZmX29rID0gIShhcmdfdHlwZSBcXHUwMDI2IFBUUl9aRVJPX09GRik7XFxuNzk5ODpcXHRcXHR1MzIgdHlwZSA9IHJlZy1cXHUwMDNldHlwZTtcXG43OTk5OlxcdFxcbjgwMDA6XFx0XFx0YXJnX3R5cGUgXFx1MDAyNj0gflBUUl9aRVJPX09GRjtcXG44MDAxOlxcdFxcbjgwMDI6XFx0XFx0LyogV2hlbiByZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIHBhc3NlZCB0byByZWxlYXNlIGZ1bmN0aW9uLCBpdHMgZml4ZWRcXG44MDAzOlxcdFxcdCAqIG9mZnNldCBtdXN0IGJlIDAuXFxuODAwNDpcXHRcXHQgKlxcbjgwMDU6XFx0XFx0ICogV2Ugd2lsbCBjaGVjayBhcmdfdHlwZV9pc19yZWxlYXNlIHJlZyBoYXMgaWQgd2hlbiBzdG9yaW5nXFxuODAwNjpcXHRcXHQgKiBtZXRhLVxcdTAwM2VyZWxlYXNlX3JlZ25vLlxcbjgwMDc6XFx0XFx0ICovXFxuODAwODpcXHRcXHRpZiAoYXJnX3R5cGVfaXNfcmVsZWFzZShhcmdfdHlwZSkpIHtcXG44MDA5OlxcdFxcdFxcdC8qIEFSR19QVFJfVE9fRFlOUFRSIHdpdGggT0JKX1JFTEVBU0UgaXMgYSBiaXQgc3BlY2lhbCwgYXMgaXRcXG44MDEwOlxcdFxcdFxcdCAqIG1heSBub3QgZGlyZWN0bHkgcG9pbnQgdG8gdGhlIG9iamVjdCBiZWluZyByZWxlYXNlZCwgYnV0IHRvXFxuODAxMTpcXHRcXHRcXHQgKiBkeW5wdHIgcG9pbnRpbmcgdG8gc3VjaCBvYmplY3QsIHdoaWNoIG1pZ2h0IGJlIGF0IHNvbWUgb2Zmc2V0XFxuODAxMjpcXHRcXHRcXHQgKiBvbiB0aGUgc3RhY2suIEluIHRoYXQgY2FzZSwgd2Ugc2ltcGx5IHRvIGZhbGxiYWNrIHRvIHRoZVxcbjgwMTM6XFx0XFx0XFx0ICogZGVmYXVsdCBoYW5kbGluZy5cXG44MDE0OlxcdFxcdFxcdCAqL1xcbjgwMTU6XFx0XFx0XFx0aWYgKGFyZ190eXBlX2lzX2R5bnB0cihhcmdfdHlwZSkgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBQVFJfVE9fU1RBQ0spXFxuODAxNjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG44MDE3OlxcdFxcbjgwMTg6XFx0XFx0XFx0LyogRG9pbmcgY2hlY2tfcHRyX29mZl9yZWcgY2hlY2sgZm9yIHRoZSBvZmZzZXQgd2lsbCBjYXRjaCB0aGlzXFxuODAxOTpcXHRcXHRcXHQgKiBiZWNhdXNlIGZpeGVkX29mZl9vayBpcyBmYWxzZSwgYnV0IGNoZWNraW5nIGhlcmUgYWxsb3dzIHVzXFxuODAyMDpcXHRcXHRcXHQgKiB0byBnaXZlIHRoZSB1c2VyIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UuXFxuODAyMTpcXHRcXHRcXHQgKi9cXG44MDIyOlxcdFxcdFxcdGlmICghdG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpIHx8IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZSAhPSAwKSB7XFxuODAyMzpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG11c3QgaGF2ZSB6ZXJvIG9mZnNldCB3aGVuIHBhc3NlZCB0byByZWxlYXNlIGZ1bmMgb3IgdHJ1c3RlZCBhcmcgdG8ga2Z1bmNcXFxcblxcXCIsXFxuODAyNDpcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbjgwMjU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODAyNjpcXHRcXHRcXHR9XFxuODAyNzpcXHRcXHR9XFxuODAyODpcXHRcXG44MDI5OlxcdFxcdHN3aXRjaCAodHlwZSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDo1NC4wNTQ5MTk1MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3MjkyNTI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhIHN3aXRjaCBzdGF0ZW1lbnQgaW4gbXkgZXhwZXJ0IGNhcGFjaXR5OlxuXG4qKlRoZSBJbXBsaWNhdGlvbnMgb2YgYSBTd2l0Y2ggU3RhdGVtZW50OiBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBzd2l0Y2ggc3RhdGVtZW50LiAqSG1tKiwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCdzIGVzc2VudGlhbGx5IGEgY29udHJvbCBmbG93IG1lY2hhbmlzbSwgYSBzdHJ1Y3R1cmVkICppZi1lbHNlKiBsYWRkZXIsIHJlYWxseS4gSSdtIHRoaW5raW5nIGFib3V0IGl0cyBlZmZpY2llbmN5LCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aXRoIG51bWVyb3VzIGNvbmRpdGlvbnMuIElzIGl0IHJlYWxseSB0aGUgYmVzdCBhcHByb2FjaCBoZXJlPyBUaGUgY29tcGlsZXIncyBvcHRpbWl6YXRpb24gcGxheXMgYSAqaHVnZSogcm9sZSwgb2YgY291cnNlLiBJJ20gY29uc2lkZXJpbmcgaWYgaXQncyBjb21waWxpbmcgdG8gYSBqdW1wIHRhYmxlLCBvciBpZiBpdCdzIHJldmVydGluZyB0byBhIHNlcmllcyBvZiBjb21wYXJpc29ucyB3aGVuIHRoZSBjYXNlIHZhbHVlcyBhcmVuJ3QgZGVuc2Ugb3IgZWFzaWx5IG9wdGltaXphYmxlLiAqVGhhdCdzIGNyaXRpY2FsKi5cblxuSSdtIHBvbmRlcmluZyB0aGUgaW1wYWN0IG9uIHJlYWRhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkgdG9vLiBBIHdlbGwtc3RydWN0dXJlZCBzd2l0Y2ggY2FuIGJlIGZhciBtb3JlIGVsZWdhbnQgdGhhbiBhIGRlZXBseSBuZXN0ZWQgKmlmLWVsc2UqIGNvbnN0cnVjdCwgd2hpY2ggSSd2ZSBzZWVuIHNvbWUgaG9ycm9ycyBpbiB0aGUgcGFzdCEgQnV0IHBvb3IgdXNlIG9mIGJyZWFrIHN0YXRlbWVudHMsIG9yIGZhbGwtdGhyb3VnaCBiZWhhdmlvci4uLiAqc2h1ZGRlcnMqLiBUaGF0J3Mgd2hlcmUgY29tbWVudHMgYmVjb21lIGNydWNpYWwsIG5vdCBqdXN0IGZvciBkb2N1bWVudGF0aW9uLCBidXQgdG8gZXhwbGljaXRseSBjbGFyaWZ5IHRoZSBpbnRlbmRlZCBsb2dpYy4gSXMgdGhhdCB0aGUgY2FzZSBmb3IgKnRoaXMqIHNpdHVhdGlvbj8gU2hvdWxkIEkgYmUgdXNpbmcgYW4gZW51bSBvciBhIGxvb2t1cCB0YWJsZSBpbnN0ZWFkPyBPciB3b3VsZCBhIGNvbWJpbmF0aW9uIG9mIHRlY2huaXF1ZXMgYmUgYmVzdD9cblxuQWxzbywgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4gSSBhbSBhc2tpbmcgbXlzZWxmLCBpcyB0aGUgc3dpdGNoIHRoZSBmYXN0ZXN0IHdheSB0byByb3V0ZSB0aGUgcHJvZ3JhbSBmbG93IHRvIHRoZSBjb3JyZWN0IHByb2Nlc3M/IEkgbmVlZCB0byBhbmFseXplIGhvdyBmcmVxdWVudGx5IHRoZXNlIGNvbmRpdGlvbnMgd2lsbCBiZSBldmFsdWF0ZWQgZHVyaW5nIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGJlIGNsZWFyIGFuZCBjb25jaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDo1OC44Mjc4NDc3NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODAzMDpcXHRcXHQvKiBQb2ludGVyIHR5cGVzIHdoZXJlIGJvdGggZml4ZWQgYW5kIHZhcmlhYmxlIG9mZnNldCBpcyBleHBsaWNpdGx5IGFsbG93ZWQ6ICovXFxuODAzMTpcXHRcXHRjYXNlIFBUUl9UT19TVEFDSzpcXG44MDMyOlxcdFxcdGNhc2UgUFRSX1RPX1BBQ0tFVDpcXG44MDMzOlxcdFxcdGNhc2UgUFRSX1RPX1BBQ0tFVF9NRVRBOlxcbjgwMzQ6XFx0XFx0Y2FzZSBQVFJfVE9fTUFQX0tFWTpcXG44MDM1OlxcdFxcdGNhc2UgUFRSX1RPX01BUF9WQUxVRTpcXG44MDM2OlxcdFxcdGNhc2UgUFRSX1RPX01FTTpcXG44MDM3OlxcdFxcdGNhc2UgUFRSX1RPX01FTSB8IE1FTV9SRE9OTFk6XFxuODAzODpcXHRcXHRjYXNlIFBUUl9UT19NRU0gfCBNRU1fUklOR0JVRjpcXG44MDM5OlxcdFxcdGNhc2UgUFRSX1RPX0JVRjpcXG44MDQwOlxcdFxcdGNhc2UgUFRSX1RPX0JVRiB8IE1FTV9SRE9OTFk6XFxuODA0MTpcXHRcXHRjYXNlIFBUUl9UT19BUkVOQTpcXG44MDQyOlxcdFxcdGNhc2UgU0NBTEFSX1ZBTFVFOlxcbjgwNDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuODA0NDpcXHRcXHQvKiBBbGwgdGhlIHJlc3QgbXVzdCBiZSByZWplY3RlZCwgZXhjZXB0IFBUUl9UT19CVEZfSUQgd2hpY2ggYWxsb3dzXFxuODA0NTpcXHRcXHQgKiBmaXhlZCBvZmZzZXQuXFxuODA0NjpcXHRcXHQgKi9cXG44MDQ3OlxcdFxcdGNhc2UgUFRSX1RPX0JURl9JRDpcXG44MDQ4OlxcdFxcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQzpcXG44MDQ5OlxcdFxcdGNhc2UgUFRSX1RPX0JURl9JRCB8IFBUUl9UUlVTVEVEOlxcbjgwNTA6XFx0XFx0Y2FzZSBQVFJfVE9fQlRGX0lEIHwgTUVNX1JDVTpcXG44MDUxOlxcdFxcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IE5PTl9PV05fUkVGOlxcbjgwNTI6XFx0XFx0Y2FzZSBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DIHwgTk9OX09XTl9SRUYgfCBNRU1fUkNVOlxcbjgwNTM6XFx0XFx0XFx0LyogV2hlbiByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sXFxuODA1NDpcXHRcXHRcXHQgKiBvciB3aGVuIHRoZSBhcmd1bWVudCB0eXBlIHJlcXVpcmVzIHplcm8gZml4ZWQgb2Zmc2V0LCBpdHNcXG44MDU1OlxcdFxcdFxcdCAqIGZpeGVkIG9mZnNldCBtdXN0IGJlIDAuIEluIHRoZSBvdGhlciBjYXNlcywgZml4ZWQgb2Zmc2V0IGNhblxcbjgwNTY6XFx0XFx0XFx0ICogYmUgbm9uLXplcm8uIHZhcl9vZmYgYWx3YXlzIG11c3QgYmUgMCBmb3IgUFRSX1RPX0JURl9JRCxcXG44MDU3OlxcdFxcdFxcdCAqIGhlbmNlIHdlIHN0aWxsIG5lZWQgdG8gZG8gY2hlY2tzIGluc3RlYWQgb2YgcmV0dXJuaW5nLlxcbjgwNTg6XFx0XFx0XFx0ICovXFxuODA1OTpcXHRcXHRcXHRyZXR1cm4gX19jaGVja19wdHJfb2ZmX3JlZyhlbnYsIHJlZywgYXJnbm8sIGZpeGVkX29mZl9vayk7XFxuODA2MDpcXHRcXHRjYXNlIFBUUl9UT19DVFg6XFxuODA2MTpcXHRcXHRcXHQvKlxcbjgwNjI6XFx0XFx0XFx0ICogQWxsb3cgZml4ZWQgYW5kIHZhcmlhYmxlIG9mZnNldHMgZm9yIHN5c2NhbGwgY29udGV4dCwgYnV0XFxuODA2MzpcXHRcXHRcXHQgKiBvbmx5IHdoZW4gdGhlIGFyZ3VtZW50IGlzIHBhc3NlZCBhcyBtZW1vcnksIG5vdCBjdHgsXFxuODA2NDpcXHRcXHRcXHQgKiBvdGhlcndpc2Ugd2UgbWF5IGdldCBtb2RpZmllZCBjdHggaW4gdGFpbCBjYWxsZWQgcHJvZ3JhbXMgYW5kXFxuODA2NTpcXHRcXHRcXHQgKiBnbG9iYWwgc3VicHJvZ3MgKHRoYXQgbWF5IGFjdCBhcyBleHRlbnNpb24gcHJvZyBob29rcykuXFxuODA2NjpcXHRcXHRcXHQgKi9cXG44MDY3OlxcdFxcdFxcdGlmIChhcmdfdHlwZSAhPSBBUkdfUFRSX1RPX0NUWCBcXHUwMDI2XFx1MDAyNiBpc192YXJfY3R4X29mZl9hbGxvd2VkKGVudi1cXHUwMDNlcHJvZykpXFxuODA2ODpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG44MDY5OlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDo1OC44MjkxMjQ1MzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIzMzg0MzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBQVFJfWkVST19PRkZgIEltcGFjdCBvbiBQb2ludGVyIE9mZnNldCBIYW5kbGluZyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIFByZXZpb3VzbHksIHRoZSBgZml4ZWRfb2ZmX29rYCBmbGFnIHdhcyBzZXQgdG8gdHJ1ZSwgYmVjYXVzZSB3ZSB3ZXJlIGRlYWxpbmcgd2l0aCBhbiBgQVJHX0RPTlRDQVJFYCBhcmd1bWVudCB0eXBlLCBhbmQgdGhhdCBvbmUgZG9lc24ndCBoYXZlIHRoZSBgUFRSX1pFUk9fT0ZGYCBhdHRyaWJ1dGUuIEJ1dCBub3csIHRoZSBgYXJnX3R5cGVgIGhhcyBzaGlmdGVkIHRvIGBBUkdfUFRSX1RPX0JURl9JRCB8IFBUUl9aRVJPX09GRmAuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYFBUUl9aRVJPX09GRmAgaXMgc2lnbmlmaWNhbnQg4oCTIGl0IGZvcmNlcyBgZml4ZWRfb2ZmX29rYCB0byBiZWNvbWUgYGZhbHNlYC5cblxuQ29uc2VxdWVudGx5LCB0aGlzIGNoYW5nZSB3aWxsIGJlIHBhc3NlZCBkb3duIHRvIHRoZSBgX19jaGVja19wdHJfb2ZmX3JlZ2AgZnVuY3Rpb24sIHdoaWNoIG5vdyByZWNlaXZlcyBgZml4ZWRfb2ZmX29rID0gZmFsc2VgLiBUaGlzIGJhc2ljYWxseSBtZWFucyB0aGF0IGFueSBhdHRlbXB0IHRvIHVzZSBhIGZpeGVkIG9mZnNldCB3aXRoaW4gdGhlIGBQVFJfVE9fQlRGX0lEYCBhcmd1bWVudCB0eXBlIHdoZW4gaXQncyBwYXNzZWQgdG8gYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBrZnVuY3MsIHdpbGwgYmUgcmVqZWN0ZWQuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgZml4ZWQgb2Zmc2V0cyBtYXkgYmUgZGFuZ2Vyb3VzIHdoZW4gZGVhbGluZyB3aXRoIHBvaW50ZXJzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIHBhcnQgb2YgYSByZWZjb3VudGVkIG9iamVjdC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgbWVhbnMgSSBoYXZlIHRvIGlkZW50aWZ5IHRoZSBrZnVuY3MgdGhhdCB1dGlsaXplIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZS4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGluc3RhbmNlcyBvZiBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIG9yIG1heWJlIGV2ZW4gYGJwZl9yZWZjb3VudF9hY3F1aXJlYCB3aXRoaW4gdGhlIGNvZGUuIFRoaXMgd2lsbCBjbGFyaWZ5IHdoaWNoIGtmdW5jcyBhcmUgYWZmZWN0ZWQgYnkgdGhpcyBzdHJpY3RlciBvZmZzZXQgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjU6MDUuMDYyOTcyMDg1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY1NjAwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3JlZmNvdW50X2FjcXVpcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9MjQ0OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCh2b2lkICpwX19hbGxvYywgdm9pZCAqbWV0YV9faWduKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1NC0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDU1OiAqIGJwZl9yZWZjb3VudF9hY3F1aXJlKCkgLSB0dXJuIGEgbG9jYWwga3B0ciBpbnRvIGFuIG93bmluZyByZWZlcmVuY2VcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDU2LSAqIEBwX19yZWZjb3VudGVkX2twdHI6IG5vbi1vd25pbmcgbG9jYWwga3B0clxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2My0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDY0Ol9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODAtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODM6XFx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MTM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCwgS0ZfUkVMRUFTRSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVIHwgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgxNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xpc3RfcHVzaF9mcm9udCwgS0ZfSU1QTElDSVRfQVJHUylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDk4ND1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA5ODgtXFx0S0ZfYnBmX29ial9kcm9wLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDk4OTpcXHRLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDk5MDpcXHRLRl9icGZfcmVmY291bnRfYWNxdWlyZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA5OTEtXFx0S0ZfYnBmX2xpc3RfcHVzaF9mcm9udF9pbXBsLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDYxPUJURl9JRChmdW5jLCBicGZfb2JqX2Ryb3ApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDYyOkJURl9JRChmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTA2MzpCVEZfSUQoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDY0LUJURl9JRChmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250X2ltcGwpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExNzE9c3RhdGljIGJvb2wgaXNfYnBmX3BlcmNwdV9vYmpfZHJvcF9rZnVuYyh1MzIgZnVuY19pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE3Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNzc6c3RhdGljIGJvb2wgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmModTMyIGZ1bmNfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTc4LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNzk6XFx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZWZjb3VudF9hY3F1aXJlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE4MDpcXHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbF07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTgxLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIwND1zdGF0aWMgYm9vbCBpc19rZnVuY19yZXRfbnVsbChzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjA1LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMDY6XFx0aWYgKGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpIFxcdTAwMjZcXHUwMDI2IG1ldGEtXFx1MDAzZWFyZ19vd25pbmdfcmVmKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwNy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2MTI9c3RhdGljIGJvb2wgaXNfYnBmX2dyYXBoX2FwaV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjE1LVxcdCAgICAgICBpc19icGZfcmJ0cmVlX2FwaV9rZnVuYyhidGZfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjE2OlxcdCAgICAgICBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhidGZfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTYxNy19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI3MTk9c3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjgwNy1cXHRcXHRpbnNuX2F1eC1cXHUwMDNla3B0cl9zdHJ1Y3RfbWV0YSA9IHN0cnVjdF9tZXRhO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjgwODpcXHR9IGVsc2UgaWYgKGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyODA5LVxcdFxcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyODkwPXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMTAtXFx0XFx0ICAgICAhaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEuZnVuY19pZCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxMTE6XFx0XFx0ICAgICAhaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS5mdW5jX2lkKSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMTItXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJhY3F1aXJlIGtlcm5lbCBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gUFRSX1RPX0JURl9JRFxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk1NjY9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYxNC1cXHRcXHQgICBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKGRlc2MtXFx1MDAzZWZ1bmNfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjE1OlxcdFxcdCAgIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKGRlc2MtXFx1MDAzZWZ1bmNfaWQpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjE2LVxcdFxcdHN0cnVjdCBidGZfc3RydWN0X21ldGEgKmtwdHJfc3RydWN0X21ldGEgPSBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmtwdHJfc3RydWN0X21ldGE7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MjQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjI1OlxcdFxcdGlmIChpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhkZXNjLVxcdTAwM2VmdW5jX2lkKSBcXHUwMDI2XFx1MDAyNiAha3B0cl9zdHJ1Y3RfbWV0YSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYyNi1cXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwia3B0cl9zdHJ1Y3RfbWV0YSBleHBlY3RlZCBhdCBpbnNuX2lkeCAlZFxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDE1OjI1OjA1LjM2OTUzNzU2N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzU4MDAwMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBicGZfcmVmY291bnRfYWNxdWlyZWAgYW5kIHRoZSBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGtmdW5jIGFyZ3VtZW50LiBJdCBzZWVtcyB0aGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgdGhhdCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGV4cGVjdHMgYSBwb2ludGVyIHRvIHRoZSAqb2JqZWN0KiB0aGF0IGNvbnRhaW5zIHRoZSBgYnBmX3JlZmNvdW50YCBmaWVsZC4gSWYgeW91IGdpdmUgaXQgYSBwb2ludGVyIHdpdGggYSBub24temVybyBmaXhlZCBvZmZzZXQsIGxpa2UgdG8gYW4gaW5uZXIgZmllbGQgd2l0aGluIGEgc3RydWN0LCB0aGluZ3MgZ28gc291dGguIFNwZWNpZmljYWxseSwgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCB3b3VsZCBpbmNvcnJlY3RseSB0cmVhdCB0aGUgb2Zmc2V0dGVkIHBvaW50ZXIgYXMgdGhlIGJhc2Ugb2YgdGhlIG9iamVjdCwgd2hpY2ggbGVhZHMgdG8gcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uIOKAkyBjbGFzc2ljIHZ1bG5lcmFiaWxpdHkgc3R1ZmYuXG5cblRoZSB0ZXN0IGNhc2UgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jYCByZWFsbHkgaWxsdXN0cmF0ZXMgdGhpcy4gSXQncyBjYWxsaW5nIGBicGZfcmVmY291bnRfYWNxdWlyZWAgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGBsaXN0YCBmaWVsZCAqaW5zaWRlKiB0aGUgYHN0cnVjdCBub2RlX3JlZmNvdW50ZWRgLCBzcGVjaWZpY2FsbHkgYGxpc3Rfbm9kZWAsIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBiYXNlIGBub2RlYCBzdHJ1Y3QuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nLiBCeSBlbmZvcmNpbmcgYFBUUl9aRVJPX09GRmAgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAsIHRoZSB2ZXJpZmllciBub3cgZW5zdXJlcyB0aGF0IHRoZSBwb2ludGVyIHBhc3NlZCB0byB0aGUga2Z1bmMgKm11c3QqIHBvaW50IHRvIHRoZSBzdGFydCBvZiB0aGUgb2JqZWN0LCBwcmV2ZW50aW5nIHRoaXMgaW5jb3JyZWN0IGludGVycHJldGF0aW9uLlxuXG5UaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiB2ZXJpZmllciBiZWNhdXNlIGl0J3MgcHJldmVudGluZyBhIGNsYXNzIG9mIGJ1Z3MgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0J3MgYSBzZWN1cml0eSBpbXByb3ZlbWVudCwgcGxhaW4gYW5kIHNpbXBsZS5cblxuQW5kIHRoaXMgaXMgYWxsIHJlbGV2YW50IGJlY2F1c2UgdGhlIEJQRiB2ZXJpZmllciBpcyByZWFjaGFibGUgYnkgdXNlcnMgd2l0aCBgQ0FQX0JQRmAgb3IgYENBUF9TWVNfQURNSU5gLCBhbmQgaW4gc29tZSBjYXNlcywgZXZlbiB1bnByaXZpbGVnZWQgdXNlcnMgd2hlbiB1bnByaXZpbGVnZWQgQlBGIGlzIGVuYWJsZWQuIFNpbmNlIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgYSBrZnVuYywgbG9hZGVkIHByb2dyYW1zIHVzaW5nIGl0IHVzdWFsbHkgbmVlZCBwcml2aWxlZ2VzLCBzbyB0aGlzIGZpeCBoZWxwcyBhdm9pZCBhIG1vcmUgc2VyaW91cyBwcm9ibGVtLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgaXMgdGhlIG9ubHkga2Z1bmMgdXNpbmcgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYC4gRGVmaW5pdGVseSB3b3J0aCBjaGVja2luZywgYW5kIGZ1enppbmcgdGhlIHZlcmlmaWVyIGlzIGEgZ29vZCBpZGVhIGdpdmVuIGhvdyBpbXBvcnRhbnQgaXRzIHJvbGUgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDE1OjI1OjE1LjEyNzU0MDU4OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1MzM5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA3MzU9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3VuaW5pdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDczOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA3NDA6c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA3NDEte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjM4PWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjcxOlxcdGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjcyLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjU6MTUuMTg2MDc4NzU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDYwNTg2NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cmAgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCB0aGUgbmFtZSBpdHNlbGYgaXMgaW5mb3JtYXRpdmUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGRldGVybWluZSBpZiBhIGtlcm5lbCBmdW5jdGlvbiBhcmd1bWVudCwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBwb2ludGVyIChga3B0cmApLCBpcyBhc3NvY2lhdGVkIHdpdGggc29tZSBmb3JtIG9mIHJlZmVyZW5jZSBjb3VudGluZy4gVGhlIFwia1wiIHByZWZpeCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIGtlcm5lbC1zcGVjaWZpYywgd2hpY2ggcHJvYmFibHkgbWVhbnMgd2UncmUgbG9va2luZyBhdCBpbnRlcm5hbHMgb3IgYSBsZXZlbCBiZW5lYXRoIHN0YW5kYXJkIGxpYmMgb3BlcmF0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgZHJhd24gdG8gaG93IHRoaXMgbWlnaHQgYmUgaW1wbGVtZW50ZWQuIEFyZSB3ZSBjaGVja2luZyBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGBrcHRyYCBpdHNlbGY/IERvZXMgaXQgaW52b2x2ZSBsb29raW5nIHVwIGluZm9ybWF0aW9uIGluIGEga2VybmVsLW1hbmFnZWQgZGF0YSBzdHJ1Y3R1cmUsIHBlcmhhcHMgYSB0YWJsZSBvciBoYXNobWFwLCB3aGVyZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIHN0YXR1cyBpcyB0cmFja2VkIGZvciBvYmplY3RzIG1hbmFnZWQgYnkgdGhlIGtlcm5lbD8gQWx0ZXJuYXRpdmVseSwgY291bGQgaXQgYmUgcGFyc2luZyB0aGUgZnVuY3Rpb24ncyBzaWduYXR1cmUgYW5kIGNvbXBhcmluZyB0aGUgcG9pbnRlcidzIGF0dHJpYnV0ZXM/IElzIHRoZXJlIGFuIGF0dHJpYnV0ZSBvciBmbGFnIHNldCBmb3IgcG9pbnRlciB2YXJpYWJsZXM/XG5cbkknbSBpbnN0YW50bHkgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGluZm9ybWF0aW9uLiBJZiB3ZSBrbm93IGFuIGFyZ3VtZW50IGlzIHJlZmVyZW5jZS1jb3VudGVkLCBpdCBnaXZlcyB1cyB2aXRhbCBjbHVlcyBhYm91dCBob3cgdG8gaGFuZGxlIHRoZSBhcmd1bWVudC4gV2UnZCBrbm93IHdoZXRoZXIgd2UgbmVlZCB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgd2hlbiBwYXNzaW5nIG9yIHJlY2VpdmluZyB0aGUgcG9pbnRlciwgdG8gYXZvaWQgbWVtb3J5IGxlYWtzIG9yIGRvdWJsZSBmcmVlcy4gVW5kZXJzdGFuZGluZyB0aGlzIGFzcGVjdCB3b3VsZCBhbHNvIGFsbG93IGZvciBmdXJ0aGVyIG9wdGltaXNhdGlvbiBvciBidWctZGV0ZWN0aW9uLiBJcyB0aGlzIGZ1bmN0aW9uIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHRoaW5ncyBsaWtlIGF1dG9tYXRpYyByZXNvdXJjZSBtYW5hZ2VtZW50LCBzYWZldHkgY2hlY2tzLCBvciBwZXJoYXBzIGV2ZW4gaW4gYSB0b29sIGxpa2UgYSBzdGF0aWMgYW5hbHl6ZXI/XG5cbk15IG1pbmQgaXMgbm93IHJhY2luZyB0aHJvdWdoIHBvc3NpYmxlIHVzZSBjYXNlcywgbGlrZSBtYW5hZ2luZyBtZW1vcnkgdXNlZCBieSBkcml2ZXJzLCBtb2R1bGVzLCBhbmQgbWF5YmUgZXZlbiB3aXRoaW4gY29yZSBrZXJuZWwgY29tcG9uZW50cy4gSSB3b25kZXIgd2hhdCBzcGVjaWZpYyBzY2VuYXJpb3MgdHJpZ2dlciB0aGUgbmVlZCBmb3IgdGhpcyBraW5kIG9mIGNoZWNrOyBhcmUgdGhlcmUgY29tbW9uIG9yIGNvbXBsZXggdXNlIGNhc2VzPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIHBpdGZhbGxzIGluIHRlcm1zIG9mIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGlmIHJlZmVyZW5jZSBjb3VudGluZyBpcyBub3QgaW1wbGVtZW50ZWQgY29ycmVjdGx5LiBUaGlzIHdvdWxkIGFsbCBiZSBjcml0aWNhbCB0byBjb25zaWRlciBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNToyNS4yNDY2NjgzMzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDczNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3MzU6XFx0c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3VuaW5pdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4xMDczNjpcXHR7XFxuMTA3Mzc6XFx0XFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX3VuaW5pdFxcXCIpO1xcbjEwNzM4OlxcdH1cXG4xMDczOTpcXHRcXG4xMDc0MDpcXHRzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbjEwNzQxOlxcdHtcXG4xMDc0MjpcXHRcXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9fcmVmY291bnRlZF9rcHRyXFxcIik7XFxuMTA3NDM6XFx0fVxcbjEwNzQ0OlxcdFxcbjEwNzQ1OlxcdHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4xMDc0NjpcXHR7XFxuMTA3NDc6XFx0XFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX251bGxhYmxlXFxcIik7XFxuMTA3NDg6XFx0fVxcbjEwNzQ5OlxcdFxcbjEwNzUwOlxcdHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19ub25vd25fYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4xMDc1MTpcXHR7XFxuMTA3NTI6XFx0XFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX25vbm93bl9hbGxvd2VkXFxcIik7XFxuMTA3NTM6XFx0fVxcbjEwNzU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNToyNS4yNDczMDczMjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwNDgzODExNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBfX3JlZmNvdW50ZWRfa3B0cmAgU3VmZml4IGluIEtlcm5lbCBGdW5jdGlvbiBBcmd1bWVudHMqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJdCBsb29rcyBsaWtlIHRoZSBjb2RlIGlzIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgc3VmZml4IGBfX3JlZmNvdW50ZWRfa3B0cmAuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoaW5raW5nIGFib3V0IHdoZXJlIHRoaXMgc3VmZml4IGlzIGFjdHVhbGx5ICp1c2VkKi4gTXkgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjayB0aGUgdXNhZ2Ugb2YgdGhpcyBzcGVjaWZpYyBzdWZmaXggaW4ga2Z1bmMgYXJndW1lbnRzLiBVbmRlcnN0YW5kaW5nIGhvdyBhbmQgd2hlcmUgYF9fcmVmY291bnRlZF9rcHRyYCBpcyBlbXBsb3llZCB3aWxsIHRlbGwgbWUgaG93IHRoZSBrZXJuZWwgaXMgbWFuYWdpbmcgcmVmZXJlbmNlLWNvdW50ZWQgcG9pbnRlcnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEZyb20gdGhhdCwgSSBjYW4gcXVpY2tseSBkZWR1Y2UgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIHRoZSBmdW5jdGlvbnMgaW4gcmVsYXRpb24gdG8gdGhpcyB0eXBlIG9mIHBvaW50ZXIuIEl0IHdvdWxkIGJlIGFuIGludGVyZXN0aW5nIHRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTA2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNTozNi4yOTU2OTA5NDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjY1NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcmVmY291bnRlZF9rcHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTI0NDk9X19icGZfa2Z1bmMgdm9pZCBicGZfcGVyY3B1X29ial9kcm9wX2ltcGwodm9pZCAqcF9fYWxsb2MsIHZvaWQgKm1ldGFfX2lnbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTUtICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTY6ICogQHBfX3JlZmNvdW50ZWRfa3B0cjogbm9uLW93bmluZyBsb2NhbCBrcHRyXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1Ny0gKiBAbWV0YTogdmVyaWZpZXItc3VwcGxpZWQgc3RydWN0IG1ldGFkYXRhXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1OC0gKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTk6ICogSW5jcmVtZW50IHRoZSByZWZjb3VudCBmb3IgQHBfX3JlZmNvdW50ZWRfa3B0ci4gVGhlIHZlcmlmaWVyIHJld3JpdGVzXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2MC0gKiBAbWV0YTsgQlBGIHByb2dyYW1zIGRvIG5vdCBzZXQgaXQuXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2MS0gKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NjI6ICogUmV0dXJuOiBPd25pbmcgcmVmZXJlbmNlIHRvIEBwX19yZWZjb3VudGVkX2twdHIsIG9yICVOVUxMIG9uIGZhaWx1cmUuXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2My0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDY0Ol9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzAtXFx0ICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ3MTpcXHRyZWYgPSAoc3RydWN0IGJwZl9yZWZjb3VudCAqKShwX19yZWZjb3VudGVkX2twdHIgKyBtZXRhLVxcdTAwM2VyZWNvcmQtXFx1MDAzZXJlZmNvdW50X29mZik7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ3Mi1cXHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygocmVmY291bnRfdCAqKXJlZikpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDc3LVxcdCAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0Nzg6XFx0cmV0dXJuICh2b2lkICopcF9fcmVmY291bnRlZF9rcHRyO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzktfVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODAtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODM6XFx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDc0MD1zdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDc0MS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNzQyOlxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19yZWZjb3VudGVkX2twdHJcXFwiKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA3NDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNTozNi4zODE5NjA2MTJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyNjA4ODY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFJlZmNvdW50IEFjcXVpc2l0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGFuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbGAg4oCTIHRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy4gVGhlIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbiBsaWVzIGluIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGNoZWNrX2tmdW5jX2FyZ3NgIGFuZCBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZyBlbmZvcmNlbWVudCBvZiBgUFRSX1pFUk9fT0ZGYCB3aGVuIGRlYWxpbmcgd2l0aCBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLCBhbmQgZnJhbmtseSwgYW55dGhpbmcgdGhhdCBtb2RpZmllcyB0aGUgdmVyaWZpZXIgbGlrZSB0aGlzIHNjcmVhbXMgXCJmdXp6aW5nIG9wcG9ydHVuaXR5LlwiIFdlIG5lZWQgdG8gcmVhbGx5IHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZSBjbGVhcmx5OiBgY2hlY2tfa2Z1bmNfYXJnc2AsIGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYCwgYWxvbmcgd2l0aCB0aG9zZSByZWZjb3VudCBmdW5jdGlvbnMsIGBicGZfcmVmY291bnRfYWNxdWlyZWAsIGFuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIOKAkyBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgIHNlZW0gbGlrZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGluZmx1ZW5jaW5nIHRoaXMgYXJlYS4gTWlnaHQgYmUgd29ydGggc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvbiBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLCB0byBzZWUgaWYgdGhlcmUncyBhbnkgdW51c3VhbCBiZWhhdmlvciB3aGVuIGl0J3MgZW5hYmxlZCBvciBkaXNhYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjU6NDIuOTA4MDUxOTkzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTA3MjI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmVmY291bnRfYWNxdWlyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsKHZvaWQgKnBfX2FsbG9jLCB2b2lkICptZXRhX19pZ24pXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDU0LS8qKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTU6ICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTYtICogQHBfX3JlZmNvdW50ZWRfa3B0cjogbm9uLW93bmluZyBsb2NhbCBrcHRyXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDYzLSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NjQ6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmUodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCBzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICptZXRhKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjUte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4MC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgxOl9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCB2b2lkICptZXRhX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4Mi17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MzpcXHRyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUocF9fcmVmY291bnRlZF9rcHRyLCBtZXRhX19pZ24pO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODQtfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDgxMz1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsLCBLRl9SRUxFQVNFKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UgfCBLRl9JTVBMSUNJVF9BUkdTKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1JDVSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODE2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250LCBLRl9JTVBMSUNJVF9BUkdTKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNTo0Mi45OTMxNTk2NDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4OTAxMzU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQlBGIEhlbHBlciBGdW5jdGlvbiBMb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGh1bmNoIHBvaW50cyB0b3dhcmRzIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIFRoYXQgc2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhhdCdzIHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIEJQRiBoZWxwZXIgZnVuY3Rpb25hbGl0eSB0eXBpY2FsbHkgcmVzaWRlcy4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGF0IGZpbGUsIEkgc2hvdWxkIHJlYWxseSBjb25maXJtIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBNeSBndXQgc2F5cyBpdCdzIGNvbmRpdGlvbmFsLCBwcm9iYWJseSBkZXBlbmRlbnQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgYmVpbmcgZW5hYmxlZCwgYnV0IGEgcXVpY2sgY2hlY2sgb2YgdGhlIE1ha2VmaWxlIGZvciBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IG1vdmUuIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgZXhhY3QgY2lyY3Vtc3RhbmNlcyB0aGF0IGNvZGUgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgYWx3YXlzIGJlc3QgcHJhY3RpY2UgdG8gdmVyaWZ5IGJ1aWxkIGRlcGVuZGVuY2llcyBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBhcyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvZGUgY2FuIHNoaWZ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk4NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDE1OjI1OjQ4Ljc4MjE3Njg5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2NTUyNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhlbHBlcnMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjU6NTAuMjU4NzM5MTM0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTE0MDUxODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgRml4IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIHRoYXQncyB0aGUgZm91bmRhdGlvbiBoZXJlLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgY29uZmlndXJhdGlvbiBmbGFncyBpbnZvbHZlZCwganVzdCB0byBiZSB0aG9yb3VnaC4gSSdtIHNlZWluZyB0aGF0IHRoZSB0ZXN0IGNhc2UgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jYCB1c2VzIGBicGZfcmVmY291bnRfYWNxdWlyZWAsIGluZGljYXRpbmcgdGhpcyBpcyBhIGZ1bmRhbWVudGFsIEJQRiBjYXBhYmlsaXR5LCBhbmQgdGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuXG5cbk5vdywgbGV0J3MgZGlzdGlsbCB0aGlzIGRvd246IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSB2dWxuZXJhYmlsaXR5IGluIHRoZSBCUEYgdmVyaWZpZXIgcmVsYXRlZCB0byBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCdzIHVzZWQgd2l0aCBwb2ludGVycyB0aGF0IGhhdmUgbm9uLXplcm8gZml4ZWQgb2Zmc2V0cy4gVGhpcyBjb3VsZCBsZWFkIHRvIGVpdGhlciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Mgb3IgY29ycnVwdGlvbi4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiB0eXBlIGZsYWcsIGBQVFJfWkVST19PRkZgLCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLlxuXG5NeSBjb3JlIGZvY3VzIHN5bWJvbHMgYXJlIGdvaW5nIHRvIGJlIGBjaGVja19rZnVuY19hcmdzYCBhbmQgYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiB0aG9zZSBmdW5jdGlvbnMsIHRvIGJlIHN1cmUgSSBhbSBjb3JyZWN0LCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gWWVzLCB0aGV5IGFyZSBzdGF0aWMsIGJ1dCBjcml0aWNhbGx5LCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBtb2RpZmllZCBpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmdXp6aW5nIHRoZSBjb3JyZWN0IGZ1bmN0aW9ucy4gQWhhLCBgX19jaGVja19wdHJfb2ZmX3JlZ2AgaXMgY2FsbGVkIGJ5IGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGNvcnJlY3QsIGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgIGFyZSBkZWZpbml0ZWx5IG9uIHRoZSByaWdodCB0cmFjay4gSSBhbHNvIHNlZSB0aGF0IGBjaGVja19rZnVuY19hcmdzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGZpbmU7IFN5emthbGxlciBjYW4gc3RpbGwgaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmUgcmVhY2hhYmxlLiBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGJ1dCB0aGF0IGlzIGEgaG90IHBhdGggLSBJIHdvdWxkIHJhdGhlciBsb29rIGF0IGEgbW9yZSBzcGVjaWZpYyB0YXJnZXQuXG5cbmBjaGVja19rZnVuY19hcmdzYCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBrZnVuYyBpcyBjYWxsZWQuIFRoYXQgbWFrZXMgaXQgc3BlY2lmaWMgZW5vdWdoLiBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAgaXMgYSBiaXQgYnJvYWRlciwgYXMgaXQncyBjYWxsZWQgZm9yIHZhcmlvdXMgYXJndW1lbnRzLCBidXQgc3RpbGwgc3BlY2lmaWMgZW5vdWdoIGZvciB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uXG5cbkkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGRpYWxlZCBpbiB0aGUgY29ycmVjdCB0YXJnZXRzLlxuXG5MZXQncyByZWZpbmUgdGhlIEZvY3VzU3ltYm9scyB0bzpcbiogICBgY2hlY2tfa2Z1bmNfYXJnc2BcbiogICBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmBcblxuTm93LCBsZXQncyBjb25zaWRlciBpZiBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAgaXMgYSBob3QgcGF0aC4gSXQncyBjYWxsZWQgZm9yIGV2ZXJ5IGZ1bmN0aW9uIGFyZ3VtZW50IGluIEJQRiBwcm9ncmFtcywgd2hpY2ggbWVhbnMgaXQgbWF5IGJlIHF1aXRlIGhvdCwgYnV0IGl0J3MgZGlyZWN0bHkgbW9kaWZpZWQsIHNvIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBvcHRpb25zLiBgY2hlY2tfa2Z1bmNfYXJnc2AgaXMgYmV0dGVyOyBrZnVuYyBjYWxscyBhcmUgbGVzcyBmcmVxdWVudCB0aGFuIGdlbmVyYWwgaGVscGVyIGNhbGxzLCBtYWtpbmcgaXQgYSBiZXR0ZXIgdGFyZ2V0LiBJIHN0aWxsIHdhbnQgdG8ga2VlcCB0aGUgb3RoZXIgb25lLCBob3dldmVyLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDAzLCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNjowMC4zNzI3OTMyMjhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODA4ODQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19mdW5jX2FyZ19yZWdfb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB3aGVyZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciBoYXZpbmcgYSBub24temVybyBmaXhlZCBvZmZzZXQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgQlBGIHR5cGUgZmxhZyBgUFRSX1pFUk9fT0ZGYCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiLFxuICAgIFwiY2hlY2tfZnVuY19hcmdfcmVnX29mZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIgd2hlcmUgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgaGF2aW5nIGEgbm9uLXplcm8gZml4ZWQgb2Zmc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiB0eXBlIGZsYWcgYFBUUl9aRVJPX09GRmAgYW5kIGVuZm9yY2VzIGl0IGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowmbhgq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-20 15:16:03 +0000 UTC FinishedAt: 2026-06-20 15:26:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "a381355c-2cdc-49f0-b397-5f9262bc9ede" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_kfunc_args", "check_func_arg_reg_off" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfYXJncyYjMzQ7LAogICAgJiMzNDtjaGVja19mdW5jX2FyZ19yZWdfb2ZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIgd2hlcmUgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgaGF2aW5nIGEgbm9uLXplcm8gZml4ZWQgb2Zmc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiB0eXBlIGZsYWcgYFBUUl9aRVJPX09GRmAgYW5kIGVuZm9yY2VzIGl0IGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIxMmQ1N2RhODM0YzhjODQzYzk1NzFmYzJkNmM0ZmFmZjVjYTkwOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1biAyMCAxNToyNDowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzcxOWY2NTI4NDQ1NjAuLmI5YjdkMTljYjgxN2I1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTg1OSw2ICYjNDM7ODU5LDkgQEAgZW51bSBicGZfdHlwZV9mbGFnIHtcbiBcdC8qIERZTlBUUiBwb2ludHMgdG8gZmlsZSAqL1xuIFx0RFlOUFRSX1RZUEVfRklMRVx0PSBCSVQoMjAgJiM0MzsgQlBGX0JBU0VfVFlQRV9CSVRTKSxcbiBcbiYjNDM7XHQvKiBQVFIgYXJndW1lbnQgY2Fubm90IGhhdmUgYSBmaXhlZCBvZmZzZXQuICovXG4mIzQzO1x0UFRSX1pFUk9fT0ZGXHRcdD0gQklUKDIxICYjNDM7IEJQRl9CQVNFX1RZUEVfQklUUyksXG4mIzQzO1xuIFx0X19CUEZfVFlQRV9GTEFHX01BWCxcbiBcdF9fQlBGX1RZUEVfTEFTVF9GTEFHXHQ9IF9fQlBGX1RZUEVfRkxBR19NQVggLSAxLFxuIH07XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAyYWJjNzlkYmYyODFjMi4uYjQxYWVlOGM2MzBjMjQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTc5OTQsOCAmIzQzOzc5OTQsMTEgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4gXHRcdFx0XHQgIGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlKVxuIHtcbiYjNDM7XHRib29sIGZpeGVkX29mZl9vayA9ICEoYXJnX3R5cGUgXHUwMDI2IFBUUl9aRVJPX09GRik7XG4gXHR1MzIgdHlwZSA9IHJlZy1cdTAwM2V0eXBlO1xuIFxuJiM0MztcdGFyZ190eXBlIFx1MDAyNj0gflBUUl9aRVJPX09GRjtcbiYjNDM7XG4gXHQvKiBXaGVuIHJlZmVyZW5jZWQgcmVnaXN0ZXIgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sIGl0cyBmaXhlZFxuIFx0ICogb2Zmc2V0IG11c3QgYmUgMC5cbiBcdCAqXG5AQCAtODA0OCwxMyAmIzQzOzgwNTEsMTIgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRjYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBOT05fT1dOX1JFRjpcbiBcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IE5PTl9PV05fUkVGIHwgTUVNX1JDVTpcbiBcdFx0LyogV2hlbiByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sXG4tXHRcdCAqIGl0cyBmaXhlZCBvZmZzZXQgbXVzdCBiZSAwLiBJbiB0aGUgb3RoZXIgY2FzZXMsIGZpeGVkIG9mZnNldFxuLVx0XHQgKiBjYW4gYmUgbm9uLXplcm8uIFRoaXMgd2FzIGFscmVhZHkgY2hlY2tlZCBhYm92ZS4gU28gcGFzc1xuLVx0XHQgKiBmaXhlZF9vZmZfb2sgYXMgdHJ1ZSB0byBhbGxvdyBmaXhlZCBvZmZzZXQgZm9yIGFsbCBvdGhlclxuLVx0XHQgKiBjYXNlcy4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELCBoZW5jZSB3ZVxuLVx0XHQgKiBzdGlsbCBuZWVkIHRvIGRvIGNoZWNrcyBpbnN0ZWFkIG9mIHJldHVybmluZy5cbiYjNDM7XHRcdCAqIG9yIHdoZW4gdGhlIGFyZ3VtZW50IHR5cGUgcmVxdWlyZXMgemVybyBmaXhlZCBvZmZzZXQsIGl0c1xuJiM0MztcdFx0ICogZml4ZWQgb2Zmc2V0IG11c3QgYmUgMC4gSW4gdGhlIG90aGVyIGNhc2VzLCBmaXhlZCBvZmZzZXQgY2FuXG4mIzQzO1x0XHQgKiBiZSBub24temVyby4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELFxuJiM0MztcdFx0ICogaGVuY2Ugd2Ugc3RpbGwgbmVlZCB0byBkbyBjaGVja3MgaW5zdGVhZCBvZiByZXR1cm5pbmcuXG4gXHRcdCAqL1xuLVx0XHRyZXR1cm4gX19jaGVja19wdHJfb2ZmX3JlZyhlbnYsIHJlZywgYXJnbm8sIHRydWUpO1xuJiM0MztcdFx0cmV0dXJuIF9fY2hlY2tfcHRyX29mZl9yZWcoZW52LCByZWcsIGFyZ25vLCBmaXhlZF9vZmZfb2spO1xuIFx0Y2FzZSBQVFJfVE9fQ1RYOlxuIFx0XHQvKlxuIFx0XHQgKiBBbGxvdyBmaXhlZCBhbmQgdmFyaWFibGUgb2Zmc2V0cyBmb3Igc3lzY2FsbCBjb250ZXh0LCBidXRcbkBAIC0xMjExNCw3ICYjNDM7MTIxMTYsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RJTUVSOlxuQEAgLTEyMTI4LDYgJiM0MzsxMjEyOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfXG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DVFg6XG4gXHRcdFx0YXJnX3R5cGUgPSBBUkdfUFRSX1RPX0NUWDtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XG4mIzQzO1x0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkY7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O3Vua25vd24ga2Z1bmMgYXJnIHR5cGUgJWRcJiMzNDssIGtmX2FyZ190eXBlKTtcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5pbmRleCA3MjQ3YTIwYzBhM2JmNS4uNWVjMzkyZTcyNzBmOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC0xMywxMiAmIzQzOzEzLDIyIEBAIHN0cnVjdCBub2RlX2FjcXVpcmUge1xuIFx0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHtcbiYjNDM7XHRsb25nIGtleTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JiX25vZGUgcmI7XG4mIzQzO1x0c3RydWN0IGJwZl9saXN0X25vZGUgbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XG4gXG4gI2RlZmluZSBwcml2YXRlKG5hbWUpIFNFQyhcJiMzNDsuZGF0YS5cJiMzNDsgI25hbWUpIF9faGlkZGVuIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKVxuIHByaXZhdGUoQSkgc3RydWN0IGJwZl9zcGluX2xvY2sgZ2xvY2s7XG4gcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xuJiM0Mztwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XG4mIzQzO3ByaXZhdGUoQikgc3RydWN0IGJwZl9yYl9yb290IHJvb3QgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIHJiKTtcbiYjNDM7cHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTtcbiBcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuIHtcbkBAIC0zMSw2ICYjNDM7NDEsMTcgQEAgc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYilcbiBcdHJldHVybiBub2RlX2EtXHUwMDNla2V5IFx1MDAzYyBub2RlX2ItXHUwMDNla2V5O1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgbGVzc19yZWZjb3VudGVkKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZV9hO1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgKm5vZGVfYjtcbiYjNDM7XG4mIzQzO1x0bm9kZV9hID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQsIHJiKTtcbiYjNDM7XHRub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgcmIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbm9kZV9hLVx1MDAzZWtleSBcdTAwM2Mgbm9kZV9iLVx1MDAzZWtleTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD00IGFsbG9jX2luc249e3tbMC05XSYjNDM7fX1cJiMzNDspXG4gbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzKHZvaWQgKmN0eClcbkBAIC05Myw2ICYjNDM7MTE0LDYyIEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgcHRyX25vZGVfcmVmY291bnRlZCBwdHIgUjFcJiMzNDspXG4mIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9saXN0X25vZGVfb2Zmc2V0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgKm5vZGUsICpiYXNlLCAqcmVmO1xuJiM0MztcdHN0cnVjdCBicGZfbGlzdF9ub2RlICpsaXN0X25vZGU7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBicGZfb2JqX25ldyh0eXBlb2YoKm5vZGUpKTtcbiYjNDM7XHRpZiAoIW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3NwaW5fbG9jayhcdTAwMjZsb2NrKTtcbiYjNDM7XHRicGZfbGlzdF9wdXNoX2Zyb250KFx1MDAyNmhlYWQsIFx1MDAyNm5vZGUtXHUwMDNlbGlzdCk7XG4mIzQzO1x0bGlzdF9ub2RlID0gYnBmX2xpc3RfcG9wX2Zyb250KFx1MDAyNmhlYWQpO1xuJiM0MztcdGJwZl9zcGluX3VubG9jayhcdTAwMjZsb2NrKTtcbiYjNDM7XHRpZiAoIWxpc3Rfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcbiYjNDM7XHRiYXNlID0gY29udGFpbmVyX29mKGxpc3Rfbm9kZSwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XG4mIzQzO1x0cmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobGlzdF9ub2RlKTtcbiYjNDM7XHRpZiAocmVmKVxuJiM0MztcdFx0YnBmX29ial9kcm9wKHJlZik7XG4mIzQzO1x0YnBmX29ial9kcm9wKGJhc2UpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgcHRyX25vZGVfcmVmY291bnRlZCBwdHIgUjFcJiMzNDspXG4mIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9yYnRyZWVfbm9kZV9vZmZzZXQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZSwgKmJhc2UsICpyZWY7XG4mIzQzO1x0c3RydWN0IGJwZl9yYl9ub2RlICpyYl9ub2RlO1xuJiM0MztcbiYjNDM7XHRub2RlID0gYnBmX29ial9uZXcodHlwZW9mKCpub2RlKSk7XG4mIzQzO1x0aWYgKCFub2RlKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdG5vZGUtXHUwMDNla2V5ID0gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3NwaW5fbG9jayhcdTAwMjZsb2NrKTtcbiYjNDM7XHRicGZfcmJ0cmVlX2FkZChcdTAwMjZyb290LCBcdTAwMjZub2RlLVx1MDAzZXJiLCBsZXNzX3JlZmNvdW50ZWQpO1xuJiM0MztcdHJiX25vZGUgPSBicGZfcmJ0cmVlX2ZpcnN0KFx1MDAyNnJvb3QpO1xuJiM0MztcdGlmIChyYl9ub2RlKVxuJiM0MztcdFx0cmJfbm9kZSA9IGJwZl9yYnRyZWVfcmVtb3ZlKFx1MDAyNnJvb3QsIHJiX25vZGUpO1xuJiM0MztcdGJwZl9zcGluX3VubG9jayhcdTAwMjZsb2NrKTtcbiYjNDM7XHRpZiAoIXJiX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XG4mIzQzO1x0YmFzZSA9IGNvbnRhaW5lcl9vZihyYl9ub2RlLCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkLCByYik7XG4mIzQzO1x0cmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUocmJfbm9kZSk7XG4mIzQzO1x0aWYgKHJlZilcbiYjNDM7XHRcdGJwZl9vYmpfZHJvcChyZWYpO1xuJiM0MztcdGJwZl9vYmpfZHJvcChiYXNlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7P2ZlbnRyeS5zL1wmIzM0OyBTWVNfUFJFRklYIFwmIzM0O3N5c19nZXRwZ2lkXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtmdW5jdGlvbiBjYWxscyBhcmUgbm90IGFsbG93ZWQgd2hpbGUgaG9sZGluZyBhIGxvY2tcJiMzNDspXG4gaW50IEJQRl9QUk9HKHJidHJlZV9mYWlsX3NsZWVwYWJsZV9sb2NrX2Fjcm9zc19yY3UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfYXJnX3JlZ19vZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB3aGVyZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciBoYXZpbmcgYSBub24temVybyBmaXhlZCBvZmZzZXQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgQlBGIHR5cGUgZmxhZyBgUFRSX1pFUk9fT0ZGYCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMTJkNTdkYTgzNGM4Yzg0M2M5NTcxZmMyZDZjNGZhZmY1Y2E5MDhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdW4gMjAgMTU6MjQ6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCA3NzE5ZjY1Mjg0NDU2MC4uYjliN2QxOWNiODE3YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaApAQCAtODU5LDYgJiM0Mzs4NTksOSBAQCBlbnVtIGJwZl90eXBlX2ZsYWcgewogCS8qIERZTlBUUiBwb2ludHMgdG8gZmlsZSAqLwogCURZTlBUUl9UWVBFX0ZJTEUJPSBCSVQoMjAgJiM0MzsgQlBGX0JBU0VfVFlQRV9CSVRTKSwKIAomIzQzOwkvKiBQVFIgYXJndW1lbnQgY2Fubm90IGhhdmUgYSBmaXhlZCBvZmZzZXQuICovCiYjNDM7CVBUUl9aRVJPX09GRgkJPSBCSVQoMjEgJiM0MzsgQlBGX0JBU0VfVFlQRV9CSVRTKSwKJiM0MzsKIAlfX0JQRl9UWVBFX0ZMQUdfTUFYLAogCV9fQlBGX1RZUEVfTEFTVF9GTEFHCT0gX19CUEZfVFlQRV9GTEFHX01BWCAtIDEsCiB9OwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDJhYmM3OWRiZjI4MWMyLi5iNDFhZWU4YzYzMGMyNCAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNzk5NCw4ICYjNDM7Nzk5NCwxMSBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sCiAJCQkJICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSkKIHsKJiM0MzsJYm9vbCBmaXhlZF9vZmZfb2sgPSAhKGFyZ190eXBlICZhbXA7IFBUUl9aRVJPX09GRik7CiAJdTMyIHR5cGUgPSByZWctJmd0O3R5cGU7CiAKJiM0MzsJYXJnX3R5cGUgJmFtcDs9IH5QVFJfWkVST19PRkY7CiYjNDM7CiAJLyogV2hlbiByZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIHBhc3NlZCB0byByZWxlYXNlIGZ1bmN0aW9uLCBpdHMgZml4ZWQKIAkgKiBvZmZzZXQgbXVzdCBiZSAwLgogCSAqCkBAIC04MDQ4LDEzICYjNDM7ODA1MSwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAljYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBOT05fT1dOX1JFRjoKIAljYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBOT05fT1dOX1JFRiB8IE1FTV9SQ1U6CiAJCS8qIFdoZW4gcmVmZXJlbmNlZCBQVFJfVE9fQlRGX0lEIGlzIHBhc3NlZCB0byByZWxlYXNlIGZ1bmN0aW9uLAotCQkgKiBpdHMgZml4ZWQgb2Zmc2V0IG11c3QgYmUgMC4gSW4gdGhlIG90aGVyIGNhc2VzLCBmaXhlZCBvZmZzZXQKLQkJICogY2FuIGJlIG5vbi16ZXJvLiBUaGlzIHdhcyBhbHJlYWR5IGNoZWNrZWQgYWJvdmUuIFNvIHBhc3MKLQkJICogZml4ZWRfb2ZmX29rIGFzIHRydWUgdG8gYWxsb3cgZml4ZWQgb2Zmc2V0IGZvciBhbGwgb3RoZXIKLQkJICogY2FzZXMuIHZhcl9vZmYgYWx3YXlzIG11c3QgYmUgMCBmb3IgUFRSX1RPX0JURl9JRCwgaGVuY2Ugd2UKLQkJICogc3RpbGwgbmVlZCB0byBkbyBjaGVja3MgaW5zdGVhZCBvZiByZXR1cm5pbmcuCiYjNDM7CQkgKiBvciB3aGVuIHRoZSBhcmd1bWVudCB0eXBlIHJlcXVpcmVzIHplcm8gZml4ZWQgb2Zmc2V0LCBpdHMKJiM0MzsJCSAqIGZpeGVkIG9mZnNldCBtdXN0IGJlIDAuIEluIHRoZSBvdGhlciBjYXNlcywgZml4ZWQgb2Zmc2V0IGNhbgomIzQzOwkJICogYmUgbm9uLXplcm8uIHZhcl9vZmYgYWx3YXlzIG11c3QgYmUgMCBmb3IgUFRSX1RPX0JURl9JRCwKJiM0MzsJCSAqIGhlbmNlIHdlIHN0aWxsIG5lZWQgdG8gZG8gY2hlY2tzIGluc3RlYWQgb2YgcmV0dXJuaW5nLgogCQkgKi8KLQkJcmV0dXJuIF9fY2hlY2tfcHRyX29mZl9yZWcoZW52LCByZWcsIGFyZ25vLCB0cnVlKTsKJiM0MzsJCXJldHVybiBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgZml4ZWRfb2ZmX29rKTsKIAljYXNlIFBUUl9UT19DVFg6CiAJCS8qCiAJCSAqIEFsbG93IGZpeGVkIGFuZCB2YXJpYWJsZSBvZmZzZXRzIGZvciBzeXNjYWxsIGNvbnRleHQsIGJ1dApAQCAtMTIxMTQsNyAmIzQzOzEyMTE2LDYgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF8KIAkJY2FzZSBLRl9BUkdfUFRSX1RPX01FTToKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX01FTV9TSVpFOgogCQljYXNlIEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0s6Ci0JCWNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU6CiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19USU1FUjoKQEAgLTEyMTI4LDYgJiM0MzsxMjEyOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfCiAJCWNhc2UgS0ZfQVJHX1BUUl9UT19DVFg6CiAJCQlhcmdfdHlwZSA9IEFSR19QVFJfVE9fQ1RYOwogCQkJYnJlYWs7CiYjNDM7CQljYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOgomIzQzOwkJCWFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkY7CiYjNDM7CQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl2ZXJpZmllcl9idWcoZW52LCAmIzM0O3Vua25vd24ga2Z1bmMgYXJnIHR5cGUgJWQmIzM0Oywga2ZfYXJnX3R5cGUpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jCmluZGV4IDcyNDdhMjBjMGEzYmY1Li41ZWMzOTJlNzI3MGY5MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKQEAgLTEzLDEyICYjNDM7MTMsMjIgQEAgc3RydWN0IG5vZGVfYWNxdWlyZSB7CiAJc3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDsKIH07CiAKJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkIHsKJiM0MzsJbG9uZyBrZXk7CiYjNDM7CXN0cnVjdCBicGZfcmJfbm9kZSByYjsKJiM0MzsJc3RydWN0IGJwZl9saXN0X25vZGUgbGlzdDsKJiM0MzsJc3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDsKJiM0Mzt9OwomIzQzOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwogZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiAKICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoJiMzNDsuZGF0YS4mIzM0OyAjbmFtZSkgX19oaWRkZW4gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCiBwcml2YXRlKEEpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGdsb2NrOwogcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpOwomIzQzO3ByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jazsKJiM0Mztwcml2YXRlKEIpIHN0cnVjdCBicGZfcmJfcm9vdCByb290IF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCByYik7CiYjNDM7cHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTsKIAogc3RhdGljIGJvb2wgbGVzcyhzdHJ1Y3QgYnBmX3JiX25vZGUgKmEsIGNvbnN0IHN0cnVjdCBicGZfcmJfbm9kZSAqYikKIHsKQEAgLTMxLDYgJiM0Mzs0MSwxNyBAQCBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKQogCXJldHVybiBub2RlX2EtJmd0O2tleSAmbHQ7IG5vZGVfYi0mZ3Q7a2V5OwogfQogCiYjNDM7c3RhdGljIGJvb2wgbGVzc19yZWZjb3VudGVkKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKQomIzQzO3sKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZV9hOwomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkICpub2RlX2I7CiYjNDM7CiYjNDM7CW5vZGVfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkLCByYik7CiYjNDM7CW5vZGVfYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkLCByYik7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlX2EtJmd0O2tleSAmbHQ7IG5vZGVfYi0mZ3Q7a2V5OwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oz90YyYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9NCBhbGxvY19pbnNuPXt7WzAtOV0mIzQzO319JiMzNDspCiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXModm9pZCAqY3R4KQpAQCAtOTMsNiAmIzQzOzExNCw2MiBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RlcmVmZXJlbmNlIG9mIG1vZGlmaWVkIHB0cl9ub2RlX3JlZmNvdW50ZWQgcHRyIFIxJiMzNDspCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX2xpc3Rfbm9kZV9vZmZzZXQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZSwgKmJhc2UsICpyZWY7CiYjNDM7CXN0cnVjdCBicGZfbGlzdF9ub2RlICpsaXN0X25vZGU7CiYjNDM7CiYjNDM7CW5vZGUgPSBicGZfb2JqX25ldyh0eXBlb2YoKm5vZGUpKTsKJiM0MzsJaWYgKCFub2RlKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9zcGluX2xvY2soJmFtcDtsb2NrKTsKJiM0MzsJYnBmX2xpc3RfcHVzaF9mcm9udCgmYW1wO2hlYWQsICZhbXA7bm9kZS0mZ3Q7bGlzdCk7CiYjNDM7CWxpc3Rfbm9kZSA9IGJwZl9saXN0X3BvcF9mcm9udCgmYW1wO2hlYWQpOwomIzQzOwlicGZfc3Bpbl91bmxvY2soJmFtcDtsb2NrKTsKJiM0MzsJaWYgKCFsaXN0X25vZGUpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJYmFzZSA9IGNvbnRhaW5lcl9vZihsaXN0X25vZGUsIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQsIGxpc3QpOwomIzQzOwlyZWYgPSBicGZfcmVmY291bnRfYWNxdWlyZShsaXN0X25vZGUpOwomIzQzOwlpZiAocmVmKQomIzQzOwkJYnBmX29ial9kcm9wKHJlZik7CiYjNDM7CWJwZl9vYmpfZHJvcChiYXNlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2RlcmVmZXJlbmNlIG9mIG1vZGlmaWVkIHB0cl9ub2RlX3JlZmNvdW50ZWQgcHRyIFIxJiMzNDspCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JidHJlZV9ub2RlX29mZnNldCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkICpub2RlLCAqYmFzZSwgKnJlZjsKJiM0MzsJc3RydWN0IGJwZl9yYl9ub2RlICpyYl9ub2RlOwomIzQzOwomIzQzOwlub2RlID0gYnBmX29ial9uZXcodHlwZW9mKCpub2RlKSk7CiYjNDM7CWlmICghbm9kZSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlub2RlLSZndDtrZXkgPSAxOwomIzQzOwomIzQzOwlicGZfc3Bpbl9sb2NrKCZhbXA7bG9jayk7CiYjNDM7CWJwZl9yYnRyZWVfYWRkKCZhbXA7cm9vdCwgJmFtcDtub2RlLSZndDtyYiwgbGVzc19yZWZjb3VudGVkKTsKJiM0MzsJcmJfbm9kZSA9IGJwZl9yYnRyZWVfZmlyc3QoJmFtcDtyb290KTsKJiM0MzsJaWYgKHJiX25vZGUpCiYjNDM7CQlyYl9ub2RlID0gYnBmX3JidHJlZV9yZW1vdmUoJmFtcDtyb290LCByYl9ub2RlKTsKJiM0MzsJYnBmX3NwaW5fdW5sb2NrKCZhbXA7bG9jayk7CiYjNDM7CWlmICghcmJfbm9kZSkKJiM0MzsJCXJldHVybiAyOwomIzQzOwomIzQzOwliYXNlID0gY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQsIHJiKTsKJiM0MzsJcmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUocmJfbm9kZSk7CiYjNDM7CWlmIChyZWYpCiYjNDM7CQlicGZfb2JqX2Ryb3AocmVmKTsKJiM0MzsJYnBmX29ial9kcm9wKGJhc2UpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/ZmVudHJ5LnMvJiMzNDsgU1lTX1BSRUZJWCAmIzM0O3N5c19nZXRwZ2lkJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtmdW5jdGlvbiBjYWxscyBhcmUgbm90IGFsbG93ZWQgd2hpbGUgaG9sZGluZyBhIGxvY2smIzM0OykKIGludCBCUEZfUFJPRyhyYnRyZWVfZmFpbF9zbGVlcGFibGVfbG9ja19hY3Jvc3NfcmN1LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTM3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBCUEYgY29kZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L2JwZi5oYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IGZsYWcsIGBQVFJfWkVST19PRkZgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAsIHdoZXJlIHRoZXkmIzM5O3JlIHRyeWluZyB0byB0aWdodGVuIHVwIGhvdyB3ZSBoYW5kbGUgcG9pbnRlciBhcmd1bWVudHMsIG1ha2luZyBzdXJlIGNlcnRhaW4gb25lcyAqY2FuJiMzOTt0KiBoYXZlIGZpeGVkIG9mZnNldHMuIFNtYXJ0LgoKUmlnaHQsIHNvIHRoZXkmIzM5O3JlIG1vZGlmeWluZyBgY2hlY2tfa2Z1bmNfYXJnc2AgdG8gYmUgbW9yZSBzcGVjaWZpYyB3aXRoIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuIFByZXZpb3VzbHksIGl0IHNlZW1zIGxpa2Ugd2Ugd2VyZSBraW5kIG9mIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2ljLCBvciBhdCBsZWFzdCBmYWxsaW5nIHRocm91Z2ggdG8gaXQsIGFuZCB0aGF0IHdhc24mIzM5O3QgZ2l2aW5nIHVzIHRoZSBsZXZlbCBvZiBwcmVjaXNpb24gd2UgbmVlZCBmb3IgdGhpcyB0eXBlLiBIYW5nIG9uLCB3YXNuJiMzOTt0IGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgZ3JvdXBlZCB3aXRoIHRoaW5ncyBsaWtlIGBLRl9BUkdfUFRSX1RPX01FTWA/IE9rYXksIEkgKnRoaW5rKiB0aGUgb2xkIGxvZ2ljIG1pZ2h0IGhhdmUgYmVlbiB0byBmYWxsIHRocm91Z2ggdG8gYGFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSURgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHdpdGggYGNoZWNrX2tmdW5jX2FyZ3NgIGRpcmVjdGx5IGluIHRoZSBzb3VyY2UuCgpPa2F5LCB0aW1lIHRvIHB1bGwgdXAgdGhlIGNyb3NzLXJlZmVyZW5jZSB0b29scy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBjaGVja19rZnVuY19hcmdzYCBpcyBpbXBsZW1lbnRlZCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy4gVGhlIGxvZ2ljIGhlcmUgY291bGQgYmUgY3JpdGljYWwgZm9yIHRoZSBvdmVyYWxsIHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgdGhlIEJQRiBydW50aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDk2MD1lbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwOTYyLVx0S0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQsICAgIC8qIEFsbG9jYXRlZCBvYmplY3QgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDk2MzpcdEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSLCAvKiBSZWZjb3VudGVkIGxvY2FsIGtwdHIgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDk2NC1cdEtGX0FSR19QVFJfVE9fRFlOUFRSLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIzOD1nZXRfa2Z1bmNfcHRyX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI3MS1cdGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjcyOlx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzMtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTA4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTMxLVx0XHRcdGJyZWFrO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMTMyOlx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTMzLVx0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkY7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMzkyLVx0XHRcdGJyZWFrO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMzkzOlx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMzk0LVx0XHRcdGlmICghdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy1cdTAwM2V0eXBlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLRnVuYyBBcmd1bWVudCBUeXBlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGZvY3VzZWQgb24gdGhpcyBkaWZmIGNvbmNlcm5pbmcgYGNoZWNrX2tmdW5jX2FyZ3NgIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIHJlbW92YWwgb2YgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBmcm9tIHRoZSBncm91cCBvZiBhcmd1bWVudCB0eXBlcyBpdCB3YXMgcHJldmlvdXNseSBhc3NvY2lhdGVkIHdpdGg6IGBLRl9BUkdfUFRSX1RPX01FTWAsIGBLRl9BUkdfUFRSX1RPX01FTV9TSVpFYCwgYW5kIGBLRl9BUkdfUFRSX1RPX0NBTExCQUNLYCwgYW5kIHNvIG9uLiBUaGVzZSB3ZXJlIGFsbCBwcmV2aW91c2x5IHNldHRpbmcgYGFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSURgLgoKTm93LCBpdCYjMzk7cyBiZWluZyBoYW5kbGVkIHNlcGFyYXRlbHkuIEluc3RlYWQgb2YgdGhlIHByaW9yIGdyb3VwaW5nLCB0aGUgY29kZSBub3cgZXhwbGljaXRseSBzZXRzIGBhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGYCB3aGVuIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgaXMgZW5jb3VudGVyZWQuIFNvLCB0aGUgcmVmY291bnRlZCBrcHRyIHR5cGUgaXMgZ2V0dGluZyBhIHNwZWNpYWwgZmxhZzogYFBUUl9aRVJPX09GRmAuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHNoaWZ0IGhhcHBlbmVkLiBXaGF0JiMzOTtzIHRoZSBzcGVjaWZpYyBzZW1hbnRpYyBkaWZmZXJlbmNlIG9yIHJlcXVpcmVtZW50IHRoYXQgbmVjZXNzaXRhdGVzIHRoaXMgbmV3IGRpc3RpbmN0IGhhbmRsaW5nIGZvciBgUkVGQ09VTlRFRF9LUFRSYD8gVGhpcyBpcyBjcml0aWNhbC4gVGhlIGltcGxpY2F0aW9uIG9mIGNvbWJpbmluZyBpdCB3aXRoIGBQVFJfWkVST19PRkZgIHN1Z2dlc3RzIHRoYXQgcGVyaGFwcyB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9ucyBvciBudWxsIHBvaW50ZXIgaGFuZGxpbmcgbmVlZHMgdG8gYmUgZGlmZmVyZW50IGluIHRoaXMgc2NlbmFyaW8uIEkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBhIGJldHRlciBwaWN0dXJlLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBCVEYgaGFuZGxpbmcgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nhc2UgS0ZfQVJHX1BUUl9UT19NRU06JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkwOD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjExNS1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JCX05PREU6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIxMTY6XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxMTctXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIzMzYtXHRcdFx0YnJlYWs7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIzMzc6XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIzMzgtXHRcdFx0cmVzb2x2ZV9yZXQgPSBidGZfcmVzb2x2ZV9zaXplKGJ0ZiwgcmVmX3QsIFx1MDAyNnR5cGVfc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYXNzdW1pbmcgaXQmIzM5O3MgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYXJvdW5kIGxpbmUgMTIxMTY6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXI6IEEgRm9jdXNlZCBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgQlBGIHZlcmlmaWVyLiBMaW5lIDEyMTE24oCmIHRoYXQmIzM5O3MgZ290IHRvIGJlIGEgY3J1Y2lhbCBzcG90LCByaWdodD8gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgZGVlcGx5IGludm9sdmVkIGluIHRoZSBwcm9ncmFtIGFuYWx5c2lzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoYXQgZXhhY3QgbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmFyb3VuZCogMTIxMTYuIElzIGl0IGEgY29uZGl0aW9uYWwgY2hlY2s/IEEgZGF0YSBzdHJ1Y3R1cmUgYXNzaWdubWVudD8gQSBjYWxsIHRvIGFub3RoZXIgZnVuY3Rpb24/IEFuZCB3aGF0IGlzIHRoZSBnZW5lcmFsIHB1cnBvc2Ugb2YgdGhlIHZlcmlmaWVyIGF0IHRoaXMgcGFydCBvZiB0aGUgY29kZT8KCkJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJJiMzOTttIGxpa2VseSB0byB6ZXJvIGluIG9uIHRoZSBleGFjdCBsb2dpYyBiZWluZyBwZXJmb3JtZWQuIFdoYXQgKnNwZWNpZmljYWxseSogaXMgYmVpbmcgdmFsaWRhdGVkIG9yIGluZmVycmVkIGhlcmU/IElzIGl0IG1lbW9yeSBzYWZldHk/IENvbnRyb2wgZmxvdyBhbmFseXNpcz8gUmVzb3VyY2UgZXhoYXVzdGlvbiBsaW1pdHM/IFRoZSB2ZXJpZmllciYjMzk7cyBqb2IgaXMgdG8gZW5zdXJlIHRoYXQgYSBCUEYgcHJvZ3JhbSBpcyBzYWZlIHRvIHJ1biB3aXRoaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBsaW5lIG11c3QgYmUgZG9pbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsIHRvIHRoYXQgcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgY2x1ZXMuIEFyZSB0aGVyZSBjaGVja3MgZm9yIHBvdGVudGlhbGx5IGludmFsaWQgcG9pbnRlciBhcml0aG1ldGljPyBBcmUgdGhlcmUgcmFuZ2UgY2hlY2tzIG9uIHJlZ2lzdGVyIHZhbHVlcz8gQXJlIHRoZXJlIGNhbGxzIHRvIGhlbHBlciBmdW5jdGlvbnMgdG8gcmV0cmlldmUga2VybmVsIGRhdGE/IEFueSBvZiB0aGVzZSB3b3VsZCBsaWtlbHkgYmUgcmlnaHQgdXAgbXkgYWxsZXkuCgpNeSBpbW1lZGlhdGUgZ29hbCB3aWxsIGJlIHRvIGRldmVsb3AgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93ICp0aGlzKiBzZWN0aW9uIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxpbmsgdGhhdCBvbmUgbGluZSBvZiBjb2RlIHRvIHRoZSByZXN0IG9mIHRoZSBjb2RlIGluIHRoZSB2ZXJpZmllci4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIGtub3cgdGhlIGxhcmdlciBvYmplY3RpdmUgb2YgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgaW5jbHVkZXMgdGhhdCBsaW5lLiBIb3cgaXMgdGhlIGFuYWx5c2lzIGJlaW5nIHBlcmZvcm1lZD8gQXJlIHRoZXJlIGFueSBvcHRpbWl6YXRpb25zIHRoYXQgdGhlIHZlcmlmaWVyIGlzIHBlcmZvcm1pbmc/IFdoYXQgaXMgaXQgYXR0ZW1wdGluZyB0byBpbmZlciBhYm91dCB0aGUgQlBGIHByb2dyYW0sIGFuZCBob3cgZG9lcyBpdCB0cmFuc2xhdGUgaW50byBrZXJuZWwgc2FmZXR5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxMTA6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjEyMTExOlx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOlxuMTIxMTI6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDpcbjEyMTEzOlx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19MSVNUX05PREU6XG4xMjExNDpcdFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkJfUk9PVDpcbjEyMTE1Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxuMTIxMTY6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcbjEyMTE3Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRTpcbjEyMTE4Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbjEyMTE5Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI6XG4xMjEyMDpcdFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fV09SS1FVRVVFOlxuMTIxMjE6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RJTUVSOlxuMTIxMjI6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RBU0tfV09SSzpcbjEyMTIzOlx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19JUlFfRkxBRzpcbjEyMTI0Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLOlxuMTIxMjU6XHRcdFx0XHRicmVhaztcbjEyMTI2Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19EWU5QVFI6XG4xMjEyNzpcdFx0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19EWU5QVFI7XG4xMjEyODpcdFx0XHRcdGJyZWFrO1xuMTIxMjk6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcbjEyMTMwOlx0XHRcdFx0YXJnX3R5cGUgPSBBUkdfUFRSX1RPX0NUWDtcbjEyMTMxOlx0XHRcdFx0YnJlYWs7XG4xMjEzMjpcdFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxuMTIxMzM6XHRcdFx0XHRhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGO1xuMTIxMzQ6XHRcdFx0XHRicmVhaztcbjEyMTM1Olx0XHRcdGRlZmF1bHQ6XG4xMjEzNjpcdFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O3Vua25vd24ga2Z1bmMgYXJnIHR5cGUgJWRcJiMzNDssIGtmX2FyZ190eXBlKTtcbjEyMTM3Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xMjEzODpcdFx0XHR9XG4xMjEzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVidWdnaW5nIGEgVHlwZSBDaGVjayoqCgpPa2F5LCBJJiMzOTttIHRyYWNraW5nIGRvd24gYSBidWcsIGFuZCBJJiMzOTttIGF0IGEgcG9pbnQgd2hlcmUgSSYjMzk7bSBleGFtaW5pbmcgdGhlIHZhbHVlIG9mIGBhcmdfdHlwZWAuIFRoZSBsb2dpYyAqc2hvdWxkKiBiZSBzb3VuZCwgYnV0IGl0JiMzOTtzIG5vdCBiZWhhdmluZyBhcyBleHBlY3RlZC4gV2FpdCBhIHNlY29uZC4uLiBJIG5lZWQgdG8gYmFjayB1cCBhbmQgdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBhcmdfdHlwZWAuIFdoZXJlIHdhcyBpdCBzZXQ/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY3JvbGwgYmFjayBhIGZldyBsaW5lcyBvZiBjb2RlIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBwaW5wb2ludCBleGFjdGx5IGhvdyB0aGlzIHZhcmlhYmxlIHdhcyBmaXJzdCBhc3NpZ25lZCBhIHZhbHVlLiBJIG5lZWQgdGhhdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIGJlaGF2aW5nIHRoaXMgd2F5IG5vdy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcHJlY2lzZSBtb21lbnQgb2YgaW5zdGFudGlhdGlvbiBvciBhc3NpZ25tZW50IHNvIEkgY2FuIGFzc2VzcyB3aGV0aGVyIHRoaXMgbGluZSBoYXMgYmVlbiBvdmVybG9va2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMDkwOlx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIwOTE6XHRcdFx0XHRcdH1cbjEyMDkyOlx0XHRcdFx0fVxuMTIwOTM6XHRcdFx0XHRtZXRhLVx1MDAzZW1hcC5wdHIgPSByZWctXHUwMDNlbWFwX3B0cjtcbjEyMDk0Olx0XHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkID0gcmVnLVx1MDAzZW1hcF91aWQ7XG4xMjA5NTpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuMTIwOTY6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDpcbjEyMDk3Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19CVEZfSUQ6XG4xMjA5ODpcdFx0XHRcdGlmICghaXNfdHJ1c3RlZF9yZWcoZW52LCByZWcpKSB7XG4xMjA5OTpcdFx0XHRcdFx0aWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHtcbjEyMTAwOlx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcblwmIzM0OyxcbjEyMTAxOlx0XHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbjEyMTAyOlx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIxMDM6XHRcdFx0XHRcdH1cbjEyMTA0Olx0XHRcdFx0XHRpZiAoIWlzX3JjdV9yZWcocmVnKSkge1xuMTIxMDU6XHRcdFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxcblwmIzM0OyxcbjEyMTA2Olx0XHRcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbjEyMTA3Olx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIxMDg6XHRcdFx0XHRcdH1cbjEyMTA5Olx0XHRcdFx0fVxuMTIxMTA6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjEyMTExOlx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19JVEVSOlxuMTIxMTI6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDpcbjEyMTEzOlx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19MSVNUX05PREU6XG4xMjExNDpcdFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkJfUk9PVDpcbjEyMTE1Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxuMTIxMTY6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcbjEyMTE3Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU1fU0laRTpcbjEyMTE4Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbjEyMTE5Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DT05TVF9TVFI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipUcmFjaW5nIFZhcmlhYmxlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGBhcmdfdHlwZWAgYmVpbmcgdXNlZCwgYnV0IGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBjbGVhciB3aGVyZSBpdCYjMzk7cyBnZXR0aW5nIGl0cyB2YWx1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCBgYXJnX3R5cGVgIGlzIGluaXRpYWxpemVkIHNvbWV3aGVyZSBlbHNlLiYjMzQ7IFRoaXMgc3VnZ2VzdHMgdGhhdCBJIG5lZWQgdG8gZm9sbG93IHRoZSB2YXJpYWJsZSYjMzk7cyBsaWZlY3ljbGUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgdG8gZmluZCB3aGVyZSBgYXJnX3R5cGVgIGlzIGFjdHVhbGx5IGFzc2lnbmVkIGEgdmFsdWUuIEkmIzM5O20gZXNzZW50aWFsbHkgaHVudGluZyBmb3IgdGhlIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQgdGhhdCBnaXZlcyBpdCBpdHMgaW5pdGlhbCBzdGF0ZS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGluaXRpYWxpemF0aW9uIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIwNzA6XHRcdFx0XHRcdCAqIGlmIChpbm5lcl9tYXAxIFx1MDAyNlx1MDAyNiBpbm5lcl9tYXAyKSB7XG4xMjA3MTpcdFx0XHRcdFx0ICogICAgIHdxID0gYnBmX21hcF9sb29rdXBfZWxlbShpbm5lcl9tYXAxKTtcbjEyMDcyOlx0XHRcdFx0XHQgKiAgICAgaWYgKHdxKVxuMTIwNzM6XHRcdFx0XHRcdCAqICAgICAgICAgLy8gbWlzbWF0Y2ggd291bGQgaGF2ZSBiZWVuIGFsbG93ZWRcbjEyMDc0Olx0XHRcdFx0XHQgKiAgICAgICAgIGJwZl93cV9pbml0KHdxLCBpbm5lcl9tYXAyKTtcbjEyMDc1Olx0XHRcdFx0XHQgKiB9XG4xMjA3NjpcdFx0XHRcdFx0ICpcbjEyMDc3Olx0XHRcdFx0XHQgKiBDb21wYXJpbmcgbWFwX3B0ciBpcyBlbm91Z2ggdG8gZGlzdGluZ3Vpc2ggbm9ybWFsIGFuZCBvdXRlciBtYXBzLlxuMTIwNzg6XHRcdFx0XHRcdCAqL1xuMTIwNzk6XHRcdFx0XHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIgIT0gcmVnLVx1MDAzZW1hcF9wdHIgfHxcbjEyMDgwOlx0XHRcdFx0XHQgICAgbWV0YS1cdTAwM2VtYXAudWlkICE9IHJlZy1cdTAwM2VtYXBfdWlkKSB7XG4xMjA4MTpcdFx0XHRcdFx0XHRpZiAocmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKSB7XG4xMjA4MjpcdFx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LFxuMTIwODM6XHRcdFx0XHRcdFx0XHRcdFwmIzM0O2JwZl90YXNrX3dvcmsgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkIGRvZXNuJiMzOTt0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcXG5cJiMzNDssXG4xMjA4NDpcdFx0XHRcdFx0XHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkLCByZWctXHUwMDNlbWFwX3VpZCk7XG4xMjA4NTpcdFx0XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIwODY6XHRcdFx0XHRcdFx0fVxuMTIwODc6XHRcdFx0XHRcdFx0dmVyYm9zZShlbnYsXG4xMjA4ODpcdFx0XHRcdFx0XHRcdFwmIzM0O3dvcmtxdWV1ZSBwb2ludGVyIGluIFIxIG1hcF91aWQ9JWQgZG9lc24mIzM5O3QgbWF0Y2ggbWFwIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZFxcblwmIzM0OyxcbjEyMDg5Olx0XHRcdFx0XHRcdFx0bWV0YS1cdTAwM2VtYXAudWlkLCByZWctXHUwMDNlbWFwX3VpZCk7XG4xMjA5MDpcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyMDkxOlx0XHRcdFx0XHR9XG4xMjA5MjpcdFx0XHRcdH1cbjEyMDkzOlx0XHRcdFx0bWV0YS1cdTAwM2VtYXAucHRyID0gcmVnLVx1MDAzZW1hcF9wdHI7XG4xMjA5NDpcdFx0XHRcdG1ldGEtXHUwMDNlbWFwLnVpZCA9IHJlZy1cdTAwM2VtYXBfdWlkO1xuMTIwOTU6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjEyMDk2Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQ6XG4xMjA5NzpcdFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fQlRGX0lEOlxuMTIwOTg6XHRcdFx0XHRpZiAoIWlzX3RydXN0ZWRfcmVnKGVudiwgcmVnKSkge1xuMTIwOTk6XHRcdFx0XHRcdGlmICghaXNfa2Z1bmNfcmN1KG1ldGEpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRleHQgYW5kIHN5bnRoZXNpemUgaXRzIGNvcmUgaWRlYXMgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duIHRob3VnaHRzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtsbCBhcHByb2FjaCB0aGlzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENvbmNlcHR1YWwgTGFuZHNjYXBlKioKCkFscmlnaHQsIGJlZm9yZSBJIGdldCBpbnRvIHRoZSBzcGVjaWZpYyBjb250ZW50LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXV0aG9yJiMzOTtzIGludGVudC4gTXkgaW5pdGlhbCBpbXB1bHNlIGlzIHRvIGRpc3NlY3QgdGhlIHN0cnVjdHVyZSBhbmQgYXJndW1lbnQuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgYXJlIHRoZSBrZXkgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZT8gQW5kIG1vc3QgaW1wb3J0YW50bHksIHdoZXJlIGlzIHRoaXMgZ29pbmc/IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZvdW5kYXRpb25hbCBwcmluY2lwbGVzLCB0aGUgY2VudHJhbCBjbGFpbXMsIGFuZCBhbnkgaGlkZGVuIGFzc3VtcHRpb25zIG9yIGJpYXNlcyB0aGF0IG5lZWQgdG8gYmUgc3VyZmFjZWQuIEkgd2FudCB0byByZWFkIGJldHdlZW4gdGhlIGxpbmVzIGFzIGEgY3JpdGljYWwgZXhwZXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMDQwOlx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3JlbGVhc2Uga2Z1bmMgJXMgZXhwZWN0cyByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgcGFzc2VkIHRvICVzXFxuXCYjMzQ7LFxuMTIwNDE6XHRcdFx0XHRcdGZ1bmNfbmFtZSwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbjEyMDQyOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjA0MzpcdFx0XHR9XG4xMjA0NDpcdFxuMTIwNDU6XHRcdFx0aWYgKHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcbjEyMDQ2Olx0XHRcdFx0dXBkYXRlX3JlZl9vYmooXHUwMDI2bWV0YS1cdTAwM2VyZWZfb2JqLCByZWcpO1xuMTIwNDc6XHRcbjEyMDQ4Olx0XHRcdHJlZl90ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnJlZl9pZCk7XG4xMjA0OTpcdFx0XHRyZWZfdG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCByZWZfdC1cdTAwM2VuYW1lX29mZik7XG4xMjA1MDpcdFxuMTIwNTE6XHRcdFx0a2ZfYXJnX3R5cGUgPSBnZXRfa2Z1bmNfcHRyX2FyZ190eXBlKGVudiwgY2FsbGVyLCByZWdzLCBtZXRhLCB0LCByZWZfdCwgcmVmX3RuYW1lLFxuMTIwNTI6XHRcdFx0XHRcdFx0XHQgICAgIGFyZ3MsIGksIG5hcmdzLCBhcmdubywgcmVnKTtcbjEyMDUzOlx0XHRcdGlmIChrZl9hcmdfdHlwZSBcdTAwM2MgMClcbjEyMDU0Olx0XHRcdFx0cmV0dXJuIGtmX2FyZ190eXBlO1xuMTIwNTU6XHRcbjEyMDU2Olx0XHRcdHN3aXRjaCAoa2ZfYXJnX3R5cGUpIHtcbjEyMDU3Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19OVUxMOlxuMTIwNTg6XHRcdFx0XHRjb250aW51ZTtcbjEyMDU5Olx0XHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6XG4xMjA2MDpcdFx0XHRcdGlmICghcmVnLVx1MDAzZW1hcF9wdHIpIHtcbjEyMDYxOlx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7cG9pbnRlciBpbiAlcyBpc24mIzM5O3QgbWFwIHBvaW50ZXJcXG5cJiMzNDssXG4xMjA2MjpcdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuMTIwNjM6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIwNjQ6XHRcdFx0XHR9XG4xMjA2NTpcdFx0XHRcdGlmIChtZXRhLVx1MDAzZW1hcC5wdHIgXHUwMDI2XHUwMDI2IChyZWctXHUwMDNlbWFwX3B0ci1cdTAwM2VyZWNvcmQtXHUwMDNld3Ffb2ZmIFx1MDAzZT0gMCB8fFxuMTIwNjY6XHRcdFx0XHRcdFx0ICAgICAgcmVnLVx1MDAzZW1hcF9wdHItXHUwMDNlcmVjb3JkLVx1MDAzZXRhc2tfd29ya19vZmYgXHUwMDNlPSAwKSkge1xuMTIwNjc6XHRcdFx0XHRcdC8qIFVzZSBtYXBfdWlkICh3aGljaCBpcyB1bmlxdWUgaWQgb2YgaW5uZXIgbWFwKSB0byByZWplY3Q6XG4xMjA2ODpcdFx0XHRcdFx0ICogaW5uZXJfbWFwMSA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkxKVxuMTIwNjk6XHRcdFx0XHRcdCAqIGlubmVyX21hcDIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG91dGVyX21hcCwga2V5MilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGF0IEFyZ3VtZW50IFR5cGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgYXJnX3R5cGVgIGlzIGJlaW5nIGluaXRpYWxpemVkIHdpdGggYEFSR19QVFJfVE9fQlRGX0lEYC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCB2YXJpYWJsZSYjMzk7cyBpbnRlbmRlZCB1c2UgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBhIGtleSB2YWx1ZSBmb3IgaG93IHRoZSBhcmd1bWVudCBwcm9jZXNzaW5nIGlzIGdvaW5nIHRvIHByb2NlZWQgaGVyZSwgc28gYSByYXBpZCBjaGVjayBpcyB2aXRhbCBmb3IgdGhlIGxvZ2ljIHRvIHByb2dyZXNzIHNtb290aGx5LiBMZXQmIzM5O3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvZGUmIzM5O3MgaW50ZW5kZWQgcGF0aCBjb3JyZWN0bHkuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBhcyBleHBlY3RlZCBiZWZvcmUgd2UgZ28gZnVydGhlciwgb3Igd2UgY291bGQgYmUgb3BlbmluZyB0aGUgZG9vciB0byBzb21lIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIwMTA6XHRcdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuMTIwMTE6XHRcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjAxMjpcdFx0XHRcdFx0fVxuMTIwMTM6XHRcbjEyMDE0Olx0XHRcdFx0XHRtZXRhLVx1MDAzZXIwX3NpemUgPSByZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbjEyMDE1Olx0XHRcdFx0XHRpZiAocmVnbm8gXHUwMDNlPSAwKVxuMTIwMTY6XHRcdFx0XHRcdFx0cmV0ID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCByZWdubyk7XG4xMjAxNzpcdFx0XHRcdFx0ZWxzZVxuMTIwMTg6XHRcdFx0XHRcdFx0cmV0ID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgaSk7XG4xMjAxOTpcdFx0XHRcdFx0aWYgKHJldClcbjEyMDIwOlx0XHRcdFx0XHRcdHJldHVybiByZXQ7XG4xMjAyMTpcdFx0XHRcdH1cbjEyMDIyOlx0XHRcdFx0Y29udGludWU7XG4xMjAyMzpcdFx0XHR9XG4xMjAyNDpcdFxuMTIwMjU6XHRcdFx0aWYgKCFidGZfdHlwZV9pc19wdHIodCkpIHtcbjEyMDI2Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1VucmVjb2duaXplZCAlcyB0eXBlICVzXFxuXCYjMzQ7LFxuMTIwMjc6XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcbjEyMDI4Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjAyOTpcdFx0XHR9XG4xMjAzMDpcdFxuMTIwMzE6XHRcdFx0aWYgKChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIHx8IHR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSBcdTAwMjZcdTAwMjZcbjEyMDMyOlx0XHRcdCAgICAhaXNfa2Z1bmNfYXJnX251bGxhYmxlKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2ldKSkge1xuMTIwMzM6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxuXCYjMzQ7LFxuMTIwMzQ6XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4xMjAzNTpcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuMTIwMzY6XHRcdFx0fVxuMTIwMzc6XHRcbjEyMDM4Olx0XHRcdGlmIChyZWdubyA9PSBtZXRhLVx1MDAzZXJlbGVhc2VfcmVnbm8gXHUwMDI2XHUwMDI2ICFpc19rZnVuY19hcmdfZHlucHRyKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2ldKSBcdTAwMjZcdTAwMjZcbjEyMDM5Olx0XHRcdCAgICAhcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpIFx1MDAyNlx1MDAyNiAhYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogVHJhY2luZyBgYXJnX3R5cGVgKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGlzIGBhcmdfdHlwZWAgdmFyaWFibGUuIFdoZXJlIGV4YWN0bHkgaXMgdGhpcyB0aGluZyBkZWZpbmVkPyBJIG5lZWQgdG8gdHJhY2sgZG93biBpdHMgZGVjbGFyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBvcmlnaW4gYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsbHkgc2V0IHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBpbnRlcnByZXQgaXRzIHVzYWdlIGxhdGVyIG9uLiBJdCYjMzk7cyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiBkZXBlbmRzLCBhbmQgSSBjYW4mIzM5O3QgYnVpbGQgYW55IHJlbGlhYmxlIGFuYWx5c2lzIHdpdGhvdXQgaXQuIEdvdHRhIGdldCB0aGF0IHN0YXJ0aW5nIHBvaW50IGNsZWFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjAxPXN0YXRpYyBpbnQgaXJxX2ZsYWdfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MDUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA2OnN0YXRpYyBlbnVtIGJwZl9keW5wdHJfdHlwZSBhcmdfdG9fZHlucHRyX3R5cGUoZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjA3LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njc3PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Nzg6XHRcdFx0XHQgICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSwgaW50IGluc25faWR4LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3OS1cdFx0XHRcdCAgIHN0cnVjdCByZWZfb2JqX2Rlc2MgKnJlZl9vYmosIHN0cnVjdCBicGZfZHlucHRyX2Rlc2MgKmR5bnB0cilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA0PXN0YXRpYyBib29sIGlzX2R5bnB0cl90eXBlX2V4cGVjdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA1Olx0XHRcdFx0ICAgIGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNi17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcyMjQ9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzIyNTpcdFx0XHQgICAgICAgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LCBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MjI2LVx0XHRcdCAgICAgICBzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjICpkeW5wdHIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc4MTk9c3RhdGljIGludCBjaGVja19yZWdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc4MjA6XHRcdFx0ICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODIxLVx0XHRcdCAgY29uc3QgdTMyICphcmdfYnRmX2lkLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03OTkzPXN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmdfcmVnX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc5OTQtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Nzk5NTpcdFx0XHRcdCAgZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk5Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgxOTI9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTk4LVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ19zdGF0ZShlbnYsIHJlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTk5Olx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBmbi1cdTAwM2VhcmdfdHlwZVthcmddO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMDAtXHRhcmdub190IGFyZ25vID0gYXJnbm9fZnJvbV9hcmcoYXJnICYjNDM7IDEpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04ODA1PXN0YXRpYyBib29sIGNoZWNrX21lbV9hcmdfcndfZmxhZ19vayhjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKmZuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODA5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbi1cdTAwM2VhcmdfdHlwZSk7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODgxMDpcdFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBmbi1cdTAwM2VhcmdfdHlwZVtpXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODExLVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04ODIxPXN0YXRpYyBib29sIGNoZWNrX3Byb3RvX3JlbGVhc2VfcmVnKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODgyNS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZm4tXHUwMDNlYXJnX3R5cGUpOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjg4MjY6XHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXHUwMDNlYXJnX3R5cGVbaV07XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODgyNy1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MDg9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NDItXHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgKnJlZl90LCAqcmVzb2x2ZV9yZXQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NDM6XHRcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gQVJHX0RPTlRDQVJFO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTQ0LVx0XHRhcmdub190IGFyZ25vID0gYXJnbm9fZnJvbV9hcmcoaSAmIzQzOyAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBBcmd1bWVudCBUeXBlIExvZ2ljKioKClNvLCBJIHNlZSB0aGF0IGBhcmdfdHlwZWAgaW5pdGlhbGx5IGdldHMgc2V0IHRvIGBBUkdfRE9OVENBUkVgLiBUaGF0JiMzOTtzIGEgc2Vuc2libGUgc3RhcnRpbmcgcG9pbnQsIGVzc2VudGlhbGx5IGEgJiMzNDt3ZSBoYXZlbiYjMzk7dCBmaWd1cmVkIHRoaXMgb3V0IHlldCYjMzQ7IGtpbmQgb2Ygc3RhdGUuIFRoZSBjb2RlIHRoZW4ganVtcHMgaW50byBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBpdCYjMzk7cyBoZXJlIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgd2l0aGluIHRoZSBgY2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYmxvY2suIEFoLCByaWdodCwgYSBrZXJuZWwgZnVuY3Rpb24gYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHNvbWV0aGluZyByZWZlcmVuY2UgY291bnRlZCwgd2hpY2ggaXMgYSBrbm93biB0eXBlLiBJbiB0aGlzIGNhc2UsIEkgY2FuIHNlZSB0aGF0IGBhcmdfdHlwZWAgaXMgbm93IGJlaW5nIGFzc2lnbmVkIGEgbW9yZSBzcGVjaWZpYyB2YWx1ZTogYEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGYC4KClRoYXQmIzM5O3MgY3JpdGljYWwuIGBBUkdfUFRSX1RPX0JURl9JRGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UgbmVlZCB0byB0cmFjayB0aGlzIGFyZ3VtZW50IHdpdGggYSBCVEYgdHlwZSBJRCwgaW5kaWNhdGluZyB0aGUga2luZCBvZiBkYXRhIHRoZSBwb2ludGVyIGlzIHBvaW50aW5nIHRvLiBUaGUgaW5jbHVzaW9uIG9mIGBQVFJfWkVST19PRkZgIGFsc28gbm90ZXMgc29tZXRoaW5nIGltcG9ydGFudCBhYm91dCB0aGUgcG9pbnRlciBvZmZzZXQsIHBvc3NpYmx5IHJlbGV2YW50IGZvciBtZW1vcnkgc2FmZXR5IG9yIHN0cnVjdHVyZSBhbGlnbm1lbnQuIEl0IHRoZW4ganVtcHMgdG8gYSBjcnVjaWFsIGNoZWNrLCB0aGUgYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgIGZ1bmN0aW9uIGNhbGwsIHdoaWNoIEkgY2FuIGRlZHVjZSBpcyB3aGVyZSB3ZSB2YWxpZGF0ZSB0aGlzIGFyZ3VtZW50JiMzOTtzIHByb3BlcnRpZXMsIHNwZWNpZmljYWxseSB0aGUgcmVnaXN0ZXIgaXQmIzM5O3MgaW4gKGByZWdgKSwgaXRzIGFyZ3VtZW50IG51bWJlciAoYGFyZ25vYCksIGFuZCwgY3JpdGljYWxseSwgdGhpcyBkZXJpdmVkIGBhcmdfdHlwZWAuIEkmIzM5O2QgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gdGhlbiwgZ2l2ZW4gdGhlIG5ldyBgYXJnX3R5cGVgLCBwZXJmb3JtIGNoZWNrcyB0byBlbnN1cmUsIGZvciBleGFtcGxlLCB0aGUgcmVnaXN0ZXIgY29udGFpbnMgYSB2YWxpZCBwb2ludGVyLCB0aGF0IGl0IGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBCVEYgdHlwZSwgb3IgdGhhdCBgUFRSX1pFUk9fT0ZGYCBpcyBjb3JyZWN0bHkgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEzMDpcdFx0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19DVFg7XG4xMjEzMTpcdFx0XHRcdGJyZWFrO1xuMTIxMzI6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcbjEyMTMzOlx0XHRcdFx0YXJnX3R5cGUgPSBBUkdfUFRSX1RPX0JURl9JRCB8IFBUUl9aRVJPX09GRjtcbjEyMTM0Olx0XHRcdFx0YnJlYWs7XG4xMjEzNTpcdFx0XHRkZWZhdWx0OlxuMTIxMzY6XHRcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDt1bmtub3duIGtmdW5jIGFyZyB0eXBlICVkXCYjMzQ7LCBrZl9hcmdfdHlwZSk7XG4xMjEzNzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTIxMzg6XHRcdFx0fVxuMTIxMzk6XHRcbjEyMTQwOlx0XHRcdGlmIChyZWdubyA9PSBtZXRhLVx1MDAzZXJlbGVhc2VfcmVnbm8pXG4xMjE0MTpcdFx0XHRcdGFyZ190eXBlIHw9IE9CSl9SRUxFQVNFO1xuMTIxNDI6XHRcdFx0cmV0ID0gY2hlY2tfZnVuY19hcmdfcmVnX29mZihlbnYsIHJlZywgYXJnbm8sIGFyZ190eXBlKTtcbjEyMTQzOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMjE0NDpcdFx0XHRcdHJldHVybiByZXQ7XG4xMjE0NTpcdFxuMTIxNDY6XHRcdFx0c3dpdGNoIChrZl9hcmdfdHlwZSkge1xuMTIxNDc6XHRcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcbjEyMTQ4Olx0XHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19DVFgpIHtcbjEyMTQ5Olx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgZXhwZWN0ZWQgcG9pbnRlciB0byBjdHgsIGJ1dCBnb3QgJXNcXG5cJiMzNDssXG4xMjE1MDpcdFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIHJlZ190eXBlX3N0cihlbnYsIHJlZy1cdTAwM2V0eXBlKSk7XG4xMjE1MTpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjE1MjpcdFx0XHRcdH1cbjEyMTUzOlx0XG4xMjE1NDpcdFx0XHRcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9jYXN0X3RvX2tlcm5fY3R4XSkge1xuMTIxNTU6XHRcdFx0XHRcdHJldCA9IGdldF9rZXJuX2N0eF9idGZfaWQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVx1MDAzZXByb2cpKTtcbjEyMTU2Olx0XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTIxNTc6XHRcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjE1ODpcdFx0XHRcdFx0bWV0YS1cdTAwM2VyZXRfYnRmX2lkICA9IHJldDtcbjEyMTU5Olx0XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFyZ3VtZW50IFR5cGUgSGFuZGxpbmcqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAgKmlzKiBpbmRlZWQgY2FsbGVkIHdpdGggYGFyZ190eXBlYC4gSW50ZXJlc3RpbmcuIE5vdywgSSBoYXZlIHRvIHJld2luZCBhIGJpdC4gSSByZW1lbWJlciB0aGF0IHRoZSBoYW5kbGluZyBvZiBhcmd1bWVudCB0eXBlcyB1c2VkIHRvIGJ1bmRsZSBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIHRvZ2V0aGVyIHdpdGggb3RoZXIgdHlwZXMgbGlrZSBgS0ZfQVJHX1BUUl9UT19NRU1gLiBQcmV2aW91c2x5LCB0aGVzZSBqdXN0IHRyaWdnZXJlZCBhIHNpbXBsZSBgYnJlYWs7YCwgbGVhdmluZyBgYXJnX3R5cGVgIGFzIGBBUkdfRE9OVENBUkVgLgoKU28sIHRoZSBrZXkgaGVyZSBpcyB3aGF0IGhhcHBlbnMgd2hlbiBgYXJnX3R5cGVgIGVuZHMgdXAgYXMgYEFSR19ET05UQ0FSRWAuIFRoZSBjb2RlIHBhdGggaXMgZGlmZmVyZW50ICpub3cqLiBJIG5lZWQgdG8gZm9jdXMgb24gaG93IGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYCBoYW5kbGVzIHRoYXQgc3BlY2lmaWMgc2NlbmFyaW8gd2l0aCBgQVJHX0RPTlRDQVJFYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc5OTA6XHRcdHJldHVybiBmaWVsZDtcbjc5OTE6XHR9XG43OTkyOlx0XG43OTkzOlx0c3RhdGljIGludCBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG43OTk0Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG43OTk1Olx0XHRcdFx0XHQgIGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlKVxuNzk5NjpcdHtcbjc5OTc6XHRcdGJvb2wgZml4ZWRfb2ZmX29rID0gIShhcmdfdHlwZSBcdTAwMjYgUFRSX1pFUk9fT0ZGKTtcbjc5OTg6XHRcdHUzMiB0eXBlID0gcmVnLVx1MDAzZXR5cGU7XG43OTk5Olx0XG44MDAwOlx0XHRhcmdfdHlwZSBcdTAwMjY9IH5QVFJfWkVST19PRkY7XG44MDAxOlx0XG44MDAyOlx0XHQvKiBXaGVuIHJlZmVyZW5jZWQgcmVnaXN0ZXIgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sIGl0cyBmaXhlZFxuODAwMzpcdFx0ICogb2Zmc2V0IG11c3QgYmUgMC5cbjgwMDQ6XHRcdCAqXG44MDA1Olx0XHQgKiBXZSB3aWxsIGNoZWNrIGFyZ190eXBlX2lzX3JlbGVhc2UgcmVnIGhhcyBpZCB3aGVuIHN0b3JpbmdcbjgwMDY6XHRcdCAqIG1ldGEtXHUwMDNlcmVsZWFzZV9yZWduby5cbjgwMDc6XHRcdCAqL1xuODAwODpcdFx0aWYgKGFyZ190eXBlX2lzX3JlbGVhc2UoYXJnX3R5cGUpKSB7XG44MDA5Olx0XHRcdC8qIEFSR19QVFJfVE9fRFlOUFRSIHdpdGggT0JKX1JFTEVBU0UgaXMgYSBiaXQgc3BlY2lhbCwgYXMgaXRcbjgwMTA6XHRcdFx0ICogbWF5IG5vdCBkaXJlY3RseSBwb2ludCB0byB0aGUgb2JqZWN0IGJlaW5nIHJlbGVhc2VkLCBidXQgdG9cbjgwMTE6XHRcdFx0ICogZHlucHRyIHBvaW50aW5nIHRvIHN1Y2ggb2JqZWN0LCB3aGljaCBtaWdodCBiZSBhdCBzb21lIG9mZnNldFxuODAxMjpcdFx0XHQgKiBvbiB0aGUgc3RhY2suIEluIHRoYXQgY2FzZSwgd2Ugc2ltcGx5IHRvIGZhbGxiYWNrIHRvIHRoZVxuODAxMzpcdFx0XHQgKiBkZWZhdWx0IGhhbmRsaW5nLlxuODAxNDpcdFx0XHQgKi9cbjgwMTU6XHRcdFx0aWYgKGFyZ190eXBlX2lzX2R5bnB0cihhcmdfdHlwZSkgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUFRSX1RPX1NUQUNLKVxuODAxNjpcdFx0XHRcdHJldHVybiAwO1xuODAxNzpcdFxuODAxODpcdFx0XHQvKiBEb2luZyBjaGVja19wdHJfb2ZmX3JlZyBjaGVjayBmb3IgdGhlIG9mZnNldCB3aWxsIGNhdGNoIHRoaXNcbjgwMTk6XHRcdFx0ICogYmVjYXVzZSBmaXhlZF9vZmZfb2sgaXMgZmFsc2UsIGJ1dCBjaGVja2luZyBoZXJlIGFsbG93cyB1c1xuODAyMDpcdFx0XHQgKiB0byBnaXZlIHRoZSB1c2VyIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UuXG44MDIxOlx0XHRcdCAqL1xuODAyMjpcdFx0XHRpZiAoIXRudW1faXNfY29uc3QocmVnLVx1MDAzZXZhcl9vZmYpIHx8IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlICE9IDApIHtcbjgwMjM6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgbXVzdCBoYXZlIHplcm8gb2Zmc2V0IHdoZW4gcGFzc2VkIHRvIHJlbGVhc2UgZnVuYyBvciB0cnVzdGVkIGFyZyB0byBrZnVuY1xcblwmIzM0OyxcbjgwMjQ6XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG44MDI1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG44MDI2Olx0XHRcdH1cbjgwMjc6XHRcdH1cbjgwMjg6XHRcbjgwMjk6XHRcdHN3aXRjaCAodHlwZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhIHN3aXRjaCBzdGF0ZW1lbnQgaW4gbXkgZXhwZXJ0IGNhcGFjaXR5OgoKKipUaGUgSW1wbGljYXRpb25zIG9mIGEgU3dpdGNoIFN0YXRlbWVudDogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gdGhlIHN3aXRjaCBzdGF0ZW1lbnQuICpIbW0qLCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIGNvbnRyb2wgZmxvdyBtZWNoYW5pc20sIGEgc3RydWN0dXJlZCAqaWYtZWxzZSogbGFkZGVyLCByZWFsbHkuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXRzIGVmZmljaWVuY3ksIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIHdpdGggbnVtZXJvdXMgY29uZGl0aW9ucy4gSXMgaXQgcmVhbGx5IHRoZSBiZXN0IGFwcHJvYWNoIGhlcmU/IFRoZSBjb21waWxlciYjMzk7cyBvcHRpbWl6YXRpb24gcGxheXMgYSAqaHVnZSogcm9sZSwgb2YgY291cnNlLiBJJiMzOTttIGNvbnNpZGVyaW5nIGlmIGl0JiMzOTtzIGNvbXBpbGluZyB0byBhIGp1bXAgdGFibGUsIG9yIGlmIGl0JiMzOTtzIHJldmVydGluZyB0byBhIHNlcmllcyBvZiBjb21wYXJpc29ucyB3aGVuIHRoZSBjYXNlIHZhbHVlcyBhcmVuJiMzOTt0IGRlbnNlIG9yIGVhc2lseSBvcHRpbWl6YWJsZS4gKlRoYXQmIzM5O3MgY3JpdGljYWwqLgoKSSYjMzk7bSBwb25kZXJpbmcgdGhlIGltcGFjdCBvbiByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5IHRvby4gQSB3ZWxsLXN0cnVjdHVyZWQgc3dpdGNoIGNhbiBiZSBmYXIgbW9yZSBlbGVnYW50IHRoYW4gYSBkZWVwbHkgbmVzdGVkICppZi1lbHNlKiBjb25zdHJ1Y3QsIHdoaWNoIEkmIzM5O3ZlIHNlZW4gc29tZSBob3Jyb3JzIGluIHRoZSBwYXN0ISBCdXQgcG9vciB1c2Ugb2YgYnJlYWsgc3RhdGVtZW50cywgb3IgZmFsbC10aHJvdWdoIGJlaGF2aW9yLi4uICpzaHVkZGVycyouIFRoYXQmIzM5O3Mgd2hlcmUgY29tbWVudHMgYmVjb21lIGNydWNpYWwsIG5vdCBqdXN0IGZvciBkb2N1bWVudGF0aW9uLCBidXQgdG8gZXhwbGljaXRseSBjbGFyaWZ5IHRoZSBpbnRlbmRlZCBsb2dpYy4gSXMgdGhhdCB0aGUgY2FzZSBmb3IgKnRoaXMqIHNpdHVhdGlvbj8gU2hvdWxkIEkgYmUgdXNpbmcgYW4gZW51bSBvciBhIGxvb2t1cCB0YWJsZSBpbnN0ZWFkPyBPciB3b3VsZCBhIGNvbWJpbmF0aW9uIG9mIHRlY2huaXF1ZXMgYmUgYmVzdD8KCkFsc28sIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuIEkgYW0gYXNraW5nIG15c2VsZiwgaXMgdGhlIHN3aXRjaCB0aGUgZmFzdGVzdCB3YXkgdG8gcm91dGUgdGhlIHByb2dyYW0gZmxvdyB0byB0aGUgY29ycmVjdCBwcm9jZXNzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgZnJlcXVlbnRseSB0aGVzZSBjb25kaXRpb25zIHdpbGwgYmUgZXZhbHVhdGVkIGR1cmluZyBleGVjdXRpb24uIEkgbmVlZCB0byBiZSBjbGVhciBhbmQgY29uY2lzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzgwMzA6XHRcdC8qIFBvaW50ZXIgdHlwZXMgd2hlcmUgYm90aCBmaXhlZCBhbmQgdmFyaWFibGUgb2Zmc2V0IGlzIGV4cGxpY2l0bHkgYWxsb3dlZDogKi9cbjgwMzE6XHRcdGNhc2UgUFRSX1RPX1NUQUNLOlxuODAzMjpcdFx0Y2FzZSBQVFJfVE9fUEFDS0VUOlxuODAzMzpcdFx0Y2FzZSBQVFJfVE9fUEFDS0VUX01FVEE6XG44MDM0Olx0XHRjYXNlIFBUUl9UT19NQVBfS0VZOlxuODAzNTpcdFx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxuODAzNjpcdFx0Y2FzZSBQVFJfVE9fTUVNOlxuODAzNzpcdFx0Y2FzZSBQVFJfVE9fTUVNIHwgTUVNX1JET05MWTpcbjgwMzg6XHRcdGNhc2UgUFRSX1RPX01FTSB8IE1FTV9SSU5HQlVGOlxuODAzOTpcdFx0Y2FzZSBQVFJfVE9fQlVGOlxuODA0MDpcdFx0Y2FzZSBQVFJfVE9fQlVGIHwgTUVNX1JET05MWTpcbjgwNDE6XHRcdGNhc2UgUFRSX1RPX0FSRU5BOlxuODA0MjpcdFx0Y2FzZSBTQ0FMQVJfVkFMVUU6XG44MDQzOlx0XHRcdHJldHVybiAwO1xuODA0NDpcdFx0LyogQWxsIHRoZSByZXN0IG11c3QgYmUgcmVqZWN0ZWQsIGV4Y2VwdCBQVFJfVE9fQlRGX0lEIHdoaWNoIGFsbG93c1xuODA0NTpcdFx0ICogZml4ZWQgb2Zmc2V0LlxuODA0NjpcdFx0ICovXG44MDQ3Olx0XHRjYXNlIFBUUl9UT19CVEZfSUQ6XG44MDQ4Olx0XHRjYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0M6XG44MDQ5Olx0XHRjYXNlIFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRDpcbjgwNTA6XHRcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9SQ1U6XG44MDUxOlx0XHRjYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBOT05fT1dOX1JFRjpcbjgwNTI6XHRcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IE5PTl9PV05fUkVGIHwgTUVNX1JDVTpcbjgwNTM6XHRcdFx0LyogV2hlbiByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sXG44MDU0Olx0XHRcdCAqIG9yIHdoZW4gdGhlIGFyZ3VtZW50IHR5cGUgcmVxdWlyZXMgemVybyBmaXhlZCBvZmZzZXQsIGl0c1xuODA1NTpcdFx0XHQgKiBmaXhlZCBvZmZzZXQgbXVzdCBiZSAwLiBJbiB0aGUgb3RoZXIgY2FzZXMsIGZpeGVkIG9mZnNldCBjYW5cbjgwNTY6XHRcdFx0ICogYmUgbm9uLXplcm8uIHZhcl9vZmYgYWx3YXlzIG11c3QgYmUgMCBmb3IgUFRSX1RPX0JURl9JRCxcbjgwNTc6XHRcdFx0ICogaGVuY2Ugd2Ugc3RpbGwgbmVlZCB0byBkbyBjaGVja3MgaW5zdGVhZCBvZiByZXR1cm5pbmcuXG44MDU4Olx0XHRcdCAqL1xuODA1OTpcdFx0XHRyZXR1cm4gX19jaGVja19wdHJfb2ZmX3JlZyhlbnYsIHJlZywgYXJnbm8sIGZpeGVkX29mZl9vayk7XG44MDYwOlx0XHRjYXNlIFBUUl9UT19DVFg6XG44MDYxOlx0XHRcdC8qXG44MDYyOlx0XHRcdCAqIEFsbG93IGZpeGVkIGFuZCB2YXJpYWJsZSBvZmZzZXRzIGZvciBzeXNjYWxsIGNvbnRleHQsIGJ1dFxuODA2MzpcdFx0XHQgKiBvbmx5IHdoZW4gdGhlIGFyZ3VtZW50IGlzIHBhc3NlZCBhcyBtZW1vcnksIG5vdCBjdHgsXG44MDY0Olx0XHRcdCAqIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IG1vZGlmaWVkIGN0eCBpbiB0YWlsIGNhbGxlZCBwcm9ncmFtcyBhbmRcbjgwNjU6XHRcdFx0ICogZ2xvYmFsIHN1YnByb2dzICh0aGF0IG1heSBhY3QgYXMgZXh0ZW5zaW9uIHByb2cgaG9va3MpLlxuODA2NjpcdFx0XHQgKi9cbjgwNjc6XHRcdFx0aWYgKGFyZ190eXBlICE9IEFSR19QVFJfVE9fQ1RYIFx1MDAyNlx1MDAyNiBpc192YXJfY3R4X29mZl9hbGxvd2VkKGVudi1cdTAwM2Vwcm9nKSlcbjgwNjg6XHRcdFx0XHRyZXR1cm4gMDtcbjgwNjk6XHRcdFx0ZmFsbHRocm91Z2g7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYFBUUl9aRVJPX09GRmAgSW1wYWN0IG9uIFBvaW50ZXIgT2Zmc2V0IEhhbmRsaW5nKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIFByZXZpb3VzbHksIHRoZSBgZml4ZWRfb2ZmX29rYCBmbGFnIHdhcyBzZXQgdG8gdHJ1ZSwgYmVjYXVzZSB3ZSB3ZXJlIGRlYWxpbmcgd2l0aCBhbiBgQVJHX0RPTlRDQVJFYCBhcmd1bWVudCB0eXBlLCBhbmQgdGhhdCBvbmUgZG9lc24mIzM5O3QgaGF2ZSB0aGUgYFBUUl9aRVJPX09GRmAgYXR0cmlidXRlLiBCdXQgbm93LCB0aGUgYGFyZ190eXBlYCBoYXMgc2hpZnRlZCB0byBgQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkZgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBQVFJfWkVST19PRkZgIGlzIHNpZ25pZmljYW50IOKAkyBpdCBmb3JjZXMgYGZpeGVkX29mZl9va2AgdG8gYmVjb21lIGBmYWxzZWAuCgpDb25zZXF1ZW50bHksIHRoaXMgY2hhbmdlIHdpbGwgYmUgcGFzc2VkIGRvd24gdG8gdGhlIGBfX2NoZWNrX3B0cl9vZmZfcmVnYCBmdW5jdGlvbiwgd2hpY2ggbm93IHJlY2VpdmVzIGBmaXhlZF9vZmZfb2sgPSBmYWxzZWAuIFRoaXMgYmFzaWNhbGx5IG1lYW5zIHRoYXQgYW55IGF0dGVtcHQgdG8gdXNlIGEgZml4ZWQgb2Zmc2V0IHdpdGhpbiB0aGUgYFBUUl9UT19CVEZfSURgIGFyZ3VtZW50IHR5cGUgd2hlbiBpdCYjMzk7cyBwYXNzZWQgdG8gYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBrZnVuY3MsIHdpbGwgYmUgcmVqZWN0ZWQuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgZml4ZWQgb2Zmc2V0cyBtYXkgYmUgZGFuZ2Vyb3VzIHdoZW4gZGVhbGluZyB3aXRoIHBvaW50ZXJzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIHBhcnQgb2YgYSByZWZjb3VudGVkIG9iamVjdC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IG1lYW5zIEkgaGF2ZSB0byBpZGVudGlmeSB0aGUga2Z1bmNzIHRoYXQgdXRpbGl6ZSBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgaW5zdGFuY2VzIG9mIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgb3IgbWF5YmUgZXZlbiBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIHdpdGhpbiB0aGUgY29kZS4gVGhpcyB3aWxsIGNsYXJpZnkgd2hpY2gga2Z1bmNzIGFyZSBhZmZlY3RlZCBieSB0aGlzIHN0cmljdGVyIG9mZnNldCBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3JlZmNvdW50X2FjcXVpcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsKHZvaWQgKnBfX2FsbG9jLCB2b2lkICptZXRhX19pZ24pXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1NC0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTU6ICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1Ni0gKiBAcF9fcmVmY291bnRlZF9rcHRyOiBub24tb3duaW5nIGxvY2FsIGtwdHJcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDYzLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ2NDpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZSh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHN0cnVjdCBidGZfc3RydWN0X21ldGEgKm1ldGEpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDgwLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4Mi17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgzOlx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODQtfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MTM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCwgS0ZfUkVMRUFTRSlcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UgfCBLRl9JTVBMSUNJVF9BUkdTKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgxNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgxNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xpc3RfcHVzaF9mcm9udCwgS0ZfSU1QTElDSVRfQVJHUylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA5ODQ9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDk4OC1cdEtGX2JwZl9vYmpfZHJvcCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDk4OTpcdEtGX2JwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA5OTA6XHRLRl9icGZfcmVmY291bnRfYWNxdWlyZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDk5MS1cdEtGX2JwZl9saXN0X3B1c2hfZnJvbnRfaW1wbCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwNjE9QlRGX0lEKGZ1bmMsIGJwZl9vYmpfZHJvcClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTA2MjpCVEZfSUQoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTA2MzpCVEZfSUQoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwNjQtQlRGX0lEKGZ1bmMsIGJwZl9saXN0X3B1c2hfZnJvbnRfaW1wbClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExNzE9c3RhdGljIGJvb2wgaXNfYnBmX3BlcmNwdV9vYmpfZHJvcF9rZnVuYyh1MzIgZnVuY19pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNzYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNzc6c3RhdGljIGJvb2wgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmModTMyIGZ1bmNfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNzgte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTc5Olx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZWZjb3VudF9hY3F1aXJlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTgwOlx0ICAgICAgIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGxdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTgxLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyMDQ9c3RhdGljIGJvb2wgaXNfa2Z1bmNfcmV0X251bGwoc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjA1LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwNjpcdGlmIChpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLVx1MDAzZWZ1bmNfaWQpIFx1MDAyNlx1MDAyNiBtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjA3LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjEyPXN0YXRpYyBib29sIGlzX2JwZl9ncmFwaF9hcGlfa2Z1bmModTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2MTUtXHQgICAgICAgaXNfYnBmX3JidHJlZV9hcGlfa2Z1bmMoYnRmX2lkKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjE2Olx0ICAgICAgIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKGJ0Zl9pZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2MTctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjcxOT1zdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjgwNy1cdFx0aW5zbl9hdXgtXHUwMDNla3B0cl9zdHJ1Y3RfbWV0YSA9IHN0cnVjdF9tZXRhO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyODA4Olx0fSBlbHNlIGlmIChpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLVx1MDAzZWZ1bmNfaWQpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI4MDktXHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjg5MD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzExMC1cdFx0ICAgICAhaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEuZnVuY19pZCkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxMTE6XHRcdCAgICAgIWlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKG1ldGEuZnVuY19pZCkpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMTItXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2FjcXVpcmUga2VybmVsIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBQVFJfVE9fQlRGX0lEXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk1NjY9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MTQtXHRcdCAgIGlzX2JwZl9wZXJjcHVfb2JqX2Ryb3Bfa2Z1bmMoZGVzYy1cdTAwM2VmdW5jX2lkKSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjE1Olx0XHQgICBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhkZXNjLVx1MDAzZWZ1bmNfaWQpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MTYtXHRcdHN0cnVjdCBidGZfc3RydWN0X21ldGEgKmtwdHJfc3RydWN0X21ldGEgPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ua3B0cl9zdHJ1Y3RfbWV0YTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2MjU6XHRcdGlmIChpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhkZXNjLVx1MDAzZWZ1bmNfaWQpIFx1MDAyNlx1MDAyNiAha3B0cl9zdHJ1Y3RfbWV0YSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjI2LVx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwmIzM0O2twdHJfc3RydWN0X21ldGEgZXhwZWN0ZWQgYXQgaW5zbl9pZHggJWRcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTIwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBhbmQgdGhlIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAga2Z1bmMgYXJndW1lbnQuIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGBicGZfcmVmY291bnRfYWNxdWlyZWAgZXhwZWN0cyBhIHBvaW50ZXIgdG8gdGhlICpvYmplY3QqIHRoYXQgY29udGFpbnMgdGhlIGBicGZfcmVmY291bnRgIGZpZWxkLiBJZiB5b3UgZ2l2ZSBpdCBhIHBvaW50ZXIgd2l0aCBhIG5vbi16ZXJvIGZpeGVkIG9mZnNldCwgbGlrZSB0byBhbiBpbm5lciBmaWVsZCB3aXRoaW4gYSBzdHJ1Y3QsIHRoaW5ncyBnbyBzb3V0aC4gU3BlY2lmaWNhbGx5LCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIHdvdWxkIGluY29ycmVjdGx5IHRyZWF0IHRoZSBvZmZzZXR0ZWQgcG9pbnRlciBhcyB0aGUgYmFzZSBvZiB0aGUgb2JqZWN0LCB3aGljaCBsZWFkcyB0byBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24g4oCTIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSBzdHVmZi4KClRoZSB0ZXN0IGNhc2UgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jYCByZWFsbHkgaWxsdXN0cmF0ZXMgdGhpcy4gSXQmIzM5O3MgY2FsbGluZyBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIHdpdGggYSBwb2ludGVyIHRvIHRoZSBgbGlzdGAgZmllbGQgKmluc2lkZSogdGhlIGBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkYCwgc3BlY2lmaWNhbGx5IGBsaXN0X25vZGVgLCBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgYmFzZSBgbm9kZWAgc3RydWN0LiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZy4gQnkgZW5mb3JjaW5nIGBQVFJfWkVST19PRkZgIGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgLCB0aGUgdmVyaWZpZXIgbm93IGVuc3VyZXMgdGhhdCB0aGUgcG9pbnRlciBwYXNzZWQgdG8gdGhlIGtmdW5jICptdXN0KiBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIG9iamVjdCwgcHJldmVudGluZyB0aGlzIGluY29ycmVjdCBpbnRlcnByZXRhdGlvbi4KClRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHZlcmlmaWVyIGJlY2F1c2UgaXQmIzM5O3MgcHJldmVudGluZyBhIGNsYXNzIG9mIGJ1Z3MgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0JiMzOTtzIGEgc2VjdXJpdHkgaW1wcm92ZW1lbnQsIHBsYWluIGFuZCBzaW1wbGUuCgpBbmQgdGhpcyBpcyBhbGwgcmVsZXZhbnQgYmVjYXVzZSB0aGUgQlBGIHZlcmlmaWVyIGlzIHJlYWNoYWJsZSBieSB1c2VycyB3aXRoIGBDQVBfQlBGYCBvciBgQ0FQX1NZU19BRE1JTmAsIGFuZCBpbiBzb21lIGNhc2VzLCBldmVuIHVucHJpdmlsZWdlZCB1c2VycyB3aGVuIHVucHJpdmlsZWdlZCBCUEYgaXMgZW5hYmxlZC4gU2luY2UgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBpcyBhIGtmdW5jLCBsb2FkZWQgcHJvZ3JhbXMgdXNpbmcgaXQgdXN1YWxseSBuZWVkIHByaXZpbGVnZXMsIHNvIHRoaXMgZml4IGhlbHBzIGF2b2lkIGEgbW9yZSBzZXJpb3VzIHByb2JsZW0uIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaXMgdGhlIG9ubHkga2Z1bmMgdXNpbmcgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYC4gRGVmaW5pdGVseSB3b3J0aCBjaGVja2luZywgYW5kIGZ1enppbmcgdGhlIHZlcmlmaWVyIGlzIGEgZ29vZCBpZGVhIGdpdmVuIGhvdyBpbXBvcnRhbnQgaXRzIHJvbGUgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX2tmdW5jX2FyZ19yZWZjb3VudGVkX2twdHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA3MzU9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3VuaW5pdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA3MzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA3NDA6c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDc0MS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjM4PWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjcwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjcxOlx0aWYgKGlzX2tmdW5jX2FyZ19yZWZjb3VudGVkX2twdHIobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnXSkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzItXHRcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIHRoZSBuYW1lIGl0c2VsZiBpcyBpbmZvcm1hdGl2ZS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGRldGVybWluZSBpZiBhIGtlcm5lbCBmdW5jdGlvbiBhcmd1bWVudCwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBwb2ludGVyIChga3B0cmApLCBpcyBhc3NvY2lhdGVkIHdpdGggc29tZSBmb3JtIG9mIHJlZmVyZW5jZSBjb3VudGluZy4gVGhlICYjMzQ7ayYjMzQ7IHByZWZpeCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIGtlcm5lbC1zcGVjaWZpYywgd2hpY2ggcHJvYmFibHkgbWVhbnMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgaW50ZXJuYWxzIG9yIGEgbGV2ZWwgYmVuZWF0aCBzdGFuZGFyZCBsaWJjIG9wZXJhdGlvbnMuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSBkcmF3biB0byBob3cgdGhpcyBtaWdodCBiZSBpbXBsZW1lbnRlZC4gQXJlIHdlIGNoZWNraW5nIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGtwdHJgIGl0c2VsZj8gRG9lcyBpdCBpbnZvbHZlIGxvb2tpbmcgdXAgaW5mb3JtYXRpb24gaW4gYSBrZXJuZWwtbWFuYWdlZCBkYXRhIHN0cnVjdHVyZSwgcGVyaGFwcyBhIHRhYmxlIG9yIGhhc2htYXAsIHdoZXJlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgc3RhdHVzIGlzIHRyYWNrZWQgZm9yIG9iamVjdHMgbWFuYWdlZCBieSB0aGUga2VybmVsPyBBbHRlcm5hdGl2ZWx5LCBjb3VsZCBpdCBiZSBwYXJzaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgYW5kIGNvbXBhcmluZyB0aGUgcG9pbnRlciYjMzk7cyBhdHRyaWJ1dGVzPyBJcyB0aGVyZSBhbiBhdHRyaWJ1dGUgb3IgZmxhZyBzZXQgZm9yIHBvaW50ZXIgdmFyaWFibGVzPwoKSSYjMzk7bSBpbnN0YW50bHkgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGluZm9ybWF0aW9uLiBJZiB3ZSBrbm93IGFuIGFyZ3VtZW50IGlzIHJlZmVyZW5jZS1jb3VudGVkLCBpdCBnaXZlcyB1cyB2aXRhbCBjbHVlcyBhYm91dCBob3cgdG8gaGFuZGxlIHRoZSBhcmd1bWVudC4gV2UmIzM5O2Qga25vdyB3aGV0aGVyIHdlIG5lZWQgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IHdoZW4gcGFzc2luZyBvciByZWNlaXZpbmcgdGhlIHBvaW50ZXIsIHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBvciBkb3VibGUgZnJlZXMuIFVuZGVyc3RhbmRpbmcgdGhpcyBhc3BlY3Qgd291bGQgYWxzbyBhbGxvdyBmb3IgZnVydGhlciBvcHRpbWlzYXRpb24gb3IgYnVnLWRldGVjdGlvbi4gSXMgdGhpcyBmdW5jdGlvbiBnb2luZyB0byBiZSB1c2VkIGZvciB0aGluZ3MgbGlrZSBhdXRvbWF0aWMgcmVzb3VyY2UgbWFuYWdlbWVudCwgc2FmZXR5IGNoZWNrcywgb3IgcGVyaGFwcyBldmVuIGluIGEgdG9vbCBsaWtlIGEgc3RhdGljIGFuYWx5emVyPwoKTXkgbWluZCBpcyBub3cgcmFjaW5nIHRocm91Z2ggcG9zc2libGUgdXNlIGNhc2VzLCBsaWtlIG1hbmFnaW5nIG1lbW9yeSB1c2VkIGJ5IGRyaXZlcnMsIG1vZHVsZXMsIGFuZCBtYXliZSBldmVuIHdpdGhpbiBjb3JlIGtlcm5lbCBjb21wb25lbnRzLiBJIHdvbmRlciB3aGF0IHNwZWNpZmljIHNjZW5hcmlvcyB0cmlnZ2VyIHRoZSBuZWVkIGZvciB0aGlzIGtpbmQgb2YgY2hlY2s7IGFyZSB0aGVyZSBjb21tb24gb3IgY29tcGxleCB1c2UgY2FzZXM/IEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIHBpdGZhbGxzIGluIHRlcm1zIG9mIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGlmIHJlZmVyZW5jZSBjb3VudGluZyBpcyBub3QgaW1wbGVtZW50ZWQgY29ycmVjdGx5LiBUaGlzIHdvdWxkIGFsbCBiZSBjcml0aWNhbCB0byBjb25zaWRlciBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDczNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDczNTpcdHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ191bmluaXQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4xMDczNjpcdHtcbjEwNzM3Olx0XHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X191bmluaXRcJiMzNDspO1xuMTA3Mzg6XHR9XG4xMDczOTpcdFxuMTA3NDA6XHRzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuMTA3NDE6XHR7XG4xMDc0MjpcdFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fcmVmY291bnRlZF9rcHRyXCYjMzQ7KTtcbjEwNzQzOlx0fVxuMTA3NDQ6XHRcbjEwNzQ1Olx0c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX251bGxhYmxlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxuMTA3NDY6XHR7XG4xMDc0NzpcdFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFwmIzM0O19fbnVsbGFibGVcJiMzNDspO1xuMTA3NDg6XHR9XG4xMDc0OTpcdFxuMTA3NTA6XHRzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfbm9ub3duX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG4xMDc1MTpcdHtcbjEwNzUyOlx0XHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19ub25vd25fYWxsb3dlZFwmIzM0Oyk7XG4xMDc1MzpcdH1cbjEwNzU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTA2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYF9fcmVmY291bnRlZF9rcHRyYCBTdWZmaXggaW4gS2VybmVsIEZ1bmN0aW9uIEFyZ3VtZW50cyoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJdCBsb29rcyBsaWtlIHRoZSBjb2RlIGlzIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgc3VmZml4IGBfX3JlZmNvdW50ZWRfa3B0cmAuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoaW5raW5nIGFib3V0IHdoZXJlIHRoaXMgc3VmZml4IGlzIGFjdHVhbGx5ICp1c2VkKi4gTXkgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjayB0aGUgdXNhZ2Ugb2YgdGhpcyBzcGVjaWZpYyBzdWZmaXggaW4ga2Z1bmMgYXJndW1lbnRzLiBVbmRlcnN0YW5kaW5nIGhvdyBhbmQgd2hlcmUgYF9fcmVmY291bnRlZF9rcHRyYCBpcyBlbXBsb3llZCB3aWxsIHRlbGwgbWUgaG93IHRoZSBrZXJuZWwgaXMgbWFuYWdpbmcgcmVmZXJlbmNlLWNvdW50ZWQgcG9pbnRlcnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEZyb20gdGhhdCwgSSBjYW4gcXVpY2tseSBkZWR1Y2UgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIHRoZSBmdW5jdGlvbnMgaW4gcmVsYXRpb24gdG8gdGhpcyB0eXBlIG9mIHBvaW50ZXIuIEl0IHdvdWxkIGJlIGFuIGludGVyZXN0aW5nIHRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcmVmY291bnRlZF9rcHRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9MjQ0OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCh2b2lkICpwX19hbGxvYywgdm9pZCAqbWV0YV9faWduKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTUtICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ1NjogKiBAcF9fcmVmY291bnRlZF9rcHRyOiBub24tb3duaW5nIGxvY2FsIGtwdHJcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTctICogQG1ldGE6IHZlcmlmaWVyLXN1cHBsaWVkIHN0cnVjdCBtZXRhZGF0YVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1OC0gKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ1OTogKiBJbmNyZW1lbnQgdGhlIHJlZmNvdW50IGZvciBAcF9fcmVmY291bnRlZF9rcHRyLiBUaGUgdmVyaWZpZXIgcmV3cml0ZXNcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjAtICogQG1ldGE7IEJQRiBwcm9ncmFtcyBkbyBub3Qgc2V0IGl0Llxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2MS0gKlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ2MjogKiBSZXR1cm46IE93bmluZyByZWZlcmVuY2UgdG8gQHBfX3JlZmNvdW50ZWRfa3B0ciwgb3IgJU5VTEwgb24gZmFpbHVyZS5cbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjMtICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDY0Ol9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjUte1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzAtXHQgKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NzE6XHRyZWYgPSAoc3RydWN0IGJwZl9yZWZjb3VudCAqKShwX19yZWZjb3VudGVkX2twdHIgJiM0MzsgbWV0YS1cdTAwM2VyZWNvcmQtXHUwMDNlcmVmY291bnRfb2ZmKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzItXHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygocmVmY291bnRfdCAqKXJlZikpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ3Ny1cdCAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ3ODpcdHJldHVybiAodm9pZCAqKXBfX3JlZmNvdW50ZWRfa3B0cjtcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzktfVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4MC1cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODE6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHZvaWQgKm1ldGFfX2lnbilcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MzpcdHJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShwX19yZWZjb3VudGVkX2twdHIsIG1ldGFfX2lnbik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA3NDA9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDc0MS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA3NDI6XHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXCYjMzQ7X19yZWZjb3VudGVkX2twdHJcJiMzNDspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNzQzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBSZWZjb3VudCBBY3F1aXNpdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGFuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbGAg4oCTIHRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy4gVGhlIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbiBsaWVzIGluIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGNoZWNrX2tmdW5jX2FyZ3NgIGFuZCBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZyBlbmZvcmNlbWVudCBvZiBgUFRSX1pFUk9fT0ZGYCB3aGVuIGRlYWxpbmcgd2l0aCBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLCBhbmQgZnJhbmtseSwgYW55dGhpbmcgdGhhdCBtb2RpZmllcyB0aGUgdmVyaWZpZXIgbGlrZSB0aGlzIHNjcmVhbXMgJiMzNDtmdXp6aW5nIG9wcG9ydHVuaXR5LiYjMzQ7IFdlIG5lZWQgdG8gcmVhbGx5IHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXJseTogYGNoZWNrX2tmdW5jX2FyZ3NgLCBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAsIGFsb25nIHdpdGggdGhvc2UgcmVmY291bnQgZnVuY3Rpb25zLCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLCBhbmQgYGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGxgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyDigJMgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBzZWVtIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBpbmZsdWVuY2luZyB0aGlzIGFyZWEuIE1pZ2h0IGJlIHdvcnRoIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb24gYGJwZl9yZWZjb3VudF9hY3F1aXJlYCwgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSB1bnVzdWFsIGJlaGF2aW9yIHdoZW4gaXQmIzM5O3MgZW5hYmxlZCBvciBkaXNhYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3JlZmNvdW50X2FjcXVpcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsKHZvaWQgKnBfX2FsbG9jLCB2b2lkICptZXRhX19pZ24pXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1NC0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTU6ICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1Ni0gKiBAcF9fcmVmY291bnRlZF9rcHRyOiBub24tb3duaW5nIGxvY2FsIGtwdHJcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDYzLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ2NDpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZSh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHN0cnVjdCBidGZfc3RydWN0X21ldGEgKm1ldGEpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDgwLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4Mi17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgzOlx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODQtfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MTM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCwgS0ZfUkVMRUFTRSlcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UgfCBLRl9JTVBMSUNJVF9BUkdTKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgxNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgxNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xpc3RfcHVzaF9mcm9udCwgS0ZfSU1QTElDSVRfQVJHUylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMTU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5ODUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipCUEYgSGVscGVyIEZ1bmN0aW9uIExvY2F0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGh1bmNoIHBvaW50cyB0b3dhcmRzIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIFRoYXQgc2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhhdCYjMzk7cyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBCUEYgaGVscGVyIGZ1bmN0aW9uYWxpdHkgdHlwaWNhbGx5IHJlc2lkZXMuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhhdCBmaWxlLCBJIHNob3VsZCByZWFsbHkgY29uZmlybSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgZ3V0IHNheXMgaXQmIzM5O3MgY29uZGl0aW9uYWwsIHByb2JhYmx5IGRlcGVuZGVudCBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBiZWluZyBlbmFibGVkLCBidXQgYSBxdWljayBjaGVjayBvZiB0aGUgTWFrZWZpbGUgZm9yIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgbW92ZS4gSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBleGFjdCBjaXJjdW1zdGFuY2VzIHRoYXQgY29kZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl04oCZcyBhbHdheXMgYmVzdCBwcmFjdGljZSB0byB2ZXJpZnkgYnVpbGQgZGVwZW5kZW5jaWVzIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSBpdHNlbGYsIGFzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29kZSBjYW4gc2hpZnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDE1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hlbHBlcnMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQwMwoJCQkJCQkJb3V0cHV0OiAxNTgKCQkJCQkJCXRob3VnaHRzOiA1NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBGaXggZm9yIEZ1enppbmcqKgoKT2theSwgc28gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIHRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gaGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBjb25maWd1cmF0aW9uIGZsYWdzIGludm9sdmVkLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSB0ZXN0IGNhc2UgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jYCB1c2VzIGBicGZfcmVmY291bnRfYWNxdWlyZWAsIGluZGljYXRpbmcgdGhpcyBpcyBhIGZ1bmRhbWVudGFsIEJQRiBjYXBhYmlsaXR5LCBhbmQgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgZGlzdGlsbCB0aGlzIGRvd246IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSB2dWxuZXJhYmlsaXR5IGluIHRoZSBCUEYgdmVyaWZpZXIgcmVsYXRlZCB0byBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCYjMzk7cyB1c2VkIHdpdGggcG9pbnRlcnMgdGhhdCBoYXZlIG5vbi16ZXJvIGZpeGVkIG9mZnNldHMuIFRoaXMgY291bGQgbGVhZCB0byBlaXRoZXIgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIG9yIGNvcnJ1cHRpb24uIFRoZSBmaXggaW50cm9kdWNlcyBhIG5ldyBCUEYgdHlwZSBmbGFnLCBgUFRSX1pFUk9fT0ZGYCwgYW5kIGVuZm9yY2VzIGl0IGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cy4KCk15IGNvcmUgZm9jdXMgc3ltYm9scyBhcmUgZ29pbmcgdG8gYmUgYGNoZWNrX2tmdW5jX2FyZ3NgIGFuZCBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gdGhvc2UgZnVuY3Rpb25zLCB0byBiZSBzdXJlIEkgYW0gY29ycmVjdCwgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFllcywgdGhleSBhcmUgc3RhdGljLCBidXQgY3JpdGljYWxseSwgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnV6emluZyB0aGUgY29ycmVjdCBmdW5jdGlvbnMuIEFoYSwgYF9fY2hlY2tfcHRyX29mZl9yZWdgIGlzIGNhbGxlZCBieSBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgY29ycmVjdCwgYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgIGFuZCBgY2hlY2tfa2Z1bmNfYXJnc2AgYXJlIGRlZmluaXRlbHkgb24gdGhlIHJpZ2h0IHRyYWNrLiBJIGFsc28gc2VlIHRoYXQgYGNoZWNrX2tmdW5jX2FyZ3NgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGZpbmU7IFN5emthbGxlciBjYW4gc3RpbGwgaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmUgcmVhY2hhYmxlLiBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGJ1dCB0aGF0IGlzIGEgaG90IHBhdGggLSBJIHdvdWxkIHJhdGhlciBsb29rIGF0IGEgbW9yZSBzcGVjaWZpYyB0YXJnZXQuCgpgY2hlY2tfa2Z1bmNfYXJnc2AgaXMgY2FsbGVkIHdoZW5ldmVyIGEga2Z1bmMgaXMgY2FsbGVkLiBUaGF0IG1ha2VzIGl0IHNwZWNpZmljIGVub3VnaC4gYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgIGlzIGEgYml0IGJyb2FkZXIsIGFzIGl0JiMzOTtzIGNhbGxlZCBmb3IgdmFyaW91cyBhcmd1bWVudHMsIGJ1dCBzdGlsbCBzcGVjaWZpYyBlbm91Z2ggZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4KCkkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGRpYWxlZCBpbiB0aGUgY29ycmVjdCB0YXJnZXRzLgoKTGV0JiMzOTtzIHJlZmluZSB0aGUgRm9jdXNTeW1ib2xzIHRvOgoqICAgYGNoZWNrX2tmdW5jX2FyZ3NgCiogICBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAKCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIGlmIGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYCBpcyBhIGhvdCBwYXRoLiBJdCYjMzk7cyBjYWxsZWQgZm9yIGV2ZXJ5IGZ1bmN0aW9uIGFyZ3VtZW50IGluIEJQRiBwcm9ncmFtcywgd2hpY2ggbWVhbnMgaXQgbWF5IGJlIHF1aXRlIGhvdCwgYnV0IGl0JiMzOTtzIGRpcmVjdGx5IG1vZGlmaWVkLCBzbyBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIG9wdGlvbnMuIGBjaGVja19rZnVuY19hcmdzYCBpcyBiZXR0ZXI7IGtmdW5jIGNhbGxzIGFyZSBsZXNzIGZyZXF1ZW50IHRoYW4gZ2VuZXJhbCBoZWxwZXIgY2FsbHMsIG1ha2luZyBpdCBhIGJldHRlciB0YXJnZXQuIEkgc3RpbGwgd2FudCB0byBrZWVwIHRoZSBvdGhlciBvbmUsIGhvd2V2ZXIuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19rZnVuY19hcmdzJiMzNDssCiAgICAmIzM0O2NoZWNrX2Z1bmNfYXJnX3JlZ19vZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB3aGVyZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciBoYXZpbmcgYSBub24temVybyBmaXhlZCBvZmZzZXQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgQlBGIHR5cGUgZmxhZyBgUFRSX1pFUk9fT0ZGYCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OywKICAgICYjMzQ7Y2hlY2tfZnVuY19hcmdfcmVnX29mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyIHdoZXJlIGBicGZfcmVmY291bnRfYWNxdWlyZWAgY291bGQgYmUgY2FsbGVkIHdpdGggYSBwb2ludGVyIGhhdmluZyBhIG5vbi16ZXJvIGZpeGVkIG9mZnNldCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBtZW1vcnkgY29ycnVwdGlvbi4gSXQgaW50cm9kdWNlcyBhIG5ldyBCUEYgdHlwZSBmbGFnIGBQVFJfWkVST19PRkZgIGFuZCBlbmZvcmNlcyBpdCBmb3IgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBhcmd1bWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDowOC4wNTgyMzExNjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI0MDI2NjYwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19mdW5jX2FyZ19yZWdfb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB3aGVyZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciBoYXZpbmcgYSBub24temVybyBmaXhlZCBvZmZzZXQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgQlBGIHR5cGUgZmxhZyBgUFRSX1pFUk9fT0ZGYCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDowOC4wNTgyMzY4MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjYwNDIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIxMmQ1N2RhODM0YzhjODQzYzk1NzFmYzJkNmM0ZmFmZjVjYTkwOGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjAgMTU6MjQ6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5pbmRleCA3NzE5ZjY1Mjg0NDU2MC4uYjliN2QxOWNiODE3YjUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtODU5LDYgKzg1OSw5IEBAIGVudW0gYnBmX3R5cGVfZmxhZyB7XFxuIFxcdC8qIERZTlBUUiBwb2ludHMgdG8gZmlsZSAqL1xcbiBcXHREWU5QVFJfVFlQRV9GSUxFXFx0PSBCSVQoMjAgKyBCUEZfQkFTRV9UWVBFX0JJVFMpLFxcbiBcXG4rXFx0LyogUFRSIGFyZ3VtZW50IGNhbm5vdCBoYXZlIGEgZml4ZWQgb2Zmc2V0LiAqL1xcbitcXHRQVFJfWkVST19PRkZcXHRcXHQ9IEJJVCgyMSArIEJQRl9CQVNFX1RZUEVfQklUUyksXFxuK1xcbiBcXHRfX0JQRl9UWVBFX0ZMQUdfTUFYLFxcbiBcXHRfX0JQRl9UWVBFX0xBU1RfRkxBR1xcdD0gX19CUEZfVFlQRV9GTEFHX01BWCAtIDEsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDJhYmM3OWRiZjI4MWMyLi5iNDFhZWU4YzYzMGMyNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNzk5NCw4ICs3OTk0LDExIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmdfcmVnX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuIFxcdFxcdFxcdFxcdCAgZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXFxuIHtcXG4rXFx0Ym9vbCBmaXhlZF9vZmZfb2sgPSAhKGFyZ190eXBlIFxcdTAwMjYgUFRSX1pFUk9fT0ZGKTtcXG4gXFx0dTMyIHR5cGUgPSByZWctXFx1MDAzZXR5cGU7XFxuIFxcbitcXHRhcmdfdHlwZSBcXHUwMDI2PSB+UFRSX1pFUk9fT0ZGO1xcbitcXG4gXFx0LyogV2hlbiByZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIHBhc3NlZCB0byByZWxlYXNlIGZ1bmN0aW9uLCBpdHMgZml4ZWRcXG4gXFx0ICogb2Zmc2V0IG11c3QgYmUgMC5cXG4gXFx0ICpcXG5AQCAtODA0OCwxMyArODA1MSwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0Y2FzZSBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DIHwgTk9OX09XTl9SRUY6XFxuIFxcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IE5PTl9PV05fUkVGIHwgTUVNX1JDVTpcXG4gXFx0XFx0LyogV2hlbiByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sXFxuLVxcdFxcdCAqIGl0cyBmaXhlZCBvZmZzZXQgbXVzdCBiZSAwLiBJbiB0aGUgb3RoZXIgY2FzZXMsIGZpeGVkIG9mZnNldFxcbi1cXHRcXHQgKiBjYW4gYmUgbm9uLXplcm8uIFRoaXMgd2FzIGFscmVhZHkgY2hlY2tlZCBhYm92ZS4gU28gcGFzc1xcbi1cXHRcXHQgKiBmaXhlZF9vZmZfb2sgYXMgdHJ1ZSB0byBhbGxvdyBmaXhlZCBvZmZzZXQgZm9yIGFsbCBvdGhlclxcbi1cXHRcXHQgKiBjYXNlcy4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELCBoZW5jZSB3ZVxcbi1cXHRcXHQgKiBzdGlsbCBuZWVkIHRvIGRvIGNoZWNrcyBpbnN0ZWFkIG9mIHJldHVybmluZy5cXG4rXFx0XFx0ICogb3Igd2hlbiB0aGUgYXJndW1lbnQgdHlwZSByZXF1aXJlcyB6ZXJvIGZpeGVkIG9mZnNldCwgaXRzXFxuK1xcdFxcdCAqIGZpeGVkIG9mZnNldCBtdXN0IGJlIDAuIEluIHRoZSBvdGhlciBjYXNlcywgZml4ZWQgb2Zmc2V0IGNhblxcbitcXHRcXHQgKiBiZSBub24temVyby4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELFxcbitcXHRcXHQgKiBoZW5jZSB3ZSBzdGlsbCBuZWVkIHRvIGRvIGNoZWNrcyBpbnN0ZWFkIG9mIHJldHVybmluZy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHJldHVybiBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgdHJ1ZSk7XFxuK1xcdFxcdHJldHVybiBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgZml4ZWRfb2ZmX29rKTtcXG4gXFx0Y2FzZSBQVFJfVE9fQ1RYOlxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBbGxvdyBmaXhlZCBhbmQgdmFyaWFibGUgb2Zmc2V0cyBmb3Igc3lzY2FsbCBjb250ZXh0LCBidXRcXG5AQCAtMTIxMTQsNyArMTIxMTYsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX1xcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxcbiBcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcXG4tXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTpcXG4gXFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RJTUVSOlxcbkBAIC0xMjEyOCw2ICsxMjEyOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfXFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19DVFg6XFxuIFxcdFxcdFxcdGFyZ190eXBlID0gQVJHX1BUUl9UT19DVFg7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxcbitcXHRcXHRcXHRhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcInVua25vd24ga2Z1bmMgYXJnIHR5cGUgJWRcXFwiLCBrZl9hcmdfdHlwZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuaW5kZXggNzI0N2EyMGMwYTNiZjUuLjVlYzM5MmU3MjcwZjkyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcXG5AQCAtMTMsMTIgKzEzLDIyIEBAIHN0cnVjdCBub2RlX2FjcXVpcmUge1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xcbiB9O1xcbiBcXG4rc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XFxuK1xcdGxvbmcga2V5O1xcbitcXHRzdHJ1Y3QgYnBmX3JiX25vZGUgcmI7XFxuK1xcdHN0cnVjdCBicGZfbGlzdF9ub2RlIGxpc3Q7XFxuK1xcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XFxuK307XFxuK1xcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XFxuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xcbiBcXG4gI2RlZmluZSBwcml2YXRlKG5hbWUpIFNFQyhcXFwiLmRhdGEuXFxcIiAjbmFtZSkgX19oaWRkZW4gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpXFxuIHByaXZhdGUoQSkgc3RydWN0IGJwZl9zcGluX2xvY2sgZ2xvY2s7XFxuIHByaXZhdGUoQSkgc3RydWN0IGJwZl9yYl9yb290IGdyb290IF9fY29udGFpbnMobm9kZV9hY3F1aXJlLCBub2RlKTtcXG4rcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xcbitwcml2YXRlKEIpIHN0cnVjdCBicGZfcmJfcm9vdCByb290IF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCByYik7XFxuK3ByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XFxuIFxcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxcbiB7XFxuQEAgLTMxLDYgKzQxLDE3IEBAIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXFxuIFxcdHJldHVybiBub2RlX2EtXFx1MDAzZWtleSBcXHUwMDNjIG5vZGVfYi1cXHUwMDNla2V5O1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBsZXNzX3JlZmNvdW50ZWQoc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXFxuK3tcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZV9hO1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkICpub2RlX2I7XFxuK1xcbitcXHRub2RlX2EgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgcmIpO1xcbitcXHRub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgcmIpO1xcbitcXG4rXFx0cmV0dXJuIG5vZGVfYS1cXHUwMDNla2V5IFxcdTAwM2Mgbm9kZV9iLVxcdTAwM2VrZXk7XFxuK31cXG4rXFxuIFNFQyhcXFwiP3RjXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD00IGFsbG9jX2luc249e3tbMC05XSt9fVxcXCIpXFxuIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlcyh2b2lkICpjdHgpXFxuQEAgLTkzLDYgKzExNCw2MiBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJkZXJlZmVyZW5jZSBvZiBtb2RpZmllZCBwdHJfbm9kZV9yZWZjb3VudGVkIHB0ciBSMVxcXCIpXFxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9saXN0X25vZGVfb2Zmc2V0KHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkICpub2RlLCAqYmFzZSwgKnJlZjtcXG4rXFx0c3RydWN0IGJwZl9saXN0X25vZGUgKmxpc3Rfbm9kZTtcXG4rXFxuK1xcdG5vZGUgPSBicGZfb2JqX25ldyh0eXBlb2YoKm5vZGUpKTtcXG4rXFx0aWYgKCFub2RlKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9zcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbitcXHRicGZfbGlzdF9wdXNoX2Zyb250KFxcdTAwMjZoZWFkLCBcXHUwMDI2bm9kZS1cXHUwMDNlbGlzdCk7XFxuK1xcdGxpc3Rfbm9kZSA9IGJwZl9saXN0X3BvcF9mcm9udChcXHUwMDI2aGVhZCk7XFxuK1xcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2bG9jayk7XFxuK1xcdGlmICghbGlzdF9ub2RlKVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdGJhc2UgPSBjb250YWluZXJfb2YobGlzdF9ub2RlLCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkLCBsaXN0KTtcXG4rXFx0cmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobGlzdF9ub2RlKTtcXG4rXFx0aWYgKHJlZilcXG4rXFx0XFx0YnBmX29ial9kcm9wKHJlZik7XFxuK1xcdGJwZl9vYmpfZHJvcChiYXNlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwiP3RjXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJkZXJlZmVyZW5jZSBvZiBtb2RpZmllZCBwdHJfbm9kZV9yZWZjb3VudGVkIHB0ciBSMVxcXCIpXFxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9yYnRyZWVfbm9kZV9vZmZzZXQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgKm5vZGUsICpiYXNlLCAqcmVmO1xcbitcXHRzdHJ1Y3QgYnBmX3JiX25vZGUgKnJiX25vZGU7XFxuK1xcbitcXHRub2RlID0gYnBmX29ial9uZXcodHlwZW9mKCpub2RlKSk7XFxuK1xcdGlmICghbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRub2RlLVxcdTAwM2VrZXkgPSAxO1xcbitcXG4rXFx0YnBmX3NwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuK1xcdGJwZl9yYnRyZWVfYWRkKFxcdTAwMjZyb290LCBcXHUwMDI2bm9kZS1cXHUwMDNlcmIsIGxlc3NfcmVmY291bnRlZCk7XFxuK1xcdHJiX25vZGUgPSBicGZfcmJ0cmVlX2ZpcnN0KFxcdTAwMjZyb290KTtcXG4rXFx0aWYgKHJiX25vZGUpXFxuK1xcdFxcdHJiX25vZGUgPSBicGZfcmJ0cmVlX3JlbW92ZShcXHUwMDI2cm9vdCwgcmJfbm9kZSk7XFxuK1xcdGJwZl9zcGluX3VubG9jayhcXHUwMDI2bG9jayk7XFxuK1xcdGlmICghcmJfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcbitcXHRiYXNlID0gY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQsIHJiKTtcXG4rXFx0cmVmID0gYnBmX3JlZmNvdW50X2FjcXVpcmUocmJfbm9kZSk7XFxuK1xcdGlmIChyZWYpXFxuK1xcdFxcdGJwZl9vYmpfZHJvcChyZWYpO1xcbitcXHRicGZfb2JqX2Ryb3AoYmFzZSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIj9mZW50cnkucy9cXFwiIFNZU19QUkVGSVggXFxcInN5c19nZXRwZ2lkXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJmdW5jdGlvbiBjYWxscyBhcmUgbm90IGFsbG93ZWQgd2hpbGUgaG9sZGluZyBhIGxvY2tcXFwiKVxcbiBpbnQgQlBGX1BST0cocmJ0cmVlX2ZhaWxfc2xlZXBhYmxlX2xvY2tfYWNyb3NzX3JjdSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MDguNTA1NjQwNzMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE5NTUyNDYzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19mdW5jX2FyZ19yZWdfb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB3aGVyZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciBoYXZpbmcgYSBub24temVybyBmaXhlZCBvZmZzZXQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgQlBGIHR5cGUgZmxhZyBgUFRSX1pFUk9fT0ZGYCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIxMmQ1N2RhODM0YzhjODQzYzk1NzFmYzJkNmM0ZmFmZjVjYTkwOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1biAyMCAxNToyNDowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCA3NzE5ZjY1Mjg0NDU2MC4uYjliN2QxOWNiODE3YjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtODU5LDYgKzg1OSw5IEBAIGVudW0gYnBmX3R5cGVfZmxhZyB7XG4gXHQvKiBEWU5QVFIgcG9pbnRzIHRvIGZpbGUgKi9cbiBcdERZTlBUUl9UWVBFX0ZJTEVcdD0gQklUKDIwICsgQlBGX0JBU0VfVFlQRV9CSVRTKSxcbiBcbitcdC8qIFBUUiBhcmd1bWVudCBjYW5ub3QgaGF2ZSBhIGZpeGVkIG9mZnNldC4gKi9cbitcdFBUUl9aRVJPX09GRlx0XHQ9IEJJVCgyMSArIEJQRl9CQVNFX1RZUEVfQklUUyksXG4rXG4gXHRfX0JQRl9UWVBFX0ZMQUdfTUFYLFxuIFx0X19CUEZfVFlQRV9MQVNUX0ZMQUdcdD0gX19CUEZfVFlQRV9GTEFHX01BWCAtIDEsXG4gfTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDJhYmM3OWRiZjI4MWMyLi5iNDFhZWU4YzYzMGMyNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNzk5NCw4ICs3OTk0LDExIEBAIHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmdfcmVnX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuIFx0XHRcdFx0ICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSlcbiB7XG4rXHRib29sIGZpeGVkX29mZl9vayA9ICEoYXJnX3R5cGUgXHUwMDI2IFBUUl9aRVJPX09GRik7XG4gXHR1MzIgdHlwZSA9IHJlZy1cdTAwM2V0eXBlO1xuIFxuK1x0YXJnX3R5cGUgXHUwMDI2PSB+UFRSX1pFUk9fT0ZGO1xuK1xuIFx0LyogV2hlbiByZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIHBhc3NlZCB0byByZWxlYXNlIGZ1bmN0aW9uLCBpdHMgZml4ZWRcbiBcdCAqIG9mZnNldCBtdXN0IGJlIDAuXG4gXHQgKlxuQEAgLTgwNDgsMTMgKzgwNTEsMTIgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2FyZ19yZWdfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRjYXNlIFBUUl9UT19CVEZfSUQgfCBNRU1fQUxMT0MgfCBOT05fT1dOX1JFRjpcbiBcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IE5PTl9PV05fUkVGIHwgTUVNX1JDVTpcbiBcdFx0LyogV2hlbiByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sXG4tXHRcdCAqIGl0cyBmaXhlZCBvZmZzZXQgbXVzdCBiZSAwLiBJbiB0aGUgb3RoZXIgY2FzZXMsIGZpeGVkIG9mZnNldFxuLVx0XHQgKiBjYW4gYmUgbm9uLXplcm8uIFRoaXMgd2FzIGFscmVhZHkgY2hlY2tlZCBhYm92ZS4gU28gcGFzc1xuLVx0XHQgKiBmaXhlZF9vZmZfb2sgYXMgdHJ1ZSB0byBhbGxvdyBmaXhlZCBvZmZzZXQgZm9yIGFsbCBvdGhlclxuLVx0XHQgKiBjYXNlcy4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELCBoZW5jZSB3ZVxuLVx0XHQgKiBzdGlsbCBuZWVkIHRvIGRvIGNoZWNrcyBpbnN0ZWFkIG9mIHJldHVybmluZy5cbitcdFx0ICogb3Igd2hlbiB0aGUgYXJndW1lbnQgdHlwZSByZXF1aXJlcyB6ZXJvIGZpeGVkIG9mZnNldCwgaXRzXG4rXHRcdCAqIGZpeGVkIG9mZnNldCBtdXN0IGJlIDAuIEluIHRoZSBvdGhlciBjYXNlcywgZml4ZWQgb2Zmc2V0IGNhblxuK1x0XHQgKiBiZSBub24temVyby4gdmFyX29mZiBhbHdheXMgbXVzdCBiZSAwIGZvciBQVFJfVE9fQlRGX0lELFxuK1x0XHQgKiBoZW5jZSB3ZSBzdGlsbCBuZWVkIHRvIGRvIGNoZWNrcyBpbnN0ZWFkIG9mIHJldHVybmluZy5cbiBcdFx0ICovXG4tXHRcdHJldHVybiBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgdHJ1ZSk7XG4rXHRcdHJldHVybiBfX2NoZWNrX3B0cl9vZmZfcmVnKGVudiwgcmVnLCBhcmdubywgZml4ZWRfb2ZmX29rKTtcbiBcdGNhc2UgUFRSX1RPX0NUWDpcbiBcdFx0LypcbiBcdFx0ICogQWxsb3cgZml4ZWQgYW5kIHZhcmlhYmxlIG9mZnNldHMgZm9yIHN5c2NhbGwgY29udGV4dCwgYnV0XG5AQCAtMTIxMTQsNyArMTIxMTYsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcbi1cdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NPTlNUX1NUUjpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1dPUktRVUVVRTpcbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RJTUVSOlxuQEAgLTEyMTI4LDYgKzEyMTI5LDkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9cbiBcdFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcbiBcdFx0XHRhcmdfdHlwZSA9IEFSR19QVFJfVE9fQ1RYO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxuK1x0XHRcdGFyZ190eXBlID0gQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkY7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCJ1bmtub3duIGtmdW5jIGFyZyB0eXBlICVkXCIsIGtmX2FyZ190eXBlKTtcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5pbmRleCA3MjQ3YTIwYzBhM2JmNS4uNWVjMzkyZTcyNzBmOTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC0xMywxMiArMTMsMjIgQEAgc3RydWN0IG5vZGVfYWNxdWlyZSB7XG4gXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuIH07XG4gXG4rc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XG4rXHRsb25nIGtleTtcbitcdHN0cnVjdCBicGZfcmJfbm9kZSByYjtcbitcdHN0cnVjdCBicGZfbGlzdF9ub2RlIGxpc3Q7XG4rXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuK307XG4rXG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltO1xuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuIFxuICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXCIuZGF0YS5cIiAjbmFtZSkgX19oaWRkZW4gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpXG4gcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBnbG9jaztcbiBwcml2YXRlKEEpIHN0cnVjdCBicGZfcmJfcm9vdCBncm9vdCBfX2NvbnRhaW5zKG5vZGVfYWNxdWlyZSwgbm9kZSk7XG4rcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrO1xuK3ByaXZhdGUoQikgc3RydWN0IGJwZl9yYl9yb290IHJvb3QgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIHJiKTtcbitwcml2YXRlKEIpIHN0cnVjdCBicGZfbGlzdF9oZWFkIGhlYWQgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIGxpc3QpO1xuIFxuIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4ge1xuQEAgLTMxLDYgKzQxLDE3IEBAIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4gXHRyZXR1cm4gbm9kZV9hLVx1MDAzZWtleSBcdTAwM2Mgbm9kZV9iLVx1MDAzZWtleTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbGVzc19yZWZjb3VudGVkKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuK3tcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgKm5vZGVfYTtcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgKm5vZGVfYjtcbitcbitcdG5vZGVfYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkLCByYik7XG4rXHRub2RlX2IgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgcmIpO1xuK1xuK1x0cmV0dXJuIG5vZGVfYS1cdTAwM2VrZXkgXHUwMDNjIG5vZGVfYi1cdTAwM2VrZXk7XG4rfVxuK1xuIFNFQyhcIj90Y1wiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTQgYWxsb2NfaW5zbj17e1swLTldK319XCIpXG4gbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzKHZvaWQgKmN0eClcbkBAIC05Myw2ICsxMTQsNjIgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwiP3RjXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgcHRyX25vZGVfcmVmY291bnRlZCBwdHIgUjFcIilcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfbGlzdF9ub2RlX29mZnNldCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRlZCAqbm9kZSwgKmJhc2UsICpyZWY7XG4rXHRzdHJ1Y3QgYnBmX2xpc3Rfbm9kZSAqbGlzdF9ub2RlO1xuK1xuK1x0bm9kZSA9IGJwZl9vYmpfbmV3KHR5cGVvZigqbm9kZSkpO1xuK1x0aWYgKCFub2RlKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdGJwZl9zcGluX2xvY2soXHUwMDI2bG9jayk7XG4rXHRicGZfbGlzdF9wdXNoX2Zyb250KFx1MDAyNmhlYWQsIFx1MDAyNm5vZGUtXHUwMDNlbGlzdCk7XG4rXHRsaXN0X25vZGUgPSBicGZfbGlzdF9wb3BfZnJvbnQoXHUwMDI2aGVhZCk7XG4rXHRicGZfc3Bpbl91bmxvY2soXHUwMDI2bG9jayk7XG4rXHRpZiAoIWxpc3Rfbm9kZSlcbitcdFx0cmV0dXJuIDI7XG4rXG4rXHRiYXNlID0gY29udGFpbmVyX29mKGxpc3Rfbm9kZSwgc3RydWN0IG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XG4rXHRyZWYgPSBicGZfcmVmY291bnRfYWNxdWlyZShsaXN0X25vZGUpO1xuK1x0aWYgKHJlZilcbitcdFx0YnBmX29ial9kcm9wKHJlZik7XG4rXHRicGZfb2JqX2Ryb3AoYmFzZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiP3RjXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiZGVyZWZlcmVuY2Ugb2YgbW9kaWZpZWQgcHRyX25vZGVfcmVmY291bnRlZCBwdHIgUjFcIilcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmJ0cmVlX25vZGVfb2Zmc2V0KHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudGVkICpub2RlLCAqYmFzZSwgKnJlZjtcbitcdHN0cnVjdCBicGZfcmJfbm9kZSAqcmJfbm9kZTtcbitcbitcdG5vZGUgPSBicGZfb2JqX25ldyh0eXBlb2YoKm5vZGUpKTtcbitcdGlmICghbm9kZSlcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRub2RlLVx1MDAzZWtleSA9IDE7XG4rXG4rXHRicGZfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuK1x0YnBmX3JidHJlZV9hZGQoXHUwMDI2cm9vdCwgXHUwMDI2bm9kZS1cdTAwM2VyYiwgbGVzc19yZWZjb3VudGVkKTtcbitcdHJiX25vZGUgPSBicGZfcmJ0cmVlX2ZpcnN0KFx1MDAyNnJvb3QpO1xuK1x0aWYgKHJiX25vZGUpXG4rXHRcdHJiX25vZGUgPSBicGZfcmJ0cmVlX3JlbW92ZShcdTAwMjZyb290LCByYl9ub2RlKTtcbitcdGJwZl9zcGluX3VubG9jayhcdTAwMjZsb2NrKTtcbitcdGlmICghcmJfbm9kZSlcbitcdFx0cmV0dXJuIDI7XG4rXG4rXHRiYXNlID0gY29udGFpbmVyX29mKHJiX25vZGUsIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQsIHJiKTtcbitcdHJlZiA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKHJiX25vZGUpO1xuK1x0aWYgKHJlZilcbitcdFx0YnBmX29ial9kcm9wKHJlZik7XG4rXHRicGZfb2JqX2Ryb3AoYmFzZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwiP2ZlbnRyeS5zL1wiIFNZU19QUkVGSVggXCJzeXNfZ2V0cGdpZFwiKVxuIF9fZmFpbHVyZSBfX21zZyhcImZ1bmN0aW9uIGNhbGxzIGFyZSBub3QgYWxsb3dlZCB3aGlsZSBob2xkaW5nIGEgbG9ja1wiKVxuIGludCBCUEZfUFJPRyhyYnRyZWVfZmFpbF9zbGVlcGFibGVfbG9ja19hY3Jvc3NfcmN1LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MDguNTA1NjQyMjEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk0MTkyNDc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIEJQRiBjb2RlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvYnBmLmhgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQncyBpbnRyb2R1Y2luZyBhIG5ldyBmbGFnLCBgUFRSX1pFUk9fT0ZGYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgLCB3aGVyZSB0aGV5J3JlIHRyeWluZyB0byB0aWdodGVuIHVwIGhvdyB3ZSBoYW5kbGUgcG9pbnRlciBhcmd1bWVudHMsIG1ha2luZyBzdXJlIGNlcnRhaW4gb25lcyAqY2FuJ3QqIGhhdmUgZml4ZWQgb2Zmc2V0cy4gU21hcnQuXG5cblJpZ2h0LCBzbyB0aGV5J3JlIG1vZGlmeWluZyBgY2hlY2tfa2Z1bmNfYXJnc2AgdG8gYmUgbW9yZSBzcGVjaWZpYyB3aXRoIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuIFByZXZpb3VzbHksIGl0IHNlZW1zIGxpa2Ugd2Ugd2VyZSBraW5kIG9mIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2ljLCBvciBhdCBsZWFzdCBmYWxsaW5nIHRocm91Z2ggdG8gaXQsIGFuZCB0aGF0IHdhc24ndCBnaXZpbmcgdXMgdGhlIGxldmVsIG9mIHByZWNpc2lvbiB3ZSBuZWVkIGZvciB0aGlzIHR5cGUuIEhhbmcgb24sIHdhc24ndCBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGdyb3VwZWQgd2l0aCB0aGluZ3MgbGlrZSBgS0ZfQVJHX1BUUl9UT19NRU1gPyBPa2F5LCBJICp0aGluayogdGhlIG9sZCBsb2dpYyBtaWdodCBoYXZlIGJlZW4gdG8gZmFsbCB0aHJvdWdoIHRvIGBhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEYC4gTGV0J3MgY29uZmlybSB0aGF0IHdpdGggYGNoZWNrX2tmdW5jX2FyZ3NgIGRpcmVjdGx5IGluIHRoZSBzb3VyY2UuXG5cbk9rYXksIHRpbWUgdG8gcHVsbCB1cCB0aGUgY3Jvc3MtcmVmZXJlbmNlIHRvb2xzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYGNoZWNrX2tmdW5jX2FyZ3NgIGlzIGltcGxlbWVudGVkIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zLiBUaGUgbG9naWMgaGVyZSBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdGhlIG92ZXJhbGwgc2FmZXR5IGFuZCBjb3JyZWN0bmVzcyBvZiB0aGUgQlBGIHJ1bnRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoxNC40NDc1ODQ1NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4NDY4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDk2MD1lbnVtIGtmdW5jX3B0cl9hcmdfdHlwZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA5NjItXFx0S0ZfQVJHX1BUUl9UT19BTExPQ19CVEZfSUQsICAgIC8qIEFsbG9jYXRlZCBvYmplY3QgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA5NjM6XFx0S0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFIsIC8qIFJlZmNvdW50ZWQgbG9jYWwga3B0ciAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDk2NC1cXHRLRl9BUkdfUFRSX1RPX0RZTlBUUixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIzOD1nZXRfa2Z1bmNfcHRyX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjcxLVxcdGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjcyOlxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzMtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5MDg9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjEzMS1cXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIxMzI6XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIxMzMtXFx0XFx0XFx0YXJnX3R5cGUgPSBBUkdfUFRSX1RPX0JURl9JRCB8IFBUUl9aRVJPX09GRjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjM5Mi1cXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTIzOTM6XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIzOTQtXFx0XFx0XFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVxcdTAwM2V0eXBlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoxNC41MDg0MzcwODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTI5MjQ3MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS0Z1bmMgQXJndW1lbnQgVHlwZSBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgZm9jdXNlZCBvbiB0aGlzIGRpZmYgY29uY2VybmluZyBgY2hlY2tfa2Z1bmNfYXJnc2Agd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGZyb20gdGhlIGdyb3VwIG9mIGFyZ3VtZW50IHR5cGVzIGl0IHdhcyBwcmV2aW91c2x5IGFzc29jaWF0ZWQgd2l0aDogYEtGX0FSR19QVFJfVE9fTUVNYCwgYEtGX0FSR19QVFJfVE9fTUVNX1NJWkVgLCBhbmQgYEtGX0FSR19QVFJfVE9fQ0FMTEJBQ0tgLCBhbmQgc28gb24uIFRoZXNlIHdlcmUgYWxsIHByZXZpb3VzbHkgc2V0dGluZyBgYXJnX3R5cGUgPSBBUkdfUFRSX1RPX0JURl9JRGAuXG5cbk5vdywgaXQncyBiZWluZyBoYW5kbGVkIHNlcGFyYXRlbHkuIEluc3RlYWQgb2YgdGhlIHByaW9yIGdyb3VwaW5nLCB0aGUgY29kZSBub3cgZXhwbGljaXRseSBzZXRzIGBhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGYCB3aGVuIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgaXMgZW5jb3VudGVyZWQuIFNvLCB0aGUgcmVmY291bnRlZCBrcHRyIHR5cGUgaXMgZ2V0dGluZyBhIHNwZWNpYWwgZmxhZzogYFBUUl9aRVJPX09GRmAuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgc2hpZnQgaGFwcGVuZWQuIFdoYXQncyB0aGUgc3BlY2lmaWMgc2VtYW50aWMgZGlmZmVyZW5jZSBvciByZXF1aXJlbWVudCB0aGF0IG5lY2Vzc2l0YXRlcyB0aGlzIG5ldyBkaXN0aW5jdCBoYW5kbGluZyBmb3IgYFJFRkNPVU5URURfS1BUUmA/IFRoaXMgaXMgY3JpdGljYWwuIFRoZSBpbXBsaWNhdGlvbiBvZiBjb21iaW5pbmcgaXQgd2l0aCBgUFRSX1pFUk9fT0ZGYCBzdWdnZXN0cyB0aGF0IHBlcmhhcHMgdGhlIG9mZnNldCBjYWxjdWxhdGlvbnMgb3IgbnVsbCBwb2ludGVyIGhhbmRsaW5nIG5lZWRzIHRvIGJlIGRpZmZlcmVudCBpbiB0aGlzIHNjZW5hcmlvLiBJIHNob3VsZCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYSBiZXR0ZXIgcGljdHVyZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgQlRGIGhhbmRsaW5nIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoyMC42Mzc2OTQwMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczNjU0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FzZSBLRl9BUkdfUFRSX1RPX01FTTpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkwOD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMTE1LVxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjExNjpcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjExNy1cXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTUVNX1NJWkU6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIzMzYtXFx0XFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMzM3OlxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMzM4LVxcdFxcdFxcdHJlc29sdmVfcmV0ID0gYnRmX3Jlc29sdmVfc2l6ZShidGYsIHJlZl90LCBcXHUwMDI2dHlwZV9zaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MjAuNjk1MDcwMjE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5Mzc2NzU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBhc3N1bWluZyBpdCdzIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFyb3VuZCBsaW5lIDEyMTE2OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXI6IEEgRm9jdXNlZCBFeGFtaW5hdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBCUEYgdmVyaWZpZXIuIExpbmUgMTIxMTbigKYgdGhhdCdzIGdvdCB0byBiZSBhIGNydWNpYWwgc3BvdCwgcmlnaHQ/IEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21ldGhpbmcgZGVlcGx5IGludm9sdmVkIGluIHRoZSBwcm9ncmFtIGFuYWx5c2lzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoYXQgZXhhY3QgbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyAqYXJvdW5kKiAxMjExNi4gSXMgaXQgYSBjb25kaXRpb25hbCBjaGVjaz8gQSBkYXRhIHN0cnVjdHVyZSBhc3NpZ25tZW50PyBBIGNhbGwgdG8gYW5vdGhlciBmdW5jdGlvbj8gQW5kIHdoYXQgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSBvZiB0aGUgdmVyaWZpZXIgYXQgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlP1xuXG5CYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSdtIGxpa2VseSB0byB6ZXJvIGluIG9uIHRoZSBleGFjdCBsb2dpYyBiZWluZyBwZXJmb3JtZWQuIFdoYXQgKnNwZWNpZmljYWxseSogaXMgYmVpbmcgdmFsaWRhdGVkIG9yIGluZmVycmVkIGhlcmU/IElzIGl0IG1lbW9yeSBzYWZldHk/IENvbnRyb2wgZmxvdyBhbmFseXNpcz8gUmVzb3VyY2UgZXhoYXVzdGlvbiBsaW1pdHM/IFRoZSB2ZXJpZmllcidzIGpvYiBpcyB0byBlbnN1cmUgdGhhdCBhIEJQRiBwcm9ncmFtIGlzIHNhZmUgdG8gcnVuIHdpdGhpbiB0aGUga2VybmVsLCBzbyB0aGlzIGxpbmUgbXVzdCBiZSBkb2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgdG8gdGhhdCBwcm9jZXNzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNsdWVzLiBBcmUgdGhlcmUgY2hlY2tzIGZvciBwb3RlbnRpYWxseSBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYz8gQXJlIHRoZXJlIHJhbmdlIGNoZWNrcyBvbiByZWdpc3RlciB2YWx1ZXM/IEFyZSB0aGVyZSBjYWxscyB0byBoZWxwZXIgZnVuY3Rpb25zIHRvIHJldHJpZXZlIGtlcm5lbCBkYXRhPyBBbnkgb2YgdGhlc2Ugd291bGQgbGlrZWx5IGJlIHJpZ2h0IHVwIG15IGFsbGV5LlxuXG5NeSBpbW1lZGlhdGUgZ29hbCB3aWxsIGJlIHRvIGRldmVsb3AgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93ICp0aGlzKiBzZWN0aW9uIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIHNhZmV0eSBhbmQgY29ycmVjdG5lc3Mgb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uLiBJJ2xsIG5lZWQgdG8gbGluayB0aGF0IG9uZSBsaW5lIG9mIGNvZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgaW4gdGhlIHZlcmlmaWVyLiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8ga25vdyB0aGUgbGFyZ2VyIG9iamVjdGl2ZSBvZiB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyB0aGF0IGxpbmUuIEhvdyBpcyB0aGUgYW5hbHlzaXMgYmVpbmcgcGVyZm9ybWVkPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgdGhhdCB0aGUgdmVyaWZpZXIgaXMgcGVyZm9ybWluZz8gV2hhdCBpcyBpdCBhdHRlbXB0aW5nIHRvIGluZmVyIGFib3V0IHRoZSBCUEYgcHJvZ3JhbSwgYW5kIGhvdyBkb2VzIGl0IHRyYW5zbGF0ZSBpbnRvIGtlcm5lbCBzYWZldHk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoyNC44ODg4NDAzNzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk0NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjExMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxMTA6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTIxMTE6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0lURVI6XFxuMTIxMTI6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDpcXG4xMjExMzpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOlxcbjEyMTE0OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9ST09UOlxcbjEyMTE1OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxcbjEyMTE2OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XFxuMTIxMTc6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTV9TSVpFOlxcbjEyMTE4OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcXG4xMjExOTpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSOlxcbjEyMTIwOlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19XT1JLUVVFVUU6XFxuMTIxMjE6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1RJTUVSOlxcbjEyMTIyOlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19UQVNLX1dPUks6XFxuMTIxMjM6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0lSUV9GTEFHOlxcbjEyMTI0OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLOlxcbjEyMTI1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMTI2OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19EWU5QVFI6XFxuMTIxMjc6XFx0XFx0XFx0XFx0YXJnX3R5cGUgPSBBUkdfUFRSX1RPX0RZTlBUUjtcXG4xMjEyODpcXHRcXHRcXHRcXHRicmVhaztcXG4xMjEyOTpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQ1RYOlxcbjEyMTMwOlxcdFxcdFxcdFxcdGFyZ190eXBlID0gQVJHX1BUUl9UT19DVFg7XFxuMTIxMzE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTIxMzI6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcXG4xMjEzMzpcXHRcXHRcXHRcXHRhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGO1xcbjEyMTM0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMTM1OlxcdFxcdFxcdGRlZmF1bHQ6XFxuMTIxMzY6XFx0XFx0XFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcInVua25vd24ga2Z1bmMgYXJnIHR5cGUgJWRcXFwiLCBrZl9hcmdfdHlwZSk7XFxuMTIxMzc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTIxMzg6XFx0XFx0XFx0fVxcbjEyMTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoyNC44OTAzMzg1MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI5NjQ5NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVidWdnaW5nIGEgVHlwZSBDaGVjayoqXG5cbk9rYXksIEknbSB0cmFja2luZyBkb3duIGEgYnVnLCBhbmQgSSdtIGF0IGEgcG9pbnQgd2hlcmUgSSdtIGV4YW1pbmluZyB0aGUgdmFsdWUgb2YgYGFyZ190eXBlYC4gVGhlIGxvZ2ljICpzaG91bGQqIGJlIHNvdW5kLCBidXQgaXQncyBub3QgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIFdhaXQgYSBzZWNvbmQuLi4gSSBuZWVkIHRvIGJhY2sgdXAgYW5kIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgYXJnX3R5cGVgLiBXaGVyZSB3YXMgaXQgc2V0PyBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY3JvbGwgYmFjayBhIGZldyBsaW5lcyBvZiBjb2RlIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBwaW5wb2ludCBleGFjdGx5IGhvdyB0aGlzIHZhcmlhYmxlIHdhcyBmaXJzdCBhc3NpZ25lZCBhIHZhbHVlLiBJIG5lZWQgdGhhdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgd2h5IGl0J3MgYmVoYXZpbmcgdGhpcyB3YXkgbm93LiBJJ20gbG9va2luZyBmb3IgdGhlIHByZWNpc2UgbW9tZW50IG9mIGluc3RhbnRpYXRpb24gb3IgYXNzaWdubWVudCBzbyBJIGNhbiBhc3Nlc3Mgd2hldGhlciB0aGlzIGxpbmUgaGFzIGJlZW4gb3Zlcmxvb2tlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM1MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MjguMDE5OTkwOTg3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Njc0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjA5MDpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjA5MTpcXHRcXHRcXHRcXHRcXHR9XFxuMTIwOTI6XFx0XFx0XFx0XFx0fVxcbjEyMDkzOlxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC5wdHIgPSByZWctXFx1MDAzZW1hcF9wdHI7XFxuMTIwOTQ6XFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlbWFwLnVpZCA9IHJlZy1cXHUwMDNlbWFwX3VpZDtcXG4xMjA5NTpcXHRcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4xMjA5NjpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQUxMT0NfQlRGX0lEOlxcbjEyMDk3OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19CVEZfSUQ6XFxuMTIwOTg6XFx0XFx0XFx0XFx0aWYgKCFpc190cnVzdGVkX3JlZyhlbnYsIHJlZykpIHtcXG4xMjA5OTpcXHRcXHRcXHRcXHRcXHRpZiAoIWlzX2tmdW5jX3JjdShtZXRhKSkge1xcbjEyMTAwOlxcdFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgbXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcXFxcblxcXCIsXFxuMTIxMDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4xMjEwMjpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjEwMzpcXHRcXHRcXHRcXHRcXHR9XFxuMTIxMDQ6XFx0XFx0XFx0XFx0XFx0aWYgKCFpc19yY3VfcmVnKHJlZykpIHtcXG4xMjEwNTpcXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG11c3QgYmUgYSByY3UgcG9pbnRlclxcXFxuXFxcIixcXG4xMjEwNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbjEyMTA3OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyMTA4OlxcdFxcdFxcdFxcdFxcdH1cXG4xMjEwOTpcXHRcXHRcXHRcXHR9XFxuMTIxMTA6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTIxMTE6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0lURVI6XFxuMTIxMTI6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0xJU1RfSEVBRDpcXG4xMjExMzpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fTElTVF9OT0RFOlxcbjEyMTE0OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9ST09UOlxcbjEyMTE1OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SQl9OT0RFOlxcbjEyMTE2OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NRU06XFxuMTIxMTc6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX01FTV9TSVpFOlxcbjEyMTE4OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19DQUxMQkFDSzpcXG4xMjExOTpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQ09OU1RfU1RSOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDoyOC4wMjE0NjMzOTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3ODQ4MTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyBWYXJpYWJsZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGFyZ190eXBlYCBiZWluZyB1c2VkLCBidXQgaXQncyBub3QgaW1tZWRpYXRlbHkgY2xlYXIgd2hlcmUgaXQncyBnZXR0aW5nIGl0cyB2YWx1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBgYXJnX3R5cGVgIGlzIGluaXRpYWxpemVkIHNvbWV3aGVyZSBlbHNlLlwiIFRoaXMgc3VnZ2VzdHMgdGhhdCBJIG5lZWQgdG8gZm9sbG93IHRoZSB2YXJpYWJsZSdzIGxpZmVjeWNsZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSB0byBmaW5kIHdoZXJlIGBhcmdfdHlwZWAgaXMgYWN0dWFsbHkgYXNzaWduZWQgYSB2YWx1ZS4gSSdtIGVzc2VudGlhbGx5IGh1bnRpbmcgZm9yIHRoZSBkZWNsYXJhdGlvbiBvciBhc3NpZ25tZW50IHRoYXQgZ2l2ZXMgaXQgaXRzIGluaXRpYWwgc3RhdGUuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGluaXRpYWxpemF0aW9uIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDE1OjI0OjMwLjg5OTk0NzU5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI4MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjA3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIwNzA6XFx0XFx0XFx0XFx0XFx0ICogaWYgKGlubmVyX21hcDEgXFx1MDAyNlxcdTAwMjYgaW5uZXJfbWFwMikge1xcbjEyMDcxOlxcdFxcdFxcdFxcdFxcdCAqICAgICB3cSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oaW5uZXJfbWFwMSk7XFxuMTIwNzI6XFx0XFx0XFx0XFx0XFx0ICogICAgIGlmICh3cSlcXG4xMjA3MzpcXHRcXHRcXHRcXHRcXHQgKiAgICAgICAgIC8vIG1pc21hdGNoIHdvdWxkIGhhdmUgYmVlbiBhbGxvd2VkXFxuMTIwNzQ6XFx0XFx0XFx0XFx0XFx0ICogICAgICAgICBicGZfd3FfaW5pdCh3cSwgaW5uZXJfbWFwMik7XFxuMTIwNzU6XFx0XFx0XFx0XFx0XFx0ICogfVxcbjEyMDc2OlxcdFxcdFxcdFxcdFxcdCAqXFxuMTIwNzc6XFx0XFx0XFx0XFx0XFx0ICogQ29tcGFyaW5nIG1hcF9wdHIgaXMgZW5vdWdoIHRvIGRpc3Rpbmd1aXNoIG5vcm1hbCBhbmQgb3V0ZXIgbWFwcy5cXG4xMjA3ODpcXHRcXHRcXHRcXHRcXHQgKi9cXG4xMjA3OTpcXHRcXHRcXHRcXHRcXHRpZiAobWV0YS1cXHUwMDNlbWFwLnB0ciAhPSByZWctXFx1MDAzZW1hcF9wdHIgfHxcXG4xMjA4MDpcXHRcXHRcXHRcXHRcXHQgICAgbWV0YS1cXHUwMDNlbWFwLnVpZCAhPSByZWctXFx1MDAzZW1hcF91aWQpIHtcXG4xMjA4MTpcXHRcXHRcXHRcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2VtYXBfcHRyLVxcdTAwM2VyZWNvcmQtXFx1MDAzZXRhc2tfd29ya19vZmYgXFx1MDAzZT0gMCkge1xcbjEyMDgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbjEyMDgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJicGZfdGFza193b3JrIHBvaW50ZXIgaW4gUjIgbWFwX3VpZD0lZCBkb2Vzbid0IG1hdGNoIG1hcCBwb2ludGVyIGluIFIzIG1hcF91aWQ9JWRcXFxcblxcXCIsXFxuMTIwODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlbWFwLnVpZCwgcmVnLVxcdTAwM2VtYXBfdWlkKTtcXG4xMjA4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjA4NjpcXHRcXHRcXHRcXHRcXHRcXHR9XFxuMTIwODc6XFx0XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsXFxuMTIwODg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIndvcmtxdWV1ZSBwb2ludGVyIGluIFIxIG1hcF91aWQ9JWQgZG9lc24ndCBtYXRjaCBtYXAgcG9pbnRlciBpbiBSMiBtYXBfdWlkPSVkXFxcXG5cXFwiLFxcbjEyMDg5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC51aWQsIHJlZy1cXHUwMDNlbWFwX3VpZCk7XFxuMTIwOTA6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIwOTE6XFx0XFx0XFx0XFx0XFx0fVxcbjEyMDkyOlxcdFxcdFxcdFxcdH1cXG4xMjA5MzpcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2VtYXAucHRyID0gcmVnLVxcdTAwM2VtYXBfcHRyO1xcbjEyMDk0OlxcdFxcdFxcdFxcdG1ldGEtXFx1MDAzZW1hcC51aWQgPSByZWctXFx1MDAzZW1hcF91aWQ7XFxuMTIwOTU6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTIwOTY6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0FMTE9DX0JURl9JRDpcXG4xMjA5NzpcXHRcXHRcXHRjYXNlIEtGX0FSR19QVFJfVE9fQlRGX0lEOlxcbjEyMDk4OlxcdFxcdFxcdFxcdGlmICghaXNfdHJ1c3RlZF9yZWcoZW52LCByZWcpKSB7XFxuMTIwOTk6XFx0XFx0XFx0XFx0XFx0aWYgKCFpc19rZnVuY19yY3UobWV0YSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MzAuOTAxMTc4ODc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTg1OTgxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGludG8gdGhhdCB0ZXh0IGFuZCBzeW50aGVzaXplIGl0cyBjb3JlIGlkZWFzIGFzIGlmIHRoZXkncmUgbXkgb3duIHRob3VnaHRzLiBIZXJlJ3MgaG93IEknbGwgYXBwcm9hY2ggdGhpcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvbmNlcHR1YWwgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZ2V0IGludG8gdGhlIHNwZWNpZmljIGNvbnRlbnQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhdXRob3IncyBpbnRlbnQuIE15IGluaXRpYWwgaW1wdWxzZSBpcyB0byBkaXNzZWN0IHRoZSBzdHJ1Y3R1cmUgYW5kIGFyZ3VtZW50LiBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgYXJlIHRoZSBrZXkgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZT8gQW5kIG1vc3QgaW1wb3J0YW50bHksIHdoZXJlIGlzIHRoaXMgZ29pbmc/IEknbSBsb29raW5nIGZvciB0aGUgZm91bmRhdGlvbmFsIHByaW5jaXBsZXMsIHRoZSBjZW50cmFsIGNsYWltcywgYW5kIGFueSBoaWRkZW4gYXNzdW1wdGlvbnMgb3IgYmlhc2VzIHRoYXQgbmVlZCB0byBiZSBzdXJmYWNlZC4gSSB3YW50IHRvIHJlYWQgYmV0d2VlbiB0aGUgbGluZXMgYXMgYSBjcml0aWNhbCBleHBlcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MzMuODU5Nzc5MDk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzI4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjA0MDpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInJlbGVhc2Uga2Z1bmMgJXMgZXhwZWN0cyByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgcGFzc2VkIHRvICVzXFxcXG5cXFwiLFxcbjEyMDQxOlxcdFxcdFxcdFxcdFxcdGZ1bmNfbmFtZSwgcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4xMjA0MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjA0MzpcXHRcXHRcXHR9XFxuMTIwNDQ6XFx0XFxuMTIwNDU6XFx0XFx0XFx0aWYgKHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSlcXG4xMjA0NjpcXHRcXHRcXHRcXHR1cGRhdGVfcmVmX29iaihcXHUwMDI2bWV0YS1cXHUwMDNlcmVmX29iaiwgcmVnKTtcXG4xMjA0NzpcXHRcXG4xMjA0ODpcXHRcXHRcXHRyZWZfdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cXHUwMDNldHlwZSwgXFx1MDAyNnJlZl9pZCk7XFxuMTIwNDk6XFx0XFx0XFx0cmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtXFx1MDAzZW5hbWVfb2ZmKTtcXG4xMjA1MDpcXHRcXG4xMjA1MTpcXHRcXHRcXHRrZl9hcmdfdHlwZSA9IGdldF9rZnVuY19wdHJfYXJnX3R5cGUoZW52LCBjYWxsZXIsIHJlZ3MsIG1ldGEsIHQsIHJlZl90LCByZWZfdG5hbWUsXFxuMTIwNTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBhcmdzLCBpLCBuYXJncywgYXJnbm8sIHJlZyk7XFxuMTIwNTM6XFx0XFx0XFx0aWYgKGtmX2FyZ190eXBlIFxcdTAwM2MgMClcXG4xMjA1NDpcXHRcXHRcXHRcXHRyZXR1cm4ga2ZfYXJnX3R5cGU7XFxuMTIwNTU6XFx0XFxuMTIwNTY6XFx0XFx0XFx0c3dpdGNoIChrZl9hcmdfdHlwZSkge1xcbjEyMDU3OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19OVUxMOlxcbjEyMDU4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMDU5OlxcdFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19NQVA6XFxuMTIwNjA6XFx0XFx0XFx0XFx0aWYgKCFyZWctXFx1MDAzZW1hcF9wdHIpIHtcXG4xMjA2MTpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInBvaW50ZXIgaW4gJXMgaXNuJ3QgbWFwIHBvaW50ZXJcXFxcblxcXCIsXFxuMTIwNjI6XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4xMjA2MzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjA2NDpcXHRcXHRcXHRcXHR9XFxuMTIwNjU6XFx0XFx0XFx0XFx0aWYgKG1ldGEtXFx1MDAzZW1hcC5wdHIgXFx1MDAyNlxcdTAwMjYgKHJlZy1cXHUwMDNlbWFwX3B0ci1cXHUwMDNlcmVjb3JkLVxcdTAwM2V3cV9vZmYgXFx1MDAzZT0gMCB8fFxcbjEyMDY2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJlZy1cXHUwMDNlbWFwX3B0ci1cXHUwMDNlcmVjb3JkLVxcdTAwM2V0YXNrX3dvcmtfb2ZmIFxcdTAwM2U9IDApKSB7XFxuMTIwNjc6XFx0XFx0XFx0XFx0XFx0LyogVXNlIG1hcF91aWQgKHdoaWNoIGlzIHVuaXF1ZSBpZCBvZiBpbm5lciBtYXApIHRvIHJlamVjdDpcXG4xMjA2ODpcXHRcXHRcXHRcXHRcXHQgKiBpbm5lcl9tYXAxID0gYnBmX21hcF9sb29rdXBfZWxlbShvdXRlcl9tYXAsIGtleTEpXFxuMTIwNjk6XFx0XFx0XFx0XFx0XFx0ICogaW5uZXJfbWFwMiA9IGJwZl9tYXBfbG9va3VwX2VsZW0ob3V0ZXJfbWFwLCBrZXkyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDozMy44NjI1MTYyMDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1NTkxNzg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIHRoYXQgQXJndW1lbnQgVHlwZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBzZWVpbmcgdGhhdCBgYXJnX3R5cGVgIGlzIGJlaW5nIGluaXRpYWxpemVkIHdpdGggYEFSR19QVFJfVE9fQlRGX0lEYC4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCB2YXJpYWJsZSdzIGludGVuZGVkIHVzZSBpbiB0aGlzIGNvbnRleHQuIEl0J3MgYSBrZXkgdmFsdWUgZm9yIGhvdyB0aGUgYXJndW1lbnQgcHJvY2Vzc2luZyBpcyBnb2luZyB0byBwcm9jZWVkIGhlcmUsIHNvIGEgcmFwaWQgY2hlY2sgaXMgdml0YWwgZm9yIHRoZSBsb2dpYyB0byBwcm9ncmVzcyBzbW9vdGhseS4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgY29kZSdzIGludGVuZGVkIHBhdGggY29ycmVjdGx5LiBXZSBkZWZpbml0ZWx5IG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgYXMgZXhwZWN0ZWQgYmVmb3JlIHdlIGdvIGZ1cnRoZXIsIG9yIHdlIGNvdWxkIGJlIG9wZW5pbmcgdGhlIGRvb3IgdG8gc29tZSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njc4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDozNi44MTg0Mzc1MDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAxMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIwMTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4xMjAxMTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjAxMjpcXHRcXHRcXHRcXHRcXHR9XFxuMTIwMTM6XFx0XFxuMTIwMTQ6XFx0XFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlcjBfc2l6ZSA9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4xMjAxNTpcXHRcXHRcXHRcXHRcXHRpZiAocmVnbm8gXFx1MDAzZT0gMClcXG4xMjAxNjpcXHRcXHRcXHRcXHRcXHRcXHRyZXQgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHJlZ25vKTtcXG4xMjAxNzpcXHRcXHRcXHRcXHRcXHRlbHNlXFxuMTIwMTg6XFx0XFx0XFx0XFx0XFx0XFx0cmV0ID0gbWFya19zdGFja19hcmdfcHJlY2lzaW9uKGVudiwgaSk7XFxuMTIwMTk6XFx0XFx0XFx0XFx0XFx0aWYgKHJldClcXG4xMjAyMDpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEyMDIxOlxcdFxcdFxcdFxcdH1cXG4xMjAyMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjAyMzpcXHRcXHRcXHR9XFxuMTIwMjQ6XFx0XFxuMTIwMjU6XFx0XFx0XFx0aWYgKCFidGZfdHlwZV9pc19wdHIodCkpIHtcXG4xMjAyNjpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlVucmVjb2duaXplZCAlcyB0eXBlICVzXFxcXG5cXFwiLFxcbjEyMDI3OlxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgYnRmX3R5cGVfc3RyKHQpKTtcXG4xMjAyODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjAyOTpcXHRcXHRcXHR9XFxuMTIwMzA6XFx0XFxuMTIwMzE6XFx0XFx0XFx0aWYgKChicGZfcmVnaXN0ZXJfaXNfbnVsbChyZWcpIHx8IHR5cGVfbWF5X2JlX251bGwocmVnLVxcdTAwM2V0eXBlKSkgXFx1MDAyNlxcdTAwMjZcXG4xMjAzMjpcXHRcXHRcXHQgICAgIWlzX2tmdW5jX2FyZ19udWxsYWJsZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2ldKSkge1xcbjEyMDMzOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkICVzXFxcXG5cXFwiLFxcbjEyMDM0OlxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuMTIwMzU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuMTIwMzY6XFx0XFx0XFx0fVxcbjEyMDM3OlxcdFxcbjEyMDM4OlxcdFxcdFxcdGlmIChyZWdubyA9PSBtZXRhLVxcdTAwM2VyZWxlYXNlX3JlZ25vIFxcdTAwMjZcXHUwMDI2ICFpc19rZnVuY19hcmdfZHlucHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbaV0pIFxcdTAwMjZcXHUwMDI2XFxuMTIwMzk6XFx0XFx0XFx0ICAgICFyZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykgXFx1MDAyNlxcdTAwMjYgIWJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6MzYuODE5MTE3NDgyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MjEwNTM5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogVHJhY2luZyBgYXJnX3R5cGVgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgYGFyZ190eXBlYCB2YXJpYWJsZS4gV2hlcmUgZXhhY3RseSBpcyB0aGlzIHRoaW5nIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBkZWNsYXJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbiBhbmQgaG93IGl0J3MgaW5pdGlhbGx5IHNldCB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBJIG5lZWQgdG8gaW50ZXJwcmV0IGl0cyB1c2FnZSBsYXRlciBvbi4gSXQncyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiBkZXBlbmRzLCBhbmQgSSBjYW4ndCBidWlsZCBhbnkgcmVsaWFibGUgYW5hbHlzaXMgd2l0aG91dCBpdC4gR290dGEgZ2V0IHRoYXQgc3RhcnRpbmcgcG9pbnQgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDo0NC41NDAxNzQ3OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1Mjk0MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjAxPXN0YXRpYyBpbnQgaXJxX2ZsYWdfZ2V0X3NwaShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA2OnN0YXRpYyBlbnVtIGJwZl9keW5wdHJfdHlwZSBhcmdfdG9fZHlucHRyX3R5cGUoZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwNy17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njc3PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njc4OlxcdFxcdFxcdFxcdCAgIGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlLCBpbnQgaW5zbl9pZHgsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcmVmX29ial9kZXNjICpyZWZfb2JqLCBzdHJ1Y3QgYnBmX2R5bnB0cl9kZXNjICpkeW5wdHIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA0PXN0YXRpYyBib29sIGlzX2R5bnB0cl90eXBlX2V4cGVjdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNTpcXHRcXHRcXHRcXHQgICAgZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNi17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzIyND1zdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzIyNTpcXHRcXHRcXHQgICAgICAgYXJnbm9fdCBhcmdubywgaW50IGluc25faWR4LCBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzIyNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IHJlZl9vYmpfZGVzYyAqcmVmX29iaiwgc3RydWN0IGJwZl9keW5wdHJfZGVzYyAqZHlucHRyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTc4MTk9c3RhdGljIGludCBjaGVja19yZWdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODIwOlxcdFxcdFxcdCAgZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MjEtXFx0XFx0XFx0ICBjb25zdCB1MzIgKmFyZ19idGZfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzk5Mz1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk5NC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc5OTU6XFx0XFx0XFx0XFx0ICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzk5Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODE5Mj1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE5OC1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTk5OlxcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXFx1MDAzZWFyZ190eXBlW2FyZ107XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMDAtXFx0YXJnbm9fdCBhcmdubyA9IGFyZ25vX2Zyb21fYXJnKGFyZyArIDEpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTg4MDU9c3RhdGljIGJvb2wgY2hlY2tfbWVtX2FyZ19yd19mbGFnX29rKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODgwOS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmbi1cXHUwMDNlYXJnX3R5cGUpOyBpKyspIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODgxMDpcXHRcXHRlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSA9IGZuLVxcdTAwM2VhcmdfdHlwZVtpXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODgxMS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04ODIxPXN0YXRpYyBib29sIGNoZWNrX3Byb3RvX3JlbGVhc2VfcmVnKGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqZm4sIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODI1LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZuLVxcdTAwM2VhcmdfdHlwZSk7IGkrKykge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4ODI2OlxcdFxcdGVudW0gYnBmX2FyZ190eXBlIGFyZ190eXBlID0gZm4tXFx1MDAzZWFyZ190eXBlW2ldO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODI3LVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExOTA4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5NDItXFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqcmVmX3QsICpyZXNvbHZlX3JldDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5NDM6XFx0XFx0ZW51bSBicGZfYXJnX3R5cGUgYXJnX3R5cGUgPSBBUkdfRE9OVENBUkU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTQ0LVxcdFxcdGFyZ25vX3QgYXJnbm8gPSBhcmdub19mcm9tX2FyZyhpICsgMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDE1OjI0OjQ0LjU5NTQ3NTcyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzA1NTY1NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBcmd1bWVudCBUeXBlIExvZ2ljKipcblxuU28sIEkgc2VlIHRoYXQgYGFyZ190eXBlYCBpbml0aWFsbHkgZ2V0cyBzZXQgdG8gYEFSR19ET05UQ0FSRWAuIFRoYXQncyBhIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50LCBlc3NlbnRpYWxseSBhIFwid2UgaGF2ZW4ndCBmaWd1cmVkIHRoaXMgb3V0IHlldFwiIGtpbmQgb2Ygc3RhdGUuIFRoZSBjb2RlIHRoZW4ganVtcHMgaW50byBgY2hlY2tfa2Z1bmNfYXJnc2AsIGFuZCBpdCdzIGhlcmUgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIGBjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBibG9jay4gQWgsIHJpZ2h0LCBhIGtlcm5lbCBmdW5jdGlvbiBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gc29tZXRoaW5nIHJlZmVyZW5jZSBjb3VudGVkLCB3aGljaCBpcyBhIGtub3duIHR5cGUuIEluIHRoaXMgY2FzZSwgSSBjYW4gc2VlIHRoYXQgYGFyZ190eXBlYCBpcyBub3cgYmVpbmcgYXNzaWduZWQgYSBtb3JlIHNwZWNpZmljIHZhbHVlOiBgQVJHX1BUUl9UT19CVEZfSUQgfCBQVFJfWkVST19PRkZgLlxuXG5UaGF0J3MgY3JpdGljYWwuIGBBUkdfUFRSX1RPX0JURl9JRGAgc3Ryb25nbHkgc3VnZ2VzdHMgd2UgbmVlZCB0byB0cmFjayB0aGlzIGFyZ3VtZW50IHdpdGggYSBCVEYgdHlwZSBJRCwgaW5kaWNhdGluZyB0aGUga2luZCBvZiBkYXRhIHRoZSBwb2ludGVyIGlzIHBvaW50aW5nIHRvLiBUaGUgaW5jbHVzaW9uIG9mIGBQVFJfWkVST19PRkZgIGFsc28gbm90ZXMgc29tZXRoaW5nIGltcG9ydGFudCBhYm91dCB0aGUgcG9pbnRlciBvZmZzZXQsIHBvc3NpYmx5IHJlbGV2YW50IGZvciBtZW1vcnkgc2FmZXR5IG9yIHN0cnVjdHVyZSBhbGlnbm1lbnQuIEl0IHRoZW4ganVtcHMgdG8gYSBjcnVjaWFsIGNoZWNrLCB0aGUgYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgIGZ1bmN0aW9uIGNhbGwsIHdoaWNoIEkgY2FuIGRlZHVjZSBpcyB3aGVyZSB3ZSB2YWxpZGF0ZSB0aGlzIGFyZ3VtZW50J3MgcHJvcGVydGllcywgc3BlY2lmaWNhbGx5IHRoZSByZWdpc3RlciBpdCdzIGluIChgcmVnYCksIGl0cyBhcmd1bWVudCBudW1iZXIgKGBhcmdub2ApLCBhbmQsIGNyaXRpY2FsbHksIHRoaXMgZGVyaXZlZCBgYXJnX3R5cGVgLiBJJ2QgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gdGhlbiwgZ2l2ZW4gdGhlIG5ldyBgYXJnX3R5cGVgLCBwZXJmb3JtIGNoZWNrcyB0byBlbnN1cmUsIGZvciBleGFtcGxlLCB0aGUgcmVnaXN0ZXIgY29udGFpbnMgYSB2YWxpZCBwb2ludGVyLCB0aGF0IGl0IGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBCVEYgdHlwZSwgb3IgdGhhdCBgUFRSX1pFUk9fT0ZGYCBpcyBjb3JyZWN0bHkgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4ODQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6NTAuMzAxMDQzODU0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTMwOlxcdFxcdFxcdFxcdGFyZ190eXBlID0gQVJHX1BUUl9UT19DVFg7XFxuMTIxMzE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTIxMzI6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjpcXG4xMjEzMzpcXHRcXHRcXHRcXHRhcmdfdHlwZSA9IEFSR19QVFJfVE9fQlRGX0lEIHwgUFRSX1pFUk9fT0ZGO1xcbjEyMTM0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMTM1OlxcdFxcdFxcdGRlZmF1bHQ6XFxuMTIxMzY6XFx0XFx0XFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcInVua25vd24ga2Z1bmMgYXJnIHR5cGUgJWRcXFwiLCBrZl9hcmdfdHlwZSk7XFxuMTIxMzc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTIxMzg6XFx0XFx0XFx0fVxcbjEyMTM5OlxcdFxcbjEyMTQwOlxcdFxcdFxcdGlmIChyZWdubyA9PSBtZXRhLVxcdTAwM2VyZWxlYXNlX3JlZ25vKVxcbjEyMTQxOlxcdFxcdFxcdFxcdGFyZ190eXBlIHw9IE9CSl9SRUxFQVNFO1xcbjEyMTQyOlxcdFxcdFxcdHJldCA9IGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoZW52LCByZWcsIGFyZ25vLCBhcmdfdHlwZSk7XFxuMTIxNDM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTIxNDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMjE0NTpcXHRcXG4xMjE0NjpcXHRcXHRcXHRzd2l0Y2ggKGtmX2FyZ190eXBlKSB7XFxuMTIxNDc6XFx0XFx0XFx0Y2FzZSBLRl9BUkdfUFRSX1RPX0NUWDpcXG4xMjE0ODpcXHRcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFBUUl9UT19DVFgpIHtcXG4xMjE0OTpcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGV4cGVjdGVkIHBvaW50ZXIgdG8gY3R4LCBidXQgZ290ICVzXFxcXG5cXFwiLFxcbjEyMTUwOlxcdFxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSwgcmVnX3R5cGVfc3RyKGVudiwgcmVnLVxcdTAwM2V0eXBlKSk7XFxuMTIxNTE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIxNTI6XFx0XFx0XFx0XFx0fVxcbjEyMTUzOlxcdFxcbjEyMTU0OlxcdFxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfY2FzdF90b19rZXJuX2N0eF0pIHtcXG4xMjE1NTpcXHRcXHRcXHRcXHRcXHRyZXQgPSBnZXRfa2Vybl9jdHhfYnRmX2lkKFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcmVzb2x2ZV9wcm9nX3R5cGUoZW52LVxcdTAwM2Vwcm9nKSk7XFxuMTIxNTY6XFx0XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTIxNTc6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIxNTg6XFx0XFx0XFx0XFx0XFx0bWV0YS1cXHUwMDNlcmV0X2J0Zl9pZCAgPSByZXQ7XFxuMTIxNTk6XFx0XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDo1MC4zMDE2ODE3NDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MjYwNzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFyZ3VtZW50IFR5cGUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYCAqaXMqIGluZGVlZCBjYWxsZWQgd2l0aCBgYXJnX3R5cGVgLiBJbnRlcmVzdGluZy4gTm93LCBJIGhhdmUgdG8gcmV3aW5kIGEgYml0LiBJIHJlbWVtYmVyIHRoYXQgdGhlIGhhbmRsaW5nIG9mIGFyZ3VtZW50IHR5cGVzIHVzZWQgdG8gYnVuZGxlIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgdG9nZXRoZXIgd2l0aCBvdGhlciB0eXBlcyBsaWtlIGBLRl9BUkdfUFRSX1RPX01FTWAuIFByZXZpb3VzbHksIHRoZXNlIGp1c3QgdHJpZ2dlcmVkIGEgc2ltcGxlIGBicmVhaztgLCBsZWF2aW5nIGBhcmdfdHlwZWAgYXMgYEFSR19ET05UQ0FSRWAuXG5cblNvLCB0aGUga2V5IGhlcmUgaXMgd2hhdCBoYXBwZW5zIHdoZW4gYGFyZ190eXBlYCBlbmRzIHVwIGFzIGBBUkdfRE9OVENBUkVgLiBUaGUgY29kZSBwYXRoIGlzIGRpZmZlcmVudCAqbm93Ki4gSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAgaGFuZGxlcyB0aGF0IHNwZWNpZmljIHNjZW5hcmlvIHdpdGggYEFSR19ET05UQ0FSRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjQ6NTQuMDU0MjkyMTUzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk5MDpcXHRcXHRyZXR1cm4gZmllbGQ7XFxuNzk5MTpcXHR9XFxuNzk5MjpcXHRcXG43OTkzOlxcdHN0YXRpYyBpbnQgY2hlY2tfZnVuY19hcmdfcmVnX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbjc5OTQ6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbjc5OTU6XFx0XFx0XFx0XFx0XFx0ICBlbnVtIGJwZl9hcmdfdHlwZSBhcmdfdHlwZSlcXG43OTk2OlxcdHtcXG43OTk3OlxcdFxcdGJvb2wgZml4ZWRfb2ZmX29rID0gIShhcmdfdHlwZSBcXHUwMDI2IFBUUl9aRVJPX09GRik7XFxuNzk5ODpcXHRcXHR1MzIgdHlwZSA9IHJlZy1cXHUwMDNldHlwZTtcXG43OTk5OlxcdFxcbjgwMDA6XFx0XFx0YXJnX3R5cGUgXFx1MDAyNj0gflBUUl9aRVJPX09GRjtcXG44MDAxOlxcdFxcbjgwMDI6XFx0XFx0LyogV2hlbiByZWZlcmVuY2VkIHJlZ2lzdGVyIGlzIHBhc3NlZCB0byByZWxlYXNlIGZ1bmN0aW9uLCBpdHMgZml4ZWRcXG44MDAzOlxcdFxcdCAqIG9mZnNldCBtdXN0IGJlIDAuXFxuODAwNDpcXHRcXHQgKlxcbjgwMDU6XFx0XFx0ICogV2Ugd2lsbCBjaGVjayBhcmdfdHlwZV9pc19yZWxlYXNlIHJlZyBoYXMgaWQgd2hlbiBzdG9yaW5nXFxuODAwNjpcXHRcXHQgKiBtZXRhLVxcdTAwM2VyZWxlYXNlX3JlZ25vLlxcbjgwMDc6XFx0XFx0ICovXFxuODAwODpcXHRcXHRpZiAoYXJnX3R5cGVfaXNfcmVsZWFzZShhcmdfdHlwZSkpIHtcXG44MDA5OlxcdFxcdFxcdC8qIEFSR19QVFJfVE9fRFlOUFRSIHdpdGggT0JKX1JFTEVBU0UgaXMgYSBiaXQgc3BlY2lhbCwgYXMgaXRcXG44MDEwOlxcdFxcdFxcdCAqIG1heSBub3QgZGlyZWN0bHkgcG9pbnQgdG8gdGhlIG9iamVjdCBiZWluZyByZWxlYXNlZCwgYnV0IHRvXFxuODAxMTpcXHRcXHRcXHQgKiBkeW5wdHIgcG9pbnRpbmcgdG8gc3VjaCBvYmplY3QsIHdoaWNoIG1pZ2h0IGJlIGF0IHNvbWUgb2Zmc2V0XFxuODAxMjpcXHRcXHRcXHQgKiBvbiB0aGUgc3RhY2suIEluIHRoYXQgY2FzZSwgd2Ugc2ltcGx5IHRvIGZhbGxiYWNrIHRvIHRoZVxcbjgwMTM6XFx0XFx0XFx0ICogZGVmYXVsdCBoYW5kbGluZy5cXG44MDE0OlxcdFxcdFxcdCAqL1xcbjgwMTU6XFx0XFx0XFx0aWYgKGFyZ190eXBlX2lzX2R5bnB0cihhcmdfdHlwZSkgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBQVFJfVE9fU1RBQ0spXFxuODAxNjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG44MDE3OlxcdFxcbjgwMTg6XFx0XFx0XFx0LyogRG9pbmcgY2hlY2tfcHRyX29mZl9yZWcgY2hlY2sgZm9yIHRoZSBvZmZzZXQgd2lsbCBjYXRjaCB0aGlzXFxuODAxOTpcXHRcXHRcXHQgKiBiZWNhdXNlIGZpeGVkX29mZl9vayBpcyBmYWxzZSwgYnV0IGNoZWNraW5nIGhlcmUgYWxsb3dzIHVzXFxuODAyMDpcXHRcXHRcXHQgKiB0byBnaXZlIHRoZSB1c2VyIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UuXFxuODAyMTpcXHRcXHRcXHQgKi9cXG44MDIyOlxcdFxcdFxcdGlmICghdG51bV9pc19jb25zdChyZWctXFx1MDAzZXZhcl9vZmYpIHx8IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZSAhPSAwKSB7XFxuODAyMzpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIG11c3QgaGF2ZSB6ZXJvIG9mZnNldCB3aGVuIHBhc3NlZCB0byByZWxlYXNlIGZ1bmMgb3IgdHJ1c3RlZCBhcmcgdG8ga2Z1bmNcXFxcblxcXCIsXFxuODAyNDpcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbjgwMjU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODAyNjpcXHRcXHRcXHR9XFxuODAyNzpcXHRcXHR9XFxuODAyODpcXHRcXG44MDI5OlxcdFxcdHN3aXRjaCAodHlwZSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDo1NC4wNTQ5MTk1MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3MjkyNTI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCBhc3N1bWluZyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBhIHN3aXRjaCBzdGF0ZW1lbnQgaW4gbXkgZXhwZXJ0IGNhcGFjaXR5OlxuXG4qKlRoZSBJbXBsaWNhdGlvbnMgb2YgYSBTd2l0Y2ggU3RhdGVtZW50OiBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBzd2l0Y2ggc3RhdGVtZW50LiAqSG1tKiwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCdzIGVzc2VudGlhbGx5IGEgY29udHJvbCBmbG93IG1lY2hhbmlzbSwgYSBzdHJ1Y3R1cmVkICppZi1lbHNlKiBsYWRkZXIsIHJlYWxseS4gSSdtIHRoaW5raW5nIGFib3V0IGl0cyBlZmZpY2llbmN5LCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aXRoIG51bWVyb3VzIGNvbmRpdGlvbnMuIElzIGl0IHJlYWxseSB0aGUgYmVzdCBhcHByb2FjaCBoZXJlPyBUaGUgY29tcGlsZXIncyBvcHRpbWl6YXRpb24gcGxheXMgYSAqaHVnZSogcm9sZSwgb2YgY291cnNlLiBJJ20gY29uc2lkZXJpbmcgaWYgaXQncyBjb21waWxpbmcgdG8gYSBqdW1wIHRhYmxlLCBvciBpZiBpdCdzIHJldmVydGluZyB0byBhIHNlcmllcyBvZiBjb21wYXJpc29ucyB3aGVuIHRoZSBjYXNlIHZhbHVlcyBhcmVuJ3QgZGVuc2Ugb3IgZWFzaWx5IG9wdGltaXphYmxlLiAqVGhhdCdzIGNyaXRpY2FsKi5cblxuSSdtIHBvbmRlcmluZyB0aGUgaW1wYWN0IG9uIHJlYWRhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkgdG9vLiBBIHdlbGwtc3RydWN0dXJlZCBzd2l0Y2ggY2FuIGJlIGZhciBtb3JlIGVsZWdhbnQgdGhhbiBhIGRlZXBseSBuZXN0ZWQgKmlmLWVsc2UqIGNvbnN0cnVjdCwgd2hpY2ggSSd2ZSBzZWVuIHNvbWUgaG9ycm9ycyBpbiB0aGUgcGFzdCEgQnV0IHBvb3IgdXNlIG9mIGJyZWFrIHN0YXRlbWVudHMsIG9yIGZhbGwtdGhyb3VnaCBiZWhhdmlvci4uLiAqc2h1ZGRlcnMqLiBUaGF0J3Mgd2hlcmUgY29tbWVudHMgYmVjb21lIGNydWNpYWwsIG5vdCBqdXN0IGZvciBkb2N1bWVudGF0aW9uLCBidXQgdG8gZXhwbGljaXRseSBjbGFyaWZ5IHRoZSBpbnRlbmRlZCBsb2dpYy4gSXMgdGhhdCB0aGUgY2FzZSBmb3IgKnRoaXMqIHNpdHVhdGlvbj8gU2hvdWxkIEkgYmUgdXNpbmcgYW4gZW51bSBvciBhIGxvb2t1cCB0YWJsZSBpbnN0ZWFkPyBPciB3b3VsZCBhIGNvbWJpbmF0aW9uIG9mIHRlY2huaXF1ZXMgYmUgYmVzdD9cblxuQWxzbywgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4gSSBhbSBhc2tpbmcgbXlzZWxmLCBpcyB0aGUgc3dpdGNoIHRoZSBmYXN0ZXN0IHdheSB0byByb3V0ZSB0aGUgcHJvZ3JhbSBmbG93IHRvIHRoZSBjb3JyZWN0IHByb2Nlc3M/IEkgbmVlZCB0byBhbmFseXplIGhvdyBmcmVxdWVudGx5IHRoZXNlIGNvbmRpdGlvbnMgd2lsbCBiZSBldmFsdWF0ZWQgZHVyaW5nIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGJlIGNsZWFyIGFuZCBjb25jaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDo1OC44Mjc4NDc3NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODAzMDpcXHRcXHQvKiBQb2ludGVyIHR5cGVzIHdoZXJlIGJvdGggZml4ZWQgYW5kIHZhcmlhYmxlIG9mZnNldCBpcyBleHBsaWNpdGx5IGFsbG93ZWQ6ICovXFxuODAzMTpcXHRcXHRjYXNlIFBUUl9UT19TVEFDSzpcXG44MDMyOlxcdFxcdGNhc2UgUFRSX1RPX1BBQ0tFVDpcXG44MDMzOlxcdFxcdGNhc2UgUFRSX1RPX1BBQ0tFVF9NRVRBOlxcbjgwMzQ6XFx0XFx0Y2FzZSBQVFJfVE9fTUFQX0tFWTpcXG44MDM1OlxcdFxcdGNhc2UgUFRSX1RPX01BUF9WQUxVRTpcXG44MDM2OlxcdFxcdGNhc2UgUFRSX1RPX01FTTpcXG44MDM3OlxcdFxcdGNhc2UgUFRSX1RPX01FTSB8IE1FTV9SRE9OTFk6XFxuODAzODpcXHRcXHRjYXNlIFBUUl9UT19NRU0gfCBNRU1fUklOR0JVRjpcXG44MDM5OlxcdFxcdGNhc2UgUFRSX1RPX0JVRjpcXG44MDQwOlxcdFxcdGNhc2UgUFRSX1RPX0JVRiB8IE1FTV9SRE9OTFk6XFxuODA0MTpcXHRcXHRjYXNlIFBUUl9UT19BUkVOQTpcXG44MDQyOlxcdFxcdGNhc2UgU0NBTEFSX1ZBTFVFOlxcbjgwNDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuODA0NDpcXHRcXHQvKiBBbGwgdGhlIHJlc3QgbXVzdCBiZSByZWplY3RlZCwgZXhjZXB0IFBUUl9UT19CVEZfSUQgd2hpY2ggYWxsb3dzXFxuODA0NTpcXHRcXHQgKiBmaXhlZCBvZmZzZXQuXFxuODA0NjpcXHRcXHQgKi9cXG44MDQ3OlxcdFxcdGNhc2UgUFRSX1RPX0JURl9JRDpcXG44MDQ4OlxcdFxcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQzpcXG44MDQ5OlxcdFxcdGNhc2UgUFRSX1RPX0JURl9JRCB8IFBUUl9UUlVTVEVEOlxcbjgwNTA6XFx0XFx0Y2FzZSBQVFJfVE9fQlRGX0lEIHwgTUVNX1JDVTpcXG44MDUxOlxcdFxcdGNhc2UgUFRSX1RPX0JURl9JRCB8IE1FTV9BTExPQyB8IE5PTl9PV05fUkVGOlxcbjgwNTI6XFx0XFx0Y2FzZSBQVFJfVE9fQlRGX0lEIHwgTUVNX0FMTE9DIHwgTk9OX09XTl9SRUYgfCBNRU1fUkNVOlxcbjgwNTM6XFx0XFx0XFx0LyogV2hlbiByZWZlcmVuY2VkIFBUUl9UT19CVEZfSUQgaXMgcGFzc2VkIHRvIHJlbGVhc2UgZnVuY3Rpb24sXFxuODA1NDpcXHRcXHRcXHQgKiBvciB3aGVuIHRoZSBhcmd1bWVudCB0eXBlIHJlcXVpcmVzIHplcm8gZml4ZWQgb2Zmc2V0LCBpdHNcXG44MDU1OlxcdFxcdFxcdCAqIGZpeGVkIG9mZnNldCBtdXN0IGJlIDAuIEluIHRoZSBvdGhlciBjYXNlcywgZml4ZWQgb2Zmc2V0IGNhblxcbjgwNTY6XFx0XFx0XFx0ICogYmUgbm9uLXplcm8uIHZhcl9vZmYgYWx3YXlzIG11c3QgYmUgMCBmb3IgUFRSX1RPX0JURl9JRCxcXG44MDU3OlxcdFxcdFxcdCAqIGhlbmNlIHdlIHN0aWxsIG5lZWQgdG8gZG8gY2hlY2tzIGluc3RlYWQgb2YgcmV0dXJuaW5nLlxcbjgwNTg6XFx0XFx0XFx0ICovXFxuODA1OTpcXHRcXHRcXHRyZXR1cm4gX19jaGVja19wdHJfb2ZmX3JlZyhlbnYsIHJlZywgYXJnbm8sIGZpeGVkX29mZl9vayk7XFxuODA2MDpcXHRcXHRjYXNlIFBUUl9UT19DVFg6XFxuODA2MTpcXHRcXHRcXHQvKlxcbjgwNjI6XFx0XFx0XFx0ICogQWxsb3cgZml4ZWQgYW5kIHZhcmlhYmxlIG9mZnNldHMgZm9yIHN5c2NhbGwgY29udGV4dCwgYnV0XFxuODA2MzpcXHRcXHRcXHQgKiBvbmx5IHdoZW4gdGhlIGFyZ3VtZW50IGlzIHBhc3NlZCBhcyBtZW1vcnksIG5vdCBjdHgsXFxuODA2NDpcXHRcXHRcXHQgKiBvdGhlcndpc2Ugd2UgbWF5IGdldCBtb2RpZmllZCBjdHggaW4gdGFpbCBjYWxsZWQgcHJvZ3JhbXMgYW5kXFxuODA2NTpcXHRcXHRcXHQgKiBnbG9iYWwgc3VicHJvZ3MgKHRoYXQgbWF5IGFjdCBhcyBleHRlbnNpb24gcHJvZyBob29rcykuXFxuODA2NjpcXHRcXHRcXHQgKi9cXG44MDY3OlxcdFxcdFxcdGlmIChhcmdfdHlwZSAhPSBBUkdfUFRSX1RPX0NUWCBcXHUwMDI2XFx1MDAyNiBpc192YXJfY3R4X29mZl9hbGxvd2VkKGVudi1cXHUwMDNlcHJvZykpXFxuODA2ODpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG44MDY5OlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNDo1OC44MjkxMjQ1MzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIzMzg0MzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBQVFJfWkVST19PRkZgIEltcGFjdCBvbiBQb2ludGVyIE9mZnNldCBIYW5kbGluZyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIFByZXZpb3VzbHksIHRoZSBgZml4ZWRfb2ZmX29rYCBmbGFnIHdhcyBzZXQgdG8gdHJ1ZSwgYmVjYXVzZSB3ZSB3ZXJlIGRlYWxpbmcgd2l0aCBhbiBgQVJHX0RPTlRDQVJFYCBhcmd1bWVudCB0eXBlLCBhbmQgdGhhdCBvbmUgZG9lc24ndCBoYXZlIHRoZSBgUFRSX1pFUk9fT0ZGYCBhdHRyaWJ1dGUuIEJ1dCBub3csIHRoZSBgYXJnX3R5cGVgIGhhcyBzaGlmdGVkIHRvIGBBUkdfUFRSX1RPX0JURl9JRCB8IFBUUl9aRVJPX09GRmAuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYFBUUl9aRVJPX09GRmAgaXMgc2lnbmlmaWNhbnQg4oCTIGl0IGZvcmNlcyBgZml4ZWRfb2ZmX29rYCB0byBiZWNvbWUgYGZhbHNlYC5cblxuQ29uc2VxdWVudGx5LCB0aGlzIGNoYW5nZSB3aWxsIGJlIHBhc3NlZCBkb3duIHRvIHRoZSBgX19jaGVja19wdHJfb2ZmX3JlZ2AgZnVuY3Rpb24sIHdoaWNoIG5vdyByZWNlaXZlcyBgZml4ZWRfb2ZmX29rID0gZmFsc2VgLiBUaGlzIGJhc2ljYWxseSBtZWFucyB0aGF0IGFueSBhdHRlbXB0IHRvIHVzZSBhIGZpeGVkIG9mZnNldCB3aXRoaW4gdGhlIGBQVFJfVE9fQlRGX0lEYCBhcmd1bWVudCB0eXBlIHdoZW4gaXQncyBwYXNzZWQgdG8gYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBrZnVuY3MsIHdpbGwgYmUgcmVqZWN0ZWQuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgZml4ZWQgb2Zmc2V0cyBtYXkgYmUgZGFuZ2Vyb3VzIHdoZW4gZGVhbGluZyB3aXRoIHBvaW50ZXJzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIHBhcnQgb2YgYSByZWZjb3VudGVkIG9iamVjdC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgbWVhbnMgSSBoYXZlIHRvIGlkZW50aWZ5IHRoZSBrZnVuY3MgdGhhdCB1dGlsaXplIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZS4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGluc3RhbmNlcyBvZiBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIG9yIG1heWJlIGV2ZW4gYGJwZl9yZWZjb3VudF9hY3F1aXJlYCB3aXRoaW4gdGhlIGNvZGUuIFRoaXMgd2lsbCBjbGFyaWZ5IHdoaWNoIGtmdW5jcyBhcmUgYWZmZWN0ZWQgYnkgdGhpcyBzdHJpY3RlciBvZmZzZXQgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjU6MDUuMDYyOTcyMDg1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY1NjAwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3JlZmNvdW50X2FjcXVpcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9MjQ0OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCh2b2lkICpwX19hbGxvYywgdm9pZCAqbWV0YV9faWduKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1NC0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDU1OiAqIGJwZl9yZWZjb3VudF9hY3F1aXJlKCkgLSB0dXJuIGEgbG9jYWwga3B0ciBpbnRvIGFuIG93bmluZyByZWZlcmVuY2VcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDU2LSAqIEBwX19yZWZjb3VudGVkX2twdHI6IG5vbi1vd25pbmcgbG9jYWwga3B0clxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2My0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDY0Ol9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODAtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODM6XFx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MTM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCwgS0ZfUkVMRUFTRSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVIHwgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgxNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xpc3RfcHVzaF9mcm9udCwgS0ZfSU1QTElDSVRfQVJHUylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDk4ND1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA5ODgtXFx0S0ZfYnBmX29ial9kcm9wLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDk4OTpcXHRLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDk5MDpcXHRLRl9icGZfcmVmY291bnRfYWNxdWlyZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA5OTEtXFx0S0ZfYnBmX2xpc3RfcHVzaF9mcm9udF9pbXBsLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDYxPUJURl9JRChmdW5jLCBicGZfb2JqX2Ryb3ApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDYyOkJURl9JRChmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTA2MzpCVEZfSUQoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDY0LUJURl9JRChmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250X2ltcGwpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExNzE9c3RhdGljIGJvb2wgaXNfYnBmX3BlcmNwdV9vYmpfZHJvcF9rZnVuYyh1MzIgZnVuY19pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE3Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNzc6c3RhdGljIGJvb2wgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmModTMyIGZ1bmNfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTc4LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNzk6XFx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZWZjb3VudF9hY3F1aXJlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE4MDpcXHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbF07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTgxLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIwND1zdGF0aWMgYm9vbCBpc19rZnVuY19yZXRfbnVsbChzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjA1LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMDY6XFx0aWYgKGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpIFxcdTAwMjZcXHUwMDI2IG1ldGEtXFx1MDAzZWFyZ19vd25pbmdfcmVmKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwNy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2MTI9c3RhdGljIGJvb2wgaXNfYnBmX2dyYXBoX2FwaV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjE1LVxcdCAgICAgICBpc19icGZfcmJ0cmVlX2FwaV9rZnVuYyhidGZfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjE2OlxcdCAgICAgICBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhidGZfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTYxNy19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI3MTk9c3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjgwNy1cXHRcXHRpbnNuX2F1eC1cXHUwMDNla3B0cl9zdHJ1Y3RfbWV0YSA9IHN0cnVjdF9tZXRhO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjgwODpcXHR9IGVsc2UgaWYgKGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyODA5LVxcdFxcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyODkwPXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMTAtXFx0XFx0ICAgICAhaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEuZnVuY19pZCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxMTE6XFx0XFx0ICAgICAhaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS5mdW5jX2lkKSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMTItXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJhY3F1aXJlIGtlcm5lbCBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gUFRSX1RPX0JURl9JRFxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk1NjY9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYxNC1cXHRcXHQgICBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKGRlc2MtXFx1MDAzZWZ1bmNfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjE1OlxcdFxcdCAgIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKGRlc2MtXFx1MDAzZWZ1bmNfaWQpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjE2LVxcdFxcdHN0cnVjdCBidGZfc3RydWN0X21ldGEgKmtwdHJfc3RydWN0X21ldGEgPSBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmtwdHJfc3RydWN0X21ldGE7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MjQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjI1OlxcdFxcdGlmIChpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhkZXNjLVxcdTAwM2VmdW5jX2lkKSBcXHUwMDI2XFx1MDAyNiAha3B0cl9zdHJ1Y3RfbWV0YSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYyNi1cXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwia3B0cl9zdHJ1Y3RfbWV0YSBleHBlY3RlZCBhdCBpbnNuX2lkeCAlZFxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDE1OjI1OjA1LjM2OTUzNzU2N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzU4MDAwMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGBicGZfcmVmY291bnRfYWNxdWlyZWAgYW5kIHRoZSBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGtmdW5jIGFyZ3VtZW50LiBJdCBzZWVtcyB0aGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgdGhhdCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGV4cGVjdHMgYSBwb2ludGVyIHRvIHRoZSAqb2JqZWN0KiB0aGF0IGNvbnRhaW5zIHRoZSBgYnBmX3JlZmNvdW50YCBmaWVsZC4gSWYgeW91IGdpdmUgaXQgYSBwb2ludGVyIHdpdGggYSBub24temVybyBmaXhlZCBvZmZzZXQsIGxpa2UgdG8gYW4gaW5uZXIgZmllbGQgd2l0aGluIGEgc3RydWN0LCB0aGluZ3MgZ28gc291dGguIFNwZWNpZmljYWxseSwgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCB3b3VsZCBpbmNvcnJlY3RseSB0cmVhdCB0aGUgb2Zmc2V0dGVkIHBvaW50ZXIgYXMgdGhlIGJhc2Ugb2YgdGhlIG9iamVjdCwgd2hpY2ggbGVhZHMgdG8gcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uIOKAkyBjbGFzc2ljIHZ1bG5lcmFiaWxpdHkgc3R1ZmYuXG5cblRoZSB0ZXN0IGNhc2UgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jYCByZWFsbHkgaWxsdXN0cmF0ZXMgdGhpcy4gSXQncyBjYWxsaW5nIGBicGZfcmVmY291bnRfYWNxdWlyZWAgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGBsaXN0YCBmaWVsZCAqaW5zaWRlKiB0aGUgYHN0cnVjdCBub2RlX3JlZmNvdW50ZWRgLCBzcGVjaWZpY2FsbHkgYGxpc3Rfbm9kZWAsIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBiYXNlIGBub2RlYCBzdHJ1Y3QuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nLiBCeSBlbmZvcmNpbmcgYFBUUl9aRVJPX09GRmAgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAsIHRoZSB2ZXJpZmllciBub3cgZW5zdXJlcyB0aGF0IHRoZSBwb2ludGVyIHBhc3NlZCB0byB0aGUga2Z1bmMgKm11c3QqIHBvaW50IHRvIHRoZSBzdGFydCBvZiB0aGUgb2JqZWN0LCBwcmV2ZW50aW5nIHRoaXMgaW5jb3JyZWN0IGludGVycHJldGF0aW9uLlxuXG5UaGlzIGlzIGEgY3JpdGljYWwgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiB2ZXJpZmllciBiZWNhdXNlIGl0J3MgcHJldmVudGluZyBhIGNsYXNzIG9mIGJ1Z3MgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0J3MgYSBzZWN1cml0eSBpbXByb3ZlbWVudCwgcGxhaW4gYW5kIHNpbXBsZS5cblxuQW5kIHRoaXMgaXMgYWxsIHJlbGV2YW50IGJlY2F1c2UgdGhlIEJQRiB2ZXJpZmllciBpcyByZWFjaGFibGUgYnkgdXNlcnMgd2l0aCBgQ0FQX0JQRmAgb3IgYENBUF9TWVNfQURNSU5gLCBhbmQgaW4gc29tZSBjYXNlcywgZXZlbiB1bnByaXZpbGVnZWQgdXNlcnMgd2hlbiB1bnByaXZpbGVnZWQgQlBGIGlzIGVuYWJsZWQuIFNpbmNlIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgYSBrZnVuYywgbG9hZGVkIHByb2dyYW1zIHVzaW5nIGl0IHVzdWFsbHkgbmVlZCBwcml2aWxlZ2VzLCBzbyB0aGlzIGZpeCBoZWxwcyBhdm9pZCBhIG1vcmUgc2VyaW91cyBwcm9ibGVtLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgaXMgdGhlIG9ubHkga2Z1bmMgdXNpbmcgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYC4gRGVmaW5pdGVseSB3b3J0aCBjaGVja2luZywgYW5kIGZ1enppbmcgdGhlIHZlcmlmaWVyIGlzIGEgZ29vZCBpZGVhIGdpdmVuIGhvdyBpbXBvcnRhbnQgaXRzIHJvbGUgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDE1OjI1OjE1LjEyNzU0MDU4OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1MzM5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0clwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA3MzU9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3VuaW5pdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDczOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA3NDA6c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA3NDEte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjM4PWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyNzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjcxOlxcdGlmIChpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjcyLVxcdFxcdHJldHVybiBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjU6MTUuMTg2MDc4NzU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDYwNTg2NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXNfa2Z1bmNfYXJnX3JlZmNvdW50ZWRfa3B0cmAgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCB0aGUgbmFtZSBpdHNlbGYgaXMgaW5mb3JtYXRpdmUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGRldGVybWluZSBpZiBhIGtlcm5lbCBmdW5jdGlvbiBhcmd1bWVudCwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBwb2ludGVyIChga3B0cmApLCBpcyBhc3NvY2lhdGVkIHdpdGggc29tZSBmb3JtIG9mIHJlZmVyZW5jZSBjb3VudGluZy4gVGhlIFwia1wiIHByZWZpeCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIGtlcm5lbC1zcGVjaWZpYywgd2hpY2ggcHJvYmFibHkgbWVhbnMgd2UncmUgbG9va2luZyBhdCBpbnRlcm5hbHMgb3IgYSBsZXZlbCBiZW5lYXRoIHN0YW5kYXJkIGxpYmMgb3BlcmF0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgZHJhd24gdG8gaG93IHRoaXMgbWlnaHQgYmUgaW1wbGVtZW50ZWQuIEFyZSB3ZSBjaGVja2luZyBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGBrcHRyYCBpdHNlbGY/IERvZXMgaXQgaW52b2x2ZSBsb29raW5nIHVwIGluZm9ybWF0aW9uIGluIGEga2VybmVsLW1hbmFnZWQgZGF0YSBzdHJ1Y3R1cmUsIHBlcmhhcHMgYSB0YWJsZSBvciBoYXNobWFwLCB3aGVyZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIHN0YXR1cyBpcyB0cmFja2VkIGZvciBvYmplY3RzIG1hbmFnZWQgYnkgdGhlIGtlcm5lbD8gQWx0ZXJuYXRpdmVseSwgY291bGQgaXQgYmUgcGFyc2luZyB0aGUgZnVuY3Rpb24ncyBzaWduYXR1cmUgYW5kIGNvbXBhcmluZyB0aGUgcG9pbnRlcidzIGF0dHJpYnV0ZXM/IElzIHRoZXJlIGFuIGF0dHJpYnV0ZSBvciBmbGFnIHNldCBmb3IgcG9pbnRlciB2YXJpYWJsZXM/XG5cbkknbSBpbnN0YW50bHkgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGluZm9ybWF0aW9uLiBJZiB3ZSBrbm93IGFuIGFyZ3VtZW50IGlzIHJlZmVyZW5jZS1jb3VudGVkLCBpdCBnaXZlcyB1cyB2aXRhbCBjbHVlcyBhYm91dCBob3cgdG8gaGFuZGxlIHRoZSBhcmd1bWVudC4gV2UnZCBrbm93IHdoZXRoZXIgd2UgbmVlZCB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgd2hlbiBwYXNzaW5nIG9yIHJlY2VpdmluZyB0aGUgcG9pbnRlciwgdG8gYXZvaWQgbWVtb3J5IGxlYWtzIG9yIGRvdWJsZSBmcmVlcy4gVW5kZXJzdGFuZGluZyB0aGlzIGFzcGVjdCB3b3VsZCBhbHNvIGFsbG93IGZvciBmdXJ0aGVyIG9wdGltaXNhdGlvbiBvciBidWctZGV0ZWN0aW9uLiBJcyB0aGlzIGZ1bmN0aW9uIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHRoaW5ncyBsaWtlIGF1dG9tYXRpYyByZXNvdXJjZSBtYW5hZ2VtZW50LCBzYWZldHkgY2hlY2tzLCBvciBwZXJoYXBzIGV2ZW4gaW4gYSB0b29sIGxpa2UgYSBzdGF0aWMgYW5hbHl6ZXI/XG5cbk15IG1pbmQgaXMgbm93IHJhY2luZyB0aHJvdWdoIHBvc3NpYmxlIHVzZSBjYXNlcywgbGlrZSBtYW5hZ2luZyBtZW1vcnkgdXNlZCBieSBkcml2ZXJzLCBtb2R1bGVzLCBhbmQgbWF5YmUgZXZlbiB3aXRoaW4gY29yZSBrZXJuZWwgY29tcG9uZW50cy4gSSB3b25kZXIgd2hhdCBzcGVjaWZpYyBzY2VuYXJpb3MgdHJpZ2dlciB0aGUgbmVlZCBmb3IgdGhpcyBraW5kIG9mIGNoZWNrOyBhcmUgdGhlcmUgY29tbW9uIG9yIGNvbXBsZXggdXNlIGNhc2VzPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIHBpdGZhbGxzIGluIHRlcm1zIG9mIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGlmIHJlZmVyZW5jZSBjb3VudGluZyBpcyBub3QgaW1wbGVtZW50ZWQgY29ycmVjdGx5LiBUaGlzIHdvdWxkIGFsbCBiZSBjcml0aWNhbCB0byBjb25zaWRlciBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNToyNS4yNDY2NjgzMzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDczNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3MzU6XFx0c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3VuaW5pdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4xMDczNjpcXHR7XFxuMTA3Mzc6XFx0XFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX3VuaW5pdFxcXCIpO1xcbjEwNzM4OlxcdH1cXG4xMDczOTpcXHRcXG4xMDc0MDpcXHRzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbjEwNzQxOlxcdHtcXG4xMDc0MjpcXHRcXHRyZXR1cm4gYnRmX3BhcmFtX21hdGNoX3N1ZmZpeChidGYsIGFyZywgXFxcIl9fcmVmY291bnRlZF9rcHRyXFxcIik7XFxuMTA3NDM6XFx0fVxcbjEwNzQ0OlxcdFxcbjEwNzQ1OlxcdHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19udWxsYWJsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4xMDc0NjpcXHR7XFxuMTA3NDc6XFx0XFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX251bGxhYmxlXFxcIik7XFxuMTA3NDg6XFx0fVxcbjEwNzQ5OlxcdFxcbjEwNzUwOlxcdHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19ub25vd25fYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG4xMDc1MTpcXHR7XFxuMTA3NTI6XFx0XFx0cmV0dXJuIGJ0Zl9wYXJhbV9tYXRjaF9zdWZmaXgoYnRmLCBhcmcsIFxcXCJfX25vbm93bl9hbGxvd2VkXFxcIik7XFxuMTA3NTM6XFx0fVxcbjEwNzU0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNToyNS4yNDczMDczMjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwNDgzODExNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBfX3JlZmNvdW50ZWRfa3B0cmAgU3VmZml4IGluIEtlcm5lbCBGdW5jdGlvbiBBcmd1bWVudHMqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJdCBsb29rcyBsaWtlIHRoZSBjb2RlIGlzIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgc3VmZml4IGBfX3JlZmNvdW50ZWRfa3B0cmAuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoaW5raW5nIGFib3V0IHdoZXJlIHRoaXMgc3VmZml4IGlzIGFjdHVhbGx5ICp1c2VkKi4gTXkgaW5zdGluY3QgaXMgdG8gdHJhY2UgYmFjayB0aGUgdXNhZ2Ugb2YgdGhpcyBzcGVjaWZpYyBzdWZmaXggaW4ga2Z1bmMgYXJndW1lbnRzLiBVbmRlcnN0YW5kaW5nIGhvdyBhbmQgd2hlcmUgYF9fcmVmY291bnRlZF9rcHRyYCBpcyBlbXBsb3llZCB3aWxsIHRlbGwgbWUgaG93IHRoZSBrZXJuZWwgaXMgbWFuYWdpbmcgcmVmZXJlbmNlLWNvdW50ZWQgcG9pbnRlcnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRob3NlIGZ1bmN0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEZyb20gdGhhdCwgSSBjYW4gcXVpY2tseSBkZWR1Y2UgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIHRoZSBmdW5jdGlvbnMgaW4gcmVsYXRpb24gdG8gdGhpcyB0eXBlIG9mIHBvaW50ZXIuIEl0IHdvdWxkIGJlIGFuIGludGVyZXN0aW5nIHRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTA2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNTozNi4yOTU2OTA5NDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjY1NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcmVmY291bnRlZF9rcHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTI0NDk9X19icGZfa2Z1bmMgdm9pZCBicGZfcGVyY3B1X29ial9kcm9wX2ltcGwodm9pZCAqcF9fYWxsb2MsIHZvaWQgKm1ldGFfX2lnbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTUtICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTY6ICogQHBfX3JlZmNvdW50ZWRfa3B0cjogbm9uLW93bmluZyBsb2NhbCBrcHRyXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1Ny0gKiBAbWV0YTogdmVyaWZpZXItc3VwcGxpZWQgc3RydWN0IG1ldGFkYXRhXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1OC0gKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTk6ICogSW5jcmVtZW50IHRoZSByZWZjb3VudCBmb3IgQHBfX3JlZmNvdW50ZWRfa3B0ci4gVGhlIHZlcmlmaWVyIHJld3JpdGVzXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2MC0gKiBAbWV0YTsgQlBGIHByb2dyYW1zIGRvIG5vdCBzZXQgaXQuXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2MS0gKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NjI6ICogUmV0dXJuOiBPd25pbmcgcmVmZXJlbmNlIHRvIEBwX19yZWZjb3VudGVkX2twdHIsIG9yICVOVUxMIG9uIGZhaWx1cmUuXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2My0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDY0Ol9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzAtXFx0ICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ3MTpcXHRyZWYgPSAoc3RydWN0IGJwZl9yZWZjb3VudCAqKShwX19yZWZjb3VudGVkX2twdHIgKyBtZXRhLVxcdTAwM2VyZWNvcmQtXFx1MDAzZXJlZmNvdW50X29mZik7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ3Mi1cXHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygocmVmY291bnRfdCAqKXJlZikpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDc3LVxcdCAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0Nzg6XFx0cmV0dXJuICh2b2lkICopcF9fcmVmY291bnRlZF9rcHRyO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NzktfVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODAtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODM6XFx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDc0MD1zdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfcmVmY291bnRlZF9rcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDc0MS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNzQyOlxcdHJldHVybiBidGZfcGFyYW1fbWF0Y2hfc3VmZml4KGJ0ZiwgYXJnLCBcXFwiX19yZWZjb3VudGVkX2twdHJcXFwiKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA3NDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNTozNi4zODE5NjA2MTJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyNjA4ODY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFJlZmNvdW50IEFjcXVpc2l0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGFuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbGAg4oCTIHRob3NlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy4gVGhlIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbiBsaWVzIGluIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGNoZWNrX2tmdW5jX2FyZ3NgIGFuZCBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGFkZGluZyBlbmZvcmNlbWVudCBvZiBgUFRSX1pFUk9fT0ZGYCB3aGVuIGRlYWxpbmcgd2l0aCBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLCBhbmQgZnJhbmtseSwgYW55dGhpbmcgdGhhdCBtb2RpZmllcyB0aGUgdmVyaWZpZXIgbGlrZSB0aGlzIHNjcmVhbXMgXCJmdXp6aW5nIG9wcG9ydHVuaXR5LlwiIFdlIG5lZWQgdG8gcmVhbGx5IHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZSBjbGVhcmx5OiBgY2hlY2tfa2Z1bmNfYXJnc2AsIGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYCwgYWxvbmcgd2l0aCB0aG9zZSByZWZjb3VudCBmdW5jdGlvbnMsIGBicGZfcmVmY291bnRfYWNxdWlyZWAsIGFuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIOKAkyBgQlBGX1NZU0NBTExgIGFuZCBgREVCVUdfSU5GT19CVEZgIHNlZW0gbGlrZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGluZmx1ZW5jaW5nIHRoaXMgYXJlYS4gTWlnaHQgYmUgd29ydGggc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvbiBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLCB0byBzZWUgaWYgdGhlcmUncyBhbnkgdW51c3VhbCBiZWhhdmlvciB3aGVuIGl0J3MgZW5hYmxlZCBvciBkaXNhYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjU6NDIuOTA4MDUxOTkzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTA3MjI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmVmY291bnRfYWNxdWlyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsKHZvaWQgKnBfX2FsbG9jLCB2b2lkICptZXRhX19pZ24pXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDU0LS8qKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTU6ICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTYtICogQHBfX3JlZmNvdW50ZWRfa3B0cjogbm9uLW93bmluZyBsb2NhbCBrcHRyXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDYzLSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NjQ6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmUodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCBzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICptZXRhKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjUte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4MC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgxOl9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCB2b2lkICptZXRhX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4Mi17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MzpcXHRyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUocF9fcmVmY291bnRlZF9rcHRyLCBtZXRhX19pZ24pO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODQtfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDgxMz1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsLCBLRl9SRUxFQVNFKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UgfCBLRl9JTVBMSUNJVF9BUkdTKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1JDVSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODE2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250LCBLRl9JTVBMSUNJVF9BUkdTKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNTo0Mi45OTMxNTk2NDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4OTAxMzU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQlBGIEhlbHBlciBGdW5jdGlvbiBMb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGh1bmNoIHBvaW50cyB0b3dhcmRzIGBrZXJuZWwvYnBmL2hlbHBlcnMuY2AuIFRoYXQgc2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhhdCdzIHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIEJQRiBoZWxwZXIgZnVuY3Rpb25hbGl0eSB0eXBpY2FsbHkgcmVzaWRlcy4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGF0IGZpbGUsIEkgc2hvdWxkIHJlYWxseSBjb25maXJtIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBNeSBndXQgc2F5cyBpdCdzIGNvbmRpdGlvbmFsLCBwcm9iYWJseSBkZXBlbmRlbnQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgYmVpbmcgZW5hYmxlZCwgYnV0IGEgcXVpY2sgY2hlY2sgb2YgdGhlIE1ha2VmaWxlIGZvciBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IG1vdmUuIEkgbmVlZCB0byBrbm93IHVuZGVyIHdoYXQgZXhhY3QgY2lyY3Vtc3RhbmNlcyB0aGF0IGNvZGUgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgYWx3YXlzIGJlc3QgcHJhY3RpY2UgdG8gdmVyaWZ5IGJ1aWxkIGRlcGVuZGVuY2llcyBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBhcyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvZGUgY2FuIHNoaWZ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk4NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDE1OjI1OjQ4Ljc4MjE3Njg5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2NTUyNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhlbHBlcnMub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMTU6MjU6NTAuMjU4NzM5MTM0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTE0MDUxODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgRml4IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIHRoYXQncyB0aGUgZm91bmRhdGlvbiBoZXJlLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgY29uZmlndXJhdGlvbiBmbGFncyBpbnZvbHZlZCwganVzdCB0byBiZSB0aG9yb3VnaC4gSSdtIHNlZWluZyB0aGF0IHRoZSB0ZXN0IGNhc2UgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jYCB1c2VzIGBicGZfcmVmY291bnRfYWNxdWlyZWAsIGluZGljYXRpbmcgdGhpcyBpcyBhIGZ1bmRhbWVudGFsIEJQRiBjYXBhYmlsaXR5LCBhbmQgdGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuXG5cbk5vdywgbGV0J3MgZGlzdGlsbCB0aGlzIGRvd246IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSB2dWxuZXJhYmlsaXR5IGluIHRoZSBCUEYgdmVyaWZpZXIgcmVsYXRlZCB0byBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCdzIHVzZWQgd2l0aCBwb2ludGVycyB0aGF0IGhhdmUgbm9uLXplcm8gZml4ZWQgb2Zmc2V0cy4gVGhpcyBjb3VsZCBsZWFkIHRvIGVpdGhlciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Mgb3IgY29ycnVwdGlvbi4gVGhlIGZpeCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiB0eXBlIGZsYWcsIGBQVFJfWkVST19PRkZgLCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLlxuXG5NeSBjb3JlIGZvY3VzIHN5bWJvbHMgYXJlIGdvaW5nIHRvIGJlIGBjaGVja19rZnVuY19hcmdzYCBhbmQgYGNoZWNrX2Z1bmNfYXJnX3JlZ19vZmZgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiB0aG9zZSBmdW5jdGlvbnMsIHRvIGJlIHN1cmUgSSBhbSBjb3JyZWN0LCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gWWVzLCB0aGV5IGFyZSBzdGF0aWMsIGJ1dCBjcml0aWNhbGx5LCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBtb2RpZmllZCBpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmdXp6aW5nIHRoZSBjb3JyZWN0IGZ1bmN0aW9ucy4gQWhhLCBgX19jaGVja19wdHJfb2ZmX3JlZ2AgaXMgY2FsbGVkIGJ5IGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGNvcnJlY3QsIGBjaGVja19mdW5jX2FyZ19yZWdfb2ZmYCBhbmQgYGNoZWNrX2tmdW5jX2FyZ3NgIGFyZSBkZWZpbml0ZWx5IG9uIHRoZSByaWdodCB0cmFjay4gSSBhbHNvIHNlZSB0aGF0IGBjaGVja19rZnVuY19hcmdzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGZpbmU7IFN5emthbGxlciBjYW4gc3RpbGwgaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmUgcmVhY2hhYmxlLiBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGJ1dCB0aGF0IGlzIGEgaG90IHBhdGggLSBJIHdvdWxkIHJhdGhlciBsb29rIGF0IGEgbW9yZSBzcGVjaWZpYyB0YXJnZXQuXG5cbmBjaGVja19rZnVuY19hcmdzYCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBrZnVuYyBpcyBjYWxsZWQuIFRoYXQgbWFrZXMgaXQgc3BlY2lmaWMgZW5vdWdoLiBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAgaXMgYSBiaXQgYnJvYWRlciwgYXMgaXQncyBjYWxsZWQgZm9yIHZhcmlvdXMgYXJndW1lbnRzLCBidXQgc3RpbGwgc3BlY2lmaWMgZW5vdWdoIGZvciB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uXG5cbkkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGRpYWxlZCBpbiB0aGUgY29ycmVjdCB0YXJnZXRzLlxuXG5MZXQncyByZWZpbmUgdGhlIEZvY3VzU3ltYm9scyB0bzpcbiogICBgY2hlY2tfa2Z1bmNfYXJnc2BcbiogICBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmBcblxuTm93LCBsZXQncyBjb25zaWRlciBpZiBgY2hlY2tfZnVuY19hcmdfcmVnX29mZmAgaXMgYSBob3QgcGF0aC4gSXQncyBjYWxsZWQgZm9yIGV2ZXJ5IGZ1bmN0aW9uIGFyZ3VtZW50IGluIEJQRiBwcm9ncmFtcywgd2hpY2ggbWVhbnMgaXQgbWF5IGJlIHF1aXRlIGhvdCwgYnV0IGl0J3MgZGlyZWN0bHkgbW9kaWZpZWQsIHNvIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBvcHRpb25zLiBgY2hlY2tfa2Z1bmNfYXJnc2AgaXMgYmV0dGVyOyBrZnVuYyBjYWxscyBhcmUgbGVzcyBmcmVxdWVudCB0aGFuIGdlbmVyYWwgaGVscGVyIGNhbGxzLCBtYWtpbmcgaXQgYSBiZXR0ZXIgdGFyZ2V0LiBJIHN0aWxsIHdhbnQgdG8ga2VlcCB0aGUgb3RoZXIgb25lLCBob3dldmVyLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDAzLCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQxNToyNjowMC4zNzI3OTMyMjhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODA4ODQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19rZnVuY19hcmdzXCIsXG4gICAgXCJjaGVja19mdW5jX2FyZ19yZWdfb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciB3aGVyZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciBoYXZpbmcgYSBub24temVybyBmaXhlZCBvZmZzZXQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIEl0IGludHJvZHVjZXMgYSBuZXcgQlBGIHR5cGUgZmxhZyBgUFRSX1pFUk9fT0ZGYCBhbmQgZW5mb3JjZXMgaXQgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2hlY2tfa2Z1bmNfYXJnc1wiLFxuICAgIFwiY2hlY2tfZnVuY19hcmdfcmVnX29mZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIgd2hlcmUgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgaGF2aW5nIGEgbm9uLXplcm8gZml4ZWQgb2Zmc2V0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiB0eXBlIGZsYWcgYFBUUl9aRVJPX09GRmAgYW5kIGVuZm9yY2VzIGl0IGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowmbhgq[1] Phase: Succeeded StartedAt: 2026-06-20 15:26:09 +0000 UTC FinishedAt: 2026-06-20 15:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-20 15:26:09 +0000 UTC FinishedAt: 2026-06-20 15:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2] Phase: Succeeded StartedAt: 2026-06-20 15:26:09 +0000 UTC FinishedAt: 2026-06-20 19:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-20 15:26:09 +0000 UTC FinishedAt: 2026-06-20 19:18:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-20 15:26:09 +0000 UTC FinishedAt: 2026-06-20 15:26:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-20 15:26:09 +0000 UTC FinishedAt: 2026-06-20 15:26:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowmbhgq/series-workflowmbhgq-convert-artifact-250760/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-20 15:26:19 +0000 UTC FinishedAt: 2026-06-20 15:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-20 15:26:19 +0000 UTC FinishedAt: 2026-06-20 15:47:47 +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:*d70f8c20-68d1-4b03-8f4d-fa317de0548f,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-workflowmbhgq/series-workflowmbhgq-convert-artifact-250760/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": "925068c7-3039-4d39-9aac-1b3411dcc512", "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-workflowmbhgq/series-workflowmbhgq-build-action-2758651390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-20 15:26:19 +0000 UTC FinishedAt: 2026-06-20 15:47:37 +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:*d70f8c20-68d1-4b03-8f4d-fa317de0548f,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-workflowmbhgq/series-workflowmbhgq-convert-artifact-250760/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": "925068c7-3039-4d39-9aac-1b3411dcc512", "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-workflowmbhgq/series-workflowmbhgq-build-action-2758651390/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-20 15:47:47 +0000 UTC FinishedAt: 2026-06-20 15:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-20 15:47:47 +0000 UTC FinishedAt: 2026-06-20 15:47:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-20 15:47:47 +0000 UTC FinishedAt: 2026-06-20 15:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-20 15:47:47 +0000 UTC FinishedAt: 2026-06-20 15:47:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowmbhgq/series-workflowmbhgq-convert-artifact-2390010735/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-20 15:47:57 +0000 UTC FinishedAt: 2026-06-20 15:50:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-20 15:47:57 +0000 UTC FinishedAt: 2026-06-20 15:50:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*925068c7-3039-4d39-9aac-1b3411dcc512,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-workflowmbhgq/series-workflowmbhgq-build-action-2758651390/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-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-20 15:50:47 +0000 UTC FinishedAt: 2026-06-20 15:50:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-20 15:50:47 +0000 UTC FinishedAt: 2026-06-20 15:50:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-20 15:50:47 +0000 UTC FinishedAt: 2026-06-20 16:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-20 15:50:47 +0000 UTC FinishedAt: 2026-06-20 16:14:39 +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:*d70f8c20-68d1-4b03-8f4d-fa317de0548f,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-workflowmbhgq/series-workflowmbhgq-convert-artifact-2390010735/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": "808c51e3-7a28-4713-baea-01a48495e5d0", "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-workflowmbhgq/series-workflowmbhgq-build-action-3683917571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-20 15:50:47 +0000 UTC FinishedAt: 2026-06-20 16:14:29 +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:*d70f8c20-68d1-4b03-8f4d-fa317de0548f,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-workflowmbhgq/series-workflowmbhgq-convert-artifact-2390010735/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": "808c51e3-7a28-4713-baea-01a48495e5d0", "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-workflowmbhgq/series-workflowmbhgq-build-action-3683917571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-20 16:14:39 +0000 UTC FinishedAt: 2026-06-20 16:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-20 16:14:39 +0000 UTC FinishedAt: 2026-06-20 16:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-20 16:14:39 +0000 UTC FinishedAt: 2026-06-20 16:16:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-20 16:14:39 +0000 UTC FinishedAt: 2026-06-20 16:16:08 +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:*808c51e3-7a28-4713-baea-01a48495e5d0,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-workflowmbhgq/series-workflowmbhgq-build-action-3683917571/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-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-20 16:16:18 +0000 UTC FinishedAt: 2026-06-20 19:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-20 16:16:18 +0000 UTC FinishedAt: 2026-06-20 19:18:49 +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_kfunc_args","check_func_arg_reg_off"],"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:*925068c7-3039-4d39-9aac-1b3411dcc512,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*808c51e3-7a28-4713-baea-01a48495e5d0,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-workflowmbhgq/series-workflowmbhgq-build-action-2758651390/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-workflowmbhgq/series-workflowmbhgq-build-action-3683917571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-20 16:16:18 +0000 UTC FinishedAt: 2026-06-20 16:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-20 16:16:18 +0000 UTC FinishedAt: 2026-06-20 16:16:25 +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_kfunc_args","check_func_arg_reg_off"],"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-workflowmbhgq/series-workflowmbhgq-convert-artifact-1222852136/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-20 16:16:18 +0000 UTC FinishedAt: 2026-06-20 16:16:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-20 16:16:18 +0000 UTC FinishedAt: 2026-06-20 16:16:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-20 16:16:18 +0000 UTC FinishedAt: 2026-06-20 16:16:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-20 16:16:28 +0000 UTC FinishedAt: 2026-06-20 19:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmbhgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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_kfunc_args","check_func_arg_reg_off"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a381355c-2cdc-49f0-b397-5f9262bc9ede","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-20 16:16:28 +0000 UTC FinishedAt: 2026-06-20 19:18:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*925068c7-3039-4d39-9aac-1b3411dcc512,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*808c51e3-7a28-4713-baea-01a48495e5d0,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-workflowmbhgq/series-workflowmbhgq-build-action-2758651390/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-workflowmbhgq/series-workflowmbhgq-build-action-3683917571/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-workflowmbhgq/series-workflowmbhgq-convert-artifact-1222852136/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,}