Name: series-workflow7r5nk Phase: Succeeded StartedAt: 2026-07-16 08:01:28 +0000 UTC FinishedAt: 2026-07-16 10:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[0] Phase: Succeeded StartedAt: 2026-07-16 08:01:28 +0000 UTC FinishedAt: 2026-07-16 08:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 08:01:28 +0000 UTC FinishedAt: 2026-07-16 08:45:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "BPF_SYSCALL" ], "series_id": "b470d491-e052-4f91-8230-3549a6d4ca9b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bpf_iter_unix_realloc_batch", "bpf_iter_unix_batch", "bpf_iter_init_unix" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfdW5peF9iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl9pbml0X3VuaXgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMga3ZtYWxsb2Mgd2l0aCBrdm1hbGxvY19hcnJheSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgZHVyaW5nIGFsbG9jYXRpb24gb2YgdGhlIEJQRiBpdGVyYXRvciBiYXRjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgVU5JWCBzb2NrZXQgQlBGIGl0ZXJhdG9ycywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCB3b3JrcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmN2U1MDM0NDlhYjBkYzM1ZTkyZGZkZTJjY2MzNzkxOGQ3NGM5ZWUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDg6NDI6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jXG5pbmRleCBmN2E5ZDU1ZWVlOGExMi4uNjY2NGVhZDQ2MjE2OWYgMTAwNjQ0XG4tLS0gYS9uZXQvdW5peC9hZl91bml4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC91bml4L2FmX3VuaXguY1xuQEAgLTM2NTksOCAmIzQzOzM2NTksOCBAQCBzdGF0aWMgaW50IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcixcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqKm5ld19iYXRjaDtcbiBcbi1cdG5ld19iYXRjaCA9IGt2bWFsbG9jKHNpemVvZigqbmV3X2JhdGNoKSAqIG5ld19iYXRjaF9zeixcbi1cdFx0XHQgICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbiYjNDM7XHRuZXdfYmF0Y2ggPSBrdm1hbGxvY19hcnJheShuZXdfYmF0Y2hfc3osIHNpemVvZigqbmV3X2JhdGNoKSxcbiYjNDM7XHRcdFx0XHQgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4gXHRpZiAoIW5ld19iYXRjaClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl91bml4X2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX2luaXRfdW5peCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBrdm1hbGxvYyB3aXRoIGt2bWFsbG9jX2FycmF5IHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbiBvZiB0aGUgQlBGIGl0ZXJhdG9yIGJhdGNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBVTklYIHNvY2tldCBCUEYgaXRlcmF0b3JzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IHdvcmtzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjdlNTAzNDQ5YWIwZGMzNWU5MmRmZGUyY2NjMzc5MThkNzRjOWVlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDA4OjQyOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IGY3YTlkNTVlZWU4YTEyLi42NjY0ZWFkNDYyMTY5ZiAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMzY1OSw4ICYjNDM7MzY1OSw4IEBAIHN0YXRpYyBpbnQgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoKHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyLAogewogCXN0cnVjdCBzb2NrICoqbmV3X2JhdGNoOwogCi0JbmV3X2JhdGNoID0ga3ZtYWxsb2Moc2l6ZW9mKCpuZXdfYmF0Y2gpICogbmV3X2JhdGNoX3N6LAotCQkJICAgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7CiYjNDM7CW5ld19iYXRjaCA9IGt2bWFsbG9jX2FycmF5KG5ld19iYXRjaF9zeiwgc2l6ZW9mKCpuZXdfYmF0Y2gpLAomIzQzOwkJCQkgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKCFuZXdfYmF0Y2gpCiAJCXJldHVybiAtRU5PTUVNOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBVbml4IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3VuaXgvYWZfdW5peC5jYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgc3dpdGNoZWQgZnJvbSB1c2luZyBga3ZtYWxsb2NgIHRvIGBrdm1hbGxvY19hcnJheWAgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgYSBuZXcgYmF0Y2gsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBga3ZtYWxsb2Moc2l6ZW9mKCpuZXdfYmF0Y2gpICogbmV3X2JhdGNoX3N6LCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTilgIHRvIGBrdm1hbGxvY19hcnJheShuZXdfYmF0Y2hfc3osIHNpemVvZigqbmV3X2JhdGNoKSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pYC4gRnVuY3Rpb25hbGx5LCBpdCYjMzk7cyB0aGUgc2FtZSwgcmlnaHQ/IE5vLCB3YWl0Li4uIGl0JiMzOTtzIGEgKnNpZ25pZmljYW50KiBpbXByb3ZlbWVudCBmb3Igcm9idXN0bmVzcywgcHJpbWFyaWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGluIHRoZSBhbGxvY2F0aW9uIHNpemUgY2FsY3VsYXRpb24uIEdvb2QgY2F0Y2guCgpCdXQsIGRvZXMgdGhpcyBjaGFuZ2UgYWx0ZXIgdGhlIGFjdHVhbCBleGVjdXRpb24gZmxvdz8gVXNpbmcgYGt2bWFsbG9jX2FycmF5YCBpbnN0ZWFkIG9mIGp1c3QgYGt2bWFsbG9jYCBjb3VsZCBoYXZlIHN1YnRsZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGhvdyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBpcyB1c2VkIGluIHRoaXMgZmlsZS4uLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhIGJpdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9MzY1MT1zdGF0aWMgdm9pZCBicGZfaXRlcl91bml4X3B1dF9iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcilcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzY1Ni1cbm5ldC91bml4L2FmX3VuaXguYzozNjU3OnN0YXRpYyBpbnQgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoKHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyLFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTgtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG5ld19iYXRjaF9zeilcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MzY3NT1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM3MDEtXG5uZXQvdW5peC9hZl91bml4LmM6MzcwMjpcdGlmICghcmVzaXplZCBcdTAwMjZcdTAwMjYgIWJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBleHBlY3RlZCAqIDMgLyAyKSkge1xubmV0L3VuaXgvYWZfdW5peC5jLTM3MDMtXHRcdHJlc2l6ZWQgPSB0cnVlO1xuLS1cbm5ldC91bml4L2FmX3VuaXguYz0zODY3PXN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF91bml4KHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM4NzUtXG5uZXQvdW5peC9hZl91bml4LmM6Mzg3NjpcdGVyciA9IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBJTklUX0JBVENIX1NaKTtcbm5ldC91bml4L2FmX3VuaXguYy0zODc3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIEl0ZXJhdG9yIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIG91dCBga3ZtYWxsb2NgIGZvciBga3ZtYWxsb2NfYXJyYXlgLiBIbW0sIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIGl0JiMzOTtzIGJhc2ljYWxseSBhIGZ1bmN0aW9uIHJlcGxhY2VtZW50LiBJIHNlZSB0aGF0IGBrdm1hbGxvY19hcnJheWAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBkb2luZyBhIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93IGNoZWNrIGJlZm9yZSBjYWxsaW5nIHRoZSBvbGQgYGt2bWFsbG9jYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlLCBidXQgaG93IHNpZ25pZmljYW50PyBMZXQmIzM5O3MgZmlndXJlIG91dCBpZiBpdCYjMzk7cyB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQuCgpSaWdodCwgdGhlIGNoYW5nZSBpcyBpbiBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gQWgsIHRoYXQgcmluZ3MgYSBiZWxsISBUaGlzIGlzIHBhcnQgb2YgQlBGIGl0ZXJhdG9ycyBmb3IgdW5peCBzb2NrZXRzLiBUbyBwcm9wZXJseSB0ZXN0IHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBMZXQgbWUgc2VlLi4uIEkmIzM5O20gZ3Vlc3Npbmcgd2UmIzM5O2xsIG5lZWQgYENPTkZJR19VTklYYCBmb3Igb2J2aW91cyByZWFzb25zLCBhbmQgcHJvYmFibHkgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG9vLCBnaXZlbiBpdHMgY29ubmVjdGlvbiB0byBCUEYuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBCUEYgY29uZmlnIGRlcGVuZGVuY3kg4oCTIGEgcXVpY2sgc2VhcmNoIGluIGBuZXQvdW5peC9hZl91bml4LmNgIGZvciBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgc2hvdWxkIGNvbmZpcm0gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYz0xMDYwPXN0cnVjdCBwcm90byB1bml4X2RncmFtX3Byb3RvID0ge1xuLS1cbm5ldC91bml4L2FmX3VuaXguYy0xMDY1LVx0LmJwZl9ieXBhc3NfZ2V0c29ja29wdFx0PSB1bml4X2JwZl9ieXBhc3NfZ2V0c29ja29wdCxcbm5ldC91bml4L2FmX3VuaXguYzoxMDY2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC91bml4L2FmX3VuaXguYy0xMDY3LVx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHVuaXhfZGdyYW1fYnBmX3VwZGF0ZV9wcm90byxcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MTA3MT1zdHJ1Y3QgcHJvdG8gdW5peF9zdHJlYW1fcHJvdG8gPSB7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTEwNzYtXHQuYnBmX2J5cGFzc19nZXRzb2Nrb3B0XHQ9IHVuaXhfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFxubmV0L3VuaXgvYWZfdW5peC5jOjEwNzc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L3VuaXgvYWZfdW5peC5jLTEwNzgtXHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcdD0gdW5peF9zdHJlYW1fYnBmX3VwZGF0ZV9wcm90byxcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MjY3MD1zdGF0aWMgaW50IHVuaXhfZGdyYW1fcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0yNjc0LVxubmV0L3VuaXgvYWZfdW5peC5jOjI2NzU6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L3VuaXgvYWZfdW5peC5jLTI2NzYtXHRjb25zdCBzdHJ1Y3QgcHJvdG8gKnByb3QgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCk7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTMxNDA9c3RhdGljIGludCB1bml4X3N0cmVhbV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzE1MC1cbm5ldC91bml4L2FmX3VuaXguYzozMTUxOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC91bml4L2FmX3VuaXguYy0zMTUyLVx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2Vzaztcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MzU5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHVuaXhfc2VxX29wcyA9IHtcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzU5OC1cbm5ldC91bml4L2FmX3VuaXguYzozNTk5OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC91bml4L2FmX3VuaXguYy0zNjAwLXN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlIHtcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9Mzg1Nj1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHVuaXhfbmV0X29wcyA9IHtcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzg2MC1cbm5ldC91bml4L2FmX3VuaXguYzozODYxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvdW5peC9hZl91bml4LmMtMzg2Mi1ERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MzkzMz1zdGF0aWMgaW50IF9faW5pdCBhZl91bml4X2luaXQodm9pZClcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzk2MC1cbm5ldC91bml4L2FmX3VuaXguYzozOTYxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvdW5peC9hZl91bml4LmMtMzk2Mi1cdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdW5kZXIgd2hpY2ggY29uZmlndXJhdGlvbnMgaXQgaXMgZW5hYmxlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgY29kZSBpbmRpY2F0ZXMgaXQmIzM5O3MgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCB0aGF0JiMzOTtzIGFwcGVhcmluZyBhcm91bmQgbGluZSAzNTk5LiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgYWxzbyByZWxpZXMgb24gYENPTkZJR19QUk9DX0ZTYC4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSBpdCYjMzk7cyBub3QgY29uZGl0aW9uYWwgb24gKmJvdGgqIGBDT05GSUdfQlBGX1NZU0NBTExgICphbmQqIGBDT05GSUdfUFJPQ19GU2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gYnkgY2hlY2tpbmcgZnVydGhlciBkb3duOyBhaGEhIExpbmUgMzg2MSBzaG93cyBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1BST0NfRlMpYC4gT2theSwgc28gaXQgKmlzKiBwb3NzaWJsZSB0aGF0IGZ1bmN0aW9uIGNhbiBhbHNvIHJlbHkgb24gYENPTkZJR19QUk9DX0ZTYCB0b28uIFRpbWUgdG8gb3BlbiBgbmV0L3VuaXgvYWZfdW5peC5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMzU5OSB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCwgYW5kIGlmIHRob3NlIGNvbmZpZ3VyYXRpb25zIHJlYWxseSBtYXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1OTU6XHRcdC5zdG9wICAgPSB1bml4X3NlcV9zdG9wLFxuMzU5NjpcdFx0LnNob3cgICA9IHVuaXhfc2VxX3Nob3csXG4zNTk3Olx0fTtcbjM1OTg6XHRcbjM1OTk6XHQjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4zNjAwOlx0c3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUge1xuMzYwMTpcdFx0c3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwO1xuMzYwMjpcdFx0dW5zaWduZWQgaW50IGN1cl9zaztcbjM2MDM6XHRcdHVuc2lnbmVkIGludCBlbmRfc2s7XG4zNjA0Olx0XHR1bnNpZ25lZCBpbnQgbWF4X3NrO1xuMzYwNTpcdFx0c3RydWN0IHNvY2sgKipiYXRjaDtcbjM2MDY6XHRcdGJvb2wgc3RfYnVja2V0X2RvbmU7XG4zNjA3Olx0fTtcbjM2MDg6XHRcbjM2MDk6XHRzdHJ1Y3QgYnBmX2l0ZXJfX3VuaXgge1xuMzYxMDpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfaXRlcl9tZXRhICosIG1ldGEpO1xuMzYxMTpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCB1bml4X3NvY2sgKiwgdW5peF9zayk7XG4zNjEyOlx0XHR1aWRfdCB1aWQgX19hbGlnbmVkKDgpO1xuMzYxMzpcdH07XG4zNjE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJQRiBTeXNjYWxsIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19VTklYYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyBgQ09ORklHX1VOSVhgICphYnNvbHV0ZWx5KiBuZWNlc3NhcnkgZm9yIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZG8/IEkgcmVjYWxsIGl0IGJlaW5nIGxpbmtlZCB0byB0aGUgYG5ldC91bml4L2FmX3VuaXguY2AgZmlsZSwgc28gSSBiZWxpZXZlIHRoZSBhbnN3ZXIgaXMgeWVzLiBOb3csIHJlZ2FyZGluZyBgQ09ORklHX1BST0NfRlNgLCB0aGlzIHNlZW1zIHJlbGV2YW50IGJlY2F1c2UgYGJwZl9pdGVyX3JlZ2lzdGVyYCBhcHBlYXJzIHRvIGJlIGd1YXJkZWQgYnkgaXQuIEp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYW5kIHZlcmlmeSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIExldCBtZSBnbyBmaW5kIGxpbmUgMzg2MSB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzg1NTpcdFxuMzg1NjpcdHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgdW5peF9uZXRfb3BzID0ge1xuMzg1NzpcdFx0LmluaXQgPSB1bml4X25ldF9pbml0LFxuMzg1ODpcdFx0LmV4aXQgPSB1bml4X25ldF9leGl0LFxuMzg1OTpcdH07XG4zODYwOlx0XG4zODYxOlx0I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcbjM4NjI6XHRERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbjM4NjM6XHRcdFx0ICAgICBzdHJ1Y3QgdW5peF9zb2NrICp1bml4X3NrLCB1aWRfdCB1aWQpXG4zODY0Olx0XG4zODY1Olx0I2RlZmluZSBJTklUX0JBVENIX1NaIDE2XG4zODY2Olx0XG4zODY3Olx0c3RhdGljIGludCBicGZfaXRlcl9pbml0X3VuaXgodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbjM4Njg6XHR7XG4zODY5Olx0XHRzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlciA9IHByaXZfZGF0YTtcbjM4NzA6XHRcdGludCBlcnI7XG4zODcxOlx0XG4zODcyOlx0XHRlcnIgPSBicGZfaXRlcl9pbml0X3NlcV9uZXQocHJpdl9kYXRhLCBhdXgpO1xuMzg3MzpcdFx0aWYgKGVycilcbjM4NzQ6XHRcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBJdGVyYXRpb24gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBpdGVyYXRpb24gY29kZSwgYW5kIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgYGJwZl9pdGVyX2luaXRfdW5peGAgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBvbmx5IGluY2x1ZGVkIGlmIGJvdGggYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUFJPQ19GU2AgYXJlIGRlZmluZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCBnaXZlcyBhIGNsZWFyIGluZGljYXRpb24gb2Ygd2hlbiB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSBhY3RpdmUuCgpOb3csIGEgcmVsYXRlZCBmdW5jdGlvbiwgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAsIGlzIGRlZmluZWQgZWFybGllciBpbiB0aGUgZmlsZS4gSW50ZXJlc3RpbmcsIGJlY2F1c2UgSSBzZWUgdGhhdCBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5ICpib3RoKiBgYnBmX2l0ZXJfaW5pdF91bml4YCBhbmQgYGJwZl9pdGVyX3VuaXhfYmF0Y2hgLiBUaGlzIGxpa2VseSBtZWFucyBpdCBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIG9yIHJlc2l6aW5nIG9mIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBpbiB0aGUgaXRlcmF0aW9uIHByb2Nlc3MsIGFuZCB0aGF0IG1ha2VzIHNlbnNlIGZvciBlZmZpY2llbmN5JiMzOTtzIHNha2UuCgpTaW5jZSBJJiMzOTt2ZSBzdHVtYmxlZCB1cG9uIGBicGZfaXRlcl91bml4X2JhdGNoYCBJIHdhbnQgdG8gY2hlY2sgaXRzIHVzYWdlLiBTbywgd2hlcmUgaXMgdGhhdCBmdW5jdGlvbiBhY3R1YWxseSBjYWxsZWQ/IEdvdHRhIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3VuaXhfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jPTM2NTc9c3RhdGljIGludCBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIsXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM2NzQtXG5uZXQvdW5peC9hZl91bml4LmM6MzY3NTpzdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXG5uZXQvdW5peC9hZl91bml4LmMtMzY3Ni1cdFx0XHRcdFx0bG9mZl90ICpwb3MpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM3MTA9c3RhdGljIHZvaWQgKmJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzcxNy1cdCAqL1xubmV0L3VuaXgvYWZfdW5peC5jOjM3MTg6XHRyZXR1cm4gYnBmX2l0ZXJfdW5peF9iYXRjaChzZXEsIHBvcyk7XG5uZXQvdW5peC9hZl91bml4LmMtMzcxOS19XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM3MjE9c3RhdGljIHZvaWQgKmJwZl9pdGVyX3VuaXhfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zNzM3LVx0ZWxzZVxubmV0L3VuaXgvYWZfdW5peC5jOjM3Mzg6XHRcdHNrID0gYnBmX2l0ZXJfdW5peF9iYXRjaChzZXEsIHBvcyk7XG5uZXQvdW5peC9hZl91bml4LmMtMzczOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQlBGIEl0ZXJhdG9ycyBhbmQgVU5JWCBTb2NrZXRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0YCBhbmQgYGJwZl9pdGVyX3VuaXhfc2VxX25leHRgIGFyZSBpbXBsZW1lbnRlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgQlBGIGludGVyYWN0cyB3aXRoIFVOSVggc29ja2V0IGRhdGEuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIGFyZSB0aGV5IGd1YXJkZWQgYnkgdGhvc2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUFJPQ19GU2AgZGVmaW5lcz8gSSBoYXZlIGEgZmVlbGluZyB0aGV5IG1pZ2h0IGJlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBUbyBjb25maXJtIHRoYXQsIGxldCYjMzk7cyBqdW1wIHN0cmFpZ2h0IHRvIGxpbmUgMzcxMCBvZiB0aGUgcmVsZXZhbnQgY29kZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB2ZXJpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzAwOlx0XHR9XG4zNzAxOlx0XG4zNzAyOlx0XHRpZiAoIXJlc2l6ZWQgXHUwMDI2XHUwMDI2ICFicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goaXRlciwgZXhwZWN0ZWQgKiAzIC8gMikpIHtcbjM3MDM6XHRcdFx0cmVzaXplZCA9IHRydWU7XG4zNzA0Olx0XHRcdGdvdG8gYWdhaW47XG4zNzA1Olx0XHR9XG4zNzA2Olx0XG4zNzA3Olx0XHRyZXR1cm4gc2s7XG4zNzA4Olx0fVxuMzcwOTpcdFxuMzcxMDpcdHN0YXRpYyB2b2lkICpicGZfaXRlcl91bml4X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG4zNzExOlx0e1xuMzcxMjpcdFx0aWYgKCEqcG9zKVxuMzcxMzpcdFx0XHRyZXR1cm4gU0VRX1NUQVJUX1RPS0VOO1xuMzcxNDpcdFxuMzcxNTpcdFx0LyogYnBmIGl0ZXIgZG9lcyBub3Qgc3VwcG9ydCBsc2Vlaywgc28gaXQgYWx3YXlzXG4zNzE2Olx0XHQgKiBjb250aW51ZSBmcm9tIHdoZXJlIGl0IHdhcyBzdG9wKCktcGVkLlxuMzcxNzpcdFx0ICovXG4zNzE4Olx0XHRyZXR1cm4gYnBmX2l0ZXJfdW5peF9iYXRjaChzZXEsIHBvcyk7XG4zNzE5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0YCBGdW5jdGlvbiBEZWZpbml0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBicGZfaXRlcl91bml4X3NlcV9zdGFydGAgZnVuY3Rpb24uIEkgc2F3IGl0cyBkZWZpbml0aW9uIGFyb3VuZCBsaW5lIDM3MTAsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBpdHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgaW1tZWRpYXRlbHkgbm90aWNlZCB0aGF0IHRoZSByZWxldmFudCBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1BST0NfRlMpYCBibG9jayBiZWdpbnMgYXJvdW5kIGxpbmUgMzg2MS4KCkEgcXVpY2sgZG91YmxlLWNoZWNrLi4uIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoYXQgYGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0YCBkZWZpbml0aW9uIGlzIGd1YXJkZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgKnVuZGVyKiB0aGUgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGJsb2NrLCB3aGljaCBzdGFydGVkIGJhY2sgYXQgbGluZSAzNTk5LiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBhYm91dCB0aGVzZSBwcmVwcm9jZXNzb3IgY29uZGl0aW9ucy4gQmFjayB0byByZS1leGFtaW5lIGxpbmUgMzg2MSB0byBjb25maXJtIHRoZSBpbmNsdXNpb24gY29uZGl0aW9ucyBhcmUgY29ycmVjdCBhbmQgdGhhdCBJJiMzOTttIGludGVycHJldGluZyB0aGlzIGNvcnJlY3RseS4gSXQmIzM5O3MgZWFzeSB0byBnZXQgbG9zdCBpbiB0aGVzZSBtYWNyb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODQwOlx0XHRyZW1vdmVfcHJvY19lbnRyeShcJiMzNDt1bml4XCYjMzQ7LCBuZXQtXHUwMDNlcHJvY19uZXQpO1xuMzg0MTpcdGVycl9zeXNjdGw6XG4zODQyOlx0I2VuZGlmXG4zODQzOlx0XHR1bml4X3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7XG4zODQ0Olx0b3V0OlxuMzg0NTpcdFx0cmV0dXJuIC1FTk9NRU07XG4zODQ2Olx0fVxuMzg0NzpcdFxuMzg0ODpcdHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgdW5peF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4zODQ5Olx0e1xuMzg1MDpcdFx0a3ZmcmVlKG5ldC1cdTAwM2V1bngudGFibGUuYnVja2V0cyk7XG4zODUxOlx0XHRrdmZyZWUobmV0LVx1MDAzZXVueC50YWJsZS5sb2Nrcyk7XG4zODUyOlx0XHR1bml4X3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7XG4zODUzOlx0XHRyZW1vdmVfcHJvY19lbnRyeShcJiMzNDt1bml4XCYjMzQ7LCBuZXQtXHUwMDNlcHJvY19uZXQpO1xuMzg1NDpcdH1cbjM4NTU6XHRcbjM4NTY6XHRzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHVuaXhfbmV0X29wcyA9IHtcbjM4NTc6XHRcdC5pbml0ID0gdW5peF9uZXRfaW5pdCxcbjM4NTg6XHRcdC5leGl0ID0gdW5peF9uZXRfZXhpdCxcbjM4NTk6XHR9O1xuMzg2MDpcdFxuMzg2MTpcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG4zODYyOlx0REVGSU5FX0JQRl9JVEVSX0ZVTkModW5peCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4zODYzOlx0XHRcdCAgICAgc3RydWN0IHVuaXhfc29jayAqdW5peF9zaywgdWlkX3QgdWlkKVxuMzg2NDpcdFxuMzg2NTpcdCNkZWZpbmUgSU5JVF9CQVRDSF9TWiAxNlxuMzg2NjpcdFxuMzg2NzpcdHN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF91bml4KHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4zODY4Olx0e1xuMzg2OTpcdFx0c3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIgPSBwcml2X2RhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBCUEYgSXRlcmF0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJQRiBpdGVyYXRpb24gY29kZS4gUmlnaHQgYXdheSwgSSBzZWUgdGhhdCBgYnBmX2l0ZXJfaW5pdF91bml4YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBpdCYjMzk7cyBkZWZpbmVkIHVuZGVyIGJvdGggYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUFJPQ19GU2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGludGVyYWN0aW5nIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbS4gVGhlbiBJIHNwb3QgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAg4oCTIGFnYWluLCBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBidXQganVzdCB1bmRlciBgQ09ORklHX0JQRl9TWVNDQUxMYC4gTm93LCBhIHJlZCBmbGFnIGdvZXMgdXAuIGByZWFsbG9jX2JhdGNoYCBzb3VuZHMgc3BlY2lmaWMsIGFuZCBwb3RlbnRpYWxseSBpbXBvcnRhbnQuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcy4gSSB3b25kZXIgaWYgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUuIExldCBtZSBnbyBhaGVhZCBhbmQgY3Jvc3MtcmVmZXJlbmNlIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgLiBHb3R0YSBjaGVjayBmb3IgYW55IG1pc3NlZCBkZXBlbmRlbmNpZXMgb3IgdW5leHBlY3RlZCB1c2VzLiBUaGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIG1ha2luZyBtZSBjdXJpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jPTM2NTE9c3RhdGljIHZvaWQgYnBmX2l0ZXJfdW5peF9wdXRfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTYtXG5uZXQvdW5peC9hZl91bml4LmM6MzY1NzpzdGF0aWMgaW50IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcixcbm5ldC91bml4L2FmX3VuaXguYy0zNjU4LVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBuZXdfYmF0Y2hfc3opXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM2NzU9c3RhdGljIHN0cnVjdCBzb2NrICpicGZfaXRlcl91bml4X2JhdGNoKHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zNzAxLVxubmV0L3VuaXgvYWZfdW5peC5jOjM3MDI6XHRpZiAoIXJlc2l6ZWQgXHUwMDI2XHUwMDI2ICFicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goaXRlciwgZXhwZWN0ZWQgKiAzIC8gMikpIHtcbm5ldC91bml4L2FmX3VuaXguYy0zNzAzLVx0XHRyZXNpemVkID0gdHJ1ZTtcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9Mzg2Nz1zdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfdW5peCh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODc1LVxubmV0L3VuaXgvYWZfdW5peC5jOjM4NzY6XHRlcnIgPSBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goaXRlciwgSU5JVF9CQVRDSF9TWik7XG5uZXQvdW5peC9hZl91bml4LmMtMzg3Ny1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE2OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVuaXggU29ja2V0IEJQRiBJdGVyYXRvciBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBCUEYgaXRlcmF0b3JzIGZvciBVbml4IHNvY2tldHMuIEkgc2VlIHRoaXMgZnVuY3Rpb24sIGBicGZfaXRlcl91bml4X2JhdGNoYCwgYW5kIGFub3RoZXIgb25lLCBgYnBmX2l0ZXJfaW5pdF91bml4YC4gU2VlbXMgbGlrZSBib3RoIGFyZSBjcnVjaWFsLiBUaGF0IG1lYW5zIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBnb2luZyB0byBiZSBgQ09ORklHX1VOSVhgLCBkZWZpbml0ZWx5LCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFVuaXggc29ja2V0cywgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGJlY2F1c2UgaXQmIzM5O3MgQlBGIHJlbGF0ZWQsIGFuZCB0aGVuIGFsc28gYENPTkZJR19QUk9DX0ZTYCBiZWNhdXNlIGBicGZfaXRlcl9pbml0X3VuaXhgIGxpdmVzIHVuZGVyIHRoYXQgY29uZmlnLgoKUmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgdHlwZXMuIE9rYXksIGBDT05GSUdfVU5JWGAgaXMgYSBib29sZWFuIG9yIHRyaXN0YXRlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBib29sZWFuLCBhbmQgYENPTkZJR19QUk9DX0ZTYCBpcyBib29sZWFuLiBPZiB0aGVzZSwgYENPTkZJR19VTklYYCBpcyB0aGUgbW9zdCBjcml0aWNhbC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1VOSVhgIGlzIGFjdHVhbGx5IG5lZWRlZC4gQWgsIHllcywgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L3VuaXgvYWZfdW5peC5jYC4gT2theSwgc28gYFVOSVhgLCBgQlBGX1NZU0NBTExgLCBhbmQgYFBST0NfRlNgLgoKSGFuZyBvbiwgdGhvdWdoLCBgQ09ORklHX1BST0NfRlNgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LiBTbywgdGhhdCYjMzk7cyBsZXNzIG9mIGEgY29uY2Vybi4gVGhlIGNvcmUgZnVuY3Rpb24gdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgd2lsbCBiZSBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gV2FpdCBhIHNlY29uZOKApiB0aGF0JiMzOTtzIGEgKnN0YXRpYyogZnVuY3Rpb24uIEhtbSwgY2FuIHdlIHJlYWNoIGl0IGZyb20gdXNlcnNwYWNlPyBZZXMsIHdlIGNhbiwgdGhyb3VnaCBCUEYgaXRlcmF0b3JzLCBzbyBpdCYjMzk7cyBhIHZhbGlkIHRhcmdldC4KCkFscmlnaHQsIGxldCYjMzk7cyBub3cgbG9vayBhdCBgYnBmX2l0ZXJfdW5peF9iYXRjaGAgYmVjYXVzZSBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZnV6emVkLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnRgIGFuZCBgYnBmX2l0ZXJfdW5peF9zZXFfbmV4dGAuIFRoZXNlLCBpbiB0dXJuLCBhcmUgcGFydCBvZiBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYC4gT2theSwgdGhhdCYjMzk7cyB0aGUgd2hvbGUgY2hhaW4uIEkgaGF2ZSBhIGNsZWFyZXIgcGljdHVyZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3VuaXhfc2VxX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9Mzc3Mj1zdGF0aWMgdm9pZCBicGZfaXRlcl91bml4X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zNzg4LVxubmV0L3VuaXgvYWZfdW5peC5jOjM3ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicGZfaXRlcl91bml4X3NlcV9vcHMgPSB7XG5uZXQvdW5peC9hZl91bml4LmMtMzc5MC1cdC5zdGFydFx0PSBicGZfaXRlcl91bml4X3NlcV9zdGFydCxcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9Mzg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIHVuaXhfc2VxX2luZm8gPSB7XG5uZXQvdW5peC9hZl91bml4LmM6Mzg5NDpcdC5zZXFfb3BzXHRcdD0gXHUwMDI2YnBmX2l0ZXJfdW5peF9zZXFfb3BzLFxubmV0L3VuaXgvYWZfdW5peC5jLTM4OTUtXHQuaW5pdF9zZXFfcHJpdmF0ZVx0PSBicGZfaXRlcl9pbml0X3VuaXgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEl0ZXJhdGlvbiBhbmQgSW50ZWdlciBPdmVyZmxvdyBWdWxuZXJhYmlsaXR5OiBBIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYCBpcyBlbXBsb3llZCB3aXRoaW4gYHVuaXhfc2VxX2luZm9gLCBhbmQgdGhhdCBgdW5peF9zZXFfaW5mb2AgaXRzZWxmIGlzIHJlZ2lzdGVyZWQgdXNpbmcgYGJwZl9pdGVyX3JlZ2lzdGVyYC4gIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgdmlhIEJQRiwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYGt2bWFsbG9jYCB3aXRoIGBrdm1hbGxvY19hcnJheWAsIHRoZSBhbnN3ZXImIzM5O3MgbGlrZWx5IHllcy4gQnV0LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZGV0YWlscy4KCkFoLCByaWdodCwgdGhlIGNvZGUgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZDoKCmBgYGMKLQluZXdfYmF0Y2ggPSBrdm1hbGxvYyhzaXplb2YoKm5ld19iYXRjaCkgKiBuZXdfYmF0Y2hfc3osCi0JCQkgICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTsKJiM0MzsJbmV3X2JhdGNoID0ga3ZtYWxsb2NfYXJyYXkobmV3X2JhdGNoX3N6LCBzaXplb2YoKm5ld19iYXRjaCksCiYjNDM7CQkJCSAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTsKYGBgCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBzZWN1cml0eSBhbmQgcm9idXN0bmVzcyBmaXgsIG1lYW50IHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MuICBUaGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyAqZnVuY3Rpb25hbGx5KiBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBmbG93PyAgYGt2bWFsbG9jX2FycmF5YCBub3cgaW5jbHVkZXMgYW4gb3ZlcmZsb3cgY2hlY2sgb24gdGhlIG11bHRpcGxpY2F0aW9uIGFuZCBpdCB3aWxsIHJldHVybiBgTlVMTGAgaWYgaXQgb3ZlcmZsb3dzIGJlZm9yZSBjYWxsaW5nIGBrdm1hbGxvY2AuIFRoZXJlZm9yZSB0aGUgYWxsb2NhdGlvbiBmYWlscyByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYSBzbWFsbGVyIGJ1ZmZlciB3aGljaCBjb3VsZCBsZWFkIHRvIGJ1ZmZlciBvdmVyZmxvd3MuIFRoaXMgbWVhbnMsIHllcywgdGhlcmUgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSBjb2RlIGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzLCB3aGVyZSBsYXJnZSBgbmV3X2JhdGNoX3N6YCB2YWx1ZXMgd291bGQgY2F1c2Ugb3ZlcmZsb3dzLiAgVGhhdCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCUEYgaXRlcmF0b3Igd29ya3MgY29ycmVjdGx5IHdpdGggdGhlc2UgbmV3IGVycm9yIGNvbmRpdGlvbnMgYW5kIHRoYXQgaXQgZG9lc24mIzM5O3QgY3Jhc2ggb3IgbGVhayBtZW1vcnkgd2hlbiB0aGVzZSBuZXcgZXJyb3IgY29uZGl0aW9ucyBhcmUgdHJpZ2dlcmVkLgoKVGhlIGluaXRpYWwgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAsIGBicGZfaXRlcl91bml4X2JhdGNoYCwgYW5kIGBicGZfaXRlcl9pbml0X3VuaXhgLiBIYW5nIG9uLCB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAuIEdpdmVuIHRoYXQgaXQmIzM5O3MgY2hhbmdlZCwgYW5kIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgYWxsb2NhdGlvbiBlcnJvciB3b3VsZCBiZSB0cmlnZ2VyZWQsIEkgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGluY2x1ZGUgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAgYW5kIGBicGZfaXRlcl91bml4X2JhdGNoYCBmb3IgZnV6emluZy4KCkZvciBjb25maWd1cmF0aW9ucywgaXQmIzM5O3MgYFVOSVhgIGFuZCBgQlBGX1NZU0NBTExgIHRoYXQgd2UgbmVlZC4KCkkgdGhpbmsgSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIGBDT05GSUdfVU5JWGAgaXMgdGhlIHJpZ2h0IGNvbmZpZyBuYW1lIHRob3VnaCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVU5JWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvS2NvbmZpZy01LVxubmV0L3VuaXgvS2NvbmZpZzo2OmNvbmZpZyBVTklYXG5uZXQvdW5peC9LY29uZmlnLTctXHRib29sIFwmIzM0O1VuaXggZG9tYWluIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQvdW5peC9LY29uZmlnPTE5PWNvbmZpZ1x0QUZfVU5JWF9PT0Jcbi0tXG5uZXQvdW5peC9LY29uZmlnLTI1LVxubmV0L3VuaXgvS2NvbmZpZzoyNjpjb25maWcgVU5JWF9ESUFHXG5uZXQvdW5peC9LY29uZmlnLTI3LVx0dHJpc3RhdGUgXCYjMzQ7VU5JWDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzg2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVU5JWCBhbmQgQlBGX1NZU0NBTEwgSW50ZWdyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgVU5JWGAgYW5kIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHByb3Blcmx5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IGlmIGBDT05GSUdfUFJPQ19GU2AgaXMgcmVxdWlyZWQgaW4gdGhpcyBzY2VuYXJpby4gQWgsIGxvb2tzIGxpa2UgaXQgaXMuIEkgY2FuIHNlZSB0aGF0IGBicGZfaXRlcl9pbml0X3VuaXhgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKWAuIE1ha2VzIHNlbnNlLgoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBpcyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBjb21waWxlZCBpZiBgQ09ORklHX1BST0NfRlNgIGlzICpub3QqIGVuYWJsZWQ/IFRoYXQmIzM5O3MgdGhlIHBvdGVudGlhbCB3cmlua2xlIEkgbmVlZCB0byBpcm9uIG91dC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLi4uIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC91bml4L2FmX3VuaXguY2AgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9MzY1MT1zdGF0aWMgdm9pZCBicGZfaXRlcl91bml4X3B1dF9iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcilcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzY1Ni1cbm5ldC91bml4L2FmX3VuaXguYzozNjU3OnN0YXRpYyBpbnQgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoKHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyLFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTgtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG5ld19iYXRjaF9zeilcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MzY3NT1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM3MDEtXG5uZXQvdW5peC9hZl91bml4LmM6MzcwMjpcdGlmICghcmVzaXplZCBcdTAwMjZcdTAwMjYgIWJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBleHBlY3RlZCAqIDMgLyAyKSkge1xubmV0L3VuaXgvYWZfdW5peC5jLTM3MDMtXHRcdHJlc2l6ZWQgPSB0cnVlO1xuLS1cbm5ldC91bml4L2FmX3VuaXguYz0zODY3PXN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF91bml4KHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM4NzUtXG5uZXQvdW5peC9hZl91bml4LmM6Mzg3NjpcdGVyciA9IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBJTklUX0JBVENIX1NaKTtcbm5ldC91bml4L2FmX3VuaXguYy0zODc3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE0NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIOKAkyBpdCYjMzk7cyBkZWZpbmVkIGF0IGxpbmUgMzY1Ny4gVGhlIGNvZGUmIzM5O3Mgc3RydWN0dXJlIHN1Z2dlc3RzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc3RyYXRlZ3ksIHdoaWNoIG1lYW5zIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEZpcnN0LCBJIHNlZSB0aGF0IHRoZSBvdmVyYWxsIEJQRiBzeXN0ZW0gY2FsbCBzdXBwb3J0IGlzIGVuYWJsZWQgd2l0aCBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgd2hpY2ggYmVnaW5zIG9uIGxpbmUgMzU5OS4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gVGhlbiwgdGhlcmUmIzM5O3MgYW5vdGhlciBjaGVjayB0aGF0IGluY2x1ZGVzIGAjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgIHN0YXJ0aW5nIG9uIGxpbmUgMzg2MS4KClNvLCBjbGVhcmx5LCBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBnZXRzIGNvbXBpbGVkICpldmVuKiBpZiBgQ09ORklHX1BST0NfRlNgIGlzbiYjMzk7dCBzZXQuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgd2lkZXIgYXBwbGljYWJpbGl0eSB0aGFuIGp1c3QgYmVpbmcgY29uZmluZWQgdG8gcHJvY2ZzLXJlbGF0ZWQgb3BlcmF0aW9ucy4gQnV0IGNvbXBpbGF0aW9uIGRvZXNuJiMzOTt0IGVxdWFsIHJlYWNoYWJpbGl0eS4gSSYjMzk7bSBhc2tpbmcgbXlzZWxmLCBldmVuIGlmIGl0JiMzOTtzIGNvbXBpbGVkLCAqaG93KiBjYW4gSSBnZXQgdG8gdGhpcyBmdW5jdGlvbj8KClRoZSBjb2RlIHJldmVhbHMgdGhhdCBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBpcyBjYWxsZWQgYnkgYGJwZl9pdGVyX3VuaXhfYmF0Y2hgLiAgYGJwZl9pdGVyX3VuaXhfYmF0Y2hgLCBpbiB0dXJuLCBpcyB1c2VkIHdpdGhpbiBgYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnRgIGFuZCBgYnBmX2l0ZXJfdW5peF9zZXFfbmV4dGAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgZm9yICp0aG9zZSogZnVuY3Rpb25zIHRvIGJlIHRyaWdnZXJlZC4gSWYgdGhvc2UgY2FuIGJlIHVzZWQgd2l0aG91dCBgQ09ORklHX1BST0NfRlNgLCB0aGVuIHRoZSBwYXRoIHRvIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIGlzIG9wZW4uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2sgZG93biB0aGUgdXNhZ2Ugb2YgYGJwZl9pdGVyX3VuaXhfc2VxX29wc2AgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3VuaXhfc2VxX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9Mzc3Mj1zdGF0aWMgdm9pZCBicGZfaXRlcl91bml4X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zNzg4LVxubmV0L3VuaXgvYWZfdW5peC5jOjM3ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicGZfaXRlcl91bml4X3NlcV9vcHMgPSB7XG5uZXQvdW5peC9hZl91bml4LmMtMzc5MC1cdC5zdGFydFx0PSBicGZfaXRlcl91bml4X3NlcV9zdGFydCxcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9Mzg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIHVuaXhfc2VxX2luZm8gPSB7XG5uZXQvdW5peC9hZl91bml4LmM6Mzg5NDpcdC5zZXFfb3BzXHRcdD0gXHUwMDI2YnBmX2l0ZXJfdW5peF9zZXFfb3BzLFxubmV0L3VuaXgvYWZfdW5peC5jLTM4OTUtXHQuaW5pdF9zZXFfcHJpdmF0ZVx0PSBicGZfaXRlcl9pbml0X3VuaXgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDI1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHVuaXhfc2VxX2luZm9gIERlZmluaXRpb24gYW5kIEl0cyBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgemVyb2luZyBpbiBvbiBgdW5peF9zZXFfaW5mb2AuIEl0JiMzOTtzIGRlZmluZWQgYXQgbGluZSAzODkzLCBhbmQgdGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgaXQmIzM5O3MgbmVzdGVkIHVuZGVyIGFuIGAjaWZgIGNvbmRpdGlvbjogYCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKWAuIFJpZ2h0IGF3YXksIHRoYXQgdGVsbHMgbWUgc29tZXRoaW5nIGltcG9ydGFudCBhYm91dCBpdHMgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUuIElmIGBDT05GSUdfUFJPQ19GU2AgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gYHVuaXhfc2VxX2luZm9gIGlzbiYjMzk7dCBldmVuICpkZWZpbmVkKi4gVGhhdCBtZWFucyBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYCDigJMgd2hpY2ggcHJlc3VtYWJseSByZWxpZXMgb24gYHVuaXhfc2VxX2luZm9gIOKAkyB3b24mIzM5O3QgYmUgdXNlZCBlaXRoZXIuCgpIYW5nIG9uIGEgc2Vjb25kLiBJZiBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYCBpc24mIzM5O3QgdXNlZCwgdGhlIGNvbXBpbGVyIHNob3VsZCBmbGFnIGl0IGFzIGFuIHVudXNlZCB2YXJpYWJsZSwgcmlnaHQ/IFVubGVzcy4uLiB1bmxlc3MgaXQmIzM5O3MgKmFsc28qIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgdGhhdCBzYW1lIGAjaWZgLiBJdCYjMzk7cyBjcnVjaWFsIHRoYXQgdGhhdCBpcyB0aGUgY2FzZSwgb3Igd2UmIzM5O2xsIGJlIGdldHRpbmcgc29tZSBzcHVyaW91cyB3YXJuaW5ncy4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIHZlcmlmeSB0aGlzLgoKVG8gYmUgY2VydGFpbiwgbGV0JiMzOTtzIGxvb2sgZm9yIGFub3RoZXIgYCNpZmAgc3RhdGVtZW50IGFyb3VuZCBsaW5lIDM3ODkuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3ODA6XHRcdFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFx1MDAyNm1ldGEsIHRydWUpO1xuMzc4MTpcdFx0XHRpZiAocHJvZylcbjM3ODI6XHRcdFx0XHQodm9pZCl1bml4X3Byb2dfc2VxX3Nob3cocHJvZywgXHUwMDI2bWV0YSwgdiwgMCk7XG4zNzgzOlx0XHR9XG4zNzg0Olx0XG4zNzg1Olx0XHRpZiAoaXRlci1cdTAwM2VjdXJfc2sgXHUwMDNjIGl0ZXItXHUwMDNlZW5kX3NrKVxuMzc4NjpcdFx0XHRicGZfaXRlcl91bml4X3B1dF9iYXRjaChpdGVyKTtcbjM3ODc6XHR9XG4zNzg4Olx0XG4zNzg5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicGZfaXRlcl91bml4X3NlcV9vcHMgPSB7XG4zNzkwOlx0XHQuc3RhcnRcdD0gYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnQsXG4zNzkxOlx0XHQubmV4dFx0PSBicGZfaXRlcl91bml4X3NlcV9uZXh0LFxuMzc5MjpcdFx0LnN0b3BcdD0gYnBmX2l0ZXJfdW5peF9zZXFfc3RvcCxcbjM3OTM6XHRcdC5zaG93XHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3Nob3csXG4zNzk0Olx0fTtcbjM3OTU6XHQjZW5kaWZcbjM3OTY6XHQjZW5kaWZcbjM3OTc6XHRcbjM3OTg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgdW5peF9mYW1pbHlfb3BzID0ge1xuMzc5OTpcdFx0LmZhbWlseSA9IFBGX1VOSVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRG91YmxlIGAjZW5kaWZgIERpc2NvdmVyeSoqCgpSaWdodCwgc28gSSYjMzk7dmUgc3BvdHRlZCBzb21ldGhpbmcgYSBiaXQgdW51c3VhbCBoZXJlIOKAkyB0d28gc2VwYXJhdGUgYCNlbmRpZmAgZGlyZWN0aXZlcyBzdGFja2VkIHVwIGF0IGxpbmVzIDM3OTUgYW5kIDM3OTYuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZG8gdGhlc2UgcHJlcHJvY2Vzc29yIGJsb2NrcyAqYWN0dWFsbHkqIGJlZ2luPyYjMzQ7IEkgbmVlZCB0byBxdWlja2x5IHRyYWNlIGJhY2sgYW5kIHNlZSBpZiB0aGVzZSBhcmUgY29ycmVjdGx5IHBhaXJlZCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3IgYCNpZmAgZGlyZWN0aXZlcy4gVGhpcyBjb3VsZCBiZSBhIHNpbXBsZSB0eXBvLCBhIG1pc3VuZGVyc3Rvb2QgbmVzdGluZyBpc3N1ZSwgb3IgcG90ZW50aWFsbHkgYSBtb3JlIHNlcmlvdXMgbG9naWNhbCBlcnJvciBpbiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIFRpbWUgdG8gZGl2ZSBpbiBhbmQgaW52ZXN0aWdhdGUgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhlc2UgYmxvY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzU5MDpcdH1cbjM1OTE6XHRcbjM1OTI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHVuaXhfc2VxX29wcyA9IHtcbjM1OTM6XHRcdC5zdGFydCAgPSB1bml4X3NlcV9zdGFydCxcbjM1OTQ6XHRcdC5uZXh0ICAgPSB1bml4X3NlcV9uZXh0LFxuMzU5NTpcdFx0LnN0b3AgICA9IHVuaXhfc2VxX3N0b3AsXG4zNTk2Olx0XHQuc2hvdyAgID0gdW5peF9zZXFfc2hvdyxcbjM1OTc6XHR9O1xuMzU5ODpcdFxuMzU5OTpcdCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbjM2MDA6XHRzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSB7XG4zNjAxOlx0XHRzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlIHA7XG4zNjAyOlx0XHR1bnNpZ25lZCBpbnQgY3VyX3NrO1xuMzYwMzpcdFx0dW5zaWduZWQgaW50IGVuZF9zaztcbjM2MDQ6XHRcdHVuc2lnbmVkIGludCBtYXhfc2s7XG4zNjA1Olx0XHRzdHJ1Y3Qgc29jayAqKmJhdGNoO1xuMzYwNjpcdFx0Ym9vbCBzdF9idWNrZXRfZG9uZTtcbjM2MDc6XHR9O1xuMzYwODpcdFxuMzYwOTpcdHN0cnVjdCBicGZfaXRlcl9fdW5peCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQ3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqRmluZGluZyB0aGUgTWF0Y2hpbmcgQ29uZGl0aW9uYWwqKgoKT2theSwgSSYjMzk7bSBzcG90dGluZyBhIGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBkaXJlY3RpdmUgYXQgbGluZSAzNTk5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgY29ycmVzcG9uZGluZyBgI2lmYCBvciBgI2lmZGVmYCBibG9jayYjMzk7cyB0ZXJtaW5hdGlvbj8mIzM0OyBJIG5lZWQgdG8gc2VlIHRoZSBlbnRpcmUgbG9naWNhbCBzY29wZSB0byB1bmRlcnN0YW5kIHRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc2NhbiBhcm91bmQgbGluZSAzNTk5LiBUaGUgZ29hbCBpcyB0byBxdWlja2x5IGxvY2F0ZSBlaXRoZXIgdGhlIGNsb3NpbmcgYCNlbmRpZmAgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBpbmNsdWRlZCBvciBleGNsdWRlZCBvciB0aGUgb3BlbmluZyBjb25kaXRpb25hbCBpZiB0aGlzIGlzIGEgbmVzdGVkIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBncm9rIHRoZSBjb2RlIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzU4MDpcdFx0XHRcdH1cbjM1ODE6XHRcdFx0XHRmb3IgKCA7IGkgXHUwMDNjIGxlbjsgaSYjNDM7JiM0MzspXG4zNTgyOlx0XHRcdFx0XHRzZXFfcHV0YyhzZXEsIHUtXHUwMDNlYWRkci1cdTAwM2VuYW1lLVx1MDAzZXN1bl9wYXRoW2ldID86XG4zNTgzOlx0XHRcdFx0XHRcdCAmIzM5O0AmIzM5Oyk7XG4zNTg0Olx0XHRcdH1cbjM1ODU6XHRcdFx0dW5peF9zdGF0ZV91bmxvY2socyk7XG4zNTg2Olx0XHRcdHNlcV9wdXRjKHNlcSwgJiMzOTtcXG4mIzM5Oyk7XG4zNTg3Olx0XHR9XG4zNTg4Olx0XG4zNTg5Olx0XHRyZXR1cm4gMDtcbjM1OTA6XHR9XG4zNTkxOlx0XG4zNTkyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB1bml4X3NlcV9vcHMgPSB7XG4zNTkzOlx0XHQuc3RhcnQgID0gdW5peF9zZXFfc3RhcnQsXG4zNTk0Olx0XHQubmV4dCAgID0gdW5peF9zZXFfbmV4dCxcbjM1OTU6XHRcdC5zdG9wICAgPSB1bml4X3NlcV9zdG9wLFxuMzU5NjpcdFx0LnNob3cgICA9IHVuaXhfc2VxX3Nob3csXG4zNTk3Olx0fTtcbjM1OTg6XHRcbjM1OTk6XHQjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODQ1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOgoKKipEZWJ1Z2dpbmcgYSBNaXNzaW5nIENvbmRpdGlvbmFsKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuLi5zb21ldGhpbmcgZmVlbHMgb2ZmLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHN3ZWFyIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgYSBzZWNvbmQgYCNpZmAgaGVyZS4gSXQgc2VlbXMgbGlrZSBhIGNvbmRpdGlvbmFsIG1pZ2h0IGJlIG1pc3NpbmcsIG9yIHBlcmhhcHMgSSYjMzk7bSBtaXNyZW1lbWJlcmluZyB0aGUgb3JpZ2luYWwgc3RydWN0dXJlLiBMZXQgbWUganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bSBnb2luZyB0byBydW4gYSBnbG9iYWwgc2VhcmNoIG9mIHRoZSBlbnRpcmUgZmlsZS4gVGhlIHNwZWNpZmljIHN0cnVjdHVyZSBJJiMzOTttIGxvb2tpbmcgZm9yIGlzIGJhc2VkIG9uIGAjaWZkZWYgQ09ORklHX1BST0NfRlNgIHRvIG1ha2Ugc3VyZSBpdCBleGlzdHMsIHNvIEkgY2FuIHNlZSBpZiB0aGUgZXhwZWN0ZWQgbG9naWMgaXMgaW4gcGxhY2UuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIGlzIG91dCBvZiBzeW5jIGFuZCBuZWVkcyB0byBiZSBhZGRyZXNzZWQgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1BST0NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jPTg3MT1zdGF0aWMgaW50IHVuaXhfc2VxcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCxcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtODczLVxubmV0L3VuaXgvYWZfdW5peC5jOjg3NDojaWZkZWYgQ09ORklHX1BST0NfRlNcbm5ldC91bml4L2FmX3VuaXguYy04NzUtc3RhdGljIGludCB1bml4X2NvdW50X25yX2ZkcyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTMzOTg9c3RhdGljIF9fcG9sbF90IHVuaXhfZGdyYW1fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzQ1Ny1cbm5ldC91bml4L2FmX3VuaXguYzozNDU4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xubmV0L3VuaXgvYWZfdW5peC5jLTM0NTktXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM4MDU9c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODEyLVxubmV0L3VuaXgvYWZfdW5peC5jOjM4MTM6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvdW5peC9hZl91bml4LmMtMzgxNC1cdGlmICghcHJvY19jcmVhdGVfbmV0KFwmIzM0O3VuaXhcJiMzNDssIDAsIG5ldC1cdTAwM2Vwcm9jX25ldCwgXHUwMDI2dW5peF9zZXFfb3BzLFxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODM4LWVycl9wcm9jOlxubmV0L3VuaXgvYWZfdW5peC5jOjM4Mzk6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvdW5peC9hZl91bml4LmMtMzg0MC1cdHJlbW92ZV9wcm9jX2VudHJ5KFwmIzM0O3VuaXhcJiMzNDssIG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM4NTY9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB1bml4X25ldF9vcHMgPSB7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM4NjAtXG5uZXQvdW5peC9hZl91bml4LmM6Mzg2MTojaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L3VuaXgvYWZfdW5peC5jLTM4NjItREVGSU5FX0JQRl9JVEVSX0ZVTkModW5peCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM5MzM9c3RhdGljIGludCBfX2luaXQgYWZfdW5peF9pbml0KHZvaWQpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM5NjAtXG5uZXQvdW5peC9hZl91bml4LmM6Mzk2MTojaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L3VuaXgvYWZfdW5peC5jLTM5NjItXHRicGZfaXRlcl9yZWdpc3RlcigpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcwNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKgoKUmlnaHQsIHNvIEkmIzM5O20gemVyb2luZyBpbiBvbiBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZS4gVGhhdCBgI2lmZGVmIENPTkZJR19QUk9DX0ZTYCBjb25zdHJ1Y3QsIGl0JiMzOTtzIHNpdHRpbmcgYXQgbGluZSAzNDU4LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQmIzM5O3MgdGltZSB0byBxdWlja2x5IGFuYWx5emUgdGhlIHNlY3Rpb24gb2YgY29kZS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIGZyb20gdGhlcmUgZG93biB0byBsaW5lIDM1OTkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGNvbnRleHQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZCBpbiBvciBvdXQgYmFzZWQgb24gdGhlIGBDT05GSUdfUFJPQ19GU2Agc2V0dGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHRoZSBjb2RlIHRoYXQgZGVwZW5kcyBvbiBpdC4gSXMgaXQgZGVmaW5pbmcgYSBtb2R1bGUsIGVuYWJsaW5nIGEgZmVhdHVyZSwgb3IgcGVyaGFwcyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYW4gZXhpc3RpbmcgZnVuY3Rpb24/IExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDU1Olx0XHRyZXR1cm4gbWFzaztcbjM0NTY6XHR9XG4zNDU3Olx0XG4zNDU4Olx0I2lmZGVmIENPTkZJR19QUk9DX0ZTXG4zNDU5Olx0XG4zNDYwOlx0I2RlZmluZSBCVUNLRVRfU1BBQ0UgKEJJVFNfUEVSX0xPTkcgLSAoVU5JWF9IQVNIX0JJVFMgJiM0MzsgMSkgLSAxKVxuMzQ2MTpcdFxuMzQ2MjpcdCNkZWZpbmUgZ2V0X2J1Y2tldCh4KSAoKHgpIFx1MDAzZVx1MDAzZSBCVUNLRVRfU1BBQ0UpXG4zNDYzOlx0I2RlZmluZSBnZXRfb2Zmc2V0KHgpICgoeCkgXHUwMDI2ICgoMVVMIFx1MDAzY1x1MDAzYyBCVUNLRVRfU1BBQ0UpIC0gMSkpXG4zNDY0Olx0I2RlZmluZSBzZXRfYnVja2V0X29mZnNldChiLCBvKSAoKGIpIFx1MDAzY1x1MDAzYyBCVUNLRVRfU1BBQ0UgfCAobykpXG4zNDY1Olx0XG4zNDY2Olx0c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2Zyb21fYnVja2V0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbjM0Njc6XHR7XG4zNDY4Olx0XHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGdldF9vZmZzZXQoKnBvcyk7XG4zNDY5Olx0XHR1bnNpZ25lZCBsb25nIGJ1Y2tldCA9IGdldF9idWNrZXQoKnBvcyk7XG4zNDcwOlx0XHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcbjM0NzE6XHRcdHN0cnVjdCBzb2NrICpzaztcbjM0NzI6XHRcbjM0NzM6XHRcdGZvciAoc2sgPSBza19oZWFkKFx1MDAyNnNlcV9maWxlX25ldChzZXEpLVx1MDAzZXVueC50YWJsZS5idWNrZXRzW2J1Y2tldF0pO1xuMzQ3NDpcdFx0ICAgICBzazsgc2sgPSBza19uZXh0KHNrKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMyNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbnVtYmVycy4gYENPTkZJR19QUk9DX0ZTYCBpcyBzdGFydGluZyBhdCAzNDU4IGluIHRoZSBjb25maWd1cmF0aW9uIGluZGV4LCB3aGlsZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFydGluZyBhdCAzNTk5LiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gR2l2ZW4gdGhlaXIgcG9zaXRpb25pbmcsIGl0IHNlZW1zIHRoaXMgaXMgdW5kZXIgYm90aCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIC0gdGhlcmUgc2hvdWxkIGJlIGEgYnVpbGQgb3B0aW9uIHVuZGVyIHRoZSBvcHRpb25zIG9mIGJvdGggY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdG8gYmUgY29ycmVjdC4gTmVlZCB0byB2ZXJpZnkgdGhhdCwgb3IgcG9zc2libHkgZGlzY292ZXIgc29tZXRoaW5nIG1vcmUgbnVhbmNlZCBpbiB0aGUgY29uZmlnIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzc4ODpcdFxuMzc4OTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX2l0ZXJfdW5peF9zZXFfb3BzID0ge1xuMzc5MDpcdFx0LnN0YXJ0XHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0LFxuMzc5MTpcdFx0Lm5leHRcdD0gYnBmX2l0ZXJfdW5peF9zZXFfbmV4dCxcbjM3OTI6XHRcdC5zdG9wXHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3N0b3AsXG4zNzkzOlx0XHQuc2hvd1x0PSBicGZfaXRlcl91bml4X3NlcV9zaG93LFxuMzc5NDpcdH07XG4zNzk1Olx0I2VuZGlmXG4zNzk2Olx0I2VuZGlmXG4zNzk3Olx0XG4zNzk4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHVuaXhfZmFtaWx5X29wcyA9IHtcbjM3OTk6XHRcdC5mYW1pbHkgPSBQRl9VTklYLFxuMzgwMDpcdFx0LmNyZWF0ZSA9IHVuaXhfY3JlYXRlLFxuMzgwMTpcdFx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuMzgwMjpcdH07XG4zODAzOlx0XG4zODA0Olx0XG4zODA1Olx0c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuMzgwNjpcdHtcbjM4MDc6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkwMQoJCQkJCQkJb3V0cHV0OiAxNDAKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkgc2VlIHRob3NlIHR3byBgI2VuZGlmYCBkaXJlY3RpdmVzIGF0IGxpbmVzIDM3OTUgYW5kIDM3OTYuIE9uZSBjb3JyZXNwb25kcyB0byBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgYXQgbGluZSAzNTk5LCBhbmQgdGhlIG90aGVyIHRvIGAjaWZkZWYgQ09ORklHX1BST0NfRlNgIGF0IGxpbmUgMzQ1OC4gUmlnaHQsIHNvIHRoYXQgbWVhbnMgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgVU5JWGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgUFJPQ19GU2AuCgpIYW5nIG9uLCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBgQ09ORklHX1VOSVhgIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmRhbWVudGFsIG9uZSBoZXJlLiBXZSBhbHNvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYmVjYXVzZSBvZiB0aGUgZmlyc3QgYCNlbmRpZmAuIEFuZCBgQ09ORklHX1BST0NfRlNgIGlzIGFsc28gcmVxdWlyZWQsIGdpdmVuIHRoZSBzZWNvbmQgYCNlbmRpZmAuIEFjdHVhbGx5LCBgQ09ORklHX1BST0NfRlNgIGlzIHVzdWFsbHkgZW5hYmxlZCBpbiB0aGVzZSB0eXBlcyBvZiBzeXN0ZW1zLiBBbHJpZ2h0LCBJJiMzOTtsbCBpbmNsdWRlIGBVTklYYCBhbmQgYEJQRl9TWVNDQUxMYC4KCkp1c3QgYSBjaGVjaywgaXMgYENPTkZJR19VTklYYCB0cmlzdGF0ZT8gWWVzLCBpdCBpcy4KClNvLCBgVU5JWGAsIGBCUEZfU1lTQ0FMTGAuIEdvb2QuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29uZmlncy4gTm9wZSwgdGhhdCYjMzk7cyBpdC4KCk5vdywgbGV0IG1lIGxvb2sgYXQgdGhlIGZvY3VzIHN5bWJvbHMuIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgLCBgYnBmX2l0ZXJfdW5peF9iYXRjaGAsIGFuZCBgYnBmX2l0ZXJfaW5pdF91bml4YC4gT2theSwgaXQgc2VlbXMgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggcmVwbGFjZXMgYGt2bWFsbG9jYCB3aXRoIGBrdm1hbGxvY19hcnJheWAgdG8gcHJldmVudCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBCUEYgaXRlcmF0b3IgYmF0Y2guIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIFVOSVggc29ja2V0IEJQRiBpdGVyYXRvcnMuIENydWNpYWxseSwgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgc28gZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gbWFrZSBzdXJlIHRoZSBmaXggd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGFuZCBhbmFseXppbmcgdGhlIHJlc3VsdHMsIGxldCYjMzk7cyBtYWtlIHRoZSBjYWxsIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl91bml4X2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX2luaXRfdW5peCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBrdm1hbGxvYyB3aXRoIGt2bWFsbG9jX2FycmF5IHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbiBvZiB0aGUgQlBGIGl0ZXJhdG9yIGJhdGNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBVTklYIHNvY2tldCBCUEYgaXRlcmF0b3JzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IHdvcmtzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl91bml4X2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX2luaXRfdW5peCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBrdm1hbGxvYyB3aXRoIGt2bWFsbG9jX2FycmF5IHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbiBvZiB0aGUgQlBGIGl0ZXJhdG9yIGJhdGNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBVTklYIHNvY2tldCBCUEYgaXRlcmF0b3JzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IHdvcmtzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQyOjUwLjEyNTU1Nzc3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0Nzg0MDU3ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVOSVhcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoXCIsXG4gICAgXCJicGZfaXRlcl91bml4X2JhdGNoXCIsXG4gICAgXCJicGZfaXRlcl9pbml0X3VuaXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBrdm1hbGxvYyB3aXRoIGt2bWFsbG9jX2FycmF5IHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbiBvZiB0aGUgQlBGIGl0ZXJhdG9yIGJhdGNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBVTklYIHNvY2tldCBCUEYgaXRlcmF0b3JzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IHdvcmtzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDI6NTAuMTI1NTY1NjI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODIzNjI3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmN2U1MDM0NDlhYjBkYzM1ZTkyZGZkZTJjY2MzNzkxOGQ3NGM5ZWUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDE2IDA4OjQyOjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguY1xcbmluZGV4IGY3YTlkNTVlZWU4YTEyLi42NjY0ZWFkNDYyMTY5ZiAxMDA2NDRcXG4tLS0gYS9uZXQvdW5peC9hZl91bml4LmNcXG4rKysgYi9uZXQvdW5peC9hZl91bml4LmNcXG5AQCAtMzY1OSw4ICszNjU5LDggQEAgc3RhdGljIGludCBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIsXFxuIHtcXG4gXFx0c3RydWN0IHNvY2sgKipuZXdfYmF0Y2g7XFxuIFxcbi1cXHRuZXdfYmF0Y2ggPSBrdm1hbGxvYyhzaXplb2YoKm5ld19iYXRjaCkgKiBuZXdfYmF0Y2hfc3osXFxuLVxcdFxcdFxcdCAgICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbitcXHRuZXdfYmF0Y2ggPSBrdm1hbGxvY19hcnJheShuZXdfYmF0Y2hfc3osIHNpemVvZigqbmV3X2JhdGNoKSxcXG4rXFx0XFx0XFx0XFx0ICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRpZiAoIW5ld19iYXRjaClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0Mjo1MC44MTEwNDk0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQwOTg1NTEyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVU5JWFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hcIixcbiAgICBcImJwZl9pdGVyX3VuaXhfYmF0Y2hcIixcbiAgICBcImJwZl9pdGVyX2luaXRfdW5peFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGt2bWFsbG9jIHdpdGgga3ZtYWxsb2NfYXJyYXkgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyBhbGxvY2F0aW9uIG9mIHRoZSBCUEYgaXRlcmF0b3IgYmF0Y2guIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIFVOSVggc29ja2V0IEJQRiBpdGVyYXRvcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgd29ya3MgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3ZTUwMzQ0OWFiMGRjMzVlOTJkZmRlMmNjYzM3OTE4ZDc0YzllZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAwODo0Mjo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguY1xuaW5kZXggZjdhOWQ1NWVlZThhMTIuLjY2NjRlYWQ0NjIxNjlmIDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jXG4rKysgYi9uZXQvdW5peC9hZl91bml4LmNcbkBAIC0zNjU5LDggKzM2NTksOCBAQCBzdGF0aWMgaW50IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcixcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqKm5ld19iYXRjaDtcbiBcbi1cdG5ld19iYXRjaCA9IGt2bWFsbG9jKHNpemVvZigqbmV3X2JhdGNoKSAqIG5ld19iYXRjaF9zeixcbi1cdFx0XHQgICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbitcdG5ld19iYXRjaCA9IGt2bWFsbG9jX2FycmF5KG5ld19iYXRjaF9zeiwgc2l6ZW9mKCpuZXdfYmF0Y2gpLFxuK1x0XHRcdFx0ICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuIFx0aWYgKCFuZXdfYmF0Y2gpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDI6NTAuODExMDUzNzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU0NzcxNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgVW5peCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvdW5peC9hZl91bml4LmNgLiBJdCBzZWVtcyB0aGV5J3ZlIHN3aXRjaGVkIGZyb20gdXNpbmcgYGt2bWFsbG9jYCB0byBga3ZtYWxsb2NfYXJyYXlgIHdoZW4gYWxsb2NhdGluZyBtZW1vcnkgZm9yIGEgbmV3IGJhdGNoLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgYGt2bWFsbG9jKHNpemVvZigqbmV3X2JhdGNoKSAqIG5ld19iYXRjaF9zeiwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pYCB0byBga3ZtYWxsb2NfYXJyYXkobmV3X2JhdGNoX3N6LCBzaXplb2YoKm5ld19iYXRjaCksIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKWAuIEZ1bmN0aW9uYWxseSwgaXQncyB0aGUgc2FtZSwgcmlnaHQ/IE5vLCB3YWl0Li4uIGl0J3MgYSAqc2lnbmlmaWNhbnQqIGltcHJvdmVtZW50IGZvciByb2J1c3RuZXNzLCBwcmltYXJpbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGFsbG9jYXRpb24gc2l6ZSBjYWxjdWxhdGlvbi4gR29vZCBjYXRjaC5cblxuQnV0LCBkb2VzIHRoaXMgY2hhbmdlIGFsdGVyIHRoZSBhY3R1YWwgZXhlY3V0aW9uIGZsb3c/IFVzaW5nIGBrdm1hbGxvY19hcnJheWAgaW5zdGVhZCBvZiBqdXN0IGBrdm1hbGxvY2AgY291bGQgaGF2ZSBzdWJ0bGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGhvdyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBpcyB1c2VkIGluIHRoaXMgZmlsZS4uLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhIGJpdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDI6NTQuODY1ODMwMDg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzMxNTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz0zNjUxPXN0YXRpYyB2b2lkIGJwZl9pdGVyX3VuaXhfcHV0X2JhdGNoKHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTYtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM2NTc6c3RhdGljIGludCBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIsXFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTgtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBuZXdfYmF0Y2hfc3opXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MzY3NT1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzcwMS1cXG5uZXQvdW5peC9hZl91bml4LmM6MzcwMjpcXHRpZiAoIXJlc2l6ZWQgXFx1MDAyNlxcdTAwMjYgIWJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBleHBlY3RlZCAqIDMgLyAyKSkge1xcbm5ldC91bml4L2FmX3VuaXguYy0zNzAzLVxcdFxcdHJlc2l6ZWQgPSB0cnVlO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTM4Njc9c3RhdGljIGludCBicGZfaXRlcl9pbml0X3VuaXgodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODc1LVxcbm5ldC91bml4L2FmX3VuaXguYzozODc2OlxcdGVyciA9IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBJTklUX0JBVENIX1NaKTtcXG5uZXQvdW5peC9hZl91bml4LmMtMzg3Ny1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQyOjU1LjE0OTE1NzY2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjkxMTMyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEl0ZXJhdG9yIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgb3V0IGBrdm1hbGxvY2AgZm9yIGBrdm1hbGxvY19hcnJheWAuIEhtbSwgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgaXQncyBiYXNpY2FsbHkgYSBmdW5jdGlvbiByZXBsYWNlbWVudC4gSSBzZWUgdGhhdCBga3ZtYWxsb2NfYXJyYXlgIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBkb2luZyBhIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93IGNoZWNrIGJlZm9yZSBjYWxsaW5nIHRoZSBvbGQgYGt2bWFsbG9jYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlLCBidXQgaG93IHNpZ25pZmljYW50PyBMZXQncyBmaWd1cmUgb3V0IGlmIGl0J3Mgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0LlxuXG5SaWdodCwgdGhlIGNoYW5nZSBpcyBpbiBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gQWgsIHRoYXQgcmluZ3MgYSBiZWxsISBUaGlzIGlzIHBhcnQgb2YgQlBGIGl0ZXJhdG9ycyBmb3IgdW5peCBzb2NrZXRzLiBUbyBwcm9wZXJseSB0ZXN0IHRoaXMsIEknbSBnb2luZyB0byBuZWVkIHRvIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIExldCBtZSBzZWUuLi4gSSdtIGd1ZXNzaW5nIHdlJ2xsIG5lZWQgYENPTkZJR19VTklYYCBmb3Igb2J2aW91cyByZWFzb25zLCBhbmQgcHJvYmFibHkgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG9vLCBnaXZlbiBpdHMgY29ubmVjdGlvbiB0byBCUEYuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBCUEYgY29uZmlnIGRlcGVuZGVuY3kg4oCTIGEgcXVpY2sgc2VhcmNoIGluIGBuZXQvdW5peC9hZl91bml4LmNgIGZvciBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgc2hvdWxkIGNvbmZpcm0gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDM6MDAuNDc4MjczNzc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTU0OTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz0xMDYwPXN0cnVjdCBwcm90byB1bml4X2RncmFtX3Byb3RvID0ge1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwNjUtXFx0LmJwZl9ieXBhc3NfZ2V0c29ja29wdFxcdD0gdW5peF9icGZfYnlwYXNzX2dldHNvY2tvcHQsXFxubmV0L3VuaXgvYWZfdW5peC5jOjEwNjY6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC91bml4L2FmX3VuaXguYy0xMDY3LVxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdW5peF9kZ3JhbV9icGZfdXBkYXRlX3Byb3RvLFxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTEwNzE9c3RydWN0IHByb3RvIHVuaXhfc3RyZWFtX3Byb3RvID0ge1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwNzYtXFx0LmJwZl9ieXBhc3NfZ2V0c29ja29wdFxcdD0gdW5peF9icGZfYnlwYXNzX2dldHNvY2tvcHQsXFxubmV0L3VuaXgvYWZfdW5peC5jOjEwNzc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC91bml4L2FmX3VuaXguYy0xMDc4LVxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdW5peF9zdHJlYW1fYnBmX3VwZGF0ZV9wcm90byxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0yNjcwPXN0YXRpYyBpbnQgdW5peF9kZ3JhbV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMjY3NC1cXG5uZXQvdW5peC9hZl91bml4LmM6MjY3NTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L3VuaXgvYWZfdW5peC5jLTI2NzYtXFx0Y29uc3Qgc3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KTtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zMTQwPXN0YXRpYyBpbnQgdW5peF9zdHJlYW1fcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzE1MC1cXG5uZXQvdW5peC9hZl91bml4LmM6MzE1MTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L3VuaXgvYWZfdW5peC5jLTMxNTItXFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MzU5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHVuaXhfc2VxX29wcyA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zNTk4LVxcbm5ldC91bml4L2FmX3VuaXguYzozNTk5OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvdW5peC9hZl91bml4LmMtMzYwMC1zdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSB7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzg1Nj1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHVuaXhfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODYwLVxcbm5ldC91bml4L2FmX3VuaXguYzozODYxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvdW5peC9hZl91bml4LmMtMzg2Mi1ERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zOTMzPXN0YXRpYyBpbnQgX19pbml0IGFmX3VuaXhfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM5NjAtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM5NjE6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxcbm5ldC91bml4L2FmX3VuaXguYy0zOTYyLVxcdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjAwLjc0NzgzNzc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwMDkxNjY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHVuZGVyIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGl0IGlzIGVuYWJsZWQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgdGhlIGNvZGUgaW5kaWNhdGVzIGl0J3MgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCB0aGF0J3MgYXBwZWFyaW5nIGFyb3VuZCBsaW5lIDM1OTkuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGFsc28gcmVsaWVzIG9uIGBDT05GSUdfUFJPQ19GU2AuIEkndmUgZ290IHRvIGVuc3VyZSBpdCdzIG5vdCBjb25kaXRpb25hbCBvbiAqYm90aCogYENPTkZJR19CUEZfU1lTQ0FMTGAgKmFuZCogYENPTkZJR19QUk9DX0ZTYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBieSBjaGVja2luZyBmdXJ0aGVyIGRvd247IGFoYSEgTGluZSAzODYxIHNob3dzIGAjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKWAuIE9rYXksIHNvIGl0ICppcyogcG9zc2libGUgdGhhdCBmdW5jdGlvbiBjYW4gYWxzbyByZWx5IG9uIGBDT05GSUdfUFJPQ19GU2AgdG9vLiBUaW1lIHRvIG9wZW4gYG5ldC91bml4L2FmX3VuaXguY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDM1OTkgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHVzZWQsIGFuZCBpZiB0aG9zZSBjb25maWd1cmF0aW9ucyByZWFsbHkgbWF0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjA0Ljk0ODc1NjM3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzU5NTpcXHRcXHQuc3RvcCAgID0gdW5peF9zZXFfc3RvcCxcXG4zNTk2OlxcdFxcdC5zaG93ICAgPSB1bml4X3NlcV9zaG93LFxcbjM1OTc6XFx0fTtcXG4zNTk4OlxcdFxcbjM1OTk6XFx0I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbjM2MDA6XFx0c3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUge1xcbjM2MDE6XFx0XFx0c3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwO1xcbjM2MDI6XFx0XFx0dW5zaWduZWQgaW50IGN1cl9zaztcXG4zNjAzOlxcdFxcdHVuc2lnbmVkIGludCBlbmRfc2s7XFxuMzYwNDpcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X3NrO1xcbjM2MDU6XFx0XFx0c3RydWN0IHNvY2sgKipiYXRjaDtcXG4zNjA2OlxcdFxcdGJvb2wgc3RfYnVja2V0X2RvbmU7XFxuMzYwNzpcXHR9O1xcbjM2MDg6XFx0XFxuMzYwOTpcXHRzdHJ1Y3QgYnBmX2l0ZXJfX3VuaXgge1xcbjM2MTA6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfaXRlcl9tZXRhICosIG1ldGEpO1xcbjM2MTE6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCB1bml4X3NvY2sgKiwgdW5peF9zayk7XFxuMzYxMjpcXHRcXHR1aWRfdCB1aWQgX19hbGlnbmVkKDgpO1xcbjM2MTM6XFx0fTtcXG4zNjE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzowNC45NDg5MzczNzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzExMjA5NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJQRiBTeXNjYWxsIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfVU5JWGAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgYENPTkZJR19VTklYYCAqYWJzb2x1dGVseSogbmVjZXNzYXJ5IGZvciB3aGF0IEknbSB0cnlpbmcgdG8gZG8/IEkgcmVjYWxsIGl0IGJlaW5nIGxpbmtlZCB0byB0aGUgYG5ldC91bml4L2FmX3VuaXguY2AgZmlsZSwgc28gSSBiZWxpZXZlIHRoZSBhbnN3ZXIgaXMgeWVzLiBOb3csIHJlZ2FyZGluZyBgQ09ORklHX1BST0NfRlNgLCB0aGlzIHNlZW1zIHJlbGV2YW50IGJlY2F1c2UgYGJwZl9pdGVyX3JlZ2lzdGVyYCBhcHBlYXJzIHRvIGJlIGd1YXJkZWQgYnkgaXQuIEp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYW5kIHZlcmlmeSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIExldCBtZSBnbyBmaW5kIGxpbmUgMzg2MSB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzowOC4yNjAxNDkyMDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L2FmX3VuaXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODU1OlxcdFxcbjM4NTY6XFx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB1bml4X25ldF9vcHMgPSB7XFxuMzg1NzpcXHRcXHQuaW5pdCA9IHVuaXhfbmV0X2luaXQsXFxuMzg1ODpcXHRcXHQuZXhpdCA9IHVuaXhfbmV0X2V4aXQsXFxuMzg1OTpcXHR9O1xcbjM4NjA6XFx0XFxuMzg2MTpcXHQjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxuMzg2MjpcXHRERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4zODYzOlxcdFxcdFxcdCAgICAgc3RydWN0IHVuaXhfc29jayAqdW5peF9zaywgdWlkX3QgdWlkKVxcbjM4NjQ6XFx0XFxuMzg2NTpcXHQjZGVmaW5lIElOSVRfQkFUQ0hfU1ogMTZcXG4zODY2OlxcdFxcbjM4Njc6XFx0c3RhdGljIGludCBicGZfaXRlcl9pbml0X3VuaXgodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4zODY4OlxcdHtcXG4zODY5OlxcdFxcdHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyID0gcHJpdl9kYXRhO1xcbjM4NzA6XFx0XFx0aW50IGVycjtcXG4zODcxOlxcdFxcbjM4NzI6XFx0XFx0ZXJyID0gYnBmX2l0ZXJfaW5pdF9zZXFfbmV0KHByaXZfZGF0YSwgYXV4KTtcXG4zODczOlxcdFxcdGlmIChlcnIpXFxuMzg3NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzowOC4yNjAzMzA0MjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5NTc0MTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBJdGVyYXRpb24gQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBCUEYgaXRlcmF0aW9uIGNvZGUsIGFuZCBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IGBicGZfaXRlcl9pbml0X3VuaXhgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIFNwZWNpZmljYWxseSwgaXQncyBvbmx5IGluY2x1ZGVkIGlmIGJvdGggYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUFJPQ19GU2AgYXJlIGRlZmluZWQuIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0IGdpdmVzIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiB3aGVuIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IGFjdGl2ZS5cblxuTm93LCBhIHJlbGF0ZWQgZnVuY3Rpb24sIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgLCBpcyBkZWZpbmVkIGVhcmxpZXIgaW4gdGhlIGZpbGUuIEludGVyZXN0aW5nLCBiZWNhdXNlIEkgc2VlIHRoYXQgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAgaXMgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBieSAqYm90aCogYGJwZl9pdGVyX2luaXRfdW5peGAgYW5kIGBicGZfaXRlcl91bml4X2JhdGNoYC4gVGhpcyBsaWtlbHkgbWVhbnMgaXQgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBvciByZXNpemluZyBvZiBzb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHVzZWQgaW4gdGhlIGl0ZXJhdGlvbiBwcm9jZXNzLCBhbmQgdGhhdCBtYWtlcyBzZW5zZSBmb3IgZWZmaWNpZW5jeSdzIHNha2UuXG5cblNpbmNlIEkndmUgc3R1bWJsZWQgdXBvbiBgYnBmX2l0ZXJfdW5peF9iYXRjaGAgSSB3YW50IHRvIGNoZWNrIGl0cyB1c2FnZS4gU28sIHdoZXJlIGlzIHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgY2FsbGVkPyBHb3R0YSB0cmFjZSB0aGUgZGF0YSBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDM6MTIuMzU2MDc1MjY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA0NTQ0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfdW5peF9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTM2NTc9c3RhdGljIGludCBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzY3NC1cXG5uZXQvdW5peC9hZl91bml4LmM6MzY3NTpzdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NzYtXFx0XFx0XFx0XFx0XFx0bG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MzcxMD1zdGF0aWMgdm9pZCAqYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM3MTctXFx0ICovXFxubmV0L3VuaXgvYWZfdW5peC5jOjM3MTg6XFx0cmV0dXJuIGJwZl9pdGVyX3VuaXhfYmF0Y2goc2VxLCBwb3MpO1xcbm5ldC91bml4L2FmX3VuaXguYy0zNzE5LX1cXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zNzIxPXN0YXRpYyB2b2lkICpicGZfaXRlcl91bml4X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zNzM3LVxcdGVsc2VcXG5uZXQvdW5peC9hZl91bml4LmM6MzczODpcXHRcXHRzayA9IGJwZl9pdGVyX3VuaXhfYmF0Y2goc2VxLCBwb3MpO1xcbm5ldC91bml4L2FmX3VuaXguYy0zNzM5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzoxMi44NDY1NDQxNjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2NDI3NTY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgSXRlcmF0b3JzIGFuZCBVTklYIFNvY2tldHMqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0YCBhbmQgYGJwZl9pdGVyX3VuaXhfc2VxX25leHRgIGFyZSBpbXBsZW1lbnRlZC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBCUEYgaW50ZXJhY3RzIHdpdGggVU5JWCBzb2NrZXQgZGF0YS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgYXJlIHRoZXkgZ3VhcmRlZCBieSB0aG9zZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19QUk9DX0ZTYCBkZWZpbmVzPyBJIGhhdmUgYSBmZWVsaW5nIHRoZXkgbWlnaHQgYmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIFRvIGNvbmZpcm0gdGhhdCwgbGV0J3MganVtcCBzdHJhaWdodCB0byBsaW5lIDM3MTAgb2YgdGhlIHJlbGV2YW50IGNvZGUuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB2ZXJpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzoyMC4xMTA4MjM5NzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L2FmX3VuaXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzAwOlxcdFxcdH1cXG4zNzAxOlxcdFxcbjM3MDI6XFx0XFx0aWYgKCFyZXNpemVkIFxcdTAwMjZcXHUwMDI2ICFicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goaXRlciwgZXhwZWN0ZWQgKiAzIC8gMikpIHtcXG4zNzAzOlxcdFxcdFxcdHJlc2l6ZWQgPSB0cnVlO1xcbjM3MDQ6XFx0XFx0XFx0Z290byBhZ2FpbjtcXG4zNzA1OlxcdFxcdH1cXG4zNzA2OlxcdFxcbjM3MDc6XFx0XFx0cmV0dXJuIHNrO1xcbjM3MDg6XFx0fVxcbjM3MDk6XFx0XFxuMzcxMDpcXHRzdGF0aWMgdm9pZCAqYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbjM3MTE6XFx0e1xcbjM3MTI6XFx0XFx0aWYgKCEqcG9zKVxcbjM3MTM6XFx0XFx0XFx0cmV0dXJuIFNFUV9TVEFSVF9UT0tFTjtcXG4zNzE0OlxcdFxcbjM3MTU6XFx0XFx0LyogYnBmIGl0ZXIgZG9lcyBub3Qgc3VwcG9ydCBsc2Vlaywgc28gaXQgYWx3YXlzXFxuMzcxNjpcXHRcXHQgKiBjb250aW51ZSBmcm9tIHdoZXJlIGl0IHdhcyBzdG9wKCktcGVkLlxcbjM3MTc6XFx0XFx0ICovXFxuMzcxODpcXHRcXHRyZXR1cm4gYnBmX2l0ZXJfdW5peF9iYXRjaChzZXEsIHBvcyk7XFxuMzcxOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjIwLjExMTA1MDk3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODUwODAwMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0YCBGdW5jdGlvbiBEZWZpbml0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnRgIGZ1bmN0aW9uLiBJIHNhdyBpdHMgZGVmaW5pdGlvbiBhcm91bmQgbGluZSAzNzEwLCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBpdHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgaW1tZWRpYXRlbHkgbm90aWNlZCB0aGF0IHRoZSByZWxldmFudCBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgIGJsb2NrIGJlZ2lucyBhcm91bmQgbGluZSAzODYxLlxuXG5BIHF1aWNrIGRvdWJsZS1jaGVjay4uLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGF0IGBicGZfaXRlcl91bml4X3NlcV9zdGFydGAgZGVmaW5pdGlvbiBpcyBndWFyZGVkLiBJdCBsb29rcyBsaWtlIGl0J3MgKnVuZGVyKiB0aGUgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGJsb2NrLCB3aGljaCBzdGFydGVkIGJhY2sgYXQgbGluZSAzNTk5LiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBhYm91dCB0aGVzZSBwcmVwcm9jZXNzb3IgY29uZGl0aW9ucy4gQmFjayB0byByZS1leGFtaW5lIGxpbmUgMzg2MSB0byBjb25maXJtIHRoZSBpbmNsdXNpb24gY29uZGl0aW9ucyBhcmUgY29ycmVjdCBhbmQgdGhhdCBJJ20gaW50ZXJwcmV0aW5nIHRoaXMgY29ycmVjdGx5LiBJdCdzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlc2UgbWFjcm9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDM6MjMuOTYxODUzNjkxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzg0MDpcXHRcXHRyZW1vdmVfcHJvY19lbnRyeShcXFwidW5peFxcXCIsIG5ldC1cXHUwMDNlcHJvY19uZXQpO1xcbjM4NDE6XFx0ZXJyX3N5c2N0bDpcXG4zODQyOlxcdCNlbmRpZlxcbjM4NDM6XFx0XFx0dW5peF9zeXNjdGxfdW5yZWdpc3RlcihuZXQpO1xcbjM4NDQ6XFx0b3V0OlxcbjM4NDU6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzg0NjpcXHR9XFxuMzg0NzpcXHRcXG4zODQ4OlxcdHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgdW5peF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxuMzg0OTpcXHR7XFxuMzg1MDpcXHRcXHRrdmZyZWUobmV0LVxcdTAwM2V1bngudGFibGUuYnVja2V0cyk7XFxuMzg1MTpcXHRcXHRrdmZyZWUobmV0LVxcdTAwM2V1bngudGFibGUubG9ja3MpO1xcbjM4NTI6XFx0XFx0dW5peF9zeXNjdGxfdW5yZWdpc3RlcihuZXQpO1xcbjM4NTM6XFx0XFx0cmVtb3ZlX3Byb2NfZW50cnkoXFxcInVuaXhcXFwiLCBuZXQtXFx1MDAzZXByb2NfbmV0KTtcXG4zODU0OlxcdH1cXG4zODU1OlxcdFxcbjM4NTY6XFx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB1bml4X25ldF9vcHMgPSB7XFxuMzg1NzpcXHRcXHQuaW5pdCA9IHVuaXhfbmV0X2luaXQsXFxuMzg1ODpcXHRcXHQuZXhpdCA9IHVuaXhfbmV0X2V4aXQsXFxuMzg1OTpcXHR9O1xcbjM4NjA6XFx0XFxuMzg2MTpcXHQjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxuMzg2MjpcXHRERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4zODYzOlxcdFxcdFxcdCAgICAgc3RydWN0IHVuaXhfc29jayAqdW5peF9zaywgdWlkX3QgdWlkKVxcbjM4NjQ6XFx0XFxuMzg2NTpcXHQjZGVmaW5lIElOSVRfQkFUQ0hfU1ogMTZcXG4zODY2OlxcdFxcbjM4Njc6XFx0c3RhdGljIGludCBicGZfaXRlcl9pbml0X3VuaXgodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4zODY4OlxcdHtcXG4zODY5OlxcdFxcdHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyID0gcHJpdl9kYXRhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzoyMy45NjIwNjE3ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4NjY2NjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRiBJdGVyYXRpb24gQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBpdGVyYXRpb24gY29kZS4gUmlnaHQgYXdheSwgSSBzZWUgdGhhdCBgYnBmX2l0ZXJfaW5pdF91bml4YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBpdCdzIGRlZmluZWQgdW5kZXIgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19QUk9DX0ZTYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBsaWtlbHkgcmVsYXRlZCB0byBpbnRlcmFjdGluZyB3aXRoIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIFRoZW4gSSBzcG90IGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIOKAkyBhZ2FpbiwgY29uZGl0aW9uYWxseSBjb21waWxlZCwgYnV0IGp1c3QgdW5kZXIgYENPTkZJR19CUEZfU1lTQ0FMTGAuIE5vdywgYSByZWQgZmxhZyBnb2VzIHVwLiBgcmVhbGxvY19iYXRjaGAgc291bmRzIHNwZWNpZmljLCBhbmQgcG90ZW50aWFsbHkgaW1wb3J0YW50LlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcy4gSSB3b25kZXIgaWYgaXQncyB1c2VkIGVsc2V3aGVyZS4gTGV0IG1lIGdvIGFoZWFkIGFuZCBjcm9zcy1yZWZlcmVuY2UgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAuIEdvdHRhIGNoZWNrIGZvciBhbnkgbWlzc2VkIGRlcGVuZGVuY2llcyBvciB1bmV4cGVjdGVkIHVzZXMuIFRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgbWFraW5nIG1lIGN1cmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzoyNy43NDg3MzAyNDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTYzOTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz0zNjUxPXN0YXRpYyB2b2lkIGJwZl9pdGVyX3VuaXhfcHV0X2JhdGNoKHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTYtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM2NTc6c3RhdGljIGludCBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIsXFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTgtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBuZXdfYmF0Y2hfc3opXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MzY3NT1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzcwMS1cXG5uZXQvdW5peC9hZl91bml4LmM6MzcwMjpcXHRpZiAoIXJlc2l6ZWQgXFx1MDAyNlxcdTAwMjYgIWJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBleHBlY3RlZCAqIDMgLyAyKSkge1xcbm5ldC91bml4L2FmX3VuaXguYy0zNzAzLVxcdFxcdHJlc2l6ZWQgPSB0cnVlO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTM4Njc9c3RhdGljIGludCBicGZfaXRlcl9pbml0X3VuaXgodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODc1LVxcbm5ldC91bml4L2FmX3VuaXguYzozODc2OlxcdGVyciA9IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBJTklUX0JBVENIX1NaKTtcXG5uZXQvdW5peC9hZl91bml4LmMtMzg3Ny1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjI3Ljk1NDM4MTAwNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTIxMzA4NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVW5peCBTb2NrZXQgQlBGIEl0ZXJhdG9yIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBCUEYgaXRlcmF0b3JzIGZvciBVbml4IHNvY2tldHMuIEkgc2VlIHRoaXMgZnVuY3Rpb24sIGBicGZfaXRlcl91bml4X2JhdGNoYCwgYW5kIGFub3RoZXIgb25lLCBgYnBmX2l0ZXJfaW5pdF91bml4YC4gU2VlbXMgbGlrZSBib3RoIGFyZSBjcnVjaWFsLiBUaGF0IG1lYW5zIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBnb2luZyB0byBiZSBgQ09ORklHX1VOSVhgLCBkZWZpbml0ZWx5LCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggVW5peCBzb2NrZXRzLCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYmVjYXVzZSBpdCdzIEJQRiByZWxhdGVkLCBhbmQgdGhlbiBhbHNvIGBDT05GSUdfUFJPQ19GU2AgYmVjYXVzZSBgYnBmX2l0ZXJfaW5pdF91bml4YCBsaXZlcyB1bmRlciB0aGF0IGNvbmZpZy5cblxuUmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgdHlwZXMuIE9rYXksIGBDT05GSUdfVU5JWGAgaXMgYSBib29sZWFuIG9yIHRyaXN0YXRlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBib29sZWFuLCBhbmQgYENPTkZJR19QUk9DX0ZTYCBpcyBib29sZWFuLiBPZiB0aGVzZSwgYENPTkZJR19VTklYYCBpcyB0aGUgbW9zdCBjcml0aWNhbC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1VOSVhgIGlzIGFjdHVhbGx5IG5lZWRlZC4gQWgsIHllcywgaXQncyBkZWZpbmVkIGluIGBuZXQvdW5peC9hZl91bml4LmNgLiBPa2F5LCBzbyBgVU5JWGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgUFJPQ19GU2AuXG5cbkhhbmcgb24sIHRob3VnaCwgYENPTkZJR19QUk9DX0ZTYCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdC4gU28sIHRoYXQncyBsZXNzIG9mIGEgY29uY2Vybi4gVGhlIGNvcmUgZnVuY3Rpb24gdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgd2lsbCBiZSBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gV2FpdCBhIHNlY29uZOKApiB0aGF0J3MgYSAqc3RhdGljKiBmdW5jdGlvbi4gSG1tLCBjYW4gd2UgcmVhY2ggaXQgZnJvbSB1c2Vyc3BhY2U/IFllcywgd2UgY2FuLCB0aHJvdWdoIEJQRiBpdGVyYXRvcnMsIHNvIGl0J3MgYSB2YWxpZCB0YXJnZXQuXG5cbkFscmlnaHQsIGxldCdzIG5vdyBsb29rIGF0IGBicGZfaXRlcl91bml4X2JhdGNoYCBiZWNhdXNlIGl0J3MgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGZ1enplZC4gSXQncyBjYWxsZWQgZnJvbSBgYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnRgIGFuZCBgYnBmX2l0ZXJfdW5peF9zZXFfbmV4dGAuIFRoZXNlLCBpbiB0dXJuLCBhcmUgcGFydCBvZiBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYC4gT2theSwgdGhhdCdzIHRoZSB3aG9sZSBjaGFpbi4gSSBoYXZlIGEgY2xlYXJlciBwaWN0dXJlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzozNC44NzU2OTQwNzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjA2MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3VuaXhfc2VxX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTM3NzI9c3RhdGljIHZvaWQgYnBmX2l0ZXJfdW5peF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zNzg4LVxcbm5ldC91bml4L2FmX3VuaXguYzozNzg5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX2l0ZXJfdW5peF9zZXFfb3BzID0ge1xcbm5ldC91bml4L2FmX3VuaXguYy0zNzkwLVxcdC5zdGFydFxcdD0gYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnQsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIHVuaXhfc2VxX2luZm8gPSB7XFxubmV0L3VuaXgvYWZfdW5peC5jOjM4OTQ6XFx0LnNlcV9vcHNcXHRcXHQ9IFxcdTAwMjZicGZfaXRlcl91bml4X3NlcV9vcHMsXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4OTUtXFx0LmluaXRfc2VxX3ByaXZhdGVcXHQ9IGJwZl9pdGVyX2luaXRfdW5peCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDM6MzQuOTY0OTI2NTM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NTIyNTYzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEl0ZXJhdGlvbiBhbmQgSW50ZWdlciBPdmVyZmxvdyBWdWxuZXJhYmlsaXR5OiBBIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYGJwZl9pdGVyX3VuaXhfc2VxX29wc2AgaXMgZW1wbG95ZWQgd2l0aGluIGB1bml4X3NlcV9pbmZvYCwgYW5kIHRoYXQgYHVuaXhfc2VxX2luZm9gIGl0c2VsZiBpcyByZWdpc3RlcmVkIHVzaW5nIGBicGZfaXRlcl9yZWdpc3RlcmAuICBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHZpYSBCUEYsIHdoaWNoIG1ha2VzIGl0IGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZy4gR2l2ZW4gdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYGt2bWFsbG9jYCB3aXRoIGBrdm1hbGxvY19hcnJheWAsIHRoZSBhbnN3ZXIncyBsaWtlbHkgeWVzLiBCdXQsIGxldCdzIGNvbmZpcm0gdGhlIGRldGFpbHMuXG5cbkFoLCByaWdodCwgdGhlIGNvZGUgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZDpcblxuYGBgY1xuLVx0bmV3X2JhdGNoID0ga3ZtYWxsb2Moc2l6ZW9mKCpuZXdfYmF0Y2gpICogbmV3X2JhdGNoX3N6LFxuLVx0XHRcdCAgICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuK1x0bmV3X2JhdGNoID0ga3ZtYWxsb2NfYXJyYXkobmV3X2JhdGNoX3N6LCBzaXplb2YoKm5ld19iYXRjaCksXG4rXHRcdFx0XHQgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG5gYGBcblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgc2VjdXJpdHkgYW5kIHJvYnVzdG5lc3MgZml4LCBtZWFudCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLiAgVGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgKmZ1bmN0aW9uYWxseSogY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdz8gIGBrdm1hbGxvY19hcnJheWAgbm93IGluY2x1ZGVzIGFuIG92ZXJmbG93IGNoZWNrIG9uIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQgaXQgd2lsbCByZXR1cm4gYE5VTExgIGlmIGl0IG92ZXJmbG93cyBiZWZvcmUgY2FsbGluZyBga3ZtYWxsb2NgLiBUaGVyZWZvcmUgdGhlIGFsbG9jYXRpb24gZmFpbHMgcmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGEgc21hbGxlciBidWZmZXIgd2hpY2ggY291bGQgbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzLiBUaGlzIG1lYW5zLCB5ZXMsIHRoZXJlICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGluIGhvdyB0aGUgY29kZSBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcywgd2hlcmUgbGFyZ2UgYG5ld19iYXRjaF9zemAgdmFsdWVzIHdvdWxkIGNhdXNlIG92ZXJmbG93cy4gIFRoYXQgbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQlBGIGl0ZXJhdG9yIHdvcmtzIGNvcnJlY3RseSB3aXRoIHRoZXNlIG5ldyBlcnJvciBjb25kaXRpb25zIGFuZCB0aGF0IGl0IGRvZXNuJ3QgY3Jhc2ggb3IgbGVhayBtZW1vcnkgd2hlbiB0aGVzZSBuZXcgZXJyb3IgY29uZGl0aW9ucyBhcmUgdHJpZ2dlcmVkLlxuXG5UaGUgaW5pdGlhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCwgYGJwZl9pdGVyX3VuaXhfYmF0Y2hgLCBhbmQgYGJwZl9pdGVyX2luaXRfdW5peGAuIEhhbmcgb24sIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gR2l2ZW4gdGhhdCBpdCdzIGNoYW5nZWQsIGFuZCB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGFsbG9jYXRpb24gZXJyb3Igd291bGQgYmUgdHJpZ2dlcmVkLCBJIHRoaW5rIGl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIGFuZCBgYnBmX2l0ZXJfdW5peF9iYXRjaGAgZm9yIGZ1enppbmcuXG5cbkZvciBjb25maWd1cmF0aW9ucywgaXQncyBgVU5JWGAgYW5kIGBCUEZfU1lTQ0FMTGAgdGhhdCB3ZSBuZWVkLlxuXG5JIHRoaW5rIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiBgQ09ORklHX1VOSVhgIGlzIHRoZSByaWdodCBjb25maWcgbmFtZSB0aG91Z2gsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0Mzo0Mi45MTcxODcxMzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDk1NzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVU5JWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L0tjb25maWctNS1cXG5uZXQvdW5peC9LY29uZmlnOjY6Y29uZmlnIFVOSVhcXG5uZXQvdW5peC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVW5peCBkb21haW4gc29ja2V0c1xcXCJcXG4tLVxcbm5ldC91bml4L0tjb25maWc9MTk9Y29uZmlnXFx0QUZfVU5JWF9PT0JcXG4tLVxcbm5ldC91bml4L0tjb25maWctMjUtXFxubmV0L3VuaXgvS2NvbmZpZzoyNjpjb25maWcgVU5JWF9ESUFHXFxubmV0L3VuaXgvS2NvbmZpZy0yNy1cXHR0cmlzdGF0ZSBcXFwiVU5JWDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0Mzo0My40NjIxNTA1OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg0MDk0OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVU5JWCBhbmQgQlBGX1NZU0NBTEwgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYFVOSVhgIGFuZCBgQlBGX1NZU0NBTExgIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHByb3Blcmx5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbGwgcXVpY2tseSB2ZXJpZnkgaWYgYENPTkZJR19QUk9DX0ZTYCBpcyByZXF1aXJlZCBpbiB0aGlzIHNjZW5hcmlvLiBBaCwgbG9va3MgbGlrZSBpdCBpcy4gSSBjYW4gc2VlIHRoYXQgYGJwZl9pdGVyX2luaXRfdW5peGAgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgLiBNYWtlcyBzZW5zZS5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBpcyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBjb21waWxlZCBpZiBgQ09ORklHX1BST0NfRlNgIGlzICpub3QqIGVuYWJsZWQ/IFRoYXQncyB0aGUgcG90ZW50aWFsIHdyaW5rbGUgSSBuZWVkIHRvIGlyb24gb3V0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUuLi4gbGV0J3MgaGVhZCBvdmVyIHRvIGBuZXQvdW5peC9hZl91bml4LmNgIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzg2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjQ4LjE0NjI0ODg3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzQxODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTM2NTE9c3RhdGljIHZvaWQgYnBmX2l0ZXJfdW5peF9wdXRfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzY1Ni1cXG5uZXQvdW5peC9hZl91bml4LmM6MzY1NzpzdGF0aWMgaW50IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcixcXG5uZXQvdW5peC9hZl91bml4LmMtMzY1OC1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG5ld19iYXRjaF9zeilcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zNjc1PXN0YXRpYyBzdHJ1Y3Qgc29jayAqYnBmX2l0ZXJfdW5peF9iYXRjaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zNzAxLVxcbm5ldC91bml4L2FmX3VuaXguYzozNzAyOlxcdGlmICghcmVzaXplZCBcXHUwMDI2XFx1MDAyNiAhYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoKGl0ZXIsIGV4cGVjdGVkICogMyAvIDIpKSB7XFxubmV0L3VuaXgvYWZfdW5peC5jLTM3MDMtXFx0XFx0cmVzaXplZCA9IHRydWU7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzg2Nz1zdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfdW5peCh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4NzUtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM4NzY6XFx0ZXJyID0gYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoKGl0ZXIsIElOSVRfQkFUQ0hfU1opO1xcbm5ldC91bml4L2FmX3VuaXguYy0zODc3LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDM6NDguMjUxNTk4MDM4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTUyNTYxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAg4oCTIGl0J3MgZGVmaW5lZCBhdCBsaW5lIDM2NTcuIFRoZSBjb2RlJ3Mgc3RydWN0dXJlIHN1Z2dlc3RzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc3RyYXRlZ3ksIHdoaWNoIG1lYW5zIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEZpcnN0LCBJIHNlZSB0aGF0IHRoZSBvdmVyYWxsIEJQRiBzeXN0ZW0gY2FsbCBzdXBwb3J0IGlzIGVuYWJsZWQgd2l0aCBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgd2hpY2ggYmVnaW5zIG9uIGxpbmUgMzU5OS4gVGhhdCdzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlLiBUaGVuLCB0aGVyZSdzIGFub3RoZXIgY2hlY2sgdGhhdCBpbmNsdWRlcyBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgIHN0YXJ0aW5nIG9uIGxpbmUgMzg2MS5cblxuU28sIGNsZWFybHksIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIGdldHMgY29tcGlsZWQgKmV2ZW4qIGlmIGBDT05GSUdfUFJPQ19GU2AgaXNuJ3Qgc2V0LiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgd2lkZXIgYXBwbGljYWJpbGl0eSB0aGFuIGp1c3QgYmVpbmcgY29uZmluZWQgdG8gcHJvY2ZzLXJlbGF0ZWQgb3BlcmF0aW9ucy4gQnV0IGNvbXBpbGF0aW9uIGRvZXNuJ3QgZXF1YWwgcmVhY2hhYmlsaXR5LiBJJ20gYXNraW5nIG15c2VsZiwgZXZlbiBpZiBpdCdzIGNvbXBpbGVkLCAqaG93KiBjYW4gSSBnZXQgdG8gdGhpcyBmdW5jdGlvbj9cblxuVGhlIGNvZGUgcmV2ZWFscyB0aGF0IGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIGlzIGNhbGxlZCBieSBgYnBmX2l0ZXJfdW5peF9iYXRjaGAuICBgYnBmX2l0ZXJfdW5peF9iYXRjaGAsIGluIHR1cm4sIGlzIHVzZWQgd2l0aGluIGBicGZfaXRlcl91bml4X3NlcV9zdGFydGAgYW5kIGBicGZfaXRlcl91bml4X3NlcV9uZXh0YC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyBmb3IgKnRob3NlKiBmdW5jdGlvbnMgdG8gYmUgdHJpZ2dlcmVkLiBJZiB0aG9zZSBjYW4gYmUgdXNlZCB3aXRob3V0IGBDT05GSUdfUFJPQ19GU2AsIHRoZW4gdGhlIHBhdGggdG8gYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAgaXMgb3Blbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNrIGRvd24gdGhlIHVzYWdlIG9mIGBicGZfaXRlcl91bml4X3NlcV9vcHNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE0NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0Mzo1My4xNDY4NTgyNzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzIyNzIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXRlcl91bml4X3NlcV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz0zNzcyPXN0YXRpYyB2b2lkIGJwZl9pdGVyX3VuaXhfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzc4OC1cXG5uZXQvdW5peC9hZl91bml4LmM6Mzc4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9pdGVyX3VuaXhfc2VxX29wcyA9IHtcXG5uZXQvdW5peC9hZl91bml4LmMtMzc5MC1cXHQuc3RhcnRcXHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0LFxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTM4OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyB1bml4X3NlcV9pbmZvID0ge1xcbm5ldC91bml4L2FmX3VuaXguYzozODk0OlxcdC5zZXFfb3BzXFx0XFx0PSBcXHUwMDI2YnBmX2l0ZXJfdW5peF9zZXFfb3BzLFxcbm5ldC91bml4L2FmX3VuaXguYy0zODk1LVxcdC5pbml0X3NlcV9wcml2YXRlXFx0PSBicGZfaXRlcl9pbml0X3VuaXgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjUzLjI1MDA5MzEwM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDY0NTE5MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHVuaXhfc2VxX2luZm9gIERlZmluaXRpb24gYW5kIEl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHplcm9pbmcgaW4gb24gYHVuaXhfc2VxX2luZm9gLiBJdCdzIGRlZmluZWQgYXQgbGluZSAzODkzLCBhbmQgdGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgaXQncyBuZXN0ZWQgdW5kZXIgYW4gYCNpZmAgY29uZGl0aW9uOiBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHNvbWV0aGluZyBpbXBvcnRhbnQgYWJvdXQgaXRzIGRlcGVuZGVuY3kgc3RydWN0dXJlLiBJZiBgQ09ORklHX1BST0NfRlNgIGlzbid0IGVuYWJsZWQsIHRoZW4gYHVuaXhfc2VxX2luZm9gIGlzbid0IGV2ZW4gKmRlZmluZWQqLiBUaGF0IG1lYW5zIGBicGZfaXRlcl91bml4X3NlcV9vcHNgIOKAkyB3aGljaCBwcmVzdW1hYmx5IHJlbGllcyBvbiBgdW5peF9zZXFfaW5mb2Ag4oCTIHdvbid0IGJlIHVzZWQgZWl0aGVyLlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBJZiBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYCBpc24ndCB1c2VkLCB0aGUgY29tcGlsZXIgc2hvdWxkIGZsYWcgaXQgYXMgYW4gdW51c2VkIHZhcmlhYmxlLCByaWdodD8gVW5sZXNzLi4uIHVubGVzcyBpdCdzICphbHNvKiBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIHRoYXQgc2FtZSBgI2lmYC4gSXQncyBjcnVjaWFsIHRoYXQgdGhhdCBpcyB0aGUgY2FzZSwgb3Igd2UnbGwgYmUgZ2V0dGluZyBzb21lIHNwdXJpb3VzIHdhcm5pbmdzLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byB2ZXJpZnkgdGhpcy5cblxuVG8gYmUgY2VydGFpbiwgbGV0J3MgbG9vayBmb3IgYW5vdGhlciBgI2lmYCBzdGF0ZW1lbnQgYXJvdW5kIGxpbmUgMzc4OS4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDI1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjU4LjMxNDYxNzEzN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzAwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3ODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM3ODA6XFx0XFx0XFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFxcdTAwMjZtZXRhLCB0cnVlKTtcXG4zNzgxOlxcdFxcdFxcdGlmIChwcm9nKVxcbjM3ODI6XFx0XFx0XFx0XFx0KHZvaWQpdW5peF9wcm9nX3NlcV9zaG93KHByb2csIFxcdTAwMjZtZXRhLCB2LCAwKTtcXG4zNzgzOlxcdFxcdH1cXG4zNzg0OlxcdFxcbjM3ODU6XFx0XFx0aWYgKGl0ZXItXFx1MDAzZWN1cl9zayBcXHUwMDNjIGl0ZXItXFx1MDAzZWVuZF9zaylcXG4zNzg2OlxcdFxcdFxcdGJwZl9pdGVyX3VuaXhfcHV0X2JhdGNoKGl0ZXIpO1xcbjM3ODc6XFx0fVxcbjM3ODg6XFx0XFxuMzc4OTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9pdGVyX3VuaXhfc2VxX29wcyA9IHtcXG4zNzkwOlxcdFxcdC5zdGFydFxcdD0gYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnQsXFxuMzc5MTpcXHRcXHQubmV4dFxcdD0gYnBmX2l0ZXJfdW5peF9zZXFfbmV4dCxcXG4zNzkyOlxcdFxcdC5zdG9wXFx0PSBicGZfaXRlcl91bml4X3NlcV9zdG9wLFxcbjM3OTM6XFx0XFx0LnNob3dcXHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3Nob3csXFxuMzc5NDpcXHR9O1xcbjM3OTU6XFx0I2VuZGlmXFxuMzc5NjpcXHQjZW5kaWZcXG4zNzk3OlxcdFxcbjM3OTg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHVuaXhfZmFtaWx5X29wcyA9IHtcXG4zNzk5OlxcdFxcdC5mYW1pbHkgPSBQRl9VTklYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0Mzo1OC4zMTQ4ODk3NzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNDE2MTI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRG91YmxlIGAjZW5kaWZgIERpc2NvdmVyeSoqXG5cblJpZ2h0LCBzbyBJJ3ZlIHNwb3R0ZWQgc29tZXRoaW5nIGEgYml0IHVudXN1YWwgaGVyZSDigJMgdHdvIHNlcGFyYXRlIGAjZW5kaWZgIGRpcmVjdGl2ZXMgc3RhY2tlZCB1cCBhdCBsaW5lcyAzNzk1IGFuZCAzNzk2LiBUaGF0J3MgYSByZWQgZmxhZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgZG8gdGhlc2UgcHJlcHJvY2Vzc29yIGJsb2NrcyAqYWN0dWFsbHkqIGJlZ2luP1wiIEkgbmVlZCB0byBxdWlja2x5IHRyYWNlIGJhY2sgYW5kIHNlZSBpZiB0aGVzZSBhcmUgY29ycmVjdGx5IHBhaXJlZCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3IgYCNpZmAgZGlyZWN0aXZlcy4gVGhpcyBjb3VsZCBiZSBhIHNpbXBsZSB0eXBvLCBhIG1pc3VuZGVyc3Rvb2QgbmVzdGluZyBpc3N1ZSwgb3IgcG90ZW50aWFsbHkgYSBtb3JlIHNlcmlvdXMgbG9naWNhbCBlcnJvciBpbiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIFRpbWUgdG8gZGl2ZSBpbiBhbmQgaW52ZXN0aWdhdGUgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhlc2UgYmxvY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDQ6MDEuODE5MDU2MDUyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzU5MDpcXHR9XFxuMzU5MTpcXHRcXG4zNTkyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdW5peF9zZXFfb3BzID0ge1xcbjM1OTM6XFx0XFx0LnN0YXJ0ICA9IHVuaXhfc2VxX3N0YXJ0LFxcbjM1OTQ6XFx0XFx0Lm5leHQgICA9IHVuaXhfc2VxX25leHQsXFxuMzU5NTpcXHRcXHQuc3RvcCAgID0gdW5peF9zZXFfc3RvcCxcXG4zNTk2OlxcdFxcdC5zaG93ICAgPSB1bml4X3NlcV9zaG93LFxcbjM1OTc6XFx0fTtcXG4zNTk4OlxcdFxcbjM1OTk6XFx0I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbjM2MDA6XFx0c3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUge1xcbjM2MDE6XFx0XFx0c3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwO1xcbjM2MDI6XFx0XFx0dW5zaWduZWQgaW50IGN1cl9zaztcXG4zNjAzOlxcdFxcdHVuc2lnbmVkIGludCBlbmRfc2s7XFxuMzYwNDpcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X3NrO1xcbjM2MDU6XFx0XFx0c3RydWN0IHNvY2sgKipiYXRjaDtcXG4zNjA2OlxcdFxcdGJvb2wgc3RfYnVja2V0X2RvbmU7XFxuMzYwNzpcXHR9O1xcbjM2MDg6XFx0XFxuMzYwOTpcXHRzdHJ1Y3QgYnBmX2l0ZXJfX3VuaXgge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0NDowMS44MTkyNzkyODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MjY5NTQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRmluZGluZyB0aGUgTWF0Y2hpbmcgQ29uZGl0aW9uYWwqKlxuXG5Pa2F5LCBJJ20gc3BvdHRpbmcgYSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgZGlyZWN0aXZlIGF0IGxpbmUgMzU5OS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUncyB0aGUgY29ycmVzcG9uZGluZyBgI2lmYCBvciBgI2lmZGVmYCBibG9jaydzIHRlcm1pbmF0aW9uP1wiIEkgbmVlZCB0byBzZWUgdGhlIGVudGlyZSBsb2dpY2FsIHNjb3BlIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSdtIGdvaW5nIHRvIHNjYW4gYXJvdW5kIGxpbmUgMzU5OS4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBsb2NhdGUgZWl0aGVyIHRoZSBjbG9zaW5nIGAjZW5kaWZgIHRvIHVuZGVyc3RhbmQgdGhlIGNvZGUgaW5jbHVkZWQgb3IgZXhjbHVkZWQgb3IgdGhlIG9wZW5pbmcgY29uZGl0aW9uYWwgaWYgdGhpcyBpcyBhIG5lc3RlZCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZ3JvayB0aGUgY29kZSBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQ0OjA1LjI2MTk3ODgxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzU4MDpcXHRcXHRcXHRcXHR9XFxuMzU4MTpcXHRcXHRcXHRcXHRmb3IgKCA7IGkgXFx1MDAzYyBsZW47IGkrKylcXG4zNTgyOlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRjKHNlcSwgdS1cXHUwMDNlYWRkci1cXHUwMDNlbmFtZS1cXHUwMDNlc3VuX3BhdGhbaV0gPzpcXG4zNTgzOlxcdFxcdFxcdFxcdFxcdFxcdCAnQCcpO1xcbjM1ODQ6XFx0XFx0XFx0fVxcbjM1ODU6XFx0XFx0XFx0dW5peF9zdGF0ZV91bmxvY2socyk7XFxuMzU4NjpcXHRcXHRcXHRzZXFfcHV0YyhzZXEsICdcXFxcbicpO1xcbjM1ODc6XFx0XFx0fVxcbjM1ODg6XFx0XFxuMzU4OTpcXHRcXHRyZXR1cm4gMDtcXG4zNTkwOlxcdH1cXG4zNTkxOlxcdFxcbjM1OTI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB1bml4X3NlcV9vcHMgPSB7XFxuMzU5MzpcXHRcXHQuc3RhcnQgID0gdW5peF9zZXFfc3RhcnQsXFxuMzU5NDpcXHRcXHQubmV4dCAgID0gdW5peF9zZXFfbmV4dCxcXG4zNTk1OlxcdFxcdC5zdG9wICAgPSB1bml4X3NlcV9zdG9wLFxcbjM1OTY6XFx0XFx0LnNob3cgICA9IHVuaXhfc2VxX3Nob3csXFxuMzU5NzpcXHR9O1xcbjM1OTg6XFx0XFxuMzU5OTpcXHQjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQ0OjA1LjI2MjIxNTE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTg2MTU0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHM6XG5cbioqRGVidWdnaW5nIGEgTWlzc2luZyBDb25kaXRpb25hbCoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuLi5zb21ldGhpbmcgZmVlbHMgb2ZmLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc3dlYXIgSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBhIHNlY29uZCBgI2lmYCBoZXJlLiBJdCBzZWVtcyBsaWtlIGEgY29uZGl0aW9uYWwgbWlnaHQgYmUgbWlzc2luZywgb3IgcGVyaGFwcyBJJ20gbWlzcmVtZW1iZXJpbmcgdGhlIG9yaWdpbmFsIHN0cnVjdHVyZS4gTGV0IG1lIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2suIEknbSBnb2luZyB0byBydW4gYSBnbG9iYWwgc2VhcmNoIG9mIHRoZSBlbnRpcmUgZmlsZS4gVGhlIHNwZWNpZmljIHN0cnVjdHVyZSBJJ20gbG9va2luZyBmb3IgaXMgYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfUFJPQ19GU2AgdG8gbWFrZSBzdXJlIGl0IGV4aXN0cywgc28gSSBjYW4gc2VlIGlmIHRoZSBleHBlY3RlZCBsb2dpYyBpcyBpbiBwbGFjZS4gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgaXMgb3V0IG9mIHN5bmMgYW5kIG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg0NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDQ6MDkuODgwODM0MDEzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQzNDI0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1BST0NfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz04NzE9c3RhdGljIGludCB1bml4X3NlcXBhY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqLCBzaXplX3QsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtODczLVxcbm5ldC91bml4L2FmX3VuaXguYzo4NzQ6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxubmV0L3VuaXgvYWZfdW5peC5jLTg3NS1zdGF0aWMgaW50IHVuaXhfY291bnRfbnJfZmRzKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zMzk4PXN0YXRpYyBfX3BvbGxfdCB1bml4X2RncmFtX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzQ1Ny1cXG5uZXQvdW5peC9hZl91bml4LmM6MzQ1ODojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5uZXQvdW5peC9hZl91bml4LmMtMzQ1OS1cXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zODA1PXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODEyLVxcbm5ldC91bml4L2FmX3VuaXguYzozODEzOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC91bml4L2FmX3VuaXguYy0zODE0LVxcdGlmICghcHJvY19jcmVhdGVfbmV0KFxcXCJ1bml4XFxcIiwgMCwgbmV0LVxcdTAwM2Vwcm9jX25ldCwgXFx1MDAyNnVuaXhfc2VxX29wcyxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODM4LWVycl9wcm9jOlxcbm5ldC91bml4L2FmX3VuaXguYzozODM5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC91bml4L2FmX3VuaXguYy0zODQwLVxcdHJlbW92ZV9wcm9jX2VudHJ5KFxcXCJ1bml4XFxcIiwgbmV0LVxcdTAwM2Vwcm9jX25ldCk7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzg1Nj1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHVuaXhfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODYwLVxcbm5ldC91bml4L2FmX3VuaXguYzozODYxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvdW5peC9hZl91bml4LmMtMzg2Mi1ERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zOTMzPXN0YXRpYyBpbnQgX19pbml0IGFmX3VuaXhfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM5NjAtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM5NjE6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxcbm5ldC91bml4L2FmX3VuaXguYy0zOTYyLVxcdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQ0OjEwLjA1NTE4NDA5OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY1NDI1ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKlxuXG5SaWdodCwgc28gSSdtIHplcm9pbmcgaW4gb24gYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUuIFRoYXQgYCNpZmRlZiBDT05GSUdfUFJPQ19GU2AgY29uc3RydWN0LCBpdCdzIHNpdHRpbmcgYXQgbGluZSAzNDU4LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQncyB0aW1lIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgc2VjdGlvbiBvZiBjb2RlLiBJJ20gZ29pbmcgdG8gc2NhbiBmcm9tIHRoZXJlIGRvd24gdG8gbGluZSAzNTk5LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSByZWxldmFudCBjb250ZXh0IHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW4gb3Igb3V0IGJhc2VkIG9uIHRoZSBgQ09ORklHX1BST0NfRlNgIHNldHRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCB0aGUgY29kZSB0aGF0IGRlcGVuZHMgb24gaXQuIElzIGl0IGRlZmluaW5nIGEgbW9kdWxlLCBlbmFibGluZyBhIGZlYXR1cmUsIG9yIHBlcmhhcHMgYWx0ZXJpbmcgdGhlIGJlaGF2aW9yIG9mIGFuIGV4aXN0aW5nIGZ1bmN0aW9uPyBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzA2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDQ6MTMuNDIwNjE3MjM4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ1NTpcXHRcXHRyZXR1cm4gbWFzaztcXG4zNDU2OlxcdH1cXG4zNDU3OlxcdFxcbjM0NTg6XFx0I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuMzQ1OTpcXHRcXG4zNDYwOlxcdCNkZWZpbmUgQlVDS0VUX1NQQUNFIChCSVRTX1BFUl9MT05HIC0gKFVOSVhfSEFTSF9CSVRTICsgMSkgLSAxKVxcbjM0NjE6XFx0XFxuMzQ2MjpcXHQjZGVmaW5lIGdldF9idWNrZXQoeCkgKCh4KSBcXHUwMDNlXFx1MDAzZSBCVUNLRVRfU1BBQ0UpXFxuMzQ2MzpcXHQjZGVmaW5lIGdldF9vZmZzZXQoeCkgKCh4KSBcXHUwMDI2ICgoMVVMIFxcdTAwM2NcXHUwMDNjIEJVQ0tFVF9TUEFDRSkgLSAxKSlcXG4zNDY0OlxcdCNkZWZpbmUgc2V0X2J1Y2tldF9vZmZzZXQoYiwgbykgKChiKSBcXHUwMDNjXFx1MDAzYyBCVUNLRVRfU1BBQ0UgfCAobykpXFxuMzQ2NTpcXHRcXG4zNDY2OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqdW5peF9mcm9tX2J1Y2tldChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuMzQ2NzpcXHR7XFxuMzQ2ODpcXHRcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGdldF9vZmZzZXQoKnBvcyk7XFxuMzQ2OTpcXHRcXHR1bnNpZ25lZCBsb25nIGJ1Y2tldCA9IGdldF9idWNrZXQoKnBvcyk7XFxuMzQ3MDpcXHRcXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcXG4zNDcxOlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4zNDcyOlxcdFxcbjM0NzM6XFx0XFx0Zm9yIChzayA9IHNrX2hlYWQoXFx1MDAyNnNlcV9maWxlX25ldChzZXEpLVxcdTAwM2V1bngudGFibGUuYnVja2V0c1tidWNrZXRdKTtcXG4zNDc0OlxcdFxcdCAgICAgc2s7IHNrID0gc2tfbmV4dChzaykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDQ6MTMuNDIwOTE0MzU4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTU5ODU0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbnVtYmVycy4gYENPTkZJR19QUk9DX0ZTYCBpcyBzdGFydGluZyBhdCAzNDU4IGluIHRoZSBjb25maWd1cmF0aW9uIGluZGV4LCB3aGlsZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFydGluZyBhdCAzNTk5LiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gR2l2ZW4gdGhlaXIgcG9zaXRpb25pbmcsIGl0IHNlZW1zIHRoaXMgaXMgdW5kZXIgYm90aCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIC0gdGhlcmUgc2hvdWxkIGJlIGEgYnVpbGQgb3B0aW9uIHVuZGVyIHRoZSBvcHRpb25zIG9mIGJvdGggY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdG8gYmUgY29ycmVjdC4gTmVlZCB0byB2ZXJpZnkgdGhhdCwgb3IgcG9zc2libHkgZGlzY292ZXIgc29tZXRoaW5nIG1vcmUgbnVhbmNlZCBpbiB0aGUgY29uZmlnIGRlcGVuZGVuY2llcy4gTGV0J3MgZGlnIGRlZXBlciBhbmQgZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzI1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0NDoxNy4yMzY5MDI0NjdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L2FmX3VuaXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzg4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzg4OlxcdFxcbjM3ODk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicGZfaXRlcl91bml4X3NlcV9vcHMgPSB7XFxuMzc5MDpcXHRcXHQuc3RhcnRcXHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0LFxcbjM3OTE6XFx0XFx0Lm5leHRcXHQ9IGJwZl9pdGVyX3VuaXhfc2VxX25leHQsXFxuMzc5MjpcXHRcXHQuc3RvcFxcdD0gYnBmX2l0ZXJfdW5peF9zZXFfc3RvcCxcXG4zNzkzOlxcdFxcdC5zaG93XFx0PSBicGZfaXRlcl91bml4X3NlcV9zaG93LFxcbjM3OTQ6XFx0fTtcXG4zNzk1OlxcdCNlbmRpZlxcbjM3OTY6XFx0I2VuZGlmXFxuMzc5NzpcXHRcXG4zNzk4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSB1bml4X2ZhbWlseV9vcHMgPSB7XFxuMzc5OTpcXHRcXHQuZmFtaWx5ID0gUEZfVU5JWCxcXG4zODAwOlxcdFxcdC5jcmVhdGUgPSB1bml4X2NyZWF0ZSxcXG4zODAxOlxcdFxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxuMzgwMjpcXHR9O1xcbjM4MDM6XFx0XFxuMzgwNDpcXHRcXG4zODA1OlxcdHN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4zODA2OlxcdHtcXG4zODA3OlxcdFxcdGludCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0NDoxNy4yMzc3ODEwNzdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA5NDc3MTA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aG9zZSB0d28gYCNlbmRpZmAgZGlyZWN0aXZlcyBhdCBsaW5lcyAzNzk1IGFuZCAzNzk2LiBPbmUgY29ycmVzcG9uZHMgdG8gYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGF0IGxpbmUgMzU5OSwgYW5kIHRoZSBvdGhlciB0byBgI2lmZGVmIENPTkZJR19QUk9DX0ZTYCBhdCBsaW5lIDM0NTguIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBhcmUgYFVOSVhgLCBgQlBGX1NZU0NBTExgLCBhbmQgYFBST0NfRlNgLlxuXG5IYW5nIG9uLCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBgQ09ORklHX1VOSVhgIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmRhbWVudGFsIG9uZSBoZXJlLiBXZSBhbHNvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYmVjYXVzZSBvZiB0aGUgZmlyc3QgYCNlbmRpZmAuIEFuZCBgQ09ORklHX1BST0NfRlNgIGlzIGFsc28gcmVxdWlyZWQsIGdpdmVuIHRoZSBzZWNvbmQgYCNlbmRpZmAuIEFjdHVhbGx5LCBgQ09ORklHX1BST0NfRlNgIGlzIHVzdWFsbHkgZW5hYmxlZCBpbiB0aGVzZSB0eXBlcyBvZiBzeXN0ZW1zLiBBbHJpZ2h0LCBJJ2xsIGluY2x1ZGUgYFVOSVhgIGFuZCBgQlBGX1NZU0NBTExgLlxuXG5KdXN0IGEgY2hlY2ssIGlzIGBDT05GSUdfVU5JWGAgdHJpc3RhdGU/IFllcywgaXQgaXMuXG5cblNvLCBgVU5JWGAsIGBCUEZfU1lTQ0FMTGAuIEdvb2QuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmRpdGlvbmFsIGNvbmZpZ3MuIE5vcGUsIHRoYXQncyBpdC5cblxuTm93LCBsZXQgbWUgbG9vayBhdCB0aGUgZm9jdXMgc3ltYm9scy4gYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAsIGBicGZfaXRlcl91bml4X2JhdGNoYCwgYW5kIGBicGZfaXRlcl9pbml0X3VuaXhgLiBPa2F5LCBpdCBzZWVtcyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBpcyB0aGUgb25lIHRoYXQncyBiZWVuIG1vZGlmaWVkLlxuXG5UaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggcmVwbGFjZXMgYGt2bWFsbG9jYCB3aXRoIGBrdm1hbGxvY19hcnJheWAgdG8gcHJldmVudCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBCUEYgaXRlcmF0b3IgYmF0Y2guIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgVU5JWCBzb2NrZXQgQlBGIGl0ZXJhdG9ycy4gQ3J1Y2lhbGx5LCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBzbyBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byBtYWtlIHN1cmUgdGhlIGZpeCB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLlxuXG5JJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdXAgdGhlIGZ1enppbmcgYW5kIGFuYWx5emluZyB0aGUgcmVzdWx0cywgbGV0J3MgbWFrZSB0aGUgY2FsbCB0byBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MDEsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDQ6MjQuMzMyNTU2ODg4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc3MDM0OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaFwiLFxuICAgIFwiYnBmX2l0ZXJfdW5peF9iYXRjaFwiLFxuICAgIFwiYnBmX2l0ZXJfaW5pdF91bml4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMga3ZtYWxsb2Mgd2l0aCBrdm1hbGxvY19hcnJheSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgZHVyaW5nIGFsbG9jYXRpb24gb2YgdGhlIEJQRiBpdGVyYXRvciBiYXRjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgVU5JWCBzb2NrZXQgQlBGIGl0ZXJhdG9ycywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCB3b3JrcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVU5JWFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hcIixcbiAgICBcImJwZl9pdGVyX3VuaXhfYmF0Y2hcIixcbiAgICBcImJwZl9pdGVyX2luaXRfdW5peFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGt2bWFsbG9jIHdpdGgga3ZtYWxsb2NfYXJyYXkgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyBhbGxvY2F0aW9uIG9mIHRoZSBCUEYgaXRlcmF0b3IgYmF0Y2guIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIFVOSVggc29ja2V0IEJQRiBpdGVyYXRvcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgd29ya3MgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow7r5nk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 08:01:28 +0000 UTC FinishedAt: 2026-07-16 08:44:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX", "BPF_SYSCALL" ], "series_id": "b470d491-e052-4f91-8230-3549a6d4ca9b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bpf_iter_unix_realloc_batch", "bpf_iter_unix_batch", "bpf_iter_init_unix" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfdW5peF9iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl9pbml0X3VuaXgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMga3ZtYWxsb2Mgd2l0aCBrdm1hbGxvY19hcnJheSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgZHVyaW5nIGFsbG9jYXRpb24gb2YgdGhlIEJQRiBpdGVyYXRvciBiYXRjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgVU5JWCBzb2NrZXQgQlBGIGl0ZXJhdG9ycywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCB3b3JrcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmN2U1MDM0NDlhYjBkYzM1ZTkyZGZkZTJjY2MzNzkxOGQ3NGM5ZWUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDg6NDI6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jXG5pbmRleCBmN2E5ZDU1ZWVlOGExMi4uNjY2NGVhZDQ2MjE2OWYgMTAwNjQ0XG4tLS0gYS9uZXQvdW5peC9hZl91bml4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC91bml4L2FmX3VuaXguY1xuQEAgLTM2NTksOCAmIzQzOzM2NTksOCBAQCBzdGF0aWMgaW50IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcixcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqKm5ld19iYXRjaDtcbiBcbi1cdG5ld19iYXRjaCA9IGt2bWFsbG9jKHNpemVvZigqbmV3X2JhdGNoKSAqIG5ld19iYXRjaF9zeixcbi1cdFx0XHQgICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbiYjNDM7XHRuZXdfYmF0Y2ggPSBrdm1hbGxvY19hcnJheShuZXdfYmF0Y2hfc3osIHNpemVvZigqbmV3X2JhdGNoKSxcbiYjNDM7XHRcdFx0XHQgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4gXHRpZiAoIW5ld19iYXRjaClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl91bml4X2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX2luaXRfdW5peCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBrdm1hbGxvYyB3aXRoIGt2bWFsbG9jX2FycmF5IHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbiBvZiB0aGUgQlBGIGl0ZXJhdG9yIGJhdGNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBVTklYIHNvY2tldCBCUEYgaXRlcmF0b3JzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IHdvcmtzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjdlNTAzNDQ5YWIwZGMzNWU5MmRmZGUyY2NjMzc5MThkNzRjOWVlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDA4OjQyOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IGY3YTlkNTVlZWU4YTEyLi42NjY0ZWFkNDYyMTY5ZiAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMzY1OSw4ICYjNDM7MzY1OSw4IEBAIHN0YXRpYyBpbnQgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoKHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyLAogewogCXN0cnVjdCBzb2NrICoqbmV3X2JhdGNoOwogCi0JbmV3X2JhdGNoID0ga3ZtYWxsb2Moc2l6ZW9mKCpuZXdfYmF0Y2gpICogbmV3X2JhdGNoX3N6LAotCQkJICAgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7CiYjNDM7CW5ld19iYXRjaCA9IGt2bWFsbG9jX2FycmF5KG5ld19iYXRjaF9zeiwgc2l6ZW9mKCpuZXdfYmF0Y2gpLAomIzQzOwkJCQkgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKCFuZXdfYmF0Y2gpCiAJCXJldHVybiAtRU5PTUVNOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBVbml4IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3VuaXgvYWZfdW5peC5jYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgc3dpdGNoZWQgZnJvbSB1c2luZyBga3ZtYWxsb2NgIHRvIGBrdm1hbGxvY19hcnJheWAgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgYSBuZXcgYmF0Y2gsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBga3ZtYWxsb2Moc2l6ZW9mKCpuZXdfYmF0Y2gpICogbmV3X2JhdGNoX3N6LCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTilgIHRvIGBrdm1hbGxvY19hcnJheShuZXdfYmF0Y2hfc3osIHNpemVvZigqbmV3X2JhdGNoKSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pYC4gRnVuY3Rpb25hbGx5LCBpdCYjMzk7cyB0aGUgc2FtZSwgcmlnaHQ/IE5vLCB3YWl0Li4uIGl0JiMzOTtzIGEgKnNpZ25pZmljYW50KiBpbXByb3ZlbWVudCBmb3Igcm9idXN0bmVzcywgcHJpbWFyaWx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGluIHRoZSBhbGxvY2F0aW9uIHNpemUgY2FsY3VsYXRpb24uIEdvb2QgY2F0Y2guCgpCdXQsIGRvZXMgdGhpcyBjaGFuZ2UgYWx0ZXIgdGhlIGFjdHVhbCBleGVjdXRpb24gZmxvdz8gVXNpbmcgYGt2bWFsbG9jX2FycmF5YCBpbnN0ZWFkIG9mIGp1c3QgYGt2bWFsbG9jYCBjb3VsZCBoYXZlIHN1YnRsZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGhvdyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBpcyB1c2VkIGluIHRoaXMgZmlsZS4uLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhIGJpdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9MzY1MT1zdGF0aWMgdm9pZCBicGZfaXRlcl91bml4X3B1dF9iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcilcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzY1Ni1cbm5ldC91bml4L2FmX3VuaXguYzozNjU3OnN0YXRpYyBpbnQgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoKHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyLFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTgtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG5ld19iYXRjaF9zeilcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MzY3NT1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM3MDEtXG5uZXQvdW5peC9hZl91bml4LmM6MzcwMjpcdGlmICghcmVzaXplZCBcdTAwMjZcdTAwMjYgIWJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBleHBlY3RlZCAqIDMgLyAyKSkge1xubmV0L3VuaXgvYWZfdW5peC5jLTM3MDMtXHRcdHJlc2l6ZWQgPSB0cnVlO1xuLS1cbm5ldC91bml4L2FmX3VuaXguYz0zODY3PXN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF91bml4KHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM4NzUtXG5uZXQvdW5peC9hZl91bml4LmM6Mzg3NjpcdGVyciA9IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBJTklUX0JBVENIX1NaKTtcbm5ldC91bml4L2FmX3VuaXguYy0zODc3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIEl0ZXJhdG9yIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIG91dCBga3ZtYWxsb2NgIGZvciBga3ZtYWxsb2NfYXJyYXlgLiBIbW0sIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIGl0JiMzOTtzIGJhc2ljYWxseSBhIGZ1bmN0aW9uIHJlcGxhY2VtZW50LiBJIHNlZSB0aGF0IGBrdm1hbGxvY19hcnJheWAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBkb2luZyBhIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93IGNoZWNrIGJlZm9yZSBjYWxsaW5nIHRoZSBvbGQgYGt2bWFsbG9jYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlLCBidXQgaG93IHNpZ25pZmljYW50PyBMZXQmIzM5O3MgZmlndXJlIG91dCBpZiBpdCYjMzk7cyB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQuCgpSaWdodCwgdGhlIGNoYW5nZSBpcyBpbiBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gQWgsIHRoYXQgcmluZ3MgYSBiZWxsISBUaGlzIGlzIHBhcnQgb2YgQlBGIGl0ZXJhdG9ycyBmb3IgdW5peCBzb2NrZXRzLiBUbyBwcm9wZXJseSB0ZXN0IHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBMZXQgbWUgc2VlLi4uIEkmIzM5O20gZ3Vlc3Npbmcgd2UmIzM5O2xsIG5lZWQgYENPTkZJR19VTklYYCBmb3Igb2J2aW91cyByZWFzb25zLCBhbmQgcHJvYmFibHkgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG9vLCBnaXZlbiBpdHMgY29ubmVjdGlvbiB0byBCUEYuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBCUEYgY29uZmlnIGRlcGVuZGVuY3kg4oCTIGEgcXVpY2sgc2VhcmNoIGluIGBuZXQvdW5peC9hZl91bml4LmNgIGZvciBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgc2hvdWxkIGNvbmZpcm0gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYz0xMDYwPXN0cnVjdCBwcm90byB1bml4X2RncmFtX3Byb3RvID0ge1xuLS1cbm5ldC91bml4L2FmX3VuaXguYy0xMDY1LVx0LmJwZl9ieXBhc3NfZ2V0c29ja29wdFx0PSB1bml4X2JwZl9ieXBhc3NfZ2V0c29ja29wdCxcbm5ldC91bml4L2FmX3VuaXguYzoxMDY2OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC91bml4L2FmX3VuaXguYy0xMDY3LVx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHVuaXhfZGdyYW1fYnBmX3VwZGF0ZV9wcm90byxcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MTA3MT1zdHJ1Y3QgcHJvdG8gdW5peF9zdHJlYW1fcHJvdG8gPSB7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTEwNzYtXHQuYnBmX2J5cGFzc19nZXRzb2Nrb3B0XHQ9IHVuaXhfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFxubmV0L3VuaXgvYWZfdW5peC5jOjEwNzc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L3VuaXgvYWZfdW5peC5jLTEwNzgtXHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcdD0gdW5peF9zdHJlYW1fYnBmX3VwZGF0ZV9wcm90byxcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MjY3MD1zdGF0aWMgaW50IHVuaXhfZGdyYW1fcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0yNjc0LVxubmV0L3VuaXgvYWZfdW5peC5jOjI2NzU6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L3VuaXgvYWZfdW5peC5jLTI2NzYtXHRjb25zdCBzdHJ1Y3QgcHJvdG8gKnByb3QgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCk7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTMxNDA9c3RhdGljIGludCB1bml4X3N0cmVhbV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzE1MC1cbm5ldC91bml4L2FmX3VuaXguYzozMTUxOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC91bml4L2FmX3VuaXguYy0zMTUyLVx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2Vzaztcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MzU5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHVuaXhfc2VxX29wcyA9IHtcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzU5OC1cbm5ldC91bml4L2FmX3VuaXguYzozNTk5OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC91bml4L2FmX3VuaXguYy0zNjAwLXN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlIHtcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9Mzg1Nj1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHVuaXhfbmV0X29wcyA9IHtcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzg2MC1cbm5ldC91bml4L2FmX3VuaXguYzozODYxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvdW5peC9hZl91bml4LmMtMzg2Mi1ERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MzkzMz1zdGF0aWMgaW50IF9faW5pdCBhZl91bml4X2luaXQodm9pZClcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzk2MC1cbm5ldC91bml4L2FmX3VuaXguYzozOTYxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG5uZXQvdW5peC9hZl91bml4LmMtMzk2Mi1cdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdW5kZXIgd2hpY2ggY29uZmlndXJhdGlvbnMgaXQgaXMgZW5hYmxlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgY29kZSBpbmRpY2F0ZXMgaXQmIzM5O3MgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCB0aGF0JiMzOTtzIGFwcGVhcmluZyBhcm91bmQgbGluZSAzNTk5LiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgYWxzbyByZWxpZXMgb24gYENPTkZJR19QUk9DX0ZTYC4gSSYjMzk7dmUgZ290IHRvIGVuc3VyZSBpdCYjMzk7cyBub3QgY29uZGl0aW9uYWwgb24gKmJvdGgqIGBDT05GSUdfQlBGX1NZU0NBTExgICphbmQqIGBDT05GSUdfUFJPQ19GU2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gYnkgY2hlY2tpbmcgZnVydGhlciBkb3duOyBhaGEhIExpbmUgMzg2MSBzaG93cyBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1BST0NfRlMpYC4gT2theSwgc28gaXQgKmlzKiBwb3NzaWJsZSB0aGF0IGZ1bmN0aW9uIGNhbiBhbHNvIHJlbHkgb24gYENPTkZJR19QUk9DX0ZTYCB0b28uIFRpbWUgdG8gb3BlbiBgbmV0L3VuaXgvYWZfdW5peC5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMzU5OSB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCwgYW5kIGlmIHRob3NlIGNvbmZpZ3VyYXRpb25zIHJlYWxseSBtYXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM1OTU6XHRcdC5zdG9wICAgPSB1bml4X3NlcV9zdG9wLFxuMzU5NjpcdFx0LnNob3cgICA9IHVuaXhfc2VxX3Nob3csXG4zNTk3Olx0fTtcbjM1OTg6XHRcbjM1OTk6XHQjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4zNjAwOlx0c3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUge1xuMzYwMTpcdFx0c3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwO1xuMzYwMjpcdFx0dW5zaWduZWQgaW50IGN1cl9zaztcbjM2MDM6XHRcdHVuc2lnbmVkIGludCBlbmRfc2s7XG4zNjA0Olx0XHR1bnNpZ25lZCBpbnQgbWF4X3NrO1xuMzYwNTpcdFx0c3RydWN0IHNvY2sgKipiYXRjaDtcbjM2MDY6XHRcdGJvb2wgc3RfYnVja2V0X2RvbmU7XG4zNjA3Olx0fTtcbjM2MDg6XHRcbjM2MDk6XHRzdHJ1Y3QgYnBmX2l0ZXJfX3VuaXgge1xuMzYxMDpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfaXRlcl9tZXRhICosIG1ldGEpO1xuMzYxMTpcdFx0X19icGZfbWRfcHRyKHN0cnVjdCB1bml4X3NvY2sgKiwgdW5peF9zayk7XG4zNjEyOlx0XHR1aWRfdCB1aWQgX19hbGlnbmVkKDgpO1xuMzYxMzpcdH07XG4zNjE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJQRiBTeXNjYWxsIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19VTklYYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyBgQ09ORklHX1VOSVhgICphYnNvbHV0ZWx5KiBuZWNlc3NhcnkgZm9yIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZG8/IEkgcmVjYWxsIGl0IGJlaW5nIGxpbmtlZCB0byB0aGUgYG5ldC91bml4L2FmX3VuaXguY2AgZmlsZSwgc28gSSBiZWxpZXZlIHRoZSBhbnN3ZXIgaXMgeWVzLiBOb3csIHJlZ2FyZGluZyBgQ09ORklHX1BST0NfRlNgLCB0aGlzIHNlZW1zIHJlbGV2YW50IGJlY2F1c2UgYGJwZl9pdGVyX3JlZ2lzdGVyYCBhcHBlYXJzIHRvIGJlIGd1YXJkZWQgYnkgaXQuIEp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYW5kIHZlcmlmeSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIExldCBtZSBnbyBmaW5kIGxpbmUgMzg2MSB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzg1NTpcdFxuMzg1NjpcdHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgdW5peF9uZXRfb3BzID0ge1xuMzg1NzpcdFx0LmluaXQgPSB1bml4X25ldF9pbml0LFxuMzg1ODpcdFx0LmV4aXQgPSB1bml4X25ldF9leGl0LFxuMzg1OTpcdH07XG4zODYwOlx0XG4zODYxOlx0I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcbjM4NjI6XHRERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbjM4NjM6XHRcdFx0ICAgICBzdHJ1Y3QgdW5peF9zb2NrICp1bml4X3NrLCB1aWRfdCB1aWQpXG4zODY0Olx0XG4zODY1Olx0I2RlZmluZSBJTklUX0JBVENIX1NaIDE2XG4zODY2Olx0XG4zODY3Olx0c3RhdGljIGludCBicGZfaXRlcl9pbml0X3VuaXgodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbjM4Njg6XHR7XG4zODY5Olx0XHRzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlciA9IHByaXZfZGF0YTtcbjM4NzA6XHRcdGludCBlcnI7XG4zODcxOlx0XG4zODcyOlx0XHRlcnIgPSBicGZfaXRlcl9pbml0X3NlcV9uZXQocHJpdl9kYXRhLCBhdXgpO1xuMzg3MzpcdFx0aWYgKGVycilcbjM4NzQ6XHRcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBJdGVyYXRpb24gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBpdGVyYXRpb24gY29kZSwgYW5kIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgYGJwZl9pdGVyX2luaXRfdW5peGAgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBvbmx5IGluY2x1ZGVkIGlmIGJvdGggYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUFJPQ19GU2AgYXJlIGRlZmluZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCBnaXZlcyBhIGNsZWFyIGluZGljYXRpb24gb2Ygd2hlbiB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSBhY3RpdmUuCgpOb3csIGEgcmVsYXRlZCBmdW5jdGlvbiwgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAsIGlzIGRlZmluZWQgZWFybGllciBpbiB0aGUgZmlsZS4gSW50ZXJlc3RpbmcsIGJlY2F1c2UgSSBzZWUgdGhhdCBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5ICpib3RoKiBgYnBmX2l0ZXJfaW5pdF91bml4YCBhbmQgYGJwZl9pdGVyX3VuaXhfYmF0Y2hgLiBUaGlzIGxpa2VseSBtZWFucyBpdCBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIG9yIHJlc2l6aW5nIG9mIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBpbiB0aGUgaXRlcmF0aW9uIHByb2Nlc3MsIGFuZCB0aGF0IG1ha2VzIHNlbnNlIGZvciBlZmZpY2llbmN5JiMzOTtzIHNha2UuCgpTaW5jZSBJJiMzOTt2ZSBzdHVtYmxlZCB1cG9uIGBicGZfaXRlcl91bml4X2JhdGNoYCBJIHdhbnQgdG8gY2hlY2sgaXRzIHVzYWdlLiBTbywgd2hlcmUgaXMgdGhhdCBmdW5jdGlvbiBhY3R1YWxseSBjYWxsZWQ/IEdvdHRhIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3VuaXhfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jPTM2NTc9c3RhdGljIGludCBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIsXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM2NzQtXG5uZXQvdW5peC9hZl91bml4LmM6MzY3NTpzdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXG5uZXQvdW5peC9hZl91bml4LmMtMzY3Ni1cdFx0XHRcdFx0bG9mZl90ICpwb3MpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM3MTA9c3RhdGljIHZvaWQgKmJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzcxNy1cdCAqL1xubmV0L3VuaXgvYWZfdW5peC5jOjM3MTg6XHRyZXR1cm4gYnBmX2l0ZXJfdW5peF9iYXRjaChzZXEsIHBvcyk7XG5uZXQvdW5peC9hZl91bml4LmMtMzcxOS19XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM3MjE9c3RhdGljIHZvaWQgKmJwZl9pdGVyX3VuaXhfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zNzM3LVx0ZWxzZVxubmV0L3VuaXgvYWZfdW5peC5jOjM3Mzg6XHRcdHNrID0gYnBmX2l0ZXJfdW5peF9iYXRjaChzZXEsIHBvcyk7XG5uZXQvdW5peC9hZl91bml4LmMtMzczOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQlBGIEl0ZXJhdG9ycyBhbmQgVU5JWCBTb2NrZXRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0YCBhbmQgYGJwZl9pdGVyX3VuaXhfc2VxX25leHRgIGFyZSBpbXBsZW1lbnRlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgQlBGIGludGVyYWN0cyB3aXRoIFVOSVggc29ja2V0IGRhdGEuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIGFyZSB0aGV5IGd1YXJkZWQgYnkgdGhvc2UgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUFJPQ19GU2AgZGVmaW5lcz8gSSBoYXZlIGEgZmVlbGluZyB0aGV5IG1pZ2h0IGJlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBmdW5jdGlvbmFsaXR5LiBUbyBjb25maXJtIHRoYXQsIGxldCYjMzk7cyBqdW1wIHN0cmFpZ2h0IHRvIGxpbmUgMzcxMCBvZiB0aGUgcmVsZXZhbnQgY29kZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB2ZXJpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzAwOlx0XHR9XG4zNzAxOlx0XG4zNzAyOlx0XHRpZiAoIXJlc2l6ZWQgXHUwMDI2XHUwMDI2ICFicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goaXRlciwgZXhwZWN0ZWQgKiAzIC8gMikpIHtcbjM3MDM6XHRcdFx0cmVzaXplZCA9IHRydWU7XG4zNzA0Olx0XHRcdGdvdG8gYWdhaW47XG4zNzA1Olx0XHR9XG4zNzA2Olx0XG4zNzA3Olx0XHRyZXR1cm4gc2s7XG4zNzA4Olx0fVxuMzcwOTpcdFxuMzcxMDpcdHN0YXRpYyB2b2lkICpicGZfaXRlcl91bml4X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG4zNzExOlx0e1xuMzcxMjpcdFx0aWYgKCEqcG9zKVxuMzcxMzpcdFx0XHRyZXR1cm4gU0VRX1NUQVJUX1RPS0VOO1xuMzcxNDpcdFxuMzcxNTpcdFx0LyogYnBmIGl0ZXIgZG9lcyBub3Qgc3VwcG9ydCBsc2Vlaywgc28gaXQgYWx3YXlzXG4zNzE2Olx0XHQgKiBjb250aW51ZSBmcm9tIHdoZXJlIGl0IHdhcyBzdG9wKCktcGVkLlxuMzcxNzpcdFx0ICovXG4zNzE4Olx0XHRyZXR1cm4gYnBmX2l0ZXJfdW5peF9iYXRjaChzZXEsIHBvcyk7XG4zNzE5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0YCBGdW5jdGlvbiBEZWZpbml0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBicGZfaXRlcl91bml4X3NlcV9zdGFydGAgZnVuY3Rpb24uIEkgc2F3IGl0cyBkZWZpbml0aW9uIGFyb3VuZCBsaW5lIDM3MTAsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBpdHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgaW1tZWRpYXRlbHkgbm90aWNlZCB0aGF0IHRoZSByZWxldmFudCBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1BST0NfRlMpYCBibG9jayBiZWdpbnMgYXJvdW5kIGxpbmUgMzg2MS4KCkEgcXVpY2sgZG91YmxlLWNoZWNrLi4uIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoYXQgYGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0YCBkZWZpbml0aW9uIGlzIGd1YXJkZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgKnVuZGVyKiB0aGUgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGJsb2NrLCB3aGljaCBzdGFydGVkIGJhY2sgYXQgbGluZSAzNTk5LiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBhYm91dCB0aGVzZSBwcmVwcm9jZXNzb3IgY29uZGl0aW9ucy4gQmFjayB0byByZS1leGFtaW5lIGxpbmUgMzg2MSB0byBjb25maXJtIHRoZSBpbmNsdXNpb24gY29uZGl0aW9ucyBhcmUgY29ycmVjdCBhbmQgdGhhdCBJJiMzOTttIGludGVycHJldGluZyB0aGlzIGNvcnJlY3RseS4gSXQmIzM5O3MgZWFzeSB0byBnZXQgbG9zdCBpbiB0aGVzZSBtYWNyb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODQwOlx0XHRyZW1vdmVfcHJvY19lbnRyeShcJiMzNDt1bml4XCYjMzQ7LCBuZXQtXHUwMDNlcHJvY19uZXQpO1xuMzg0MTpcdGVycl9zeXNjdGw6XG4zODQyOlx0I2VuZGlmXG4zODQzOlx0XHR1bml4X3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7XG4zODQ0Olx0b3V0OlxuMzg0NTpcdFx0cmV0dXJuIC1FTk9NRU07XG4zODQ2Olx0fVxuMzg0NzpcdFxuMzg0ODpcdHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgdW5peF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4zODQ5Olx0e1xuMzg1MDpcdFx0a3ZmcmVlKG5ldC1cdTAwM2V1bngudGFibGUuYnVja2V0cyk7XG4zODUxOlx0XHRrdmZyZWUobmV0LVx1MDAzZXVueC50YWJsZS5sb2Nrcyk7XG4zODUyOlx0XHR1bml4X3N5c2N0bF91bnJlZ2lzdGVyKG5ldCk7XG4zODUzOlx0XHRyZW1vdmVfcHJvY19lbnRyeShcJiMzNDt1bml4XCYjMzQ7LCBuZXQtXHUwMDNlcHJvY19uZXQpO1xuMzg1NDpcdH1cbjM4NTU6XHRcbjM4NTY6XHRzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHVuaXhfbmV0X29wcyA9IHtcbjM4NTc6XHRcdC5pbml0ID0gdW5peF9uZXRfaW5pdCxcbjM4NTg6XHRcdC5leGl0ID0gdW5peF9uZXRfZXhpdCxcbjM4NTk6XHR9O1xuMzg2MDpcdFxuMzg2MTpcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXG4zODYyOlx0REVGSU5FX0JQRl9JVEVSX0ZVTkModW5peCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4zODYzOlx0XHRcdCAgICAgc3RydWN0IHVuaXhfc29jayAqdW5peF9zaywgdWlkX3QgdWlkKVxuMzg2NDpcdFxuMzg2NTpcdCNkZWZpbmUgSU5JVF9CQVRDSF9TWiAxNlxuMzg2NjpcdFxuMzg2NzpcdHN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF91bml4KHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4zODY4Olx0e1xuMzg2OTpcdFx0c3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIgPSBwcml2X2RhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBCUEYgSXRlcmF0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJQRiBpdGVyYXRpb24gY29kZS4gUmlnaHQgYXdheSwgSSBzZWUgdGhhdCBgYnBmX2l0ZXJfaW5pdF91bml4YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBpdCYjMzk7cyBkZWZpbmVkIHVuZGVyIGJvdGggYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUFJPQ19GU2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGludGVyYWN0aW5nIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbS4gVGhlbiBJIHNwb3QgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAg4oCTIGFnYWluLCBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBidXQganVzdCB1bmRlciBgQ09ORklHX0JQRl9TWVNDQUxMYC4gTm93LCBhIHJlZCBmbGFnIGdvZXMgdXAuIGByZWFsbG9jX2JhdGNoYCBzb3VuZHMgc3BlY2lmaWMsIGFuZCBwb3RlbnRpYWxseSBpbXBvcnRhbnQuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcy4gSSB3b25kZXIgaWYgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUuIExldCBtZSBnbyBhaGVhZCBhbmQgY3Jvc3MtcmVmZXJlbmNlIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgLiBHb3R0YSBjaGVjayBmb3IgYW55IG1pc3NlZCBkZXBlbmRlbmNpZXMgb3IgdW5leHBlY3RlZCB1c2VzLiBUaGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIG1ha2luZyBtZSBjdXJpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jPTM2NTE9c3RhdGljIHZvaWQgYnBmX2l0ZXJfdW5peF9wdXRfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTYtXG5uZXQvdW5peC9hZl91bml4LmM6MzY1NzpzdGF0aWMgaW50IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcixcbm5ldC91bml4L2FmX3VuaXguYy0zNjU4LVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBuZXdfYmF0Y2hfc3opXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM2NzU9c3RhdGljIHN0cnVjdCBzb2NrICpicGZfaXRlcl91bml4X2JhdGNoKHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zNzAxLVxubmV0L3VuaXgvYWZfdW5peC5jOjM3MDI6XHRpZiAoIXJlc2l6ZWQgXHUwMDI2XHUwMDI2ICFicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goaXRlciwgZXhwZWN0ZWQgKiAzIC8gMikpIHtcbm5ldC91bml4L2FmX3VuaXguYy0zNzAzLVx0XHRyZXNpemVkID0gdHJ1ZTtcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9Mzg2Nz1zdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfdW5peCh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODc1LVxubmV0L3VuaXgvYWZfdW5peC5jOjM4NzY6XHRlcnIgPSBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goaXRlciwgSU5JVF9CQVRDSF9TWik7XG5uZXQvdW5peC9hZl91bml4LmMtMzg3Ny1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE2OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVuaXggU29ja2V0IEJQRiBJdGVyYXRvciBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBCUEYgaXRlcmF0b3JzIGZvciBVbml4IHNvY2tldHMuIEkgc2VlIHRoaXMgZnVuY3Rpb24sIGBicGZfaXRlcl91bml4X2JhdGNoYCwgYW5kIGFub3RoZXIgb25lLCBgYnBmX2l0ZXJfaW5pdF91bml4YC4gU2VlbXMgbGlrZSBib3RoIGFyZSBjcnVjaWFsLiBUaGF0IG1lYW5zIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBnb2luZyB0byBiZSBgQ09ORklHX1VOSVhgLCBkZWZpbml0ZWx5LCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFVuaXggc29ja2V0cywgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGJlY2F1c2UgaXQmIzM5O3MgQlBGIHJlbGF0ZWQsIGFuZCB0aGVuIGFsc28gYENPTkZJR19QUk9DX0ZTYCBiZWNhdXNlIGBicGZfaXRlcl9pbml0X3VuaXhgIGxpdmVzIHVuZGVyIHRoYXQgY29uZmlnLgoKUmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgdHlwZXMuIE9rYXksIGBDT05GSUdfVU5JWGAgaXMgYSBib29sZWFuIG9yIHRyaXN0YXRlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBib29sZWFuLCBhbmQgYENPTkZJR19QUk9DX0ZTYCBpcyBib29sZWFuLiBPZiB0aGVzZSwgYENPTkZJR19VTklYYCBpcyB0aGUgbW9zdCBjcml0aWNhbC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1VOSVhgIGlzIGFjdHVhbGx5IG5lZWRlZC4gQWgsIHllcywgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L3VuaXgvYWZfdW5peC5jYC4gT2theSwgc28gYFVOSVhgLCBgQlBGX1NZU0NBTExgLCBhbmQgYFBST0NfRlNgLgoKSGFuZyBvbiwgdGhvdWdoLCBgQ09ORklHX1BST0NfRlNgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LiBTbywgdGhhdCYjMzk7cyBsZXNzIG9mIGEgY29uY2Vybi4gVGhlIGNvcmUgZnVuY3Rpb24gdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgd2lsbCBiZSBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gV2FpdCBhIHNlY29uZOKApiB0aGF0JiMzOTtzIGEgKnN0YXRpYyogZnVuY3Rpb24uIEhtbSwgY2FuIHdlIHJlYWNoIGl0IGZyb20gdXNlcnNwYWNlPyBZZXMsIHdlIGNhbiwgdGhyb3VnaCBCUEYgaXRlcmF0b3JzLCBzbyBpdCYjMzk7cyBhIHZhbGlkIHRhcmdldC4KCkFscmlnaHQsIGxldCYjMzk7cyBub3cgbG9vayBhdCBgYnBmX2l0ZXJfdW5peF9iYXRjaGAgYmVjYXVzZSBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZnV6emVkLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnRgIGFuZCBgYnBmX2l0ZXJfdW5peF9zZXFfbmV4dGAuIFRoZXNlLCBpbiB0dXJuLCBhcmUgcGFydCBvZiBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYC4gT2theSwgdGhhdCYjMzk7cyB0aGUgd2hvbGUgY2hhaW4uIEkgaGF2ZSBhIGNsZWFyZXIgcGljdHVyZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3VuaXhfc2VxX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9Mzc3Mj1zdGF0aWMgdm9pZCBicGZfaXRlcl91bml4X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zNzg4LVxubmV0L3VuaXgvYWZfdW5peC5jOjM3ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicGZfaXRlcl91bml4X3NlcV9vcHMgPSB7XG5uZXQvdW5peC9hZl91bml4LmMtMzc5MC1cdC5zdGFydFx0PSBicGZfaXRlcl91bml4X3NlcV9zdGFydCxcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9Mzg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIHVuaXhfc2VxX2luZm8gPSB7XG5uZXQvdW5peC9hZl91bml4LmM6Mzg5NDpcdC5zZXFfb3BzXHRcdD0gXHUwMDI2YnBmX2l0ZXJfdW5peF9zZXFfb3BzLFxubmV0L3VuaXgvYWZfdW5peC5jLTM4OTUtXHQuaW5pdF9zZXFfcHJpdmF0ZVx0PSBicGZfaXRlcl9pbml0X3VuaXgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEl0ZXJhdGlvbiBhbmQgSW50ZWdlciBPdmVyZmxvdyBWdWxuZXJhYmlsaXR5OiBBIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYCBpcyBlbXBsb3llZCB3aXRoaW4gYHVuaXhfc2VxX2luZm9gLCBhbmQgdGhhdCBgdW5peF9zZXFfaW5mb2AgaXRzZWxmIGlzIHJlZ2lzdGVyZWQgdXNpbmcgYGJwZl9pdGVyX3JlZ2lzdGVyYC4gIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgdmlhIEJQRiwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYGt2bWFsbG9jYCB3aXRoIGBrdm1hbGxvY19hcnJheWAsIHRoZSBhbnN3ZXImIzM5O3MgbGlrZWx5IHllcy4gQnV0LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZGV0YWlscy4KCkFoLCByaWdodCwgdGhlIGNvZGUgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZDoKCmBgYGMKLQluZXdfYmF0Y2ggPSBrdm1hbGxvYyhzaXplb2YoKm5ld19iYXRjaCkgKiBuZXdfYmF0Y2hfc3osCi0JCQkgICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTsKJiM0MzsJbmV3X2JhdGNoID0ga3ZtYWxsb2NfYXJyYXkobmV3X2JhdGNoX3N6LCBzaXplb2YoKm5ld19iYXRjaCksCiYjNDM7CQkJCSAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTsKYGBgCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBzZWN1cml0eSBhbmQgcm9idXN0bmVzcyBmaXgsIG1lYW50IHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MuICBUaGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyAqZnVuY3Rpb25hbGx5KiBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBmbG93PyAgYGt2bWFsbG9jX2FycmF5YCBub3cgaW5jbHVkZXMgYW4gb3ZlcmZsb3cgY2hlY2sgb24gdGhlIG11bHRpcGxpY2F0aW9uIGFuZCBpdCB3aWxsIHJldHVybiBgTlVMTGAgaWYgaXQgb3ZlcmZsb3dzIGJlZm9yZSBjYWxsaW5nIGBrdm1hbGxvY2AuIFRoZXJlZm9yZSB0aGUgYWxsb2NhdGlvbiBmYWlscyByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYSBzbWFsbGVyIGJ1ZmZlciB3aGljaCBjb3VsZCBsZWFkIHRvIGJ1ZmZlciBvdmVyZmxvd3MuIFRoaXMgbWVhbnMsIHllcywgdGhlcmUgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSBjb2RlIGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzLCB3aGVyZSBsYXJnZSBgbmV3X2JhdGNoX3N6YCB2YWx1ZXMgd291bGQgY2F1c2Ugb3ZlcmZsb3dzLiAgVGhhdCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCUEYgaXRlcmF0b3Igd29ya3MgY29ycmVjdGx5IHdpdGggdGhlc2UgbmV3IGVycm9yIGNvbmRpdGlvbnMgYW5kIHRoYXQgaXQgZG9lc24mIzM5O3QgY3Jhc2ggb3IgbGVhayBtZW1vcnkgd2hlbiB0aGVzZSBuZXcgZXJyb3IgY29uZGl0aW9ucyBhcmUgdHJpZ2dlcmVkLgoKVGhlIGluaXRpYWwgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAsIGBicGZfaXRlcl91bml4X2JhdGNoYCwgYW5kIGBicGZfaXRlcl9pbml0X3VuaXhgLiBIYW5nIG9uLCB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAuIEdpdmVuIHRoYXQgaXQmIzM5O3MgY2hhbmdlZCwgYW5kIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgYWxsb2NhdGlvbiBlcnJvciB3b3VsZCBiZSB0cmlnZ2VyZWQsIEkgdGhpbmsgaXQgaXMgaW1wb3J0YW50IHRvIGluY2x1ZGUgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAgYW5kIGBicGZfaXRlcl91bml4X2JhdGNoYCBmb3IgZnV6emluZy4KCkZvciBjb25maWd1cmF0aW9ucywgaXQmIzM5O3MgYFVOSVhgIGFuZCBgQlBGX1NZU0NBTExgIHRoYXQgd2UgbmVlZC4KCkkgdGhpbmsgSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIGBDT05GSUdfVU5JWGAgaXMgdGhlIHJpZ2h0IGNvbmZpZyBuYW1lIHRob3VnaCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVU5JWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvS2NvbmZpZy01LVxubmV0L3VuaXgvS2NvbmZpZzo2OmNvbmZpZyBVTklYXG5uZXQvdW5peC9LY29uZmlnLTctXHRib29sIFwmIzM0O1VuaXggZG9tYWluIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQvdW5peC9LY29uZmlnPTE5PWNvbmZpZ1x0QUZfVU5JWF9PT0Jcbi0tXG5uZXQvdW5peC9LY29uZmlnLTI1LVxubmV0L3VuaXgvS2NvbmZpZzoyNjpjb25maWcgVU5JWF9ESUFHXG5uZXQvdW5peC9LY29uZmlnLTI3LVx0dHJpc3RhdGUgXCYjMzQ7VU5JWDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzg2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVU5JWCBhbmQgQlBGX1NZU0NBTEwgSW50ZWdyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgVU5JWGAgYW5kIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHByb3Blcmx5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IGlmIGBDT05GSUdfUFJPQ19GU2AgaXMgcmVxdWlyZWQgaW4gdGhpcyBzY2VuYXJpby4gQWgsIGxvb2tzIGxpa2UgaXQgaXMuIEkgY2FuIHNlZSB0aGF0IGBicGZfaXRlcl9pbml0X3VuaXhgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKWAuIE1ha2VzIHNlbnNlLgoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBpcyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBjb21waWxlZCBpZiBgQ09ORklHX1BST0NfRlNgIGlzICpub3QqIGVuYWJsZWQ/IFRoYXQmIzM5O3MgdGhlIHBvdGVudGlhbCB3cmlua2xlIEkgbmVlZCB0byBpcm9uIG91dC4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLi4uIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC91bml4L2FmX3VuaXguY2AgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9MzY1MT1zdGF0aWMgdm9pZCBicGZfaXRlcl91bml4X3B1dF9iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcilcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzY1Ni1cbm5ldC91bml4L2FmX3VuaXguYzozNjU3OnN0YXRpYyBpbnQgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoKHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyLFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTgtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG5ld19iYXRjaF9zeilcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MzY3NT1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM3MDEtXG5uZXQvdW5peC9hZl91bml4LmM6MzcwMjpcdGlmICghcmVzaXplZCBcdTAwMjZcdTAwMjYgIWJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBleHBlY3RlZCAqIDMgLyAyKSkge1xubmV0L3VuaXgvYWZfdW5peC5jLTM3MDMtXHRcdHJlc2l6ZWQgPSB0cnVlO1xuLS1cbm5ldC91bml4L2FmX3VuaXguYz0zODY3PXN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF91bml4KHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM4NzUtXG5uZXQvdW5peC9hZl91bml4LmM6Mzg3NjpcdGVyciA9IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBJTklUX0JBVENIX1NaKTtcbm5ldC91bml4L2FmX3VuaXguYy0zODc3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE0NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIOKAkyBpdCYjMzk7cyBkZWZpbmVkIGF0IGxpbmUgMzY1Ny4gVGhlIGNvZGUmIzM5O3Mgc3RydWN0dXJlIHN1Z2dlc3RzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc3RyYXRlZ3ksIHdoaWNoIG1lYW5zIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEZpcnN0LCBJIHNlZSB0aGF0IHRoZSBvdmVyYWxsIEJQRiBzeXN0ZW0gY2FsbCBzdXBwb3J0IGlzIGVuYWJsZWQgd2l0aCBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgd2hpY2ggYmVnaW5zIG9uIGxpbmUgMzU5OS4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gVGhlbiwgdGhlcmUmIzM5O3MgYW5vdGhlciBjaGVjayB0aGF0IGluY2x1ZGVzIGAjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgIHN0YXJ0aW5nIG9uIGxpbmUgMzg2MS4KClNvLCBjbGVhcmx5LCBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBnZXRzIGNvbXBpbGVkICpldmVuKiBpZiBgQ09ORklHX1BST0NfRlNgIGlzbiYjMzk7dCBzZXQuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgd2lkZXIgYXBwbGljYWJpbGl0eSB0aGFuIGp1c3QgYmVpbmcgY29uZmluZWQgdG8gcHJvY2ZzLXJlbGF0ZWQgb3BlcmF0aW9ucy4gQnV0IGNvbXBpbGF0aW9uIGRvZXNuJiMzOTt0IGVxdWFsIHJlYWNoYWJpbGl0eS4gSSYjMzk7bSBhc2tpbmcgbXlzZWxmLCBldmVuIGlmIGl0JiMzOTtzIGNvbXBpbGVkLCAqaG93KiBjYW4gSSBnZXQgdG8gdGhpcyBmdW5jdGlvbj8KClRoZSBjb2RlIHJldmVhbHMgdGhhdCBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBpcyBjYWxsZWQgYnkgYGJwZl9pdGVyX3VuaXhfYmF0Y2hgLiAgYGJwZl9pdGVyX3VuaXhfYmF0Y2hgLCBpbiB0dXJuLCBpcyB1c2VkIHdpdGhpbiBgYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnRgIGFuZCBgYnBmX2l0ZXJfdW5peF9zZXFfbmV4dGAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgZm9yICp0aG9zZSogZnVuY3Rpb25zIHRvIGJlIHRyaWdnZXJlZC4gSWYgdGhvc2UgY2FuIGJlIHVzZWQgd2l0aG91dCBgQ09ORklHX1BST0NfRlNgLCB0aGVuIHRoZSBwYXRoIHRvIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIGlzIG9wZW4uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2sgZG93biB0aGUgdXNhZ2Ugb2YgYGJwZl9pdGVyX3VuaXhfc2VxX29wc2AgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3VuaXhfc2VxX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmM9Mzc3Mj1zdGF0aWMgdm9pZCBicGZfaXRlcl91bml4X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zNzg4LVxubmV0L3VuaXgvYWZfdW5peC5jOjM3ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicGZfaXRlcl91bml4X3NlcV9vcHMgPSB7XG5uZXQvdW5peC9hZl91bml4LmMtMzc5MC1cdC5zdGFydFx0PSBicGZfaXRlcl91bml4X3NlcV9zdGFydCxcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9Mzg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIHVuaXhfc2VxX2luZm8gPSB7XG5uZXQvdW5peC9hZl91bml4LmM6Mzg5NDpcdC5zZXFfb3BzXHRcdD0gXHUwMDI2YnBmX2l0ZXJfdW5peF9zZXFfb3BzLFxubmV0L3VuaXgvYWZfdW5peC5jLTM4OTUtXHQuaW5pdF9zZXFfcHJpdmF0ZVx0PSBicGZfaXRlcl9pbml0X3VuaXgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDI1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHVuaXhfc2VxX2luZm9gIERlZmluaXRpb24gYW5kIEl0cyBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgemVyb2luZyBpbiBvbiBgdW5peF9zZXFfaW5mb2AuIEl0JiMzOTtzIGRlZmluZWQgYXQgbGluZSAzODkzLCBhbmQgdGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgaXQmIzM5O3MgbmVzdGVkIHVuZGVyIGFuIGAjaWZgIGNvbmRpdGlvbjogYCNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKWAuIFJpZ2h0IGF3YXksIHRoYXQgdGVsbHMgbWUgc29tZXRoaW5nIGltcG9ydGFudCBhYm91dCBpdHMgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUuIElmIGBDT05GSUdfUFJPQ19GU2AgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gYHVuaXhfc2VxX2luZm9gIGlzbiYjMzk7dCBldmVuICpkZWZpbmVkKi4gVGhhdCBtZWFucyBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYCDigJMgd2hpY2ggcHJlc3VtYWJseSByZWxpZXMgb24gYHVuaXhfc2VxX2luZm9gIOKAkyB3b24mIzM5O3QgYmUgdXNlZCBlaXRoZXIuCgpIYW5nIG9uIGEgc2Vjb25kLiBJZiBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYCBpc24mIzM5O3QgdXNlZCwgdGhlIGNvbXBpbGVyIHNob3VsZCBmbGFnIGl0IGFzIGFuIHVudXNlZCB2YXJpYWJsZSwgcmlnaHQ/IFVubGVzcy4uLiB1bmxlc3MgaXQmIzM5O3MgKmFsc28qIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgdGhhdCBzYW1lIGAjaWZgLiBJdCYjMzk7cyBjcnVjaWFsIHRoYXQgdGhhdCBpcyB0aGUgY2FzZSwgb3Igd2UmIzM5O2xsIGJlIGdldHRpbmcgc29tZSBzcHVyaW91cyB3YXJuaW5ncy4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIHZlcmlmeSB0aGlzLgoKVG8gYmUgY2VydGFpbiwgbGV0JiMzOTtzIGxvb2sgZm9yIGFub3RoZXIgYCNpZmAgc3RhdGVtZW50IGFyb3VuZCBsaW5lIDM3ODkuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3ODA6XHRcdFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFx1MDAyNm1ldGEsIHRydWUpO1xuMzc4MTpcdFx0XHRpZiAocHJvZylcbjM3ODI6XHRcdFx0XHQodm9pZCl1bml4X3Byb2dfc2VxX3Nob3cocHJvZywgXHUwMDI2bWV0YSwgdiwgMCk7XG4zNzgzOlx0XHR9XG4zNzg0Olx0XG4zNzg1Olx0XHRpZiAoaXRlci1cdTAwM2VjdXJfc2sgXHUwMDNjIGl0ZXItXHUwMDNlZW5kX3NrKVxuMzc4NjpcdFx0XHRicGZfaXRlcl91bml4X3B1dF9iYXRjaChpdGVyKTtcbjM3ODc6XHR9XG4zNzg4Olx0XG4zNzg5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicGZfaXRlcl91bml4X3NlcV9vcHMgPSB7XG4zNzkwOlx0XHQuc3RhcnRcdD0gYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnQsXG4zNzkxOlx0XHQubmV4dFx0PSBicGZfaXRlcl91bml4X3NlcV9uZXh0LFxuMzc5MjpcdFx0LnN0b3BcdD0gYnBmX2l0ZXJfdW5peF9zZXFfc3RvcCxcbjM3OTM6XHRcdC5zaG93XHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3Nob3csXG4zNzk0Olx0fTtcbjM3OTU6XHQjZW5kaWZcbjM3OTY6XHQjZW5kaWZcbjM3OTc6XHRcbjM3OTg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgdW5peF9mYW1pbHlfb3BzID0ge1xuMzc5OTpcdFx0LmZhbWlseSA9IFBGX1VOSVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRG91YmxlIGAjZW5kaWZgIERpc2NvdmVyeSoqCgpSaWdodCwgc28gSSYjMzk7dmUgc3BvdHRlZCBzb21ldGhpbmcgYSBiaXQgdW51c3VhbCBoZXJlIOKAkyB0d28gc2VwYXJhdGUgYCNlbmRpZmAgZGlyZWN0aXZlcyBzdGFja2VkIHVwIGF0IGxpbmVzIDM3OTUgYW5kIDM3OTYuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZG8gdGhlc2UgcHJlcHJvY2Vzc29yIGJsb2NrcyAqYWN0dWFsbHkqIGJlZ2luPyYjMzQ7IEkgbmVlZCB0byBxdWlja2x5IHRyYWNlIGJhY2sgYW5kIHNlZSBpZiB0aGVzZSBhcmUgY29ycmVjdGx5IHBhaXJlZCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3IgYCNpZmAgZGlyZWN0aXZlcy4gVGhpcyBjb3VsZCBiZSBhIHNpbXBsZSB0eXBvLCBhIG1pc3VuZGVyc3Rvb2QgbmVzdGluZyBpc3N1ZSwgb3IgcG90ZW50aWFsbHkgYSBtb3JlIHNlcmlvdXMgbG9naWNhbCBlcnJvciBpbiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIFRpbWUgdG8gZGl2ZSBpbiBhbmQgaW52ZXN0aWdhdGUgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhlc2UgYmxvY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzU5MDpcdH1cbjM1OTE6XHRcbjM1OTI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHVuaXhfc2VxX29wcyA9IHtcbjM1OTM6XHRcdC5zdGFydCAgPSB1bml4X3NlcV9zdGFydCxcbjM1OTQ6XHRcdC5uZXh0ICAgPSB1bml4X3NlcV9uZXh0LFxuMzU5NTpcdFx0LnN0b3AgICA9IHVuaXhfc2VxX3N0b3AsXG4zNTk2Olx0XHQuc2hvdyAgID0gdW5peF9zZXFfc2hvdyxcbjM1OTc6XHR9O1xuMzU5ODpcdFxuMzU5OTpcdCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbjM2MDA6XHRzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSB7XG4zNjAxOlx0XHRzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlIHA7XG4zNjAyOlx0XHR1bnNpZ25lZCBpbnQgY3VyX3NrO1xuMzYwMzpcdFx0dW5zaWduZWQgaW50IGVuZF9zaztcbjM2MDQ6XHRcdHVuc2lnbmVkIGludCBtYXhfc2s7XG4zNjA1Olx0XHRzdHJ1Y3Qgc29jayAqKmJhdGNoO1xuMzYwNjpcdFx0Ym9vbCBzdF9idWNrZXRfZG9uZTtcbjM2MDc6XHR9O1xuMzYwODpcdFxuMzYwOTpcdHN0cnVjdCBicGZfaXRlcl9fdW5peCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQ3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqRmluZGluZyB0aGUgTWF0Y2hpbmcgQ29uZGl0aW9uYWwqKgoKT2theSwgSSYjMzk7bSBzcG90dGluZyBhIGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBkaXJlY3RpdmUgYXQgbGluZSAzNTk5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgY29ycmVzcG9uZGluZyBgI2lmYCBvciBgI2lmZGVmYCBibG9jayYjMzk7cyB0ZXJtaW5hdGlvbj8mIzM0OyBJIG5lZWQgdG8gc2VlIHRoZSBlbnRpcmUgbG9naWNhbCBzY29wZSB0byB1bmRlcnN0YW5kIHRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc2NhbiBhcm91bmQgbGluZSAzNTk5LiBUaGUgZ29hbCBpcyB0byBxdWlja2x5IGxvY2F0ZSBlaXRoZXIgdGhlIGNsb3NpbmcgYCNlbmRpZmAgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBpbmNsdWRlZCBvciBleGNsdWRlZCBvciB0aGUgb3BlbmluZyBjb25kaXRpb25hbCBpZiB0aGlzIGlzIGEgbmVzdGVkIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBncm9rIHRoZSBjb2RlIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzU4MDpcdFx0XHRcdH1cbjM1ODE6XHRcdFx0XHRmb3IgKCA7IGkgXHUwMDNjIGxlbjsgaSYjNDM7JiM0MzspXG4zNTgyOlx0XHRcdFx0XHRzZXFfcHV0YyhzZXEsIHUtXHUwMDNlYWRkci1cdTAwM2VuYW1lLVx1MDAzZXN1bl9wYXRoW2ldID86XG4zNTgzOlx0XHRcdFx0XHRcdCAmIzM5O0AmIzM5Oyk7XG4zNTg0Olx0XHRcdH1cbjM1ODU6XHRcdFx0dW5peF9zdGF0ZV91bmxvY2socyk7XG4zNTg2Olx0XHRcdHNlcV9wdXRjKHNlcSwgJiMzOTtcXG4mIzM5Oyk7XG4zNTg3Olx0XHR9XG4zNTg4Olx0XG4zNTg5Olx0XHRyZXR1cm4gMDtcbjM1OTA6XHR9XG4zNTkxOlx0XG4zNTkyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB1bml4X3NlcV9vcHMgPSB7XG4zNTkzOlx0XHQuc3RhcnQgID0gdW5peF9zZXFfc3RhcnQsXG4zNTk0Olx0XHQubmV4dCAgID0gdW5peF9zZXFfbmV4dCxcbjM1OTU6XHRcdC5zdG9wICAgPSB1bml4X3NlcV9zdG9wLFxuMzU5NjpcdFx0LnNob3cgICA9IHVuaXhfc2VxX3Nob3csXG4zNTk3Olx0fTtcbjM1OTg6XHRcbjM1OTk6XHQjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODQ1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOgoKKipEZWJ1Z2dpbmcgYSBNaXNzaW5nIENvbmRpdGlvbmFsKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuLi5zb21ldGhpbmcgZmVlbHMgb2ZmLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHN3ZWFyIEkgd2FzIGV4cGVjdGluZyB0byBzZWUgYSBzZWNvbmQgYCNpZmAgaGVyZS4gSXQgc2VlbXMgbGlrZSBhIGNvbmRpdGlvbmFsIG1pZ2h0IGJlIG1pc3NpbmcsIG9yIHBlcmhhcHMgSSYjMzk7bSBtaXNyZW1lbWJlcmluZyB0aGUgb3JpZ2luYWwgc3RydWN0dXJlLiBMZXQgbWUganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bSBnb2luZyB0byBydW4gYSBnbG9iYWwgc2VhcmNoIG9mIHRoZSBlbnRpcmUgZmlsZS4gVGhlIHNwZWNpZmljIHN0cnVjdHVyZSBJJiMzOTttIGxvb2tpbmcgZm9yIGlzIGJhc2VkIG9uIGAjaWZkZWYgQ09ORklHX1BST0NfRlNgIHRvIG1ha2Ugc3VyZSBpdCBleGlzdHMsIHNvIEkgY2FuIHNlZSBpZiB0aGUgZXhwZWN0ZWQgbG9naWMgaXMgaW4gcGxhY2UuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgc29tZXRoaW5nIGlzIG91dCBvZiBzeW5jIGFuZCBuZWVkcyB0byBiZSBhZGRyZXNzZWQgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1BST0NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jPTg3MT1zdGF0aWMgaW50IHVuaXhfc2VxcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCxcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtODczLVxubmV0L3VuaXgvYWZfdW5peC5jOjg3NDojaWZkZWYgQ09ORklHX1BST0NfRlNcbm5ldC91bml4L2FmX3VuaXguYy04NzUtc3RhdGljIGludCB1bml4X2NvdW50X25yX2ZkcyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTMzOTg9c3RhdGljIF9fcG9sbF90IHVuaXhfZGdyYW1fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzQ1Ny1cbm5ldC91bml4L2FmX3VuaXguYzozNDU4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xubmV0L3VuaXgvYWZfdW5peC5jLTM0NTktXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM4MDU9c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODEyLVxubmV0L3VuaXgvYWZfdW5peC5jOjM4MTM6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvdW5peC9hZl91bml4LmMtMzgxNC1cdGlmICghcHJvY19jcmVhdGVfbmV0KFwmIzM0O3VuaXhcJiMzNDssIDAsIG5ldC1cdTAwM2Vwcm9jX25ldCwgXHUwMDI2dW5peF9zZXFfb3BzLFxuLS1cbm5ldC91bml4L2FmX3VuaXguYy0zODM4LWVycl9wcm9jOlxubmV0L3VuaXgvYWZfdW5peC5jOjM4Mzk6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvdW5peC9hZl91bml4LmMtMzg0MC1cdHJlbW92ZV9wcm9jX2VudHJ5KFwmIzM0O3VuaXhcJiMzNDssIG5ldC1cdTAwM2Vwcm9jX25ldCk7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM4NTY9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB1bml4X25ldF9vcHMgPSB7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM4NjAtXG5uZXQvdW5peC9hZl91bml4LmM6Mzg2MTojaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L3VuaXgvYWZfdW5peC5jLTM4NjItREVGSU5FX0JQRl9JVEVSX0ZVTkModW5peCwgc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTM5MzM9c3RhdGljIGludCBfX2luaXQgYWZfdW5peF9pbml0KHZvaWQpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTM5NjAtXG5uZXQvdW5peC9hZl91bml4LmM6Mzk2MTojaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxubmV0L3VuaXgvYWZfdW5peC5jLTM5NjItXHRicGZfaXRlcl9yZWdpc3RlcigpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcwNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKgoKUmlnaHQsIHNvIEkmIzM5O20gemVyb2luZyBpbiBvbiBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZS4gVGhhdCBgI2lmZGVmIENPTkZJR19QUk9DX0ZTYCBjb25zdHJ1Y3QsIGl0JiMzOTtzIHNpdHRpbmcgYXQgbGluZSAzNDU4LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQmIzM5O3MgdGltZSB0byBxdWlja2x5IGFuYWx5emUgdGhlIHNlY3Rpb24gb2YgY29kZS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIGZyb20gdGhlcmUgZG93biB0byBsaW5lIDM1OTkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGNvbnRleHQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZCBpbiBvciBvdXQgYmFzZWQgb24gdGhlIGBDT05GSUdfUFJPQ19GU2Agc2V0dGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHRoZSBjb2RlIHRoYXQgZGVwZW5kcyBvbiBpdC4gSXMgaXQgZGVmaW5pbmcgYSBtb2R1bGUsIGVuYWJsaW5nIGEgZmVhdHVyZSwgb3IgcGVyaGFwcyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYW4gZXhpc3RpbmcgZnVuY3Rpb24/IExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDU1Olx0XHRyZXR1cm4gbWFzaztcbjM0NTY6XHR9XG4zNDU3Olx0XG4zNDU4Olx0I2lmZGVmIENPTkZJR19QUk9DX0ZTXG4zNDU5Olx0XG4zNDYwOlx0I2RlZmluZSBCVUNLRVRfU1BBQ0UgKEJJVFNfUEVSX0xPTkcgLSAoVU5JWF9IQVNIX0JJVFMgJiM0MzsgMSkgLSAxKVxuMzQ2MTpcdFxuMzQ2MjpcdCNkZWZpbmUgZ2V0X2J1Y2tldCh4KSAoKHgpIFx1MDAzZVx1MDAzZSBCVUNLRVRfU1BBQ0UpXG4zNDYzOlx0I2RlZmluZSBnZXRfb2Zmc2V0KHgpICgoeCkgXHUwMDI2ICgoMVVMIFx1MDAzY1x1MDAzYyBCVUNLRVRfU1BBQ0UpIC0gMSkpXG4zNDY0Olx0I2RlZmluZSBzZXRfYnVja2V0X29mZnNldChiLCBvKSAoKGIpIFx1MDAzY1x1MDAzYyBCVUNLRVRfU1BBQ0UgfCAobykpXG4zNDY1Olx0XG4zNDY2Olx0c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2Zyb21fYnVja2V0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcylcbjM0Njc6XHR7XG4zNDY4Olx0XHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGdldF9vZmZzZXQoKnBvcyk7XG4zNDY5Olx0XHR1bnNpZ25lZCBsb25nIGJ1Y2tldCA9IGdldF9idWNrZXQoKnBvcyk7XG4zNDcwOlx0XHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcbjM0NzE6XHRcdHN0cnVjdCBzb2NrICpzaztcbjM0NzI6XHRcbjM0NzM6XHRcdGZvciAoc2sgPSBza19oZWFkKFx1MDAyNnNlcV9maWxlX25ldChzZXEpLVx1MDAzZXVueC50YWJsZS5idWNrZXRzW2J1Y2tldF0pO1xuMzQ3NDpcdFx0ICAgICBzazsgc2sgPSBza19uZXh0KHNrKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMyNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbnVtYmVycy4gYENPTkZJR19QUk9DX0ZTYCBpcyBzdGFydGluZyBhdCAzNDU4IGluIHRoZSBjb25maWd1cmF0aW9uIGluZGV4LCB3aGlsZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFydGluZyBhdCAzNTk5LiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gR2l2ZW4gdGhlaXIgcG9zaXRpb25pbmcsIGl0IHNlZW1zIHRoaXMgaXMgdW5kZXIgYm90aCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIC0gdGhlcmUgc2hvdWxkIGJlIGEgYnVpbGQgb3B0aW9uIHVuZGVyIHRoZSBvcHRpb25zIG9mIGJvdGggY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdG8gYmUgY29ycmVjdC4gTmVlZCB0byB2ZXJpZnkgdGhhdCwgb3IgcG9zc2libHkgZGlzY292ZXIgc29tZXRoaW5nIG1vcmUgbnVhbmNlZCBpbiB0aGUgY29uZmlnIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2FmX3VuaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzc4ODpcdFxuMzc4OTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX2l0ZXJfdW5peF9zZXFfb3BzID0ge1xuMzc5MDpcdFx0LnN0YXJ0XHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0LFxuMzc5MTpcdFx0Lm5leHRcdD0gYnBmX2l0ZXJfdW5peF9zZXFfbmV4dCxcbjM3OTI6XHRcdC5zdG9wXHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3N0b3AsXG4zNzkzOlx0XHQuc2hvd1x0PSBicGZfaXRlcl91bml4X3NlcV9zaG93LFxuMzc5NDpcdH07XG4zNzk1Olx0I2VuZGlmXG4zNzk2Olx0I2VuZGlmXG4zNzk3Olx0XG4zNzk4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHVuaXhfZmFtaWx5X29wcyA9IHtcbjM3OTk6XHRcdC5mYW1pbHkgPSBQRl9VTklYLFxuMzgwMDpcdFx0LmNyZWF0ZSA9IHVuaXhfY3JlYXRlLFxuMzgwMTpcdFx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuMzgwMjpcdH07XG4zODAzOlx0XG4zODA0Olx0XG4zODA1Olx0c3RhdGljIGludCBfX25ldF9pbml0IHVuaXhfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuMzgwNjpcdHtcbjM4MDc6XHRcdGludCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkwMQoJCQkJCQkJb3V0cHV0OiAxNDAKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkgc2VlIHRob3NlIHR3byBgI2VuZGlmYCBkaXJlY3RpdmVzIGF0IGxpbmVzIDM3OTUgYW5kIDM3OTYuIE9uZSBjb3JyZXNwb25kcyB0byBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgYXQgbGluZSAzNTk5LCBhbmQgdGhlIG90aGVyIHRvIGAjaWZkZWYgQ09ORklHX1BST0NfRlNgIGF0IGxpbmUgMzQ1OC4gUmlnaHQsIHNvIHRoYXQgbWVhbnMgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgVU5JWGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgUFJPQ19GU2AuCgpIYW5nIG9uLCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBgQ09ORklHX1VOSVhgIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmRhbWVudGFsIG9uZSBoZXJlLiBXZSBhbHNvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYmVjYXVzZSBvZiB0aGUgZmlyc3QgYCNlbmRpZmAuIEFuZCBgQ09ORklHX1BST0NfRlNgIGlzIGFsc28gcmVxdWlyZWQsIGdpdmVuIHRoZSBzZWNvbmQgYCNlbmRpZmAuIEFjdHVhbGx5LCBgQ09ORklHX1BST0NfRlNgIGlzIHVzdWFsbHkgZW5hYmxlZCBpbiB0aGVzZSB0eXBlcyBvZiBzeXN0ZW1zLiBBbHJpZ2h0LCBJJiMzOTtsbCBpbmNsdWRlIGBVTklYYCBhbmQgYEJQRl9TWVNDQUxMYC4KCkp1c3QgYSBjaGVjaywgaXMgYENPTkZJR19VTklYYCB0cmlzdGF0ZT8gWWVzLCBpdCBpcy4KClNvLCBgVU5JWGAsIGBCUEZfU1lTQ0FMTGAuIEdvb2QuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29uZmlncy4gTm9wZSwgdGhhdCYjMzk7cyBpdC4KCk5vdywgbGV0IG1lIGxvb2sgYXQgdGhlIGZvY3VzIHN5bWJvbHMuIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgLCBgYnBmX2l0ZXJfdW5peF9iYXRjaGAsIGFuZCBgYnBmX2l0ZXJfaW5pdF91bml4YC4gT2theSwgaXQgc2VlbXMgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggcmVwbGFjZXMgYGt2bWFsbG9jYCB3aXRoIGBrdm1hbGxvY19hcnJheWAgdG8gcHJldmVudCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBCUEYgaXRlcmF0b3IgYmF0Y2guIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIFVOSVggc29ja2V0IEJQRiBpdGVyYXRvcnMuIENydWNpYWxseSwgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgc28gZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gbWFrZSBzdXJlIHRoZSBmaXggd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGFuZCBhbmFseXppbmcgdGhlIHJlc3VsdHMsIGxldCYjMzk7cyBtYWtlIHRoZSBjYWxsIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl91bml4X2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX2luaXRfdW5peCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBrdm1hbGxvYyB3aXRoIGt2bWFsbG9jX2FycmF5IHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbiBvZiB0aGUgQlBGIGl0ZXJhdG9yIGJhdGNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBVTklYIHNvY2tldCBCUEYgaXRlcmF0b3JzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IHdvcmtzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl91bml4X2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX2luaXRfdW5peCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBrdm1hbGxvYyB3aXRoIGt2bWFsbG9jX2FycmF5IHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbiBvZiB0aGUgQlBGIGl0ZXJhdG9yIGJhdGNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBVTklYIHNvY2tldCBCUEYgaXRlcmF0b3JzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IHdvcmtzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQyOjUwLjEyNTU1Nzc3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0Nzg0MDU3ODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVOSVhcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoXCIsXG4gICAgXCJicGZfaXRlcl91bml4X2JhdGNoXCIsXG4gICAgXCJicGZfaXRlcl9pbml0X3VuaXhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBrdm1hbGxvYyB3aXRoIGt2bWFsbG9jX2FycmF5IHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgYWxsb2NhdGlvbiBvZiB0aGUgQlBGIGl0ZXJhdG9yIGJhdGNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIGZvciBVTklYIHNvY2tldCBCUEYgaXRlcmF0b3JzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IHdvcmtzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDI6NTAuMTI1NTY1NjI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODIzNjI3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmN2U1MDM0NDlhYjBkYzM1ZTkyZGZkZTJjY2MzNzkxOGQ3NGM5ZWUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDE2IDA4OjQyOjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguY1xcbmluZGV4IGY3YTlkNTVlZWU4YTEyLi42NjY0ZWFkNDYyMTY5ZiAxMDA2NDRcXG4tLS0gYS9uZXQvdW5peC9hZl91bml4LmNcXG4rKysgYi9uZXQvdW5peC9hZl91bml4LmNcXG5AQCAtMzY1OSw4ICszNjU5LDggQEAgc3RhdGljIGludCBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIsXFxuIHtcXG4gXFx0c3RydWN0IHNvY2sgKipuZXdfYmF0Y2g7XFxuIFxcbi1cXHRuZXdfYmF0Y2ggPSBrdm1hbGxvYyhzaXplb2YoKm5ld19iYXRjaCkgKiBuZXdfYmF0Y2hfc3osXFxuLVxcdFxcdFxcdCAgICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbitcXHRuZXdfYmF0Y2ggPSBrdm1hbGxvY19hcnJheShuZXdfYmF0Y2hfc3osIHNpemVvZigqbmV3X2JhdGNoKSxcXG4rXFx0XFx0XFx0XFx0ICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRpZiAoIW5ld19iYXRjaClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0Mjo1MC44MTEwNDk0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQwOTg1NTEyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVU5JWFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hcIixcbiAgICBcImJwZl9pdGVyX3VuaXhfYmF0Y2hcIixcbiAgICBcImJwZl9pdGVyX2luaXRfdW5peFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGt2bWFsbG9jIHdpdGgga3ZtYWxsb2NfYXJyYXkgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyBhbGxvY2F0aW9uIG9mIHRoZSBCUEYgaXRlcmF0b3IgYmF0Y2guIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIFVOSVggc29ja2V0IEJQRiBpdGVyYXRvcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgd29ya3MgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3ZTUwMzQ0OWFiMGRjMzVlOTJkZmRlMmNjYzM3OTE4ZDc0YzllZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAwODo0Mjo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguY1xuaW5kZXggZjdhOWQ1NWVlZThhMTIuLjY2NjRlYWQ0NjIxNjlmIDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jXG4rKysgYi9uZXQvdW5peC9hZl91bml4LmNcbkBAIC0zNjU5LDggKzM2NTksOCBAQCBzdGF0aWMgaW50IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcixcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqKm5ld19iYXRjaDtcbiBcbi1cdG5ld19iYXRjaCA9IGt2bWFsbG9jKHNpemVvZigqbmV3X2JhdGNoKSAqIG5ld19iYXRjaF9zeixcbi1cdFx0XHQgICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbitcdG5ld19iYXRjaCA9IGt2bWFsbG9jX2FycmF5KG5ld19iYXRjaF9zeiwgc2l6ZW9mKCpuZXdfYmF0Y2gpLFxuK1x0XHRcdFx0ICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuIFx0aWYgKCFuZXdfYmF0Y2gpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDI6NTAuODExMDUzNzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU0NzcxNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgVW5peCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvdW5peC9hZl91bml4LmNgLiBJdCBzZWVtcyB0aGV5J3ZlIHN3aXRjaGVkIGZyb20gdXNpbmcgYGt2bWFsbG9jYCB0byBga3ZtYWxsb2NfYXJyYXlgIHdoZW4gYWxsb2NhdGluZyBtZW1vcnkgZm9yIGEgbmV3IGJhdGNoLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgYGt2bWFsbG9jKHNpemVvZigqbmV3X2JhdGNoKSAqIG5ld19iYXRjaF9zeiwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pYCB0byBga3ZtYWxsb2NfYXJyYXkobmV3X2JhdGNoX3N6LCBzaXplb2YoKm5ld19iYXRjaCksIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKWAuIEZ1bmN0aW9uYWxseSwgaXQncyB0aGUgc2FtZSwgcmlnaHQ/IE5vLCB3YWl0Li4uIGl0J3MgYSAqc2lnbmlmaWNhbnQqIGltcHJvdmVtZW50IGZvciByb2J1c3RuZXNzLCBwcmltYXJpbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGFsbG9jYXRpb24gc2l6ZSBjYWxjdWxhdGlvbi4gR29vZCBjYXRjaC5cblxuQnV0LCBkb2VzIHRoaXMgY2hhbmdlIGFsdGVyIHRoZSBhY3R1YWwgZXhlY3V0aW9uIGZsb3c/IFVzaW5nIGBrdm1hbGxvY19hcnJheWAgaW5zdGVhZCBvZiBqdXN0IGBrdm1hbGxvY2AgY291bGQgaGF2ZSBzdWJ0bGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGhvdyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBpcyB1c2VkIGluIHRoaXMgZmlsZS4uLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhIGJpdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDI6NTQuODY1ODMwMDg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzMxNTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz0zNjUxPXN0YXRpYyB2b2lkIGJwZl9pdGVyX3VuaXhfcHV0X2JhdGNoKHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTYtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM2NTc6c3RhdGljIGludCBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIsXFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTgtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBuZXdfYmF0Y2hfc3opXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MzY3NT1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzcwMS1cXG5uZXQvdW5peC9hZl91bml4LmM6MzcwMjpcXHRpZiAoIXJlc2l6ZWQgXFx1MDAyNlxcdTAwMjYgIWJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBleHBlY3RlZCAqIDMgLyAyKSkge1xcbm5ldC91bml4L2FmX3VuaXguYy0zNzAzLVxcdFxcdHJlc2l6ZWQgPSB0cnVlO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTM4Njc9c3RhdGljIGludCBicGZfaXRlcl9pbml0X3VuaXgodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODc1LVxcbm5ldC91bml4L2FmX3VuaXguYzozODc2OlxcdGVyciA9IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBJTklUX0JBVENIX1NaKTtcXG5uZXQvdW5peC9hZl91bml4LmMtMzg3Ny1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQyOjU1LjE0OTE1NzY2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjkxMTMyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEl0ZXJhdG9yIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgb3V0IGBrdm1hbGxvY2AgZm9yIGBrdm1hbGxvY19hcnJheWAuIEhtbSwgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgaXQncyBiYXNpY2FsbHkgYSBmdW5jdGlvbiByZXBsYWNlbWVudC4gSSBzZWUgdGhhdCBga3ZtYWxsb2NfYXJyYXlgIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBkb2luZyBhIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93IGNoZWNrIGJlZm9yZSBjYWxsaW5nIHRoZSBvbGQgYGt2bWFsbG9jYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlLCBidXQgaG93IHNpZ25pZmljYW50PyBMZXQncyBmaWd1cmUgb3V0IGlmIGl0J3Mgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0LlxuXG5SaWdodCwgdGhlIGNoYW5nZSBpcyBpbiBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gQWgsIHRoYXQgcmluZ3MgYSBiZWxsISBUaGlzIGlzIHBhcnQgb2YgQlBGIGl0ZXJhdG9ycyBmb3IgdW5peCBzb2NrZXRzLiBUbyBwcm9wZXJseSB0ZXN0IHRoaXMsIEknbSBnb2luZyB0byBuZWVkIHRvIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIExldCBtZSBzZWUuLi4gSSdtIGd1ZXNzaW5nIHdlJ2xsIG5lZWQgYENPTkZJR19VTklYYCBmb3Igb2J2aW91cyByZWFzb25zLCBhbmQgcHJvYmFibHkgYENPTkZJR19CUEZfU1lTQ0FMTGAgdG9vLCBnaXZlbiBpdHMgY29ubmVjdGlvbiB0byBCUEYuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBCUEYgY29uZmlnIGRlcGVuZGVuY3kg4oCTIGEgcXVpY2sgc2VhcmNoIGluIGBuZXQvdW5peC9hZl91bml4LmNgIGZvciBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgc2hvdWxkIGNvbmZpcm0gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDM6MDAuNDc4MjczNzc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTU0OTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz0xMDYwPXN0cnVjdCBwcm90byB1bml4X2RncmFtX3Byb3RvID0ge1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwNjUtXFx0LmJwZl9ieXBhc3NfZ2V0c29ja29wdFxcdD0gdW5peF9icGZfYnlwYXNzX2dldHNvY2tvcHQsXFxubmV0L3VuaXgvYWZfdW5peC5jOjEwNjY6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC91bml4L2FmX3VuaXguYy0xMDY3LVxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdW5peF9kZ3JhbV9icGZfdXBkYXRlX3Byb3RvLFxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTEwNzE9c3RydWN0IHByb3RvIHVuaXhfc3RyZWFtX3Byb3RvID0ge1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwNzYtXFx0LmJwZl9ieXBhc3NfZ2V0c29ja29wdFxcdD0gdW5peF9icGZfYnlwYXNzX2dldHNvY2tvcHQsXFxubmV0L3VuaXgvYWZfdW5peC5jOjEwNzc6I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC91bml4L2FmX3VuaXguYy0xMDc4LVxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdW5peF9zdHJlYW1fYnBmX3VwZGF0ZV9wcm90byxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0yNjcwPXN0YXRpYyBpbnQgdW5peF9kZ3JhbV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMjY3NC1cXG5uZXQvdW5peC9hZl91bml4LmM6MjY3NTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L3VuaXgvYWZfdW5peC5jLTI2NzYtXFx0Y29uc3Qgc3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KTtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zMTQwPXN0YXRpYyBpbnQgdW5peF9zdHJlYW1fcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzE1MC1cXG5uZXQvdW5peC9hZl91bml4LmM6MzE1MTojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L3VuaXgvYWZfdW5peC5jLTMxNTItXFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MzU5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHVuaXhfc2VxX29wcyA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zNTk4LVxcbm5ldC91bml4L2FmX3VuaXguYzozNTk5OiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvdW5peC9hZl91bml4LmMtMzYwMC1zdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSB7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzg1Nj1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHVuaXhfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODYwLVxcbm5ldC91bml4L2FmX3VuaXguYzozODYxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvdW5peC9hZl91bml4LmMtMzg2Mi1ERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zOTMzPXN0YXRpYyBpbnQgX19pbml0IGFmX3VuaXhfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM5NjAtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM5NjE6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxcbm5ldC91bml4L2FmX3VuaXguYy0zOTYyLVxcdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjAwLjc0NzgzNzc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwMDkxNjY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHVuZGVyIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGl0IGlzIGVuYWJsZWQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgdGhlIGNvZGUgaW5kaWNhdGVzIGl0J3MgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCB0aGF0J3MgYXBwZWFyaW5nIGFyb3VuZCBsaW5lIDM1OTkuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGFsc28gcmVsaWVzIG9uIGBDT05GSUdfUFJPQ19GU2AuIEkndmUgZ290IHRvIGVuc3VyZSBpdCdzIG5vdCBjb25kaXRpb25hbCBvbiAqYm90aCogYENPTkZJR19CUEZfU1lTQ0FMTGAgKmFuZCogYENPTkZJR19QUk9DX0ZTYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBieSBjaGVja2luZyBmdXJ0aGVyIGRvd247IGFoYSEgTGluZSAzODYxIHNob3dzIGAjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKWAuIE9rYXksIHNvIGl0ICppcyogcG9zc2libGUgdGhhdCBmdW5jdGlvbiBjYW4gYWxzbyByZWx5IG9uIGBDT05GSUdfUFJPQ19GU2AgdG9vLiBUaW1lIHRvIG9wZW4gYG5ldC91bml4L2FmX3VuaXguY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDM1OTkgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHVzZWQsIGFuZCBpZiB0aG9zZSBjb25maWd1cmF0aW9ucyByZWFsbHkgbWF0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjA0Ljk0ODc1NjM3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzU5NTpcXHRcXHQuc3RvcCAgID0gdW5peF9zZXFfc3RvcCxcXG4zNTk2OlxcdFxcdC5zaG93ICAgPSB1bml4X3NlcV9zaG93LFxcbjM1OTc6XFx0fTtcXG4zNTk4OlxcdFxcbjM1OTk6XFx0I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbjM2MDA6XFx0c3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUge1xcbjM2MDE6XFx0XFx0c3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwO1xcbjM2MDI6XFx0XFx0dW5zaWduZWQgaW50IGN1cl9zaztcXG4zNjAzOlxcdFxcdHVuc2lnbmVkIGludCBlbmRfc2s7XFxuMzYwNDpcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X3NrO1xcbjM2MDU6XFx0XFx0c3RydWN0IHNvY2sgKipiYXRjaDtcXG4zNjA2OlxcdFxcdGJvb2wgc3RfYnVja2V0X2RvbmU7XFxuMzYwNzpcXHR9O1xcbjM2MDg6XFx0XFxuMzYwOTpcXHRzdHJ1Y3QgYnBmX2l0ZXJfX3VuaXgge1xcbjM2MTA6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCBicGZfaXRlcl9tZXRhICosIG1ldGEpO1xcbjM2MTE6XFx0XFx0X19icGZfbWRfcHRyKHN0cnVjdCB1bml4X3NvY2sgKiwgdW5peF9zayk7XFxuMzYxMjpcXHRcXHR1aWRfdCB1aWQgX19hbGlnbmVkKDgpO1xcbjM2MTM6XFx0fTtcXG4zNjE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzowNC45NDg5MzczNzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzExMjA5NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJQRiBTeXNjYWxsIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfVU5JWGAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgYENPTkZJR19VTklYYCAqYWJzb2x1dGVseSogbmVjZXNzYXJ5IGZvciB3aGF0IEknbSB0cnlpbmcgdG8gZG8/IEkgcmVjYWxsIGl0IGJlaW5nIGxpbmtlZCB0byB0aGUgYG5ldC91bml4L2FmX3VuaXguY2AgZmlsZSwgc28gSSBiZWxpZXZlIHRoZSBhbnN3ZXIgaXMgeWVzLiBOb3csIHJlZ2FyZGluZyBgQ09ORklHX1BST0NfRlNgLCB0aGlzIHNlZW1zIHJlbGV2YW50IGJlY2F1c2UgYGJwZl9pdGVyX3JlZ2lzdGVyYCBhcHBlYXJzIHRvIGJlIGd1YXJkZWQgYnkgaXQuIEp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYW5kIHZlcmlmeSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIExldCBtZSBnbyBmaW5kIGxpbmUgMzg2MSB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzowOC4yNjAxNDkyMDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L2FmX3VuaXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODU1OlxcdFxcbjM4NTY6XFx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB1bml4X25ldF9vcHMgPSB7XFxuMzg1NzpcXHRcXHQuaW5pdCA9IHVuaXhfbmV0X2luaXQsXFxuMzg1ODpcXHRcXHQuZXhpdCA9IHVuaXhfbmV0X2V4aXQsXFxuMzg1OTpcXHR9O1xcbjM4NjA6XFx0XFxuMzg2MTpcXHQjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxuMzg2MjpcXHRERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4zODYzOlxcdFxcdFxcdCAgICAgc3RydWN0IHVuaXhfc29jayAqdW5peF9zaywgdWlkX3QgdWlkKVxcbjM4NjQ6XFx0XFxuMzg2NTpcXHQjZGVmaW5lIElOSVRfQkFUQ0hfU1ogMTZcXG4zODY2OlxcdFxcbjM4Njc6XFx0c3RhdGljIGludCBicGZfaXRlcl9pbml0X3VuaXgodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4zODY4OlxcdHtcXG4zODY5OlxcdFxcdHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyID0gcHJpdl9kYXRhO1xcbjM4NzA6XFx0XFx0aW50IGVycjtcXG4zODcxOlxcdFxcbjM4NzI6XFx0XFx0ZXJyID0gYnBmX2l0ZXJfaW5pdF9zZXFfbmV0KHByaXZfZGF0YSwgYXV4KTtcXG4zODczOlxcdFxcdGlmIChlcnIpXFxuMzg3NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzowOC4yNjAzMzA0MjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5NTc0MTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBJdGVyYXRpb24gQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBCUEYgaXRlcmF0aW9uIGNvZGUsIGFuZCBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IGBicGZfaXRlcl9pbml0X3VuaXhgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIFNwZWNpZmljYWxseSwgaXQncyBvbmx5IGluY2x1ZGVkIGlmIGJvdGggYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfUFJPQ19GU2AgYXJlIGRlZmluZWQuIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0IGdpdmVzIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiB3aGVuIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IGFjdGl2ZS5cblxuTm93LCBhIHJlbGF0ZWQgZnVuY3Rpb24sIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgLCBpcyBkZWZpbmVkIGVhcmxpZXIgaW4gdGhlIGZpbGUuIEludGVyZXN0aW5nLCBiZWNhdXNlIEkgc2VlIHRoYXQgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAgaXMgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBieSAqYm90aCogYGJwZl9pdGVyX2luaXRfdW5peGAgYW5kIGBicGZfaXRlcl91bml4X2JhdGNoYC4gVGhpcyBsaWtlbHkgbWVhbnMgaXQgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBvciByZXNpemluZyBvZiBzb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHVzZWQgaW4gdGhlIGl0ZXJhdGlvbiBwcm9jZXNzLCBhbmQgdGhhdCBtYWtlcyBzZW5zZSBmb3IgZWZmaWNpZW5jeSdzIHNha2UuXG5cblNpbmNlIEkndmUgc3R1bWJsZWQgdXBvbiBgYnBmX2l0ZXJfdW5peF9iYXRjaGAgSSB3YW50IHRvIGNoZWNrIGl0cyB1c2FnZS4gU28sIHdoZXJlIGlzIHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgY2FsbGVkPyBHb3R0YSB0cmFjZSB0aGUgZGF0YSBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDM6MTIuMzU2MDc1MjY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA0NTQ0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfdW5peF9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTM2NTc9c3RhdGljIGludCBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzY3NC1cXG5uZXQvdW5peC9hZl91bml4LmM6MzY3NTpzdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NzYtXFx0XFx0XFx0XFx0XFx0bG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MzcxMD1zdGF0aWMgdm9pZCAqYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM3MTctXFx0ICovXFxubmV0L3VuaXgvYWZfdW5peC5jOjM3MTg6XFx0cmV0dXJuIGJwZl9pdGVyX3VuaXhfYmF0Y2goc2VxLCBwb3MpO1xcbm5ldC91bml4L2FmX3VuaXguYy0zNzE5LX1cXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zNzIxPXN0YXRpYyB2b2lkICpicGZfaXRlcl91bml4X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zNzM3LVxcdGVsc2VcXG5uZXQvdW5peC9hZl91bml4LmM6MzczODpcXHRcXHRzayA9IGJwZl9pdGVyX3VuaXhfYmF0Y2goc2VxLCBwb3MpO1xcbm5ldC91bml4L2FmX3VuaXguYy0zNzM5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzoxMi44NDY1NDQxNjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2NDI3NTY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgSXRlcmF0b3JzIGFuZCBVTklYIFNvY2tldHMqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0YCBhbmQgYGJwZl9pdGVyX3VuaXhfc2VxX25leHRgIGFyZSBpbXBsZW1lbnRlZC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBCUEYgaW50ZXJhY3RzIHdpdGggVU5JWCBzb2NrZXQgZGF0YS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgYXJlIHRoZXkgZ3VhcmRlZCBieSB0aG9zZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19QUk9DX0ZTYCBkZWZpbmVzPyBJIGhhdmUgYSBmZWVsaW5nIHRoZXkgbWlnaHQgYmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIFRvIGNvbmZpcm0gdGhhdCwgbGV0J3MganVtcCBzdHJhaWdodCB0byBsaW5lIDM3MTAgb2YgdGhlIHJlbGV2YW50IGNvZGUuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB2ZXJpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzoyMC4xMTA4MjM5NzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L2FmX3VuaXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzAwOlxcdFxcdH1cXG4zNzAxOlxcdFxcbjM3MDI6XFx0XFx0aWYgKCFyZXNpemVkIFxcdTAwMjZcXHUwMDI2ICFicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goaXRlciwgZXhwZWN0ZWQgKiAzIC8gMikpIHtcXG4zNzAzOlxcdFxcdFxcdHJlc2l6ZWQgPSB0cnVlO1xcbjM3MDQ6XFx0XFx0XFx0Z290byBhZ2FpbjtcXG4zNzA1OlxcdFxcdH1cXG4zNzA2OlxcdFxcbjM3MDc6XFx0XFx0cmV0dXJuIHNrO1xcbjM3MDg6XFx0fVxcbjM3MDk6XFx0XFxuMzcxMDpcXHRzdGF0aWMgdm9pZCAqYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxcbjM3MTE6XFx0e1xcbjM3MTI6XFx0XFx0aWYgKCEqcG9zKVxcbjM3MTM6XFx0XFx0XFx0cmV0dXJuIFNFUV9TVEFSVF9UT0tFTjtcXG4zNzE0OlxcdFxcbjM3MTU6XFx0XFx0LyogYnBmIGl0ZXIgZG9lcyBub3Qgc3VwcG9ydCBsc2Vlaywgc28gaXQgYWx3YXlzXFxuMzcxNjpcXHRcXHQgKiBjb250aW51ZSBmcm9tIHdoZXJlIGl0IHdhcyBzdG9wKCktcGVkLlxcbjM3MTc6XFx0XFx0ICovXFxuMzcxODpcXHRcXHRyZXR1cm4gYnBmX2l0ZXJfdW5peF9iYXRjaChzZXEsIHBvcyk7XFxuMzcxOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjIwLjExMTA1MDk3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODUwODAwMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0YCBGdW5jdGlvbiBEZWZpbml0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnRgIGZ1bmN0aW9uLiBJIHNhdyBpdHMgZGVmaW5pdGlvbiBhcm91bmQgbGluZSAzNzEwLCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBpdHMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgaW1tZWRpYXRlbHkgbm90aWNlZCB0aGF0IHRoZSByZWxldmFudCBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgIGJsb2NrIGJlZ2lucyBhcm91bmQgbGluZSAzODYxLlxuXG5BIHF1aWNrIGRvdWJsZS1jaGVjay4uLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGF0IGBicGZfaXRlcl91bml4X3NlcV9zdGFydGAgZGVmaW5pdGlvbiBpcyBndWFyZGVkLiBJdCBsb29rcyBsaWtlIGl0J3MgKnVuZGVyKiB0aGUgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGJsb2NrLCB3aGljaCBzdGFydGVkIGJhY2sgYXQgbGluZSAzNTk5LiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBhYm91dCB0aGVzZSBwcmVwcm9jZXNzb3IgY29uZGl0aW9ucy4gQmFjayB0byByZS1leGFtaW5lIGxpbmUgMzg2MSB0byBjb25maXJtIHRoZSBpbmNsdXNpb24gY29uZGl0aW9ucyBhcmUgY29ycmVjdCBhbmQgdGhhdCBJJ20gaW50ZXJwcmV0aW5nIHRoaXMgY29ycmVjdGx5LiBJdCdzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlc2UgbWFjcm9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDM6MjMuOTYxODUzNjkxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzg0MDpcXHRcXHRyZW1vdmVfcHJvY19lbnRyeShcXFwidW5peFxcXCIsIG5ldC1cXHUwMDNlcHJvY19uZXQpO1xcbjM4NDE6XFx0ZXJyX3N5c2N0bDpcXG4zODQyOlxcdCNlbmRpZlxcbjM4NDM6XFx0XFx0dW5peF9zeXNjdGxfdW5yZWdpc3RlcihuZXQpO1xcbjM4NDQ6XFx0b3V0OlxcbjM4NDU6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzg0NjpcXHR9XFxuMzg0NzpcXHRcXG4zODQ4OlxcdHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgdW5peF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxuMzg0OTpcXHR7XFxuMzg1MDpcXHRcXHRrdmZyZWUobmV0LVxcdTAwM2V1bngudGFibGUuYnVja2V0cyk7XFxuMzg1MTpcXHRcXHRrdmZyZWUobmV0LVxcdTAwM2V1bngudGFibGUubG9ja3MpO1xcbjM4NTI6XFx0XFx0dW5peF9zeXNjdGxfdW5yZWdpc3RlcihuZXQpO1xcbjM4NTM6XFx0XFx0cmVtb3ZlX3Byb2NfZW50cnkoXFxcInVuaXhcXFwiLCBuZXQtXFx1MDAzZXByb2NfbmV0KTtcXG4zODU0OlxcdH1cXG4zODU1OlxcdFxcbjM4NTY6XFx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB1bml4X25ldF9vcHMgPSB7XFxuMzg1NzpcXHRcXHQuaW5pdCA9IHVuaXhfbmV0X2luaXQsXFxuMzg1ODpcXHRcXHQuZXhpdCA9IHVuaXhfbmV0X2V4aXQsXFxuMzg1OTpcXHR9O1xcbjM4NjA6XFx0XFxuMzg2MTpcXHQjaWYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BST0NfRlMpXFxuMzg2MjpcXHRERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4zODYzOlxcdFxcdFxcdCAgICAgc3RydWN0IHVuaXhfc29jayAqdW5peF9zaywgdWlkX3QgdWlkKVxcbjM4NjQ6XFx0XFxuMzg2NTpcXHQjZGVmaW5lIElOSVRfQkFUQ0hfU1ogMTZcXG4zODY2OlxcdFxcbjM4Njc6XFx0c3RhdGljIGludCBicGZfaXRlcl9pbml0X3VuaXgodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4zODY4OlxcdHtcXG4zODY5OlxcdFxcdHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyID0gcHJpdl9kYXRhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzoyMy45NjIwNjE3ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4NjY2NjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJQRiBJdGVyYXRpb24gQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBpdGVyYXRpb24gY29kZS4gUmlnaHQgYXdheSwgSSBzZWUgdGhhdCBgYnBmX2l0ZXJfaW5pdF91bml4YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBpdCdzIGRlZmluZWQgdW5kZXIgYm90aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19QUk9DX0ZTYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBsaWtlbHkgcmVsYXRlZCB0byBpbnRlcmFjdGluZyB3aXRoIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIFRoZW4gSSBzcG90IGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIOKAkyBhZ2FpbiwgY29uZGl0aW9uYWxseSBjb21waWxlZCwgYnV0IGp1c3QgdW5kZXIgYENPTkZJR19CUEZfU1lTQ0FMTGAuIE5vdywgYSByZWQgZmxhZyBnb2VzIHVwLiBgcmVhbGxvY19iYXRjaGAgc291bmRzIHNwZWNpZmljLCBhbmQgcG90ZW50aWFsbHkgaW1wb3J0YW50LlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcy4gSSB3b25kZXIgaWYgaXQncyB1c2VkIGVsc2V3aGVyZS4gTGV0IG1lIGdvIGFoZWFkIGFuZCBjcm9zcy1yZWZlcmVuY2UgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAuIEdvdHRhIGNoZWNrIGZvciBhbnkgbWlzc2VkIGRlcGVuZGVuY2llcyBvciB1bmV4cGVjdGVkIHVzZXMuIFRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgbWFraW5nIG1lIGN1cmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzoyNy43NDg3MzAyNDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTYzOTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz0zNjUxPXN0YXRpYyB2b2lkIGJwZl9pdGVyX3VuaXhfcHV0X2JhdGNoKHN0cnVjdCBicGZfdW5peF9pdGVyX3N0YXRlICppdGVyKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTYtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM2NTc6c3RhdGljIGludCBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIsXFxubmV0L3VuaXgvYWZfdW5peC5jLTM2NTgtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBuZXdfYmF0Y2hfc3opXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MzY3NT1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VuaXhfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzcwMS1cXG5uZXQvdW5peC9hZl91bml4LmM6MzcwMjpcXHRpZiAoIXJlc2l6ZWQgXFx1MDAyNlxcdTAwMjYgIWJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBleHBlY3RlZCAqIDMgLyAyKSkge1xcbm5ldC91bml4L2FmX3VuaXguYy0zNzAzLVxcdFxcdHJlc2l6ZWQgPSB0cnVlO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTM4Njc9c3RhdGljIGludCBicGZfaXRlcl9pbml0X3VuaXgodm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODc1LVxcbm5ldC91bml4L2FmX3VuaXguYzozODc2OlxcdGVyciA9IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChpdGVyLCBJTklUX0JBVENIX1NaKTtcXG5uZXQvdW5peC9hZl91bml4LmMtMzg3Ny1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjI3Ljk1NDM4MTAwNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTIxMzA4NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVW5peCBTb2NrZXQgQlBGIEl0ZXJhdG9yIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBCUEYgaXRlcmF0b3JzIGZvciBVbml4IHNvY2tldHMuIEkgc2VlIHRoaXMgZnVuY3Rpb24sIGBicGZfaXRlcl91bml4X2JhdGNoYCwgYW5kIGFub3RoZXIgb25lLCBgYnBmX2l0ZXJfaW5pdF91bml4YC4gU2VlbXMgbGlrZSBib3RoIGFyZSBjcnVjaWFsLiBUaGF0IG1lYW5zIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBnb2luZyB0byBiZSBgQ09ORklHX1VOSVhgLCBkZWZpbml0ZWx5LCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggVW5peCBzb2NrZXRzLCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYmVjYXVzZSBpdCdzIEJQRiByZWxhdGVkLCBhbmQgdGhlbiBhbHNvIGBDT05GSUdfUFJPQ19GU2AgYmVjYXVzZSBgYnBmX2l0ZXJfaW5pdF91bml4YCBsaXZlcyB1bmRlciB0aGF0IGNvbmZpZy5cblxuUmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgdHlwZXMuIE9rYXksIGBDT05GSUdfVU5JWGAgaXMgYSBib29sZWFuIG9yIHRyaXN0YXRlLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBib29sZWFuLCBhbmQgYENPTkZJR19QUk9DX0ZTYCBpcyBib29sZWFuLiBPZiB0aGVzZSwgYENPTkZJR19VTklYYCBpcyB0aGUgbW9zdCBjcml0aWNhbC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1VOSVhgIGlzIGFjdHVhbGx5IG5lZWRlZC4gQWgsIHllcywgaXQncyBkZWZpbmVkIGluIGBuZXQvdW5peC9hZl91bml4LmNgLiBPa2F5LCBzbyBgVU5JWGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgUFJPQ19GU2AuXG5cbkhhbmcgb24sIHRob3VnaCwgYENPTkZJR19QUk9DX0ZTYCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdC4gU28sIHRoYXQncyBsZXNzIG9mIGEgY29uY2Vybi4gVGhlIGNvcmUgZnVuY3Rpb24gdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgd2lsbCBiZSBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gV2FpdCBhIHNlY29uZOKApiB0aGF0J3MgYSAqc3RhdGljKiBmdW5jdGlvbi4gSG1tLCBjYW4gd2UgcmVhY2ggaXQgZnJvbSB1c2Vyc3BhY2U/IFllcywgd2UgY2FuLCB0aHJvdWdoIEJQRiBpdGVyYXRvcnMsIHNvIGl0J3MgYSB2YWxpZCB0YXJnZXQuXG5cbkFscmlnaHQsIGxldCdzIG5vdyBsb29rIGF0IGBicGZfaXRlcl91bml4X2JhdGNoYCBiZWNhdXNlIGl0J3MgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGZ1enplZC4gSXQncyBjYWxsZWQgZnJvbSBgYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnRgIGFuZCBgYnBmX2l0ZXJfdW5peF9zZXFfbmV4dGAuIFRoZXNlLCBpbiB0dXJuLCBhcmUgcGFydCBvZiBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYC4gT2theSwgdGhhdCdzIHRoZSB3aG9sZSBjaGFpbi4gSSBoYXZlIGEgY2xlYXJlciBwaWN0dXJlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0MzozNC44NzU2OTQwNzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjA2MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3VuaXhfc2VxX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTM3NzI9c3RhdGljIHZvaWQgYnBmX2l0ZXJfdW5peF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zNzg4LVxcbm5ldC91bml4L2FmX3VuaXguYzozNzg5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX2l0ZXJfdW5peF9zZXFfb3BzID0ge1xcbm5ldC91bml4L2FmX3VuaXguYy0zNzkwLVxcdC5zdGFydFxcdD0gYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnQsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIHVuaXhfc2VxX2luZm8gPSB7XFxubmV0L3VuaXgvYWZfdW5peC5jOjM4OTQ6XFx0LnNlcV9vcHNcXHRcXHQ9IFxcdTAwMjZicGZfaXRlcl91bml4X3NlcV9vcHMsXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4OTUtXFx0LmluaXRfc2VxX3ByaXZhdGVcXHQ9IGJwZl9pdGVyX2luaXRfdW5peCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDM6MzQuOTY0OTI2NTM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NTIyNTYzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEl0ZXJhdGlvbiBhbmQgSW50ZWdlciBPdmVyZmxvdyBWdWxuZXJhYmlsaXR5OiBBIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYGJwZl9pdGVyX3VuaXhfc2VxX29wc2AgaXMgZW1wbG95ZWQgd2l0aGluIGB1bml4X3NlcV9pbmZvYCwgYW5kIHRoYXQgYHVuaXhfc2VxX2luZm9gIGl0c2VsZiBpcyByZWdpc3RlcmVkIHVzaW5nIGBicGZfaXRlcl9yZWdpc3RlcmAuICBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHZpYSBCUEYsIHdoaWNoIG1ha2VzIGl0IGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZy4gR2l2ZW4gdGhhdCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYGt2bWFsbG9jYCB3aXRoIGBrdm1hbGxvY19hcnJheWAsIHRoZSBhbnN3ZXIncyBsaWtlbHkgeWVzLiBCdXQsIGxldCdzIGNvbmZpcm0gdGhlIGRldGFpbHMuXG5cbkFoLCByaWdodCwgdGhlIGNvZGUgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZDpcblxuYGBgY1xuLVx0bmV3X2JhdGNoID0ga3ZtYWxsb2Moc2l6ZW9mKCpuZXdfYmF0Y2gpICogbmV3X2JhdGNoX3N6LFxuLVx0XHRcdCAgICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuK1x0bmV3X2JhdGNoID0ga3ZtYWxsb2NfYXJyYXkobmV3X2JhdGNoX3N6LCBzaXplb2YoKm5ld19iYXRjaCksXG4rXHRcdFx0XHQgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG5gYGBcblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgc2VjdXJpdHkgYW5kIHJvYnVzdG5lc3MgZml4LCBtZWFudCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLiAgVGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgKmZ1bmN0aW9uYWxseSogY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdz8gIGBrdm1hbGxvY19hcnJheWAgbm93IGluY2x1ZGVzIGFuIG92ZXJmbG93IGNoZWNrIG9uIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQgaXQgd2lsbCByZXR1cm4gYE5VTExgIGlmIGl0IG92ZXJmbG93cyBiZWZvcmUgY2FsbGluZyBga3ZtYWxsb2NgLiBUaGVyZWZvcmUgdGhlIGFsbG9jYXRpb24gZmFpbHMgcmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGEgc21hbGxlciBidWZmZXIgd2hpY2ggY291bGQgbGVhZCB0byBidWZmZXIgb3ZlcmZsb3dzLiBUaGlzIG1lYW5zLCB5ZXMsIHRoZXJlICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGluIGhvdyB0aGUgY29kZSBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcywgd2hlcmUgbGFyZ2UgYG5ld19iYXRjaF9zemAgdmFsdWVzIHdvdWxkIGNhdXNlIG92ZXJmbG93cy4gIFRoYXQgbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQlBGIGl0ZXJhdG9yIHdvcmtzIGNvcnJlY3RseSB3aXRoIHRoZXNlIG5ldyBlcnJvciBjb25kaXRpb25zIGFuZCB0aGF0IGl0IGRvZXNuJ3QgY3Jhc2ggb3IgbGVhayBtZW1vcnkgd2hlbiB0aGVzZSBuZXcgZXJyb3IgY29uZGl0aW9ucyBhcmUgdHJpZ2dlcmVkLlxuXG5UaGUgaW5pdGlhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCwgYGJwZl9pdGVyX3VuaXhfYmF0Y2hgLCBhbmQgYGJwZl9pdGVyX2luaXRfdW5peGAuIEhhbmcgb24sIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gR2l2ZW4gdGhhdCBpdCdzIGNoYW5nZWQsIGFuZCB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGFsbG9jYXRpb24gZXJyb3Igd291bGQgYmUgdHJpZ2dlcmVkLCBJIHRoaW5rIGl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIGFuZCBgYnBmX2l0ZXJfdW5peF9iYXRjaGAgZm9yIGZ1enppbmcuXG5cbkZvciBjb25maWd1cmF0aW9ucywgaXQncyBgVU5JWGAgYW5kIGBCUEZfU1lTQ0FMTGAgdGhhdCB3ZSBuZWVkLlxuXG5JIHRoaW5rIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiBgQ09ORklHX1VOSVhgIGlzIHRoZSByaWdodCBjb25maWcgbmFtZSB0aG91Z2gsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0Mzo0Mi45MTcxODcxMzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDk1NzI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVU5JWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L0tjb25maWctNS1cXG5uZXQvdW5peC9LY29uZmlnOjY6Y29uZmlnIFVOSVhcXG5uZXQvdW5peC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVW5peCBkb21haW4gc29ja2V0c1xcXCJcXG4tLVxcbm5ldC91bml4L0tjb25maWc9MTk9Y29uZmlnXFx0QUZfVU5JWF9PT0JcXG4tLVxcbm5ldC91bml4L0tjb25maWctMjUtXFxubmV0L3VuaXgvS2NvbmZpZzoyNjpjb25maWcgVU5JWF9ESUFHXFxubmV0L3VuaXgvS2NvbmZpZy0yNy1cXHR0cmlzdGF0ZSBcXFwiVU5JWDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0Mzo0My40NjIxNTA1OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg0MDk0OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVU5JWCBhbmQgQlBGX1NZU0NBTEwgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYFVOSVhgIGFuZCBgQlBGX1NZU0NBTExgIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHByb3Blcmx5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbGwgcXVpY2tseSB2ZXJpZnkgaWYgYENPTkZJR19QUk9DX0ZTYCBpcyByZXF1aXJlZCBpbiB0aGlzIHNjZW5hcmlvLiBBaCwgbG9va3MgbGlrZSBpdCBpcy4gSSBjYW4gc2VlIHRoYXQgYGJwZl9pdGVyX2luaXRfdW5peGAgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgLiBNYWtlcyBzZW5zZS5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBpcyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBjb21waWxlZCBpZiBgQ09ORklHX1BST0NfRlNgIGlzICpub3QqIGVuYWJsZWQ/IFRoYXQncyB0aGUgcG90ZW50aWFsIHdyaW5rbGUgSSBuZWVkIHRvIGlyb24gb3V0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUuLi4gbGV0J3MgaGVhZCBvdmVyIHRvIGBuZXQvdW5peC9hZl91bml4LmNgIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzg2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjQ4LjE0NjI0ODg3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzQxODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jPTM2NTE9c3RhdGljIHZvaWQgYnBmX2l0ZXJfdW5peF9wdXRfYmF0Y2goc3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUgKml0ZXIpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzY1Ni1cXG5uZXQvdW5peC9hZl91bml4LmM6MzY1NzpzdGF0aWMgaW50IGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VuaXhfaXRlcl9zdGF0ZSAqaXRlcixcXG5uZXQvdW5peC9hZl91bml4LmMtMzY1OC1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG5ld19iYXRjaF9zeilcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zNjc1PXN0YXRpYyBzdHJ1Y3Qgc29jayAqYnBmX2l0ZXJfdW5peF9iYXRjaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zNzAxLVxcbm5ldC91bml4L2FmX3VuaXguYzozNzAyOlxcdGlmICghcmVzaXplZCBcXHUwMDI2XFx1MDAyNiAhYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoKGl0ZXIsIGV4cGVjdGVkICogMyAvIDIpKSB7XFxubmV0L3VuaXgvYWZfdW5peC5jLTM3MDMtXFx0XFx0cmVzaXplZCA9IHRydWU7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzg2Nz1zdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfdW5peCh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM4NzUtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM4NzY6XFx0ZXJyID0gYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoKGl0ZXIsIElOSVRfQkFUQ0hfU1opO1xcbm5ldC91bml4L2FmX3VuaXguYy0zODc3LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDM6NDguMjUxNTk4MDM4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTUyNTYxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAg4oCTIGl0J3MgZGVmaW5lZCBhdCBsaW5lIDM2NTcuIFRoZSBjb2RlJ3Mgc3RydWN0dXJlIHN1Z2dlc3RzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc3RyYXRlZ3ksIHdoaWNoIG1lYW5zIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEZpcnN0LCBJIHNlZSB0aGF0IHRoZSBvdmVyYWxsIEJQRiBzeXN0ZW0gY2FsbCBzdXBwb3J0IGlzIGVuYWJsZWQgd2l0aCBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgd2hpY2ggYmVnaW5zIG9uIGxpbmUgMzU5OS4gVGhhdCdzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlLiBUaGVuLCB0aGVyZSdzIGFub3RoZXIgY2hlY2sgdGhhdCBpbmNsdWRlcyBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgIHN0YXJ0aW5nIG9uIGxpbmUgMzg2MS5cblxuU28sIGNsZWFybHksIGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIGdldHMgY29tcGlsZWQgKmV2ZW4qIGlmIGBDT05GSUdfUFJPQ19GU2AgaXNuJ3Qgc2V0LiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgd2lkZXIgYXBwbGljYWJpbGl0eSB0aGFuIGp1c3QgYmVpbmcgY29uZmluZWQgdG8gcHJvY2ZzLXJlbGF0ZWQgb3BlcmF0aW9ucy4gQnV0IGNvbXBpbGF0aW9uIGRvZXNuJ3QgZXF1YWwgcmVhY2hhYmlsaXR5LiBJJ20gYXNraW5nIG15c2VsZiwgZXZlbiBpZiBpdCdzIGNvbXBpbGVkLCAqaG93KiBjYW4gSSBnZXQgdG8gdGhpcyBmdW5jdGlvbj9cblxuVGhlIGNvZGUgcmV2ZWFscyB0aGF0IGBicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hgIGlzIGNhbGxlZCBieSBgYnBmX2l0ZXJfdW5peF9iYXRjaGAuICBgYnBmX2l0ZXJfdW5peF9iYXRjaGAsIGluIHR1cm4sIGlzIHVzZWQgd2l0aGluIGBicGZfaXRlcl91bml4X3NlcV9zdGFydGAgYW5kIGBicGZfaXRlcl91bml4X3NlcV9uZXh0YC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyBmb3IgKnRob3NlKiBmdW5jdGlvbnMgdG8gYmUgdHJpZ2dlcmVkLiBJZiB0aG9zZSBjYW4gYmUgdXNlZCB3aXRob3V0IGBDT05GSUdfUFJPQ19GU2AsIHRoZW4gdGhlIHBhdGggdG8gYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAgaXMgb3Blbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNrIGRvd24gdGhlIHVzYWdlIG9mIGBicGZfaXRlcl91bml4X3NlcV9vcHNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE0NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0Mzo1My4xNDY4NTgyNzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzIyNzIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaXRlcl91bml4X3NlcV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz0zNzcyPXN0YXRpYyB2b2lkIGJwZl9pdGVyX3VuaXhfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzc4OC1cXG5uZXQvdW5peC9hZl91bml4LmM6Mzc4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9pdGVyX3VuaXhfc2VxX29wcyA9IHtcXG5uZXQvdW5peC9hZl91bml4LmMtMzc5MC1cXHQuc3RhcnRcXHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0LFxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTM4OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyB1bml4X3NlcV9pbmZvID0ge1xcbm5ldC91bml4L2FmX3VuaXguYzozODk0OlxcdC5zZXFfb3BzXFx0XFx0PSBcXHUwMDI2YnBmX2l0ZXJfdW5peF9zZXFfb3BzLFxcbm5ldC91bml4L2FmX3VuaXguYy0zODk1LVxcdC5pbml0X3NlcV9wcml2YXRlXFx0PSBicGZfaXRlcl9pbml0X3VuaXgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjUzLjI1MDA5MzEwM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDY0NTE5MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHVuaXhfc2VxX2luZm9gIERlZmluaXRpb24gYW5kIEl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHplcm9pbmcgaW4gb24gYHVuaXhfc2VxX2luZm9gLiBJdCdzIGRlZmluZWQgYXQgbGluZSAzODkzLCBhbmQgdGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgaXQncyBuZXN0ZWQgdW5kZXIgYW4gYCNpZmAgY29uZGl0aW9uOiBgI2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHNvbWV0aGluZyBpbXBvcnRhbnQgYWJvdXQgaXRzIGRlcGVuZGVuY3kgc3RydWN0dXJlLiBJZiBgQ09ORklHX1BST0NfRlNgIGlzbid0IGVuYWJsZWQsIHRoZW4gYHVuaXhfc2VxX2luZm9gIGlzbid0IGV2ZW4gKmRlZmluZWQqLiBUaGF0IG1lYW5zIGBicGZfaXRlcl91bml4X3NlcV9vcHNgIOKAkyB3aGljaCBwcmVzdW1hYmx5IHJlbGllcyBvbiBgdW5peF9zZXFfaW5mb2Ag4oCTIHdvbid0IGJlIHVzZWQgZWl0aGVyLlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBJZiBgYnBmX2l0ZXJfdW5peF9zZXFfb3BzYCBpc24ndCB1c2VkLCB0aGUgY29tcGlsZXIgc2hvdWxkIGZsYWcgaXQgYXMgYW4gdW51c2VkIHZhcmlhYmxlLCByaWdodD8gVW5sZXNzLi4uIHVubGVzcyBpdCdzICphbHNvKiBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIHRoYXQgc2FtZSBgI2lmYC4gSXQncyBjcnVjaWFsIHRoYXQgdGhhdCBpcyB0aGUgY2FzZSwgb3Igd2UnbGwgYmUgZ2V0dGluZyBzb21lIHNwdXJpb3VzIHdhcm5pbmdzLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byB2ZXJpZnkgdGhpcy5cblxuVG8gYmUgY2VydGFpbiwgbGV0J3MgbG9vayBmb3IgYW5vdGhlciBgI2lmYCBzdGF0ZW1lbnQgYXJvdW5kIGxpbmUgMzc4OS4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDI1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQzOjU4LjMxNDYxNzEzN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzAwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3ODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM3ODA6XFx0XFx0XFx0cHJvZyA9IGJwZl9pdGVyX2dldF9pbmZvKFxcdTAwMjZtZXRhLCB0cnVlKTtcXG4zNzgxOlxcdFxcdFxcdGlmIChwcm9nKVxcbjM3ODI6XFx0XFx0XFx0XFx0KHZvaWQpdW5peF9wcm9nX3NlcV9zaG93KHByb2csIFxcdTAwMjZtZXRhLCB2LCAwKTtcXG4zNzgzOlxcdFxcdH1cXG4zNzg0OlxcdFxcbjM3ODU6XFx0XFx0aWYgKGl0ZXItXFx1MDAzZWN1cl9zayBcXHUwMDNjIGl0ZXItXFx1MDAzZWVuZF9zaylcXG4zNzg2OlxcdFxcdFxcdGJwZl9pdGVyX3VuaXhfcHV0X2JhdGNoKGl0ZXIpO1xcbjM3ODc6XFx0fVxcbjM3ODg6XFx0XFxuMzc4OTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9pdGVyX3VuaXhfc2VxX29wcyA9IHtcXG4zNzkwOlxcdFxcdC5zdGFydFxcdD0gYnBmX2l0ZXJfdW5peF9zZXFfc3RhcnQsXFxuMzc5MTpcXHRcXHQubmV4dFxcdD0gYnBmX2l0ZXJfdW5peF9zZXFfbmV4dCxcXG4zNzkyOlxcdFxcdC5zdG9wXFx0PSBicGZfaXRlcl91bml4X3NlcV9zdG9wLFxcbjM3OTM6XFx0XFx0LnNob3dcXHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3Nob3csXFxuMzc5NDpcXHR9O1xcbjM3OTU6XFx0I2VuZGlmXFxuMzc5NjpcXHQjZW5kaWZcXG4zNzk3OlxcdFxcbjM3OTg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHVuaXhfZmFtaWx5X29wcyA9IHtcXG4zNzk5OlxcdFxcdC5mYW1pbHkgPSBQRl9VTklYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0Mzo1OC4zMTQ4ODk3NzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNDE2MTI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRG91YmxlIGAjZW5kaWZgIERpc2NvdmVyeSoqXG5cblJpZ2h0LCBzbyBJJ3ZlIHNwb3R0ZWQgc29tZXRoaW5nIGEgYml0IHVudXN1YWwgaGVyZSDigJMgdHdvIHNlcGFyYXRlIGAjZW5kaWZgIGRpcmVjdGl2ZXMgc3RhY2tlZCB1cCBhdCBsaW5lcyAzNzk1IGFuZCAzNzk2LiBUaGF0J3MgYSByZWQgZmxhZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgZG8gdGhlc2UgcHJlcHJvY2Vzc29yIGJsb2NrcyAqYWN0dWFsbHkqIGJlZ2luP1wiIEkgbmVlZCB0byBxdWlja2x5IHRyYWNlIGJhY2sgYW5kIHNlZSBpZiB0aGVzZSBhcmUgY29ycmVjdGx5IHBhaXJlZCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3IgYCNpZmAgZGlyZWN0aXZlcy4gVGhpcyBjb3VsZCBiZSBhIHNpbXBsZSB0eXBvLCBhIG1pc3VuZGVyc3Rvb2QgbmVzdGluZyBpc3N1ZSwgb3IgcG90ZW50aWFsbHkgYSBtb3JlIHNlcmlvdXMgbG9naWNhbCBlcnJvciBpbiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIFRpbWUgdG8gZGl2ZSBpbiBhbmQgaW52ZXN0aWdhdGUgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhlc2UgYmxvY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg1MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDQ6MDEuODE5MDU2MDUyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzU5MDpcXHR9XFxuMzU5MTpcXHRcXG4zNTkyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdW5peF9zZXFfb3BzID0ge1xcbjM1OTM6XFx0XFx0LnN0YXJ0ICA9IHVuaXhfc2VxX3N0YXJ0LFxcbjM1OTQ6XFx0XFx0Lm5leHQgICA9IHVuaXhfc2VxX25leHQsXFxuMzU5NTpcXHRcXHQuc3RvcCAgID0gdW5peF9zZXFfc3RvcCxcXG4zNTk2OlxcdFxcdC5zaG93ICAgPSB1bml4X3NlcV9zaG93LFxcbjM1OTc6XFx0fTtcXG4zNTk4OlxcdFxcbjM1OTk6XFx0I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbjM2MDA6XFx0c3RydWN0IGJwZl91bml4X2l0ZXJfc3RhdGUge1xcbjM2MDE6XFx0XFx0c3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwO1xcbjM2MDI6XFx0XFx0dW5zaWduZWQgaW50IGN1cl9zaztcXG4zNjAzOlxcdFxcdHVuc2lnbmVkIGludCBlbmRfc2s7XFxuMzYwNDpcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X3NrO1xcbjM2MDU6XFx0XFx0c3RydWN0IHNvY2sgKipiYXRjaDtcXG4zNjA2OlxcdFxcdGJvb2wgc3RfYnVja2V0X2RvbmU7XFxuMzYwNzpcXHR9O1xcbjM2MDg6XFx0XFxuMzYwOTpcXHRzdHJ1Y3QgYnBmX2l0ZXJfX3VuaXgge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0NDowMS44MTkyNzkyODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MjY5NTQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRmluZGluZyB0aGUgTWF0Y2hpbmcgQ29uZGl0aW9uYWwqKlxuXG5Pa2F5LCBJJ20gc3BvdHRpbmcgYSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAgZGlyZWN0aXZlIGF0IGxpbmUgMzU5OS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUncyB0aGUgY29ycmVzcG9uZGluZyBgI2lmYCBvciBgI2lmZGVmYCBibG9jaydzIHRlcm1pbmF0aW9uP1wiIEkgbmVlZCB0byBzZWUgdGhlIGVudGlyZSBsb2dpY2FsIHNjb3BlIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSSdtIGdvaW5nIHRvIHNjYW4gYXJvdW5kIGxpbmUgMzU5OS4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBsb2NhdGUgZWl0aGVyIHRoZSBjbG9zaW5nIGAjZW5kaWZgIHRvIHVuZGVyc3RhbmQgdGhlIGNvZGUgaW5jbHVkZWQgb3IgZXhjbHVkZWQgb3IgdGhlIG9wZW5pbmcgY29uZGl0aW9uYWwgaWYgdGhpcyBpcyBhIG5lc3RlZCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZ3JvayB0aGUgY29kZSBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQ0OjA1LjI2MTk3ODgxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzU4MDpcXHRcXHRcXHRcXHR9XFxuMzU4MTpcXHRcXHRcXHRcXHRmb3IgKCA7IGkgXFx1MDAzYyBsZW47IGkrKylcXG4zNTgyOlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRjKHNlcSwgdS1cXHUwMDNlYWRkci1cXHUwMDNlbmFtZS1cXHUwMDNlc3VuX3BhdGhbaV0gPzpcXG4zNTgzOlxcdFxcdFxcdFxcdFxcdFxcdCAnQCcpO1xcbjM1ODQ6XFx0XFx0XFx0fVxcbjM1ODU6XFx0XFx0XFx0dW5peF9zdGF0ZV91bmxvY2socyk7XFxuMzU4NjpcXHRcXHRcXHRzZXFfcHV0YyhzZXEsICdcXFxcbicpO1xcbjM1ODc6XFx0XFx0fVxcbjM1ODg6XFx0XFxuMzU4OTpcXHRcXHRyZXR1cm4gMDtcXG4zNTkwOlxcdH1cXG4zNTkxOlxcdFxcbjM1OTI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB1bml4X3NlcV9vcHMgPSB7XFxuMzU5MzpcXHRcXHQuc3RhcnQgID0gdW5peF9zZXFfc3RhcnQsXFxuMzU5NDpcXHRcXHQubmV4dCAgID0gdW5peF9zZXFfbmV4dCxcXG4zNTk1OlxcdFxcdC5zdG9wICAgPSB1bml4X3NlcV9zdG9wLFxcbjM1OTY6XFx0XFx0LnNob3cgICA9IHVuaXhfc2VxX3Nob3csXFxuMzU5NzpcXHR9O1xcbjM1OTg6XFx0XFxuMzU5OTpcXHQjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQ0OjA1LjI2MjIxNTE1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTg2MTU0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHM6XG5cbioqRGVidWdnaW5nIGEgTWlzc2luZyBDb25kaXRpb25hbCoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuLi5zb21ldGhpbmcgZmVlbHMgb2ZmLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc3dlYXIgSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBhIHNlY29uZCBgI2lmYCBoZXJlLiBJdCBzZWVtcyBsaWtlIGEgY29uZGl0aW9uYWwgbWlnaHQgYmUgbWlzc2luZywgb3IgcGVyaGFwcyBJJ20gbWlzcmVtZW1iZXJpbmcgdGhlIG9yaWdpbmFsIHN0cnVjdHVyZS4gTGV0IG1lIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2suIEknbSBnb2luZyB0byBydW4gYSBnbG9iYWwgc2VhcmNoIG9mIHRoZSBlbnRpcmUgZmlsZS4gVGhlIHNwZWNpZmljIHN0cnVjdHVyZSBJJ20gbG9va2luZyBmb3IgaXMgYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfUFJPQ19GU2AgdG8gbWFrZSBzdXJlIGl0IGV4aXN0cywgc28gSSBjYW4gc2VlIGlmIHRoZSBleHBlY3RlZCBsb2dpYyBpcyBpbiBwbGFjZS4gSSBoYXZlIGEgaHVuY2ggdGhhdCBzb21ldGhpbmcgaXMgb3V0IG9mIHN5bmMgYW5kIG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg0NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDQ6MDkuODgwODM0MDEzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQzNDI0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1BST0NfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvYWZfdW5peC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYz04NzE9c3RhdGljIGludCB1bml4X3NlcXBhY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqLCBzaXplX3QsXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtODczLVxcbm5ldC91bml4L2FmX3VuaXguYzo4NzQ6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxubmV0L3VuaXgvYWZfdW5peC5jLTg3NS1zdGF0aWMgaW50IHVuaXhfY291bnRfbnJfZmRzKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zMzk4PXN0YXRpYyBfX3BvbGxfdCB1bml4X2RncmFtX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMzQ1Ny1cXG5uZXQvdW5peC9hZl91bml4LmM6MzQ1ODojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5uZXQvdW5peC9hZl91bml4LmMtMzQ1OS1cXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zODA1PXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODEyLVxcbm5ldC91bml4L2FmX3VuaXguYzozODEzOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC91bml4L2FmX3VuaXguYy0zODE0LVxcdGlmICghcHJvY19jcmVhdGVfbmV0KFxcXCJ1bml4XFxcIiwgMCwgbmV0LVxcdTAwM2Vwcm9jX25ldCwgXFx1MDAyNnVuaXhfc2VxX29wcyxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODM4LWVycl9wcm9jOlxcbm5ldC91bml4L2FmX3VuaXguYzozODM5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC91bml4L2FmX3VuaXguYy0zODQwLVxcdHJlbW92ZV9wcm9jX2VudHJ5KFxcXCJ1bml4XFxcIiwgbmV0LVxcdTAwM2Vwcm9jX25ldCk7XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9Mzg1Nj1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHVuaXhfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODYwLVxcbm5ldC91bml4L2FmX3VuaXguYzozODYxOiNpZiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG5uZXQvdW5peC9hZl91bml4LmMtMzg2Mi1ERUZJTkVfQlBGX0lURVJfRlVOQyh1bml4LCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zOTMzPXN0YXRpYyBpbnQgX19pbml0IGFmX3VuaXhfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jLTM5NjAtXFxubmV0L3VuaXgvYWZfdW5peC5jOjM5NjE6I2lmIGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKVxcbm5ldC91bml4L2FmX3VuaXguYy0zOTYyLVxcdGJwZl9pdGVyX3JlZ2lzdGVyKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA4OjQ0OjEwLjA1NTE4NDA5OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY1NDI1ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKlxuXG5SaWdodCwgc28gSSdtIHplcm9pbmcgaW4gb24gYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUuIFRoYXQgYCNpZmRlZiBDT05GSUdfUFJPQ19GU2AgY29uc3RydWN0LCBpdCdzIHNpdHRpbmcgYXQgbGluZSAzNDU4LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQncyB0aW1lIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgc2VjdGlvbiBvZiBjb2RlLiBJJ20gZ29pbmcgdG8gc2NhbiBmcm9tIHRoZXJlIGRvd24gdG8gbGluZSAzNTk5LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSByZWxldmFudCBjb250ZXh0IHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW4gb3Igb3V0IGJhc2VkIG9uIHRoZSBgQ09ORklHX1BST0NfRlNgIHNldHRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCB0aGUgY29kZSB0aGF0IGRlcGVuZHMgb24gaXQuIElzIGl0IGRlZmluaW5nIGEgbW9kdWxlLCBlbmFibGluZyBhIGZlYXR1cmUsIG9yIHBlcmhhcHMgYWx0ZXJpbmcgdGhlIGJlaGF2aW9yIG9mIGFuIGV4aXN0aW5nIGZ1bmN0aW9uPyBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzA2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDQ6MTMuNDIwNjE3MjM4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9hZl91bml4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ1NTpcXHRcXHRyZXR1cm4gbWFzaztcXG4zNDU2OlxcdH1cXG4zNDU3OlxcdFxcbjM0NTg6XFx0I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuMzQ1OTpcXHRcXG4zNDYwOlxcdCNkZWZpbmUgQlVDS0VUX1NQQUNFIChCSVRTX1BFUl9MT05HIC0gKFVOSVhfSEFTSF9CSVRTICsgMSkgLSAxKVxcbjM0NjE6XFx0XFxuMzQ2MjpcXHQjZGVmaW5lIGdldF9idWNrZXQoeCkgKCh4KSBcXHUwMDNlXFx1MDAzZSBCVUNLRVRfU1BBQ0UpXFxuMzQ2MzpcXHQjZGVmaW5lIGdldF9vZmZzZXQoeCkgKCh4KSBcXHUwMDI2ICgoMVVMIFxcdTAwM2NcXHUwMDNjIEJVQ0tFVF9TUEFDRSkgLSAxKSlcXG4zNDY0OlxcdCNkZWZpbmUgc2V0X2J1Y2tldF9vZmZzZXQoYiwgbykgKChiKSBcXHUwMDNjXFx1MDAzYyBCVUNLRVRfU1BBQ0UgfCAobykpXFxuMzQ2NTpcXHRcXG4zNDY2OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqdW5peF9mcm9tX2J1Y2tldChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuMzQ2NzpcXHR7XFxuMzQ2ODpcXHRcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IGdldF9vZmZzZXQoKnBvcyk7XFxuMzQ2OTpcXHRcXHR1bnNpZ25lZCBsb25nIGJ1Y2tldCA9IGdldF9idWNrZXQoKnBvcyk7XFxuMzQ3MDpcXHRcXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcXG4zNDcxOlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4zNDcyOlxcdFxcbjM0NzM6XFx0XFx0Zm9yIChzayA9IHNrX2hlYWQoXFx1MDAyNnNlcV9maWxlX25ldChzZXEpLVxcdTAwM2V1bngudGFibGUuYnVja2V0c1tidWNrZXRdKTtcXG4zNDc0OlxcdFxcdCAgICAgc2s7IHNrID0gc2tfbmV4dChzaykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDQ6MTMuNDIwOTE0MzU4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTU5ODU0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbnVtYmVycy4gYENPTkZJR19QUk9DX0ZTYCBpcyBzdGFydGluZyBhdCAzNDU4IGluIHRoZSBjb25maWd1cmF0aW9uIGluZGV4LCB3aGlsZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFydGluZyBhdCAzNTk5LiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYC4gR2l2ZW4gdGhlaXIgcG9zaXRpb25pbmcsIGl0IHNlZW1zIHRoaXMgaXMgdW5kZXIgYm90aCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIC0gdGhlcmUgc2hvdWxkIGJlIGEgYnVpbGQgb3B0aW9uIHVuZGVyIHRoZSBvcHRpb25zIG9mIGJvdGggY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdG8gYmUgY29ycmVjdC4gTmVlZCB0byB2ZXJpZnkgdGhhdCwgb3IgcG9zc2libHkgZGlzY292ZXIgc29tZXRoaW5nIG1vcmUgbnVhbmNlZCBpbiB0aGUgY29uZmlnIGRlcGVuZGVuY2llcy4gTGV0J3MgZGlnIGRlZXBlciBhbmQgZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzI1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0NDoxNy4yMzY5MDI0NjdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L2FmX3VuaXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzg4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzg4OlxcdFxcbjM3ODk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicGZfaXRlcl91bml4X3NlcV9vcHMgPSB7XFxuMzc5MDpcXHRcXHQuc3RhcnRcXHQ9IGJwZl9pdGVyX3VuaXhfc2VxX3N0YXJ0LFxcbjM3OTE6XFx0XFx0Lm5leHRcXHQ9IGJwZl9pdGVyX3VuaXhfc2VxX25leHQsXFxuMzc5MjpcXHRcXHQuc3RvcFxcdD0gYnBmX2l0ZXJfdW5peF9zZXFfc3RvcCxcXG4zNzkzOlxcdFxcdC5zaG93XFx0PSBicGZfaXRlcl91bml4X3NlcV9zaG93LFxcbjM3OTQ6XFx0fTtcXG4zNzk1OlxcdCNlbmRpZlxcbjM3OTY6XFx0I2VuZGlmXFxuMzc5NzpcXHRcXG4zNzk4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSB1bml4X2ZhbWlseV9vcHMgPSB7XFxuMzc5OTpcXHRcXHQuZmFtaWx5ID0gUEZfVU5JWCxcXG4zODAwOlxcdFxcdC5jcmVhdGUgPSB1bml4X2NyZWF0ZSxcXG4zODAxOlxcdFxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxuMzgwMjpcXHR9O1xcbjM4MDM6XFx0XFxuMzgwNDpcXHRcXG4zODA1OlxcdHN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4zODA2OlxcdHtcXG4zODA3OlxcdFxcdGludCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwODo0NDoxNy4yMzc3ODEwNzdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA5NDc3MTA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aG9zZSB0d28gYCNlbmRpZmAgZGlyZWN0aXZlcyBhdCBsaW5lcyAzNzk1IGFuZCAzNzk2LiBPbmUgY29ycmVzcG9uZHMgdG8gYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGF0IGxpbmUgMzU5OSwgYW5kIHRoZSBvdGhlciB0byBgI2lmZGVmIENPTkZJR19QUk9DX0ZTYCBhdCBsaW5lIDM0NTguIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBhcmUgYFVOSVhgLCBgQlBGX1NZU0NBTExgLCBhbmQgYFBST0NfRlNgLlxuXG5IYW5nIG9uLCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBgQ09ORklHX1VOSVhgIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmRhbWVudGFsIG9uZSBoZXJlLiBXZSBhbHNvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYmVjYXVzZSBvZiB0aGUgZmlyc3QgYCNlbmRpZmAuIEFuZCBgQ09ORklHX1BST0NfRlNgIGlzIGFsc28gcmVxdWlyZWQsIGdpdmVuIHRoZSBzZWNvbmQgYCNlbmRpZmAuIEFjdHVhbGx5LCBgQ09ORklHX1BST0NfRlNgIGlzIHVzdWFsbHkgZW5hYmxlZCBpbiB0aGVzZSB0eXBlcyBvZiBzeXN0ZW1zLiBBbHJpZ2h0LCBJJ2xsIGluY2x1ZGUgYFVOSVhgIGFuZCBgQlBGX1NZU0NBTExgLlxuXG5KdXN0IGEgY2hlY2ssIGlzIGBDT05GSUdfVU5JWGAgdHJpc3RhdGU/IFllcywgaXQgaXMuXG5cblNvLCBgVU5JWGAsIGBCUEZfU1lTQ0FMTGAuIEdvb2QuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmRpdGlvbmFsIGNvbmZpZ3MuIE5vcGUsIHRoYXQncyBpdC5cblxuTm93LCBsZXQgbWUgbG9vayBhdCB0aGUgZm9jdXMgc3ltYm9scy4gYGJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaGAsIGBicGZfaXRlcl91bml4X2JhdGNoYCwgYW5kIGBicGZfaXRlcl9pbml0X3VuaXhgLiBPa2F5LCBpdCBzZWVtcyBgYnBmX2l0ZXJfdW5peF9yZWFsbG9jX2JhdGNoYCBpcyB0aGUgb25lIHRoYXQncyBiZWVuIG1vZGlmaWVkLlxuXG5UaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggcmVwbGFjZXMgYGt2bWFsbG9jYCB3aXRoIGBrdm1hbGxvY19hcnJheWAgdG8gcHJldmVudCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBCUEYgaXRlcmF0b3IgYmF0Y2guIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgVU5JWCBzb2NrZXQgQlBGIGl0ZXJhdG9ycy4gQ3J1Y2lhbGx5LCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBzbyBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byBtYWtlIHN1cmUgdGhlIGZpeCB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLlxuXG5JJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdXAgdGhlIGZ1enppbmcgYW5kIGFuYWx5emluZyB0aGUgcmVzdWx0cywgbGV0J3MgbWFrZSB0aGUgY2FsbCB0byBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MDEsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDg6NDQ6MjQuMzMyNTU2ODg4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc3MDM0OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pdGVyX3VuaXhfcmVhbGxvY19iYXRjaFwiLFxuICAgIFwiYnBmX2l0ZXJfdW5peF9iYXRjaFwiLFxuICAgIFwiYnBmX2l0ZXJfaW5pdF91bml4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMga3ZtYWxsb2Mgd2l0aCBrdm1hbGxvY19hcnJheSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgZHVyaW5nIGFsbG9jYXRpb24gb2YgdGhlIEJQRiBpdGVyYXRvciBiYXRjaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyBmb3IgVU5JWCBzb2NrZXQgQlBGIGl0ZXJhdG9ycywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCB3b3JrcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVU5JWFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaXRlcl91bml4X3JlYWxsb2NfYmF0Y2hcIixcbiAgICBcImJwZl9pdGVyX3VuaXhfYmF0Y2hcIixcbiAgICBcImJwZl9pdGVyX2luaXRfdW5peFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGt2bWFsbG9jIHdpdGgga3ZtYWxsb2NfYXJyYXkgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyBhbGxvY2F0aW9uIG9mIHRoZSBCUEYgaXRlcmF0b3IgYmF0Y2guIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgZm9yIFVOSVggc29ja2V0IEJQRiBpdGVyYXRvcnMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgd29ya3MgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow7r5nk[1] Phase: Succeeded StartedAt: 2026-07-16 08:45:22 +0000 UTC FinishedAt: 2026-07-16 08:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 08:45:22 +0000 UTC FinishedAt: 2026-07-16 08:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2] Phase: Succeeded StartedAt: 2026-07-16 08:45:22 +0000 UTC FinishedAt: 2026-07-16 10:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 08:45:22 +0000 UTC FinishedAt: 2026-07-16 10:48:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 08:45:22 +0000 UTC FinishedAt: 2026-07-16 08:47:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 08:45:22 +0000 UTC FinishedAt: 2026-07-16 08:46:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflow7r5nk/series-workflow7r5nk-convert-artifact-2319296329/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 08:47:01 +0000 UTC FinishedAt: 2026-07-16 09:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 08:47:01 +0000 UTC FinishedAt: 2026-07-16 09:47:49 +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:*9f70f079-bde2-4f3c-8d21-2d86f0af25c4,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-workflow7r5nk/series-workflow7r5nk-convert-artifact-2319296329/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": "3b4328b9-7438-490c-9e2a-fd75c9e9c53a", "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-workflow7r5nk/series-workflow7r5nk-build-action-3913229863/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 08:47:01 +0000 UTC FinishedAt: 2026-07-16 09:47:39 +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:*9f70f079-bde2-4f3c-8d21-2d86f0af25c4,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-workflow7r5nk/series-workflow7r5nk-convert-artifact-2319296329/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": "3b4328b9-7438-490c-9e2a-fd75c9e9c53a", "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-workflow7r5nk/series-workflow7r5nk-build-action-3913229863/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 09:47:49 +0000 UTC FinishedAt: 2026-07-16 09:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 09:47:49 +0000 UTC FinishedAt: 2026-07-16 09:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 09:47:49 +0000 UTC FinishedAt: 2026-07-16 09:48:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 09:47:49 +0000 UTC FinishedAt: 2026-07-16 09:48:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflow7r5nk/series-workflow7r5nk-convert-artifact-3990686044/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 09:48:12 +0000 UTC FinishedAt: 2026-07-16 09:50:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 09:48:12 +0000 UTC FinishedAt: 2026-07-16 09:50:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3b4328b9-7438-490c-9e2a-fd75c9e9c53a,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-workflow7r5nk/series-workflow7r5nk-build-action-3913229863/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-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 09:50:32 +0000 UTC FinishedAt: 2026-07-16 09:50:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 09:50:32 +0000 UTC FinishedAt: 2026-07-16 09:50:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 09:50:32 +0000 UTC FinishedAt: 2026-07-16 10:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 09:50:32 +0000 UTC FinishedAt: 2026-07-16 10:44:40 +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:*9f70f079-bde2-4f3c-8d21-2d86f0af25c4,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-workflow7r5nk/series-workflow7r5nk-convert-artifact-3990686044/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": "9c2fe63b-46d0-4ded-bb5c-adc302e3a6df", "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-workflow7r5nk/series-workflow7r5nk-build-action-8637880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 09:50:32 +0000 UTC FinishedAt: 2026-07-16 10:44:30 +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:*9f70f079-bde2-4f3c-8d21-2d86f0af25c4,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-workflow7r5nk/series-workflow7r5nk-convert-artifact-3990686044/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": "9c2fe63b-46d0-4ded-bb5c-adc302e3a6df", "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-workflow7r5nk/series-workflow7r5nk-build-action-8637880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 10:44:40 +0000 UTC FinishedAt: 2026-07-16 10:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 10:44:40 +0000 UTC FinishedAt: 2026-07-16 10:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 10:44:40 +0000 UTC FinishedAt: 2026-07-16 10:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 10:44:40 +0000 UTC FinishedAt: 2026-07-16 10:46:55 +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:*9c2fe63b-46d0-4ded-bb5c-adc302e3a6df,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-workflow7r5nk/series-workflow7r5nk-build-action-8637880/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-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 10:47:05 +0000 UTC FinishedAt: 2026-07-16 10:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 10:47:05 +0000 UTC FinishedAt: 2026-07-16 10:48:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"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:*3b4328b9-7438-490c-9e2a-fd75c9e9c53a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9c2fe63b-46d0-4ded-bb5c-adc302e3a6df,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-workflow7r5nk/series-workflow7r5nk-build-action-3913229863/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-workflow7r5nk/series-workflow7r5nk-build-action-8637880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 10:47:05 +0000 UTC FinishedAt: 2026-07-16 10:47:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 10:47:05 +0000 UTC FinishedAt: 2026-07-16 10:47:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"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-workflow7r5nk/series-workflow7r5nk-convert-artifact-3104788005/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 10:47:05 +0000 UTC FinishedAt: 2026-07-16 10:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 10:47:05 +0000 UTC FinishedAt: 2026-07-16 10:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 10:47:05 +0000 UTC FinishedAt: 2026-07-16 10:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 10:47:44 +0000 UTC FinishedAt: 2026-07-16 10:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7r5nk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bpf_iter_unix_realloc_batch","bpf_iter_unix_batch","bpf_iter_init_unix"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX","BPF_SYSCALL"],"series_id":"b470d491-e052-4f91-8230-3549a6d4ca9b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 10:47:44 +0000 UTC FinishedAt: 2026-07-16 10:48:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3b4328b9-7438-490c-9e2a-fd75c9e9c53a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9c2fe63b-46d0-4ded-bb5c-adc302e3a6df,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-workflow7r5nk/series-workflow7r5nk-build-action-3913229863/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-workflow7r5nk/series-workflow7r5nk-build-action-8637880/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-workflow7r5nk/series-workflow7r5nk-convert-artifact-3104788005/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,}