Name: series-workflowjrl65 Phase: Succeeded StartedAt: 2026-09-06 21:02:28 +0000 UTC FinishedAt: 2026-09-07 01:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[0] Phase: Succeeded StartedAt: 2026-09-06 21:02:28 +0000 UTC FinishedAt: 2026-09-06 21:25:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 21:02:28 +0000 UTC FinishedAt: 2026-09-06 21:25:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "1e64bde9-47b2-4137-a2f3-6d00b3b6e17d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__ext4_get_inode_loc", "ext4_get_inode_loc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfZ2V0X2lub2RlX2xvYyYjMzQ7LAogICAgJiMzNDtleHQ0X2dldF9pbm9kZV9sb2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGBzYl9nZXRibGsoKWAgdG8gYHNiX2ZpbmRfZ2V0X2Jsb2NrKClgIGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYCB3aXRoaW4gYGZzL2V4dDQvaW5vZGUuY2AuIFRoaXMgcmVwbGFjZXMgYSBwb3RlbnRpYWxseSBibG9ja2luZyBidWZmZXIgYWxsb2NhdGlvbiB3aXRoIGEgbm9uLWJsb2NraW5nIHBhZ2UvYnVmZmVyIGNhY2hlIGxvb2t1cCB0byBhdm9pZCBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gZm9saW8gbG9ja3MgYW5kIGJ1ZmZlciBoZWFkIGxvY2tzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY3VycmVuY3kvbG9ja2luZy1yZWxhdGVkIChkZXRlY3RhYmxlIGJ5IExPQ0tERVApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnVmZmVyIGNhY2hlIGxvb2t1cCBiZWhhdmlvciBpbiBfX2V4dDRfZ2V0X2lub2RlX2xvYygpIGJ5IHVzaW5nIHNiX2ZpbmRfZ2V0X2Jsb2NrKCkgaW5zdGVhZCBvZiBzYl9nZXRibGsoKSB0byBhdm9pZCBsb2NrIGludmVyc2lvbiBkZWFkbG9ja3MuIFRoaXMgaXMgcmVhY2hhYmxlLCBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gdmVyaWZ5IGlub2RlIGFsbG9jYXRpb24sIHJlYWQsIGFuZCB3cml0ZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY5Yzk3ZTE2NzhkNDI4ZTdjYWI3MmI0OTFhNzdjZDY3OTFjODA4MDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIxOjI0OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggYmQ0Yjc3OGRmOWViMi4uMTNlM2NiODI5NDYxOSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNDk0Miw4ICYjNDM7NDk0MiwxMiBAQCBzdGF0aWMgaW50IF9fZXh0NF9nZXRfaW5vZGVfbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuIFxuIFx0XHRzdGFydCA9IGlub2RlX29mZnNldCBcdTAwMjYgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7XG4gXG4tXHRcdC8qIElzIHRoZSBpbm9kZSBiaXRtYXAgaW4gY2FjaGU/ICovXG4tXHRcdGJpdG1hcF9iaCA9IHNiX2dldGJsayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElzIHRoZSBpbm9kZSBiaXRtYXAgaW4gY2FjaGU/IE5vbi1ibG9ja2luZyBsb29rdXA6IGJoIGFib3ZlXG4mIzQzO1x0XHQgKiBpcyBsb2NrZWQsIGFuZCBibG9ja2luZyBoZXJlIHdvdWxkIGZvbGlvX2xvY2soKSBhZ2FpbnN0IGFcbiYjNDM7XHRcdCAqIGJsb2NrX3JlYWRfZnVsbF9mb2xpbygpIHRoYXQgbG9ja3MgYmggdGhlIG90aGVyIHdheSByb3VuZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Yml0bWFwX2JoID0gc2JfZmluZF9nZXRfYmxvY2soc2IsIGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFiaXRtYXBfYmgpKVxuIFx0XHRcdGdvdG8gbWFrZV9pbztcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19leHQ0X2dldF9pbm9kZV9sb2MmIzM0OywKICAgICYjMzQ7ZXh0NF9nZXRfaW5vZGVfbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJ1ZmZlciBjYWNoZSBsb29rdXAgYmVoYXZpb3IgaW4gX19leHQ0X2dldF9pbm9kZV9sb2MoKSBieSB1c2luZyBzYl9maW5kX2dldF9ibG9jaygpIGluc3RlYWQgb2Ygc2JfZ2V0YmxrKCkgdG8gYXZvaWQgbG9jayBpbnZlcnNpb24gZGVhZGxvY2tzLiBUaGlzIGlzIHJlYWNoYWJsZSwgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIHZlcmlmeSBpbm9kZSBhbGxvY2F0aW9uLCByZWFkLCBhbmQgd3JpdGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmOWM5N2UxNjc4ZDQyOGU3Y2FiNzJiNDkxYTc3Y2Q2NzkxYzgwODA2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAyMToyNDozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBiZDRiNzc4ZGY5ZWIyLi4xM2UzY2I4Mjk0NjE5IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jCkBAIC00OTQyLDggJiM0Mzs0OTQyLDEyIEBAIHN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sCiAKIAkJc3RhcnQgPSBpbm9kZV9vZmZzZXQgJmFtcDsgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7CiAKLQkJLyogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gKi8KLQkJYml0bWFwX2JoID0gc2JfZ2V0YmxrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7CiYjNDM7CQkvKgomIzQzOwkJICogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gTm9uLWJsb2NraW5nIGxvb2t1cDogYmggYWJvdmUKJiM0MzsJCSAqIGlzIGxvY2tlZCwgYW5kIGJsb2NraW5nIGhlcmUgd291bGQgZm9saW9fbG9jaygpIGFnYWluc3QgYQomIzQzOwkJICogYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKCkgdGhhdCBsb2NrcyBiaCB0aGUgb3RoZXIgd2F5IHJvdW5kLgomIzQzOwkJICovCiYjNDM7CQliaXRtYXBfYmggPSBzYl9maW5kX2dldF9ibG9jayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpOwogCQlpZiAodW5saWtlbHkoIWJpdG1hcF9iaCkpCiAJCQlnb3RvIG1ha2VfaW87CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIGV4dDQgaW5vZGUgcmV0cmlldmFsIGluIGZzL2V4dDQvaW5vZGUuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBoZXJlLiBUaGUgZGlmZiBpbmRpY2F0ZXMgYSBtb2RpZmljYXRpb24gaW4gYGZzL2V4dDQvaW5vZGUuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYF9fZXh0NF9nZXRfaW5vZGVfbG9jKClgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxvb2tzIHRvIGJlIHJlcGxhY2luZyBgc2JfZ2V0YmxrYCB3aXRoIGBzYl9maW5kX2dldF9ibG9ja2Agd2hlbiBkZWFsaW5nIHdpdGggdGhlIGlub2RlIGJpdG1hcC4gT2theSwgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGlzIGxpbmUgaW4gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDQ5NDIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFsdGVyYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGlzIGlzIGFib3V0IG9wdGltaXphdGlvbjsgdXNpbmcgYHNiX2ZpbmRfZ2V0X2Jsb2NrYCBjb3VsZCBwb3RlbnRpYWxseSBieXBhc3MgYW4gdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBpZiB0aGUgYmxvY2sgaXMgYWxyZWFkeSBpbiB0aGUgYnVmZmVyIGNhY2hlLiBBbHRlcm5hdGl2ZWx5LCBjb3VsZCBpdCBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGJ1ZyByZWxhdGVkIHRvIGJsb2NrIHJldHJpZXZhbCBhbmQgY2FjaGluZz8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ5MjA6XHRcbjQ5MjE6XHRcdGJoID0gc2JfZ2V0YmxrKHNiLCBibG9jayk7XG40OTIyOlx0XHRpZiAodW5saWtlbHkoIWJoKSlcbjQ5MjM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40OTI0Olx0XHRpZiAoZXh0NF9idWZmZXJfdXB0b2RhdGUoYmgpKVxuNDkyNTpcdFx0XHRnb3RvIGhhc19idWZmZXI7XG40OTI2Olx0XG40OTI3Olx0XHRsb2NrX2J1ZmZlcihiaCk7XG40OTI4Olx0XHRpZiAoZXh0NF9idWZmZXJfdXB0b2RhdGUoYmgpKSB7XG40OTI5Olx0XHRcdC8qIFNvbWVvbmUgYnJvdWdodCBpdCB1cHRvZGF0ZSB3aGlsZSB3ZSB3YWl0ZWQgKi9cbjQ5MzA6XHRcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG40OTMxOlx0XHRcdGdvdG8gaGFzX2J1ZmZlcjtcbjQ5MzI6XHRcdH1cbjQ5MzM6XHRcbjQ5MzQ6XHRcdC8qXG40OTM1Olx0XHQgKiBJZiB3ZSBoYXZlIGFsbCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5vZGUgaW4gbWVtb3J5IGFuZCB0aGlzXG40OTM2Olx0XHQgKiBpcyB0aGUgb25seSB2YWxpZCBpbm9kZSBpbiB0aGUgYmxvY2ssIHdlIG5lZWQgbm90IHJlYWQgdGhlXG40OTM3Olx0XHQgKiBibG9jay5cbjQ5Mzg6XHRcdCAqL1xuNDkzOTpcdFx0aWYgKGlub2RlIFx1MDAyNlx1MDAyNiAhZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKSkge1xuNDk0MDpcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJpdG1hcF9iaDtcbjQ5NDE6XHRcdFx0aW50IGksIHN0YXJ0O1xuNDk0MjpcdFxuNDk0MzpcdFx0XHRzdGFydCA9IGlub2RlX29mZnNldCBcdTAwMjYgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7XG40OTQ0Olx0XG40OTQ1Olx0XHRcdC8qXG40OTQ2Olx0XHRcdCAqIElzIHRoZSBpbm9kZSBiaXRtYXAgaW4gY2FjaGU/IE5vbi1ibG9ja2luZyBsb29rdXA6IGJoIGFib3ZlXG40OTQ3Olx0XHRcdCAqIGlzIGxvY2tlZCwgYW5kIGJsb2NraW5nIGhlcmUgd291bGQgZm9saW9fbG9jaygpIGFnYWluc3QgYVxuNDk0ODpcdFx0XHQgKiBibG9ja19yZWFkX2Z1bGxfZm9saW8oKSB0aGF0IGxvY2tzIGJoIHRoZSBvdGhlciB3YXkgcm91bmQuXG40OTQ5Olx0XHRcdCAqL1xuNDk1MDpcdFx0XHRiaXRtYXBfYmggPSBzYl9maW5kX2dldF9ibG9jayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpO1xuNDk1MTpcdFx0XHRpZiAodW5saWtlbHkoIWJpdG1hcF9iaCkpXG40OTUyOlx0XHRcdFx0Z290byBtYWtlX2lvO1xuNDk1MzpcdFxuNDk1NDpcdFx0XHQvKlxuNDk1NTpcdFx0XHQgKiBJZiB0aGUgaW5vZGUgYml0bWFwIGlzbiYjMzk7dCBpbiBjYWNoZSB0aGVuIHRoZVxuNDk1NjpcdFx0XHQgKiBvcHRpbWlzYXRpb24gbWF5IGVuZCB1cCBwZXJmb3JtaW5nIHR3byByZWFkcyBpbnN0ZWFkXG40OTU3Olx0XHRcdCAqIG9mIG9uZSwgc28gc2tpcCBpdC5cbjQ5NTg6XHRcdFx0ICovXG40OTU5Olx0XHRcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJpdG1hcF9iaCkpIHtcbjQ5NjA6XHRcdFx0XHRicmVsc2UoYml0bWFwX2JoKTtcbjQ5NjE6XHRcdFx0XHRnb3RvIG1ha2VfaW87XG40OTYyOlx0XHRcdH1cbjQ5NjM6XHRcdFx0Zm9yIChpID0gc3RhcnQ7IGkgXHUwMDNjIHN0YXJ0ICYjNDM7IGlub2Rlc19wZXJfYmxvY2s7IGkmIzQzOyYjNDM7KSB7XG40OTY0Olx0XHRcdFx0aWYgKGkgPT0gaW5vZGVfb2Zmc2V0KVxuNDk2NTpcdFx0XHRcdFx0Y29udGludWU7XG40OTY2Olx0XHRcdFx0aWYgKGV4dDRfdGVzdF9iaXQoaSwgYml0bWFwX2JoLVx1MDAzZWJfZGF0YSkpXG40OTY3Olx0XHRcdFx0XHRicmVhaztcbjQ5Njg6XHRcdFx0fVxuNDk2OTpcdFx0XHRicmVsc2UoYml0bWFwX2JoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDU2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGV4dDQgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlcGxhY2luZyBgc2JfZ2V0YmxrYCB3aXRoIGBzYl9maW5kX2dldF9ibG9ja2Agd2l0aGluIGV4dDQmIzM5O3MgYF9fZXh0NF9nZXRfaW5vZGVfbG9jYCBmdW5jdGlvbi4gVGhlIGtleSBkaWZmZXJlbmNlLCBhbmQgdGhlIGxpa2VseSByZWFzb24gZm9yIHRoZSBjaGFuZ2UsIGlzIHRoYXQgYHNiX2dldGJsa2AgYWxsb2NhdGVzIG5ldyBidWZmZXIgaGVhZHMvZm9saW9zIGFuZCBjYW4gYmxvY2sgd2hpbGUgZG9pbmcgc28uIGBzYl9maW5kX2dldF9ibG9ja2AsIG9uIHRoZSBvdGhlciBoYW5kLCAqb25seSogbG9va3MgZm9yIGV4aXN0aW5nIGJsb2NrcywgYXZvaWRpbmcgYWxsb2NhdGlvbiBhbmQgbG9ja2luZy4gQmluZ28hIFRoYXQgc2NyZWFtcyAmIzM0O2RlYWRsb2NrIGZpeCYjMzQ7IHRvIG1lLCBsaWtlbHkgcmVsYXRlZCB0byBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb25zIHdpdGhpbiBgYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKClgIG9yIHNpbWlsYXIgZnVuY3Rpb25zLiBTbWFydCBtb3ZlLgoKTm93LCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4uLiBpcyB0aGlzIGNvZGUgcGF0aCBldmVuIHJlbGV2YW50IHRvIG91ciBlZmZvcnRzPyBZZXMsIGV4dDQgaXMgZGVmaW5pdGVseSBhIHByaW1lIHRhcmdldC4gU3RhbmRhcmQgUUVNVS9HQ0Ugc3l6a2FsbGVyIHNldHVwcyB3aWxsIGVhc2lseSBoaXQgZXh0NCwgYW5kIGl0JiMzOTtzIHJlYWRpbHkgbW91bnRhYmxlLiBUaGF0JiMzOTtzIGEgaHVnZSAmIzM0O3llcyYjMzQ7IGZvciByZWFjaGFiaWxpdHkuIFRoaXMgaXMgKmNvcmUqIGZpbGVzeXN0ZW0gY29kZSwgc28gYSBjaGFuZ2UgaGVyZSBpcyBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci4gV29ydGhGdXp6aW5nID0gVHJ1ZS4KCkkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIG5hbWUgYWdhaW4sIGNvbmZpcm1pbmcgdGhhdCB0aGlzIGlzIGBfX2V4dDRfZ2V0X2lub2RlX2xvY2AuIEkgc2hvdWxkIGFsc28gZXhhbWluZSB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLCBhbmQgYW55IG5lYXJieSBmdW5jdGlvbnMsIGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2V4dDRfZ2V0X2lub2RlX2xvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYz00NzgzPXN0YXRpYyBpbnQgZXh0NF9maWxsX3Jhd19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy00ODgzLSAqL1xuZnMvZXh0NC9pbm9kZS5jOjQ4ODQ6c3RhdGljIGludCBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbmZzL2V4dDQvaW5vZGUuYy00ODg1LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTAzMS1cbmZzL2V4dDQvaW5vZGUuYzo1MDMyOnN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9pbm9kZS5jLTUwMzMtXHRcdFx0XHRcdHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUwMzctXG5mcy9leHQ0L2lub2RlLmM6NTAzODpcdHJldCA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBOVUxMLCBpbG9jLFxuZnMvZXh0NC9pbm9kZS5jLTUwMzktXHRcdFx0XHRcdFx1MDAyNmVycl9ibGspO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MDQ4PWludCBleHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTA1Mi1cbmZzL2V4dDQvaW5vZGUuYzo1MDUzOlx0cmV0ID0gX19leHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIGlub2RlLCBpbG9jLFxuZnMvZXh0NC9pbm9kZS5jLTUwNTQtXHRcdFx0XHRcdFx1MDAyNmVycl9ibGspO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MTE1PWludCBleHQ0X2dldF9mY19pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUxMTcte1xuZnMvZXh0NC9pbm9kZS5jOjUxMTg6XHRyZXR1cm4gX19leHQ0X2dldF9pbm9kZV9sb2Moc2IsIGlubywgTlVMTCwgaWxvYywgTlVMTCk7XG5mcy9leHQ0L2lub2RlLmMtNTExOS19XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUzMjE9c3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTM3OC1cbmZzL2V4dDQvaW5vZGUuYzo1Mzc5Olx0cmV0ID0gX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lub2RlLmMtNTM4MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTU5MTE9aW50IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTkyMC1cbmZzL2V4dDQvaW5vZGUuYzo1OTIxOlx0ZXJyID0gX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lub2RlLmMtNTkyMi1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQwOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlub2RlIGxvY2F0aW9uIHJldHJpZXZhbCBpbiBleHQ0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGZldGNoaW5nIGlub2RlIGxvY2F0aW9ucywgc3BlY2lmaWNhbGx5IGBleHQ0X2dldF9pbm9kZV9sb2NgIGFuZCBpdHMgaW50ZXJuYWwgZnVuY3Rpb24gYF9fZXh0NF9nZXRfaW5vZGVfbG9jYC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVpciBpbnRlcmFjdGlvbi4gSSBzZWUgYSBzcGVjaWZpYyBjb25kaXRpb25hbCBjaGVjayBvbiBsaW5lIDQ5MzksIHdoZXJlIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgaW5vZGUgaXMgcHJlc2VudCwgYW5kIHRoZW4gaWYgaXQgKmRvZXNuJiMzOTt0KiBoYXZlIHRoZSBgRVhUNF9TVEFURV9YQVRUUmAgc3RhdGUgc2V0LiBXaXRoaW4gdGhhdCBjb25kaXRpb25hbCBibG9jaywgYF9fZXh0NF9nZXRfaW5vZGVfbG9jYCBnZXRzIGNhbGxlZCBieSBgZXh0NF9nZXRfaW5vZGVfbG9jYCB3aGVuIHRoZSBpbm9kZSBwb2ludGVyIGlzbiYjMzk7dCBOVUxMLiBJdCBpcyB3b3J0aCBub3RpbmcgaGVyZSB0aGF0IGBpbm9kZSAhPSBOVUxMYCBpcyB0aGUgY29uZGl0aW9uIHRvIGhhdmUgYF9fZXh0NF9nZXRfaW5vZGVfbG9jYCBjYWxsZWQgYnkgYGV4dDRfZ2V0X2lub2RlX2xvY2AuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgb2YgaW50ZXJlc3QuIE5vdywgSSBzaG91bGQgZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgZXh0NF9nZXRfaW5vZGVfbG9jYCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHV0aWxpemVkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSYjMzk7cyBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9nZXRfaW5vZGVfbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzE5Mj1leHRlcm4gaW50IGV4dDRfY2hhbmdlX2lub2RlX2pvdXJuYWxfZmxhZyhzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbmZzL2V4dDQvZXh0NC5oOjMxOTM6aW50IGV4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKTtcbmZzL2V4dDQvZXh0NC5oLTMxOTQtaW50IGV4dDRfZ2V0X2lub2RlX2xvY19ub2lvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTUyMzA9c3RhdGljIGludCBleHQ0X2lvbWFwX3hhdHRyX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTUyNDItXG5mcy9leHQ0L2V4dGVudHMuYzo1MjQzOlx0XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2V4dGVudHMuYy01MjQ0LVx0XHRpZiAoZXJyb3IpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMTA9aW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTE3LVxuZnMvZXh0NC9pbmxpbmUuYzoxMTg6XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTExOS1cdGlmIChlcnJvcikge1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTQzPWludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNTYtXG5mcy9leHQ0L2lubGluZS5jOjE1NzpcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTU4LVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MjY2PXN0YXRpYyBpbnQgZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTI3OC1cbmZzL2V4dDQvaW5saW5lLmM6Mjc5Olx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0yODAtXHRpZiAoZXJyb3IpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0zMzU9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzUxLVxuZnMvZXh0NC9pbmxpbmUuYzozNTI6XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTM1My1cdGlmIChlcnJvcilcbi0tXG5mcy9leHQ0L2lubGluZS5jPTQzNT1zdGF0aWMgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTQ1NC1cbmZzL2V4dDQvaW5saW5lLmM6NDU1Olx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy00NTYtXHRpZiAoZXJyb3IpIHtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTUwMj1zdGF0aWMgaW50IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9leHQ0L2lubGluZS5jLTUxOC1cbmZzL2V4dDQvaW5saW5lLmM6NTE5Olx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtNTIwLVx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2lubGluZS5jPTU3MT1zdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy01OTEtXG5mcy9leHQ0L2lubGluZS5jOjU5MjpcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTU5My1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz02OTU9aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTcwNi1cbmZzL2V4dDQvaW5saW5lLmM6NzA3Olx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtNzA4LVx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2lubGluZS5jPTc5Mz1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtODA1LVx0aWYgKGxpa2VseShjb3BpZWQpKSB7XG5mcy9leHQ0L2lubGluZS5jOjgwNjpcdFx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtODA3LVx0XHRpZiAocmV0KSB7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMTk4PWludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEyMDQtXG5mcy9leHQ0L2lubGluZS5jOjEyMDU6XHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTIwNi1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMjY3PWludCBleHQ0X2lubGluZWRpcl90b190cmVlKHN0cnVjdCBmaWxlICpkaXJfZmlsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEyODMtXG5mcy9leHQ0L2lubGluZS5jOjEyODQ6XHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0xMjg1LVx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2lubGluZS5jPTEzODg9aW50IGV4dDRfcmVhZF9pbmxpbmVfZGlyKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQwMi1cbmZzL2V4dDQvaW5saW5lLmM6MTQwMzpcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTE0MDQtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTUyOD12b2lkICpleHQ0X3JlYWRfaW5saW5lX2xpbmsoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE1MzMtXG5mcy9leHQ0L2lubGluZS5jOjE1MzQ6XHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0xNTM1LVx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2lubGluZS5jPTE1NTc9c3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2dldF9maXJzdF9pbmxpbmVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE1NjItXG5mcy9leHQ0L2lubGluZS5jOjE1NjM6XHQqcmV0dmFsID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTU2NC1cdGlmICgqcmV0dmFsKVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTU3Nz1pbnQgZXh0NF90cnlfY3JlYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNTgzLVxuZnMvZXh0NC9pbmxpbmUuYzoxNTg0Olx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTU4NS1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xNjEwPXN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9maW5kX2lubGluZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2MjUtXG5mcy9leHQ0L2lubGluZS5jOjE2MjY6XHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcdTAwMjZpcy5pbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTYyNy1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xNjczPWludCBleHQ0X2RlbGV0ZV9pbmxpbmVfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2ODItXG5mcy9leHQ0L2lubGluZS5jOjE2ODM6XHRlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTY4NC1cdGlmIChlcnIpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xNzU2PWJvb2wgZW1wdHlfaW5saW5lX2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgaW50ICpoYXNfaW5saW5lX2RhdGEpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNzY1LVxuZnMvZXh0NC9pbmxpbmUuYzoxNzY2Olx0ZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGRpciwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTE3NjctXHRpZiAoZXJyKSB7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xODMwPWludCBleHQ0X2lubGluZV9kYXRhX2lvbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xODM5LVxuZnMvZXh0NC9pbmxpbmUuYzoxODQwOlx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0xODQxLVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTg2Mj1pbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xODkyLVxuZnMvZXh0NC9pbmxpbmUuYzoxODkzOlx0aWYgKChlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpKSAhPSAwKVxuZnMvZXh0NC9pbmxpbmUuYy0xODk0LVx0XHRnb3RvIG91dDtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTE5NzQ9aW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTk5OS1cdGlsb2MuYmggPSBOVUxMO1xuZnMvZXh0NC9pbmxpbmUuYzoyMDAwOlx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0yMDAxLVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQvaW5vZGUuYz00NzgzPXN0YXRpYyBpbnQgZXh0NF9maWxsX3Jhd19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy00ODgzLSAqL1xuZnMvZXh0NC9pbm9kZS5jOjQ4ODQ6c3RhdGljIGludCBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbmZzL2V4dDQvaW5vZGUuYy00ODg1LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTAzMj1zdGF0aWMgaW50IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTAzNy1cbmZzL2V4dDQvaW5vZGUuYzo1MDM4Olx0cmV0ID0gX19leHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIE5VTEwsIGlsb2MsXG5mcy9leHQ0L2lub2RlLmMtNTAzOS1cdFx0XHRcdFx0XHUwMDI2ZXJyX2Jsayk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUwNDctXG5mcy9leHQ0L2lub2RlLmM6NTA0ODppbnQgZXh0NF9nZXRfaW5vZGVfbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXG5mcy9leHQ0L2lub2RlLmMtNTA0OS17XG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUwNTItXG5mcy9leHQ0L2lub2RlLmM6NTA1MzpcdHJldCA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBpbm9kZSwgaWxvYyxcbmZzL2V4dDQvaW5vZGUuYy01MDU0LVx0XHRcdFx0XHRcdTAwMjZlcnJfYmxrKTtcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTA2My0vKlxuZnMvZXh0NC9pbm9kZS5jOjUwNjQ6ICogZXh0NF9nZXRfaW5vZGVfbG9jX25vaW8oKSBpcyBhIGJlc3QtZWZmb3J0IHZhcmlhbnQgb2YgZXh0NF9nZXRfaW5vZGVfbG9jKCkuXG5mcy9leHQ0L2lub2RlLmMtNTA2NS0gKiBJdCBsb29rcyB1cCB0aGUgaW5vZGUgdGFibGUgYmxvY2sgaW4gdGhlIGJ1ZmZlciBjYWNoZSBhbmQgcmV0dXJucyAtRUFHQUlOIGlmXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUxMTU9aW50IGV4dDRfZ2V0X2ZjX2lub2RlX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTExNy17XG5mcy9leHQ0L2lub2RlLmM6NTExODpcdHJldHVybiBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzYiwgaW5vLCBOVUxMLCBpbG9jLCBOVUxMKTtcbmZzL2V4dDQvaW5vZGUuYy01MTE5LX1cbi0tXG5mcy9leHQ0L2lub2RlLmM9NjUwMT1leHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjUwOS1cbmZzL2V4dDQvaW5vZGUuYzo2NTEwOlx0ZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBpbG9jKTtcbmZzL2V4dDQvaW5vZGUuYy02NTExLVx0aWYgKCFlcnIpIHtcbi0tXG5mcy9leHQ0L2lvY3RsLmM9NzE2PXN0YXRpYyBpbnQgZXh0NF9pb2N0bF9zZXRwcm9qZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIF9fdTMyIHByb2ppZClcbi0tXG5mcy9leHQ0L2lvY3RsLmMtNzUwLVxuZnMvZXh0NC9pb2N0bC5jOjc1MTpcdGVyciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lvY3RsLmMtNzUyLVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L3hhdHRyLmM9NjQ2PWV4dDRfeGF0dHJfaWJvZHlfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL2V4dDQveGF0dHIuYy02NTgtXHRcdHJldHVybiAtRU5PREFUQTtcbmZzL2V4dDQveGF0dHIuYzo2NTk6XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L3hhdHRyLmMtNjYwLVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQveGF0dHIuYz03ODk9ZXh0NF94YXR0cl9pYm9keV9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTc5OC1cdFx0cmV0dXJuIDA7XG5mcy9leHQ0L3hhdHRyLmM6Nzk5Olx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC94YXR0ci5jLTgwMC1cdGlmIChlcnJvcilcbi0tXG5mcy9leHQ0L3hhdHRyLmM9ODY2PWludCBleHQ0X2dldF9pbm9kZV91c2FnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90ICp1c2FnZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmMtODc4LVx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikpIHtcbmZzL2V4dDQveGF0dHIuYzo4Nzk6XHRcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L3hhdHRyLmMtODgwLVx0XHRpZiAocmV0KVxuLS1cbmZzL2V4dDQveGF0dHIuYz0xMTcxPWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTExODctXHRlbHNlIHtcbmZzL2V4dDQveGF0dHIuYzoxMTg4Olx0XHRlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MocGFyZW50LCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQveGF0dHIuYy0xMTg5LVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTI2MDc9c3RhdGljIGludCBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjY1Ny1cbmZzL2V4dDQveGF0dHIuYzoyNjU4Olx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLVx1MDAzZWlsb2MpO1xuZnMvZXh0NC94YXR0ci5jLTI2NTktXHRpZiAoZXJyb3IpXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI4Nzg9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI4OTctXG5mcy9leHQ0L3hhdHRyLmM6Mjg5ODpcdFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC94YXR0ci5jLTI4OTktXHRcdGlmIChlcnJvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3OTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRVhUNCBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGV4dDQgZmlsZXN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBtYWluIEtjb25maWcgZmlsZSBmb3IgYSBnZW5lcmFsIG92ZXJ2aWV3IOKAkyBgRVhUNF9GU2Agc2hvdWxkIGJlIHRoZSBrZXkgc3ltYm9sLiBUaGVuLCB0byBnZXQgdGhlIHNwZWNpZmljcyBhbmQgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgc3ltYm9sLCBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGV4dDQtc3BlY2lmaWMgS2NvbmZpZyBmaWxlIGxvY2F0ZWQgd2l0aGluIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGRpcmVjdG9yeTogYGZzL2V4dDQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZGV0YWlsZWQgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gZXh0NC4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgd2F5IHRvIHRyYWNlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdoaWNoIEkgYWxyZWFkeSBrbm93IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBFWFQ0X0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA1Olx0XHRzZWxlY3QgSkJEMlxuICAgNjpcdFx0c2VsZWN0IENSQzE2XG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdHNlbGVjdCBGU19JT01BUFxuICAgOTpcdFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxuICAxMjpcdFxuICAxMzpcdFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXG4gIDE0Olx0XHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcbiAgMTU6XHRcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxuICAxNjpcdFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcbiAgMTc6XHRcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXG4gIDE4Olx0XHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxuICAxOTpcdFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XG4gIDIwOlx0XHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cbiAgMjE6XHRcbiAgMjI6XHRcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXG4gIDIzOlx0XHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcbiAgMjQ6XHRcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcbiAgMjU6XHRcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xuICAyNjpcdFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcbiAgMjc6XHRcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcbiAgMjg6XHRcdCAgY29tcGF0aWJsZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxuICAzMTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7VXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEVYVDRfRlNcbiAgMzg6XHRcdGRlcGVuZHMgb24gRVhUMl9GUz1uXG4gIDM5Olx0XHRkZWZhdWx0IHlcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MTAKCQkJCQkJCW91dHB1dDogMTI3CgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnM6IGBfX2V4dDRfZ2V0X2lub2RlX2xvY2AgYW5kIGBleHQ0X2dldF9pbm9kZV9sb2NgLiBUaG9zZSBhcmUgbXkgZm9jdXMgcG9pbnRzIGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLCBgRVhUNF9GU2AgaXMgZW5hYmxlZCwgd2hpY2ggaXMgY3J1Y2lhbCwgc28gdGhpcyBhcmVhIGlzIGluIHNjb3BlLgoKVGhlIHN5c3RlbSBmbGFnZ2VkIHRoaXMgYXMgd29ydGggZnV6emluZywgd2hpY2ggbWVhbnMgSSBzaG91bGQgZGlnIGRlZXBlci4gTGV0IG1lIGNvbmZpcm06IFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGhvdyB0aGUgZXh0NCBpbm9kZSBsb2NhdGlvbiBpcyBsb29rZWQgdXAsIHN3aXRjaGluZyB0byBgc2JfZmluZF9nZXRfYmxvY2tgIHdoaWNoIGlzIG5vbi1ibG9ja2luZywgdG8gcHJldmVudCBkZWFkbG9ja3MuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyBhbHRlcmluZyB0aGUgZnVuZGFtZW50YWwgYmxvY2sgbG9va3VwIGFuZCBjYWNoaW5nIG1lY2hhbmlzbSB3aXRoaW4gYGV4dDRgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBpbm9kZSBiaXRtYXAgcmVhZHMuIEl0JiMzOTtzIHRvdWNoaW5nIGBfX2V4dDRfZ2V0X2lub2RlX2xvY2Agd2l0aGluIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlLiBUaGlzIGlzIGEgY29yZSBjaGFuZ2UuIFN3aXRjaGluZyBmcm9tIGBzYl9nZXRibGtgIHRvIGBzYl9maW5kX2dldF9ibG9ja2AgaXMgYSBub3RhYmxlIHNoaWZ0IGluIGhvdyB0aGUgZmlsZSBzeXN0ZW0gaGFuZGxlcyBwb3RlbnRpYWwgY29udGVudGlvbi4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGFsbCB0aGUgZGV0YWlscyBsaW5lIHVwLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBqdXN0aWZpZWQuIFRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZXh0NF9nZXRfaW5vZGVfbG9jJiMzNDssCiAgICAmIzM0O2V4dDRfZ2V0X2lub2RlX2xvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBidWZmZXIgY2FjaGUgbG9va3VwIGJlaGF2aW9yIGluIF9fZXh0NF9nZXRfaW5vZGVfbG9jKCkgYnkgdXNpbmcgc2JfZmluZF9nZXRfYmxvY2soKSBpbnN0ZWFkIG9mIHNiX2dldGJsaygpIHRvIGF2b2lkIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2Nrcy4gVGhpcyBpcyByZWFjaGFibGUsIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgaW5vZGUgYWxsb2NhdGlvbiwgcmVhZCwgYW5kIHdyaXRlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19leHQ0X2dldF9pbm9kZV9sb2MmIzM0OywKICAgICYjMzQ7ZXh0NF9nZXRfaW5vZGVfbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJ1ZmZlciBjYWNoZSBsb29rdXAgYmVoYXZpb3IgaW4gX19leHQ0X2dldF9pbm9kZV9sb2MoKSBieSB1c2luZyBzYl9maW5kX2dldF9ibG9jaygpIGluc3RlYWQgb2Ygc2JfZ2V0YmxrKCkgdG8gYXZvaWQgbG9jayBpbnZlcnNpb24gZGVhZGxvY2tzLiBUaGlzIGlzIHJlYWNoYWJsZSwgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIHZlcmlmeSBpbm9kZSBhbGxvY2F0aW9uLCByZWFkLCBhbmQgd3JpdGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGBzYl9nZXRibGsoKWAgdG8gYHNiX2ZpbmRfZ2V0X2Jsb2NrKClgIGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYCB3aXRoaW4gYGZzL2V4dDQvaW5vZGUuY2AuIFRoaXMgcmVwbGFjZXMgYSBwb3RlbnRpYWxseSBibG9ja2luZyBidWZmZXIgYWxsb2NhdGlvbiB3aXRoIGEgbm9uLWJsb2NraW5nIHBhZ2UvYnVmZmVyIGNhY2hlIGxvb2t1cCB0byBhdm9pZCBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gZm9saW8gbG9ja3MgYW5kIGJ1ZmZlciBoZWFkIGxvY2tzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY3VycmVuY3kvbG9ja2luZy1yZWxhdGVkIChkZXRlY3RhYmxlIGJ5IExPQ0tERVApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5Yzk3ZTE2NzhkNDI4ZTdjYWI3MmI0OTFhNzdjZDY3OTFjODA4MDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIxOjI0OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGJkNGI3NzhkZjllYjIuLjEzZTNjYjgyOTQ2MTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTQ5NDIsOCAmIzQzOzQ5NDIsMTIgQEAgc3RhdGljIGludCBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubywKIAogCQlzdGFydCA9IGlub2RlX29mZnNldCAmYW1wOyB+KGlub2Rlc19wZXJfYmxvY2sgLSAxKTsKIAotCQkvKiBJcyB0aGUgaW5vZGUgYml0bWFwIGluIGNhY2hlPyAqLwotCQliaXRtYXBfYmggPSBzYl9nZXRibGsoc2IsIGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJcyB0aGUgaW5vZGUgYml0bWFwIGluIGNhY2hlPyBOb24tYmxvY2tpbmcgbG9va3VwOiBiaCBhYm92ZQomIzQzOwkJICogaXMgbG9ja2VkLCBhbmQgYmxvY2tpbmcgaGVyZSB3b3VsZCBmb2xpb19sb2NrKCkgYWdhaW5zdCBhCiYjNDM7CQkgKiBibG9ja19yZWFkX2Z1bGxfZm9saW8oKSB0aGF0IGxvY2tzIGJoIHRoZSBvdGhlciB3YXkgcm91bmQuCiYjNDM7CQkgKi8KJiM0MzsJCWJpdG1hcF9iaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7CiAJCWlmICh1bmxpa2VseSghYml0bWFwX2JoKSkKIAkJCWdvdG8gbWFrZV9pbzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb246IEV4dDQgSW5vZGUuYyBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGFzc2VzcyB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBkaWZmIGlzIGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBsaW5lIDQ5NDIuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgcmVwbGFjZWQgYHNiX2dldGJsaygpYCB3aXRoIGBzYl9maW5kX2dldF9ibG9jaygpYCBmb3IgcmV0cmlldmluZyB0aGUgaW5vZGUgYml0bWFwIGJsb2NrLiBUaGUgY29tbWVudCBtZW50aW9ucyBub24tYmxvY2tpbmcgbG9va3VwIGFuZCBhIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpbyB3aXRoIGBibG9ja19yZWFkX2Z1bGxfZm9saW8oKWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCB3b3J0aCBhIGNsb3NlciBsb29rLiBEZWFkbG9jayBhdm9pZGFuY2UgaXMgYWx3YXlzIGEgZ29vZCB0aGluZywgZXNwZWNpYWxseSBpbiBhIGZpbGUgc3lzdGVtIGNvbnRleHQuIGBzYl9maW5kX2dldF9ibG9jaygpYCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBub3cgdHJ5aW5nIHRvIHJldHJpZXZlIHRoZSBibG9jayBmcm9tIHRoZSBidWZmZXIgY2FjaGUgaW4gYSBub24tYmxvY2tpbmcgbWFubmVyLiBJZiBpdCYjMzk7cyBub3QgcHJlc2VudCwgaXQmIzM5O2xsIHRyaWdnZXIgYW4gSS9PIHBhdGggZWxzZXdoZXJlLCBJJiMzOTtkIGd1ZXNzLgoKR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGxvdy1sZXZlbCBibG9jayByZXRyaWV2YWwgYW5kIGEgY3JpdGljYWwgcGF0aCBpbiBleHQ0JiMzOTtzIGlub2RlIG9wZXJhdGlvbnMsIGFuZCB0aGUgZXhwbGljaXQgbWVudGlvbiBvZiBhdm9pZGluZyBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgd2l0aCBhIHBvdGVudGlhbGx5IGJsb2NraW5nIGZ1bmN0aW9uLCB0aGlzIGFic29sdXRlbHkgd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwb3NzaWJpbGl0eSBvZiBtaXNzZWQgbG9ja2luZywgaW5jb3JyZWN0IHVzYWdlIG9mIGJ1ZmZlciBoZWFkcywgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgbm9uLWJsb2NraW5nIGxvb2t1cCBtZXRob2QgaXMgdmVyeSByZWFsLiBJdCBhbHNvIG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gc2VlIGlmIGFueSBvdGhlciBzaW1pbGFyIGNhbGxzIGV4aXN0LiBXZSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBob3cgYHNiX2ZpbmRfZ2V0X2Jsb2NrYCBpcyBoYW5kbGVkIGludGVybmFsbHksIGFuZCBzZWUgaG93IHRoZSBJL08gcGF0aCBpcyBwcm90ZWN0ZWQgb3IgY29vcmRpbmF0ZWQuIFRoaXMgY2hhbmdlIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBleHBvc2VkIHVuZGVyIEtNU0FOLiBJIHRoaW5rIHdlIG5lZWQgdG8gdGhyb3cgc29tZSBmdXp6aW5nIGN5Y2xlcyBhdCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDkyMDpcdFxuNDkyMTpcdFx0YmggPSBzYl9nZXRibGsoc2IsIGJsb2NrKTtcbjQ5MjI6XHRcdGlmICh1bmxpa2VseSghYmgpKVxuNDkyMzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQ5MjQ6XHRcdGlmIChleHQ0X2J1ZmZlcl91cHRvZGF0ZShiaCkpXG40OTI1Olx0XHRcdGdvdG8gaGFzX2J1ZmZlcjtcbjQ5MjY6XHRcbjQ5Mjc6XHRcdGxvY2tfYnVmZmVyKGJoKTtcbjQ5Mjg6XHRcdGlmIChleHQ0X2J1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbjQ5Mjk6XHRcdFx0LyogU29tZW9uZSBicm91Z2h0IGl0IHVwdG9kYXRlIHdoaWxlIHdlIHdhaXRlZCAqL1xuNDkzMDpcdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbjQ5MzE6XHRcdFx0Z290byBoYXNfYnVmZmVyO1xuNDkzMjpcdFx0fVxuNDkzMzpcdFxuNDkzNDpcdFx0LypcbjQ5MzU6XHRcdCAqIElmIHdlIGhhdmUgYWxsIGluZm9ybWF0aW9uIG9mIHRoZSBpbm9kZSBpbiBtZW1vcnkgYW5kIHRoaXNcbjQ5MzY6XHRcdCAqIGlzIHRoZSBvbmx5IHZhbGlkIGlub2RlIGluIHRoZSBibG9jaywgd2UgbmVlZCBub3QgcmVhZCB0aGVcbjQ5Mzc6XHRcdCAqIGJsb2NrLlxuNDkzODpcdFx0ICovXG40OTM5Olx0XHRpZiAoaW5vZGUgXHUwMDI2XHUwMDI2ICFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpKSB7XG40OTQwOlx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoO1xuNDk0MTpcdFx0XHRpbnQgaSwgc3RhcnQ7XG40OTQyOlx0XG40OTQzOlx0XHRcdHN0YXJ0ID0gaW5vZGVfb2Zmc2V0IFx1MDAyNiB+KGlub2Rlc19wZXJfYmxvY2sgLSAxKTtcbjQ5NDQ6XHRcbjQ5NDU6XHRcdFx0LypcbjQ5NDY6XHRcdFx0ICogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gTm9uLWJsb2NraW5nIGxvb2t1cDogYmggYWJvdmVcbjQ5NDc6XHRcdFx0ICogaXMgbG9ja2VkLCBhbmQgYmxvY2tpbmcgaGVyZSB3b3VsZCBmb2xpb19sb2NrKCkgYWdhaW5zdCBhXG40OTQ4Olx0XHRcdCAqIGJsb2NrX3JlYWRfZnVsbF9mb2xpbygpIHRoYXQgbG9ja3MgYmggdGhlIG90aGVyIHdheSByb3VuZC5cbjQ5NDk6XHRcdFx0ICovXG40OTUwOlx0XHRcdGJpdG1hcF9iaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7XG40OTUxOlx0XHRcdGlmICh1bmxpa2VseSghYml0bWFwX2JoKSlcbjQ5NTI6XHRcdFx0XHRnb3RvIG1ha2VfaW87XG40OTUzOlx0XG40OTU0Olx0XHRcdC8qXG40OTU1Olx0XHRcdCAqIElmIHRoZSBpbm9kZSBiaXRtYXAgaXNuJiMzOTt0IGluIGNhY2hlIHRoZW4gdGhlXG40OTU2Olx0XHRcdCAqIG9wdGltaXNhdGlvbiBtYXkgZW5kIHVwIHBlcmZvcm1pbmcgdHdvIHJlYWRzIGluc3RlYWRcbjQ5NTc6XHRcdFx0ICogb2Ygb25lLCBzbyBza2lwIGl0LlxuNDk1ODpcdFx0XHQgKi9cbjQ5NTk6XHRcdFx0aWYgKCFidWZmZXJfdXB0b2RhdGUoYml0bWFwX2JoKSkge1xuNDk2MDpcdFx0XHRcdGJyZWxzZShiaXRtYXBfYmgpO1xuNDk2MTpcdFx0XHRcdGdvdG8gbWFrZV9pbztcbjQ5NjI6XHRcdFx0fVxuNDk2MzpcdFx0XHRmb3IgKGkgPSBzdGFydDsgaSBcdTAwM2Mgc3RhcnQgJiM0MzsgaW5vZGVzX3Blcl9ibG9jazsgaSYjNDM7JiM0MzspIHtcbjQ5NjQ6XHRcdFx0XHRpZiAoaSA9PSBpbm9kZV9vZmZzZXQpXG40OTY1Olx0XHRcdFx0XHRjb250aW51ZTtcbjQ5NjY6XHRcdFx0XHRpZiAoZXh0NF90ZXN0X2JpdChpLCBiaXRtYXBfYmgtXHUwMDNlYl9kYXRhKSlcbjQ5Njc6XHRcdFx0XHRcdGJyZWFrO1xuNDk2ODpcdFx0XHR9XG40OTY5Olx0XHRcdGJyZWxzZShiaXRtYXBfYmgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg3CgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENoYW5nZTogQSBEZWVwZXIgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIGJ1ZmZlciBoZWFkcyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYC4gUHJldmlvdXNseSwgd2UgdXNlZCBgc2JfZ2V0YmxrKClgLCB3aGljaCwgSSBrbm93LCBpcyBhIGJsb2NraW5nIG9wZXJhdGlvbiDigJMgaXQgZmluZHMgb3IgKmFsbG9jYXRlcyogYSBidWZmZXIgaGVhZCwgY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24mIzM5O3QgYWxyZWFkeSBleGlzdC4gVGhhdCBhbGxvY2F0aW9uIGNhbiBpbnRyb2R1Y2UgZGVsYXlzLCB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgYWxsb2NhdGlvbi4gTm93LCB3ZSYjMzk7cmUgc3dhcHBpbmcgdGhhdCBvdXQgd2l0aCBgc2JfZmluZF9nZXRfYmxvY2soKWAuIFRoYXQmIzM5O3MgYSBjbGV2ZXIgbW92ZS4gVGhpcyBmdW5jdGlvbiAqb25seSogbG9va3MgZm9yIHRoZSBidWZmZXIgaGVhZCBpbiB0aGUgcGFnZSBvciBidWZmZXIgY2FjaGU7IGl0IGRvZXNuJiMzOTt0IGFsbG9jYXRlIGFueXRoaW5nIGlmIGl0JiMzOTtzIG5vdCB0aGVyZSwgc28gbm8gYmxvY2tpbmcuCgpJZiBgc2JfZmluZF9nZXRfYmxvY2tgIGRvZXNuJiMzOTt0IGZpbmQgdGhlIGJ1ZmZlciBoZWFkLCB3ZSBqdW1wIHRvIGBtYWtlX2lvYCwgd2hpY2ggcHJlc3VtYWJseSBoYW5kbGVzIHRoZSBJL08gdG8gZ2V0IGl0LiBJZiBpdCAqZG9lcyogZmluZCBpdCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgdXAtdG8tZGF0ZS4gYCFidWZmZXJfdXB0b2RhdGUoYml0bWFwX2JoKWAgYW5kIGlmIGl0IGlzbiYjMzk7dCwgd2Ugc2tpcCBvcHRpbWl6YXRpb24sIGFuZCBvZmYgdG8gYG1ha2VfaW9gIHdlIGdvLiBJZiBpdCAqaXMqIHVwdG9kYXRlLCB0aGVuIHdlIHJlYWQgYGJpdG1hcF9iaC0mZ3Q7Yl9kYXRhYC4gU2ltcGxlLiBUaGlzIHNlZW1zIHRvIGJlIGEgZGVhZGxvY2sgZml4IOKAkyBhZGRyZXNzaW5nIGEgbG9ja2luZyBvcmRlciBpc3N1ZSBiZXR3ZWVuIHRoZSBidWZmZXIgbG9jayBhbmQgdGhlIGZvbGlvIGxvY2ssIHdoaWNoIGlzIGltcG9ydGFudC4gVGhpcyBpcyBjcml0aWNhbCBmb3Igb3VyIG92ZXJhbGwgc3RhYmlsaXR5LgoKTm93LCB0aGUgbWFpbiBjb25jZXJuOiBhcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdpdGggdGhpcyBjaGFuZ2U/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgoqICAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBidWZmZXJzIGFyZSBiZWluZyBjcmVhdGVkLiBXZSYjMzk7cmUganVzdCBmaW5kaW5nIGFuIGV4aXN0aW5nIG9uZSwgb3IgZG9pbmcgdGhlIEkvTy4KKiAgIE5vIGtlcm5lbC10by11c2VyIHNwYWNlIGNvcHlpbmcgbW9kaWZpY2F0aW9ucy4KKiAgIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIGJlaW5nIHJlYWQgZGlyZWN0bHkuCiogICBgc2JfZmluZF9nZXRfYmxvY2tgIGlzIGVpdGhlciByZXR1cm5pbmcgYW4gZXhpc3RpbmcgYGJ1ZmZlcl9oZWFkYCAod2hpY2ggd2UgY2hlY2sgaXMgdmFsaWQpLCBvciBOVUxMLgoqICAgSWYgd2UgKmRvKiBnZXQgYSBgYml0bWFwX2JoYCwgd2UgY2hlY2sgaXQsIGFuZCB0aGVuIGZvciBgYnVmZmVyX3VwdG9kYXRlYCwgaWYgdGhlIGRhdGEgaXMgdXB0b2RhdGUsIGl0JiMzOTtzIHNhZmUgdG8gcmVhZCBgYl9kYXRhYC4gSWYgbm90LCB3ZSBmYWxsIHRocm91Z2ggdG8gYG1ha2VfaW9gLgoqICAgSWYgaXQmIzM5O3Mgbm90IHByZXNlbnQgb3Igbm90IHVwLXRvLWRhdGUsIHdlIGhpdCBgbWFrZV9pb2AsIHdoaWNoIGhhbmRsZXMgdGhlIHJlYWQgb24gYGJoYC4KCkl0IHNlZW1zIHNhZmUuIFRoaXMgY2hhbmdlIGFwcGVhcnMgdG8ganVzdCBhZGRyZXNzIGEgcG90ZW50aWFsIGRlYWRsb2NrLCBzcGVjaWZpY2FsbHkgYW4gQUJCQSBkZWFkbG9jay9sb2NrIGludmVyc2lvbi4gQW5kIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLgoKTGV0JiMzOTtzIGNvbmZpcm06CgoqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGdldHRpbmcgc2VudCB0byB1c2VyIHNwYWNlLgoqICAgTm8gY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKiAgIE5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgoqICAgTm8gbmV3IGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS4KClRoaXMgaXMgYWxsIGNvbnNpc3RlbnQgd2l0aCBLTVNBTiB2cy4gS0FTQU4gY29uc2lkZXJhdGlvbnMuIFdlJiMzOTtyZSByZXBsYWNpbmcgYSBibG9ja2luZyBvcGVyYXRpb24gKGBzYl9nZXRibGsoKWApIHdpdGggYSBub24tYmxvY2tpbmcgb25lIChgc2JfZmluZF9nZXRfYmxvY2soKWApLCBzb2x2aW5nIGEgbG9jayBpbnZlcnNpb24gdGhhdCBjb3VsZCBiZSBkZXRlY3RlZCBieSBMT0NLREVQLiBTaW5jZSBubyBuZXcgdnVsbmVyYWJpbGl0aWVzIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjayB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGNvcGllcyBhcmUgYmVpbmcgZXhwb3NlZCBvciBtb2RpZmllZCwgS01TQU4gZnV6emluZyBpc24mIzM5O3QgbmVlZGVkLiBSZWd1bGFyIEtBU0FOL0xPQ0tERVAgaXMgZW5vdWdoLiBFeGNlbGxlbnQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBmb3JtYXR0ZWQuIFJlYWR5IHRvIHNldCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGBzYl9nZXRibGsoKWAgdG8gYHNiX2ZpbmRfZ2V0X2Jsb2NrKClgIGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYCB3aXRoaW4gYGZzL2V4dDQvaW5vZGUuY2AuIFRoaXMgcmVwbGFjZXMgYSBwb3RlbnRpYWxseSBibG9ja2luZyBidWZmZXIgYWxsb2NhdGlvbiB3aXRoIGEgbm9uLWJsb2NraW5nIHBhZ2UvYnVmZmVyIGNhY2hlIGxvb2t1cCB0byBhdm9pZCBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gZm9saW8gbG9ja3MgYW5kIGJ1ZmZlciBoZWFkIGxvY2tzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY3VycmVuY3kvbG9ja2luZy1yZWxhdGVkIChkZXRlY3RhYmxlIGJ5IExPQ0tERVApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgYHNiX2dldGJsaygpYCB0byBgc2JfZmluZF9nZXRfYmxvY2soKWAgaW4gYF9fZXh0NF9nZXRfaW5vZGVfbG9jKClgIHdpdGhpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhpcyByZXBsYWNlcyBhIHBvdGVudGlhbGx5IGJsb2NraW5nIGJ1ZmZlciBhbGxvY2F0aW9uIHdpdGggYSBub24tYmxvY2tpbmcgcGFnZS9idWZmZXIgY2FjaGUgbG9va3VwIHRvIGF2b2lkIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2sgYmV0d2VlbiBmb2xpbyBsb2NrcyBhbmQgYnVmZmVyIGhlYWQgbG9ja3MuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jdXJyZW5jeS9sb2NraW5nLXJlbGF0ZWQgKGRldGVjdGFibGUgYnkgTE9DS0RFUCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDozMy40MTk2MjUwMTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODk2OTIyMTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19leHQ0X2dldF9pbm9kZV9sb2NcIixcbiAgICBcImV4dDRfZ2V0X2lub2RlX2xvY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBgc2JfZ2V0YmxrKClgIHRvIGBzYl9maW5kX2dldF9ibG9jaygpYCBpbiBgX19leHQ0X2dldF9pbm9kZV9sb2MoKWAgd2l0aGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGlzIHJlcGxhY2VzIGEgcG90ZW50aWFsbHkgYmxvY2tpbmcgYnVmZmVyIGFsbG9jYXRpb24gd2l0aCBhIG5vbi1ibG9ja2luZyBwYWdlL2J1ZmZlciBjYWNoZSBsb29rdXAgdG8gYXZvaWQgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGZvbGlvIGxvY2tzIGFuZCBidWZmZXIgaGVhZCBsb2Nrcy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY3VycmVuY3kvbG9ja2luZy1yZWxhdGVkIChkZXRlY3RhYmxlIGJ5IExPQ0tERVApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBidWZmZXIgY2FjaGUgbG9va3VwIGJlaGF2aW9yIGluIF9fZXh0NF9nZXRfaW5vZGVfbG9jKCkgYnkgdXNpbmcgc2JfZmluZF9nZXRfYmxvY2soKSBpbnN0ZWFkIG9mIHNiX2dldGJsaygpIHRvIGF2b2lkIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2Nrcy4gVGhpcyBpcyByZWFjaGFibGUsIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgaW5vZGUgYWxsb2NhdGlvbiwgcmVhZCwgYW5kIHdyaXRlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDozMy40MTk2MzA5NzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzUyNzU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY5Yzk3ZTE2NzhkNDI4ZTdjYWI3MmI0OTFhNzdjZDY3OTFjODA4MDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAyMToyNDozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcXG5pbmRleCBiZDRiNzc4ZGY5ZWIyLi4xM2UzY2I4Mjk0NjE5IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC00OTQyLDggKzQ5NDIsMTIgQEAgc3RhdGljIGludCBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcXG4gXFxuIFxcdFxcdHN0YXJ0ID0gaW5vZGVfb2Zmc2V0IFxcdTAwMjYgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7XFxuIFxcbi1cXHRcXHQvKiBJcyB0aGUgaW5vZGUgYml0bWFwIGluIGNhY2hlPyAqL1xcbi1cXHRcXHRiaXRtYXBfYmggPSBzYl9nZXRibGsoc2IsIGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gTm9uLWJsb2NraW5nIGxvb2t1cDogYmggYWJvdmVcXG4rXFx0XFx0ICogaXMgbG9ja2VkLCBhbmQgYmxvY2tpbmcgaGVyZSB3b3VsZCBmb2xpb19sb2NrKCkgYWdhaW5zdCBhXFxuK1xcdFxcdCAqIGJsb2NrX3JlYWRfZnVsbF9mb2xpbygpIHRoYXQgbG9ja3MgYmggdGhlIG90aGVyIHdheSByb3VuZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGJpdG1hcF9iaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7XFxuIFxcdFxcdGlmICh1bmxpa2VseSghYml0bWFwX2JoKSlcXG4gXFx0XFx0XFx0Z290byBtYWtlX2lvO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6MzMuOTA3ODcwMDE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODcxMTE3Nzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19leHQ0X2dldF9pbm9kZV9sb2NcIixcbiAgICBcImV4dDRfZ2V0X2lub2RlX2xvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJ1ZmZlciBjYWNoZSBsb29rdXAgYmVoYXZpb3IgaW4gX19leHQ0X2dldF9pbm9kZV9sb2MoKSBieSB1c2luZyBzYl9maW5kX2dldF9ibG9jaygpIGluc3RlYWQgb2Ygc2JfZ2V0YmxrKCkgdG8gYXZvaWQgbG9jayBpbnZlcnNpb24gZGVhZGxvY2tzLiBUaGlzIGlzIHJlYWNoYWJsZSwgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIHZlcmlmeSBpbm9kZSBhbGxvY2F0aW9uLCByZWFkLCBhbmQgd3JpdGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjljOTdlMTY3OGQ0MjhlN2NhYjcyYjQ5MWE3N2NkNjc5MWM4MDgwNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMjE6MjQ6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGJkNGI3NzhkZjllYjIuLjEzZTNjYjgyOTQ2MTkgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTQ5NDIsOCArNDk0MiwxMiBAQCBzdGF0aWMgaW50IF9fZXh0NF9nZXRfaW5vZGVfbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuIFxuIFx0XHRzdGFydCA9IGlub2RlX29mZnNldCBcdTAwMjYgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7XG4gXG4tXHRcdC8qIElzIHRoZSBpbm9kZSBiaXRtYXAgaW4gY2FjaGU/ICovXG4tXHRcdGJpdG1hcF9iaCA9IHNiX2dldGJsayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpO1xuK1x0XHQvKlxuK1x0XHQgKiBJcyB0aGUgaW5vZGUgYml0bWFwIGluIGNhY2hlPyBOb24tYmxvY2tpbmcgbG9va3VwOiBiaCBhYm92ZVxuK1x0XHQgKiBpcyBsb2NrZWQsIGFuZCBibG9ja2luZyBoZXJlIHdvdWxkIGZvbGlvX2xvY2soKSBhZ2FpbnN0IGFcbitcdFx0ICogYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKCkgdGhhdCBsb2NrcyBiaCB0aGUgb3RoZXIgd2F5IHJvdW5kLlxuK1x0XHQgKi9cbitcdFx0Yml0bWFwX2JoID0gc2JfZmluZF9nZXRfYmxvY2soc2IsIGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFiaXRtYXBfYmgpKVxuIFx0XHRcdGdvdG8gbWFrZV9pbztcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjI0OjMzLjkwNzg3MjA1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMjQzNzU0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBleHQ0IGlub2RlIHJldHJpZXZhbCBpbiBmcy9leHQ0L2lub2RlLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCdzIGNoYW5nZWQgaGVyZS4gVGhlIGRpZmYgaW5kaWNhdGVzIGEgbW9kaWZpY2F0aW9uIGluIGBmcy9leHQ0L2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsb29rcyB0byBiZSByZXBsYWNpbmcgYHNiX2dldGJsa2Agd2l0aCBgc2JfZmluZF9nZXRfYmxvY2tgIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBpbm9kZSBiaXRtYXAuIE9rYXksIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBsaW5lIGluIHRoZSBzb3VyY2UgY29kZS4gTGV0J3MgaGVhZCBvdmVyIHRvIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDQ5NDIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFsdGVyYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGlzIGlzIGFib3V0IG9wdGltaXphdGlvbjsgdXNpbmcgYHNiX2ZpbmRfZ2V0X2Jsb2NrYCBjb3VsZCBwb3RlbnRpYWxseSBieXBhc3MgYW4gdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBpZiB0aGUgYmxvY2sgaXMgYWxyZWFkeSBpbiB0aGUgYnVmZmVyIGNhY2hlLiBBbHRlcm5hdGl2ZWx5LCBjb3VsZCBpdCBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGJ1ZyByZWxhdGVkIHRvIGJsb2NrIHJldHJpZXZhbCBhbmQgY2FjaGluZz8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDozOS4wMzIyNTA3MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ5MjA6XFx0XFxuNDkyMTpcXHRcXHRiaCA9IHNiX2dldGJsayhzYiwgYmxvY2spO1xcbjQ5MjI6XFx0XFx0aWYgKHVubGlrZWx5KCFiaCkpXFxuNDkyMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40OTI0OlxcdFxcdGlmIChleHQ0X2J1ZmZlcl91cHRvZGF0ZShiaCkpXFxuNDkyNTpcXHRcXHRcXHRnb3RvIGhhc19idWZmZXI7XFxuNDkyNjpcXHRcXG40OTI3OlxcdFxcdGxvY2tfYnVmZmVyKGJoKTtcXG40OTI4OlxcdFxcdGlmIChleHQ0X2J1ZmZlcl91cHRvZGF0ZShiaCkpIHtcXG40OTI5OlxcdFxcdFxcdC8qIFNvbWVvbmUgYnJvdWdodCBpdCB1cHRvZGF0ZSB3aGlsZSB3ZSB3YWl0ZWQgKi9cXG40OTMwOlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjQ5MzE6XFx0XFx0XFx0Z290byBoYXNfYnVmZmVyO1xcbjQ5MzI6XFx0XFx0fVxcbjQ5MzM6XFx0XFxuNDkzNDpcXHRcXHQvKlxcbjQ5MzU6XFx0XFx0ICogSWYgd2UgaGF2ZSBhbGwgaW5mb3JtYXRpb24gb2YgdGhlIGlub2RlIGluIG1lbW9yeSBhbmQgdGhpc1xcbjQ5MzY6XFx0XFx0ICogaXMgdGhlIG9ubHkgdmFsaWQgaW5vZGUgaW4gdGhlIGJsb2NrLCB3ZSBuZWVkIG5vdCByZWFkIHRoZVxcbjQ5Mzc6XFx0XFx0ICogYmxvY2suXFxuNDkzODpcXHRcXHQgKi9cXG40OTM5OlxcdFxcdGlmIChpbm9kZSBcXHUwMDI2XFx1MDAyNiAhZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKSkge1xcbjQ5NDA6XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaXRtYXBfYmg7XFxuNDk0MTpcXHRcXHRcXHRpbnQgaSwgc3RhcnQ7XFxuNDk0MjpcXHRcXG40OTQzOlxcdFxcdFxcdHN0YXJ0ID0gaW5vZGVfb2Zmc2V0IFxcdTAwMjYgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7XFxuNDk0NDpcXHRcXG40OTQ1OlxcdFxcdFxcdC8qXFxuNDk0NjpcXHRcXHRcXHQgKiBJcyB0aGUgaW5vZGUgYml0bWFwIGluIGNhY2hlPyBOb24tYmxvY2tpbmcgbG9va3VwOiBiaCBhYm92ZVxcbjQ5NDc6XFx0XFx0XFx0ICogaXMgbG9ja2VkLCBhbmQgYmxvY2tpbmcgaGVyZSB3b3VsZCBmb2xpb19sb2NrKCkgYWdhaW5zdCBhXFxuNDk0ODpcXHRcXHRcXHQgKiBibG9ja19yZWFkX2Z1bGxfZm9saW8oKSB0aGF0IGxvY2tzIGJoIHRoZSBvdGhlciB3YXkgcm91bmQuXFxuNDk0OTpcXHRcXHRcXHQgKi9cXG40OTUwOlxcdFxcdFxcdGJpdG1hcF9iaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7XFxuNDk1MTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWJpdG1hcF9iaCkpXFxuNDk1MjpcXHRcXHRcXHRcXHRnb3RvIG1ha2VfaW87XFxuNDk1MzpcXHRcXG40OTU0OlxcdFxcdFxcdC8qXFxuNDk1NTpcXHRcXHRcXHQgKiBJZiB0aGUgaW5vZGUgYml0bWFwIGlzbid0IGluIGNhY2hlIHRoZW4gdGhlXFxuNDk1NjpcXHRcXHRcXHQgKiBvcHRpbWlzYXRpb24gbWF5IGVuZCB1cCBwZXJmb3JtaW5nIHR3byByZWFkcyBpbnN0ZWFkXFxuNDk1NzpcXHRcXHRcXHQgKiBvZiBvbmUsIHNvIHNraXAgaXQuXFxuNDk1ODpcXHRcXHRcXHQgKi9cXG40OTU5OlxcdFxcdFxcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJpdG1hcF9iaCkpIHtcXG40OTYwOlxcdFxcdFxcdFxcdGJyZWxzZShiaXRtYXBfYmgpO1xcbjQ5NjE6XFx0XFx0XFx0XFx0Z290byBtYWtlX2lvO1xcbjQ5NjI6XFx0XFx0XFx0fVxcbjQ5NjM6XFx0XFx0XFx0Zm9yIChpID0gc3RhcnQ7IGkgXFx1MDAzYyBzdGFydCArIGlub2Rlc19wZXJfYmxvY2s7IGkrKykge1xcbjQ5NjQ6XFx0XFx0XFx0XFx0aWYgKGkgPT0gaW5vZGVfb2Zmc2V0KVxcbjQ5NjU6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNDk2NjpcXHRcXHRcXHRcXHRpZiAoZXh0NF90ZXN0X2JpdChpLCBiaXRtYXBfYmgtXFx1MDAzZWJfZGF0YSkpXFxuNDk2NzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG40OTY4OlxcdFxcdFxcdH1cXG40OTY5OlxcdFxcdFxcdGJyZWxzZShiaXRtYXBfYmgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDozOS4wMzI2NzI4NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDcxNTQ1OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGV4dDQgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlcGxhY2luZyBgc2JfZ2V0YmxrYCB3aXRoIGBzYl9maW5kX2dldF9ibG9ja2Agd2l0aGluIGV4dDQncyBgX19leHQ0X2dldF9pbm9kZV9sb2NgIGZ1bmN0aW9uLiBUaGUga2V5IGRpZmZlcmVuY2UsIGFuZCB0aGUgbGlrZWx5IHJlYXNvbiBmb3IgdGhlIGNoYW5nZSwgaXMgdGhhdCBgc2JfZ2V0YmxrYCBhbGxvY2F0ZXMgbmV3IGJ1ZmZlciBoZWFkcy9mb2xpb3MgYW5kIGNhbiBibG9jayB3aGlsZSBkb2luZyBzby4gYHNiX2ZpbmRfZ2V0X2Jsb2NrYCwgb24gdGhlIG90aGVyIGhhbmQsICpvbmx5KiBsb29rcyBmb3IgZXhpc3RpbmcgYmxvY2tzLCBhdm9pZGluZyBhbGxvY2F0aW9uIGFuZCBsb2NraW5nLiBCaW5nbyEgVGhhdCBzY3JlYW1zIFwiZGVhZGxvY2sgZml4XCIgdG8gbWUsIGxpa2VseSByZWxhdGVkIHRvIHBvdGVudGlhbCBsb2NrIGludmVyc2lvbnMgd2l0aGluIGBibG9ja19yZWFkX2Z1bGxfZm9saW8oKWAgb3Igc2ltaWxhciBmdW5jdGlvbnMuIFNtYXJ0IG1vdmUuXG5cbk5vdywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuLi4gaXMgdGhpcyBjb2RlIHBhdGggZXZlbiByZWxldmFudCB0byBvdXIgZWZmb3J0cz8gWWVzLCBleHQ0IGlzIGRlZmluaXRlbHkgYSBwcmltZSB0YXJnZXQuIFN0YW5kYXJkIFFFTVUvR0NFIHN5emthbGxlciBzZXR1cHMgd2lsbCBlYXNpbHkgaGl0IGV4dDQsIGFuZCBpdCdzIHJlYWRpbHkgbW91bnRhYmxlLiBUaGF0J3MgYSBodWdlIFwieWVzXCIgZm9yIHJlYWNoYWJpbGl0eS4gVGhpcyBpcyAqY29yZSogZmlsZXN5c3RlbSBjb2RlLCBzbyBhIGNoYW5nZSBoZXJlIGlzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBXb3J0aEZ1enppbmcgPSBUcnVlLlxuXG5JJ2xsIHdhbnQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIG5hbWUgYWdhaW4sIGNvbmZpcm1pbmcgdGhhdCB0aGlzIGlzIGBfX2V4dDRfZ2V0X2lub2RlX2xvY2AuIEkgc2hvdWxkIGFsc28gZXhhbWluZSB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLCBhbmQgYW55IG5lYXJieSBmdW5jdGlvbnMsIGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjI0OjQyLjEwNDIyNjU3OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA1ODEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2V4dDRfZ2V0X2lub2RlX2xvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9NDc4Mz1zdGF0aWMgaW50IGV4dDRfZmlsbF9yYXdfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00ODgzLSAqL1xcbmZzL2V4dDQvaW5vZGUuYzo0ODg0OnN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuZnMvZXh0NC9pbm9kZS5jLTQ4ODUtXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MDMxLVxcbmZzL2V4dDQvaW5vZGUuYzo1MDMyOnN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvaW5vZGUuYy01MDMzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTAzNy1cXG5mcy9leHQ0L2lub2RlLmM6NTAzODpcXHRyZXQgPSBfX2V4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUtXFx1MDAzZWlfaW5vLCBOVUxMLCBpbG9jLFxcbmZzL2V4dDQvaW5vZGUuYy01MDM5LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZlcnJfYmxrKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MDQ4PWludCBleHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MDUyLVxcbmZzL2V4dDQvaW5vZGUuYzo1MDUzOlxcdHJldCA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLVxcdTAwM2VpX3NiLCBpbm9kZS1cXHUwMDNlaV9pbm8sIGlub2RlLCBpbG9jLFxcbmZzL2V4dDQvaW5vZGUuYy01MDU0LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZlcnJfYmxrKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MTE1PWludCBleHQ0X2dldF9mY19pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTExNy17XFxuZnMvZXh0NC9pbm9kZS5jOjUxMTg6XFx0cmV0dXJuIF9fZXh0NF9nZXRfaW5vZGVfbG9jKHNiLCBpbm8sIE5VTEwsIGlsb2MsIE5VTEwpO1xcbmZzL2V4dDQvaW5vZGUuYy01MTE5LX1cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MzIxPXN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTM3OC1cXG5mcy9leHQ0L2lub2RlLmM6NTM3OTpcXHRyZXQgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbm9kZS5jLTUzODAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTkxMT1pbnQgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU5MjAtXFxuZnMvZXh0NC9pbm9kZS5jOjU5MjE6XFx0ZXJyID0gX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5vZGUuYy01OTIyLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjI0OjQyLjE1MTI5MDEyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTg1NDkxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpbm9kZSBsb2NhdGlvbiByZXRyaWV2YWwgaW4gZXh0NCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBmb3IgZmV0Y2hpbmcgaW5vZGUgbG9jYXRpb25zLCBzcGVjaWZpY2FsbHkgYGV4dDRfZ2V0X2lub2RlX2xvY2AgYW5kIGl0cyBpbnRlcm5hbCBmdW5jdGlvbiBgX19leHQ0X2dldF9pbm9kZV9sb2NgLiBJJ20gZm9jdXNpbmcgb24gdGhlaXIgaW50ZXJhY3Rpb24uIEkgc2VlIGEgc3BlY2lmaWMgY29uZGl0aW9uYWwgY2hlY2sgb24gbGluZSA0OTM5LCB3aGVyZSB0aGUgY29kZSBjaGVja3MgaWYgdGhlIGlub2RlIGlzIHByZXNlbnQsIGFuZCB0aGVuIGlmIGl0ICpkb2Vzbid0KiBoYXZlIHRoZSBgRVhUNF9TVEFURV9YQVRUUmAgc3RhdGUgc2V0LiBXaXRoaW4gdGhhdCBjb25kaXRpb25hbCBibG9jaywgYF9fZXh0NF9nZXRfaW5vZGVfbG9jYCBnZXRzIGNhbGxlZCBieSBgZXh0NF9nZXRfaW5vZGVfbG9jYCB3aGVuIHRoZSBpbm9kZSBwb2ludGVyIGlzbid0IE5VTEwuIEl0IGlzIHdvcnRoIG5vdGluZyBoZXJlIHRoYXQgYGlub2RlICE9IE5VTExgIGlzIHRoZSBjb25kaXRpb24gdG8gaGF2ZSBgX19leHQ0X2dldF9pbm9kZV9sb2NgIGNhbGxlZCBieSBgZXh0NF9nZXRfaW5vZGVfbG9jYC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBvZiBpbnRlcmVzdC4gTm93LCBJIHNob3VsZCBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBleHQ0X2dldF9pbm9kZV9sb2NgIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgd2l0aGluIHRoZSBmaWxlc3lzdGVtJ3Mgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjI0OjQ0LjM2OTg0MTU5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1MTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2dldF9pbm9kZV9sb2NcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zMTkyPWV4dGVybiBpbnQgZXh0NF9jaGFuZ2VfaW5vZGVfam91cm5hbF9mbGFnKHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xcbmZzL2V4dDQvZXh0NC5oOjMxOTM6aW50IGV4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKTtcXG5mcy9leHQ0L2V4dDQuaC0zMTk0LWludCBleHQ0X2dldF9pbm9kZV9sb2Nfbm9pbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTUyMzA9c3RhdGljIGludCBleHQ0X2lvbWFwX3hhdHRyX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTI0Mi1cXG5mcy9leHQ0L2V4dGVudHMuYzo1MjQzOlxcdFxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNTI0NC1cXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTExMD1pbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExNy1cXG5mcy9leHQ0L2lubGluZS5jOjExODpcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTE5LVxcdGlmIChlcnJvcikge1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xNDM9aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTU2LVxcbmZzL2V4dDQvaW5saW5lLmM6MTU3OlxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNTgtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0yNjY9c3RhdGljIGludCBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yNzgtXFxuZnMvZXh0NC9pbmxpbmUuYzoyNzk6XFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpcy5pbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTI4MC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTMzNT1zdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTM1MS1cXG5mcy9leHQ0L2lubGluZS5jOjM1MjpcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlzLmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMzUzLVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NDM1PXN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy00NTQtXFxuZnMvZXh0NC9pbmxpbmUuYzo0NTU6XFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpcy5pbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTQ1Ni1cXHRpZiAoZXJyb3IpIHtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NTAyPXN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01MTgtXFxuZnMvZXh0NC9pbmxpbmUuYzo1MTk6XFx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy01MjAtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NTcxPXN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNTkxLVxcbmZzL2V4dDQvaW5saW5lLmM6NTkyOlxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtNTkzLVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTY5NT1pbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy03MDYtXFxuZnMvZXh0NC9pbmxpbmUuYzo3MDc6XFx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy03MDgtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NzkzPWludCBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTgwNS1cXHRpZiAobGlrZWx5KGNvcGllZCkpIHtcXG5mcy9leHQ0L2lubGluZS5jOjgwNjpcXHRcXHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTgwNy1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTExOTg9aW50IGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMjA0LVxcbmZzL2V4dDQvaW5saW5lLmM6MTIwNTpcXHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMjA2LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEyNjc9aW50IGV4dDRfaW5saW5lZGlyX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMjgzLVxcbmZzL2V4dDQvaW5saW5lLmM6MTI4NDpcXHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTEyODUtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTM4OD1pbnQgZXh0NF9yZWFkX2lubGluZV9kaXIoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE0MDItXFxuZnMvZXh0NC9pbmxpbmUuYzoxNDAzOlxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTQwNC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xNTI4PXZvaWQgKmV4dDRfcmVhZF9pbmxpbmVfbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNTMzLVxcbmZzL2V4dDQvaW5saW5lLmM6MTUzNDpcXHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTE1MzUtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTU1Nz1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZ2V0X2ZpcnN0X2lubGluZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNTYyLVxcbmZzL2V4dDQvaW5saW5lLmM6MTU2MzpcXHQqcmV0dmFsID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNTY0LVxcdGlmICgqcmV0dmFsKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xNTc3PWludCBleHQ0X3RyeV9jcmVhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTU4My1cXG5mcy9leHQ0L2lubGluZS5jOjE1ODQ6XFx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNTg1LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE2MTA9c3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2ZpbmRfaW5saW5lX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNjI1LVxcbmZzL2V4dDQvaW5saW5lLmM6MTYyNjpcXHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcXHUwMDI2aXMuaWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNjI3LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE2NzM9aW50IGV4dDRfZGVsZXRlX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNjgyLVxcbmZzL2V4dDQvaW5saW5lLmM6MTY4MzpcXHRlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNjg0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE3NTY9Ym9vbCBlbXB0eV9pbmxpbmVfZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgKmhhc19pbmxpbmVfZGF0YSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTc2NS1cXG5mcy9leHQ0L2lubGluZS5jOjE3NjY6XFx0ZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGRpciwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTc2Ny1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE4MzA9aW50IGV4dDRfaW5saW5lX2RhdGFfaW9tYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlvbWFwICppb21hcClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTgzOS1cXG5mcy9leHQ0L2lubGluZS5jOjE4NDA6XFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTE4NDEtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xODYyPWludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTg5Mi1cXG5mcy9leHQ0L2lubGluZS5jOjE4OTM6XFx0aWYgKChlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpcy5pbG9jKSkgIT0gMClcXG5mcy9leHQ0L2lubGluZS5jLTE4OTQtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE5NzQ9aW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xOTk5LVxcdGlsb2MuYmggPSBOVUxMO1xcbmZzL2V4dDQvaW5saW5lLmM6MjAwMDpcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMjAwMS1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDc4Mz1zdGF0aWMgaW50IGV4dDRfZmlsbF9yYXdfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00ODgzLSAqL1xcbmZzL2V4dDQvaW5vZGUuYzo0ODg0OnN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuZnMvZXh0NC9pbm9kZS5jLTQ4ODUtXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MDMyPXN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUwMzctXFxuZnMvZXh0NC9pbm9kZS5jOjUwMzg6XFx0cmV0ID0gX19leHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLVxcdTAwM2VpX2lubywgTlVMTCwgaWxvYyxcXG5mcy9leHQ0L2lub2RlLmMtNTAzOS1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZXJyX2Jsayk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTA0Ny1cXG5mcy9leHQ0L2lub2RlLmM6NTA0ODppbnQgZXh0NF9nZXRfaW5vZGVfbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXFxuZnMvZXh0NC9pbm9kZS5jLTUwNDkte1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUwNTItXFxuZnMvZXh0NC9pbm9kZS5jOjUwNTM6XFx0cmV0ID0gX19leHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLVxcdTAwM2VpX2lubywgaW5vZGUsIGlsb2MsXFxuZnMvZXh0NC9pbm9kZS5jLTUwNTQtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmVycl9ibGspO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUwNjMtLypcXG5mcy9leHQ0L2lub2RlLmM6NTA2NDogKiBleHQ0X2dldF9pbm9kZV9sb2Nfbm9pbygpIGlzIGEgYmVzdC1lZmZvcnQgdmFyaWFudCBvZiBleHQ0X2dldF9pbm9kZV9sb2MoKS5cXG5mcy9leHQ0L2lub2RlLmMtNTA2NS0gKiBJdCBsb29rcyB1cCB0aGUgaW5vZGUgdGFibGUgYmxvY2sgaW4gdGhlIGJ1ZmZlciBjYWNoZSBhbmQgcmV0dXJucyAtRUFHQUlOIGlmXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTExNT1pbnQgZXh0NF9nZXRfZmNfaW5vZGVfbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUxMTcte1xcbmZzL2V4dDQvaW5vZGUuYzo1MTE4OlxcdHJldHVybiBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzYiwgaW5vLCBOVUxMLCBpbG9jLCBOVUxMKTtcXG5mcy9leHQ0L2lub2RlLmMtNTExOS19XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NjUwMT1leHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02NTA5LVxcbmZzL2V4dDQvaW5vZGUuYzo2NTEwOlxcdGVyciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgaWxvYyk7XFxuZnMvZXh0NC9pbm9kZS5jLTY1MTEtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz03MTY9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldHByb2plY3Qoc3RydWN0IGlub2RlICppbm9kZSwgX191MzIgcHJvamlkKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTc1MC1cXG5mcy9leHQ0L2lvY3RsLmM6NzUxOlxcdGVyciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW9jdGwuYy03NTItXFx0aWYgKGVycilcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz02NDY9ZXh0NF94YXR0cl9pYm9keV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNjU4LVxcdFxcdHJldHVybiAtRU5PREFUQTtcXG5mcy9leHQ0L3hhdHRyLmM6NjU5OlxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC94YXR0ci5jLTY2MC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9Nzg5PWV4dDRfeGF0dHJfaWJvZHlfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTc5OC1cXHRcXHRyZXR1cm4gMDtcXG5mcy9leHQ0L3hhdHRyLmM6Nzk5OlxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC94YXR0ci5jLTgwMC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9ODY2PWludCBleHQ0X2dldF9pbm9kZV91c2FnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90ICp1c2FnZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy04NzgtXFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikpIHtcXG5mcy9leHQ0L3hhdHRyLmM6ODc5OlxcdFxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQveGF0dHIuYy04ODAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xMTcxPWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTE4Ny1cXHRlbHNlIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTE4ODpcXHRcXHRlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MocGFyZW50LCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC94YXR0ci5jLTExODktXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI2MDc9c3RhdGljIGludCBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNjU3LVxcbmZzL2V4dDQveGF0dHIuYzoyNjU4OlxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMtXFx1MDAzZWlsb2MpO1xcbmZzL2V4dDQveGF0dHIuYy0yNjU5LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yODc4PWludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI4OTctXFxuZnMvZXh0NC94YXR0ci5jOjI4OTg6XFx0XFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjg5OS1cXHRcXHRpZiAoZXJyb3IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NDQuNDE3Mzk2NzcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NzgwMzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEVYVDQgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGV4dDQgZmlsZXN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgbWFpbiBLY29uZmlnIGZpbGUgZm9yIGEgZ2VuZXJhbCBvdmVydmlldyDigJMgYEVYVDRfRlNgIHNob3VsZCBiZSB0aGUga2V5IHN5bWJvbC4gVGhlbiwgdG8gZ2V0IHRoZSBzcGVjaWZpY3MgYW5kIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IHN5bWJvbCwgSSdsbCBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGV4dDQtc3BlY2lmaWMgS2NvbmZpZyBmaWxlIGxvY2F0ZWQgd2l0aGluIHRoZSBmaWxlc3lzdGVtJ3MgZGlyZWN0b3J5OiBgZnMvZXh0NC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGV0YWlsZWQgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gZXh0NC4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgd2F5IHRvIHRyYWNlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdoaWNoIEkgYWxyZWFkeSBrbm93IVxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NDYuNDA1MjAyNTIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEVYVDRfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDU6XFx0XFx0c2VsZWN0IEpCRDJcXG4gICA2OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA5OlxcdFxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXFxuICAxNDpcXHRcXHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcXG4gIDE1OlxcdFxcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxcbiAgMTY6XFx0XFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcXG4gIDE3OlxcdFxcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXFxuICAxODpcXHRcXHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxcbiAgMTk6XFx0XFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XFxuICAyMDpcXHRcXHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcXG4gIDIzOlxcdFxcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxcbiAgMjQ6XFx0XFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxcbiAgMjU6XFx0XFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XFxuICAyNjpcXHRcXHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xcbiAgMjc6XFx0XFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxcbiAgMjg6XFx0XFx0ICBjb21wYXRpYmxlLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcXG4gIDMxOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuICAzNjpcXHRcXHRib29sIFxcXCJVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gRVhUMl9GUz1uXFxuICAzOTpcXHRcXHRkZWZhdWx0IHlcXG4gIDQwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NDYuNDA1MjgxMTUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMzI0MTY1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnM6IGBfX2V4dDRfZ2V0X2lub2RlX2xvY2AgYW5kIGBleHQ0X2dldF9pbm9kZV9sb2NgLiBUaG9zZSBhcmUgbXkgZm9jdXMgcG9pbnRzIGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLCBgRVhUNF9GU2AgaXMgZW5hYmxlZCwgd2hpY2ggaXMgY3J1Y2lhbCwgc28gdGhpcyBhcmVhIGlzIGluIHNjb3BlLlxuXG5UaGUgc3lzdGVtIGZsYWdnZWQgdGhpcyBhcyB3b3J0aCBmdXp6aW5nLCB3aGljaCBtZWFucyBJIHNob3VsZCBkaWcgZGVlcGVyLiBMZXQgbWUgY29uZmlybTogVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgaG93IHRoZSBleHQ0IGlub2RlIGxvY2F0aW9uIGlzIGxvb2tlZCB1cCwgc3dpdGNoaW5nIHRvIGBzYl9maW5kX2dldF9ibG9ja2Agd2hpY2ggaXMgbm9uLWJsb2NraW5nLCB0byBwcmV2ZW50IGRlYWRsb2Nrcy4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0J3MgYWx0ZXJpbmcgdGhlIGZ1bmRhbWVudGFsIGJsb2NrIGxvb2t1cCBhbmQgY2FjaGluZyBtZWNoYW5pc20gd2l0aGluIGBleHQ0YCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaW5vZGUgYml0bWFwIHJlYWRzLiBJdCdzIHRvdWNoaW5nIGBfX2V4dDRfZ2V0X2lub2RlX2xvY2Agd2l0aGluIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlLiBUaGlzIGlzIGEgY29yZSBjaGFuZ2UuIFN3aXRjaGluZyBmcm9tIGBzYl9nZXRibGtgIHRvIGBzYl9maW5kX2dldF9ibG9ja2AgaXMgYSBub3RhYmxlIHNoaWZ0IGluIGhvdyB0aGUgZmlsZSBzeXN0ZW0gaGFuZGxlcyBwb3RlbnRpYWwgY29udGVudGlvbi5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBhbGwgdGhlIGRldGFpbHMgbGluZSB1cC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMganVzdGlmaWVkLiBUaGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYxMCwiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDo1Mi41Mzc3MDE0MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTM0MzA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZXh0NF9nZXRfaW5vZGVfbG9jXCIsXG4gICAgXCJleHQ0X2dldF9pbm9kZV9sb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBidWZmZXIgY2FjaGUgbG9va3VwIGJlaGF2aW9yIGluIF9fZXh0NF9nZXRfaW5vZGVfbG9jKCkgYnkgdXNpbmcgc2JfZmluZF9nZXRfYmxvY2soKSBpbnN0ZWFkIG9mIHNiX2dldGJsaygpIHRvIGF2b2lkIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2Nrcy4gVGhpcyBpcyByZWFjaGFibGUsIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgaW5vZGUgYWxsb2NhdGlvbiwgcmVhZCwgYW5kIHdyaXRlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2V4dDRfZ2V0X2lub2RlX2xvY1wiLFxuICAgIFwiZXh0NF9nZXRfaW5vZGVfbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnVmZmVyIGNhY2hlIGxvb2t1cCBiZWhhdmlvciBpbiBfX2V4dDRfZ2V0X2lub2RlX2xvYygpIGJ5IHVzaW5nIHNiX2ZpbmRfZ2V0X2Jsb2NrKCkgaW5zdGVhZCBvZiBzYl9nZXRibGsoKSB0byBhdm9pZCBsb2NrIGludmVyc2lvbiBkZWFkbG9ja3MuIFRoaXMgaXMgcmVhY2hhYmxlLCBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gdmVyaWZ5IGlub2RlIGFsbG9jYXRpb24sIHJlYWQsIGFuZCB3cml0ZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NTIuNjE5MDUxNjE0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY5Nzc2MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NTIuNjE5NjM4MzIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTc2OTE4NTY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBgc2JfZ2V0YmxrKClgIHRvIGBzYl9maW5kX2dldF9ibG9jaygpYCBpbiBgX19leHQ0X2dldF9pbm9kZV9sb2MoKWAgd2l0aGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGlzIHJlcGxhY2VzIGEgcG90ZW50aWFsbHkgYmxvY2tpbmcgYnVmZmVyIGFsbG9jYXRpb24gd2l0aCBhIG5vbi1ibG9ja2luZyBwYWdlL2J1ZmZlciBjYWNoZSBsb29rdXAgdG8gYXZvaWQgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGZvbGlvIGxvY2tzIGFuZCBidWZmZXIgaGVhZCBsb2Nrcy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY3VycmVuY3kvbG9ja2luZy1yZWxhdGVkIChkZXRlY3RhYmxlIGJ5IExPQ0tERVApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOWM5N2UxNjc4ZDQyOGU3Y2FiNzJiNDkxYTc3Y2Q2NzkxYzgwODA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMToyNDozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggYmQ0Yjc3OGRmOWViMi4uMTNlM2NiODI5NDYxOSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNDk0Miw4ICs0OTQyLDEyIEBAIHN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXG4gXG4gXHRcdHN0YXJ0ID0gaW5vZGVfb2Zmc2V0IFx1MDAyNiB+KGlub2Rlc19wZXJfYmxvY2sgLSAxKTtcbiBcbi1cdFx0LyogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gKi9cbi1cdFx0Yml0bWFwX2JoID0gc2JfZ2V0YmxrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7XG4rXHRcdC8qXG4rXHRcdCAqIElzIHRoZSBpbm9kZSBiaXRtYXAgaW4gY2FjaGU/IE5vbi1ibG9ja2luZyBsb29rdXA6IGJoIGFib3ZlXG4rXHRcdCAqIGlzIGxvY2tlZCwgYW5kIGJsb2NraW5nIGhlcmUgd291bGQgZm9saW9fbG9jaygpIGFnYWluc3QgYVxuK1x0XHQgKiBibG9ja19yZWFkX2Z1bGxfZm9saW8oKSB0aGF0IGxvY2tzIGJoIHRoZSBvdGhlciB3YXkgcm91bmQuXG4rXHRcdCAqL1xuK1x0XHRiaXRtYXBfYmggPSBzYl9maW5kX2dldF9ibG9jayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpO1xuIFx0XHRpZiAodW5saWtlbHkoIWJpdG1hcF9iaCkpXG4gXHRcdFx0Z290byBtYWtlX2lvO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NTIuNjE5NjQwMTYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MjUwODAwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uOiBFeHQ0IElub2RlLmMgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gYXNzZXNzIHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIHNlZS4uLiB0aGUgZGlmZiBpcyBpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgbGluZSA0OTQyLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgcmVwbGFjZWQgYHNiX2dldGJsaygpYCB3aXRoIGBzYl9maW5kX2dldF9ibG9jaygpYCBmb3IgcmV0cmlldmluZyB0aGUgaW5vZGUgYml0bWFwIGJsb2NrLiBUaGUgY29tbWVudCBtZW50aW9ucyBub24tYmxvY2tpbmcgbG9va3VwIGFuZCBhIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpbyB3aXRoIGBibG9ja19yZWFkX2Z1bGxfZm9saW8oKWAuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHdvcnRoIGEgY2xvc2VyIGxvb2suIERlYWRsb2NrIGF2b2lkYW5jZSBpcyBhbHdheXMgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IGluIGEgZmlsZSBzeXN0ZW0gY29udGV4dC4gYHNiX2ZpbmRfZ2V0X2Jsb2NrKClgIHN1Z2dlc3RzIHRoZXkncmUgbm93IHRyeWluZyB0byByZXRyaWV2ZSB0aGUgYmxvY2sgZnJvbSB0aGUgYnVmZmVyIGNhY2hlIGluIGEgbm9uLWJsb2NraW5nIG1hbm5lci4gSWYgaXQncyBub3QgcHJlc2VudCwgaXQnbGwgdHJpZ2dlciBhbiBJL08gcGF0aCBlbHNld2hlcmUsIEknZCBndWVzcy5cblxuR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGxvdy1sZXZlbCBibG9jayByZXRyaWV2YWwgYW5kIGEgY3JpdGljYWwgcGF0aCBpbiBleHQ0J3MgaW5vZGUgb3BlcmF0aW9ucywgYW5kIHRoZSBleHBsaWNpdCBtZW50aW9uIG9mIGF2b2lkaW5nIGEgbG9jayBvcmRlcmluZyBpc3N1ZSB3aXRoIGEgcG90ZW50aWFsbHkgYmxvY2tpbmcgZnVuY3Rpb24sIHRoaXMgYWJzb2x1dGVseSB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHBvc3NpYmlsaXR5IG9mIG1pc3NlZCBsb2NraW5nLCBpbmNvcnJlY3QgdXNhZ2Ugb2YgYnVmZmVyIGhlYWRzLCBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGludHJvZHVjZWQgYnkgdGhlIG5ldyBub24tYmxvY2tpbmcgbG9va3VwIG1ldGhvZCBpcyB2ZXJ5IHJlYWwuIEl0IGFsc28gbWlnaHQgYmUgd29ydGh3aGlsZSB0byBzZWUgaWYgYW55IG90aGVyIHNpbWlsYXIgY2FsbHMgZXhpc3QuIFdlIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGhvdyBgc2JfZmluZF9nZXRfYmxvY2tgIGlzIGhhbmRsZWQgaW50ZXJuYWxseSwgYW5kIHNlZSBob3cgdGhlIEkvTyBwYXRoIGlzIHByb3RlY3RlZCBvciBjb29yZGluYXRlZC4gVGhpcyBjaGFuZ2UgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgdW5kZXIgS01TQU4uIEkgdGhpbmsgd2UgbmVlZCB0byB0aHJvdyBzb21lIGZ1enppbmcgY3ljbGVzIGF0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDo1Ni4xNDQ3MjM2NDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0OTIwOlxcdFxcbjQ5MjE6XFx0XFx0YmggPSBzYl9nZXRibGsoc2IsIGJsb2NrKTtcXG40OTIyOlxcdFxcdGlmICh1bmxpa2VseSghYmgpKVxcbjQ5MjM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDkyNDpcXHRcXHRpZiAoZXh0NF9idWZmZXJfdXB0b2RhdGUoYmgpKVxcbjQ5MjU6XFx0XFx0XFx0Z290byBoYXNfYnVmZmVyO1xcbjQ5MjY6XFx0XFxuNDkyNzpcXHRcXHRsb2NrX2J1ZmZlcihiaCk7XFxuNDkyODpcXHRcXHRpZiAoZXh0NF9idWZmZXJfdXB0b2RhdGUoYmgpKSB7XFxuNDkyOTpcXHRcXHRcXHQvKiBTb21lb25lIGJyb3VnaHQgaXQgdXB0b2RhdGUgd2hpbGUgd2Ugd2FpdGVkICovXFxuNDkzMDpcXHRcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG40OTMxOlxcdFxcdFxcdGdvdG8gaGFzX2J1ZmZlcjtcXG40OTMyOlxcdFxcdH1cXG40OTMzOlxcdFxcbjQ5MzQ6XFx0XFx0LypcXG40OTM1OlxcdFxcdCAqIElmIHdlIGhhdmUgYWxsIGluZm9ybWF0aW9uIG9mIHRoZSBpbm9kZSBpbiBtZW1vcnkgYW5kIHRoaXNcXG40OTM2OlxcdFxcdCAqIGlzIHRoZSBvbmx5IHZhbGlkIGlub2RlIGluIHRoZSBibG9jaywgd2UgbmVlZCBub3QgcmVhZCB0aGVcXG40OTM3OlxcdFxcdCAqIGJsb2NrLlxcbjQ5Mzg6XFx0XFx0ICovXFxuNDkzOTpcXHRcXHRpZiAoaW5vZGUgXFx1MDAyNlxcdTAwMjYgIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikpIHtcXG40OTQwOlxcdFxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoO1xcbjQ5NDE6XFx0XFx0XFx0aW50IGksIHN0YXJ0O1xcbjQ5NDI6XFx0XFxuNDk0MzpcXHRcXHRcXHRzdGFydCA9IGlub2RlX29mZnNldCBcXHUwMDI2IH4oaW5vZGVzX3Blcl9ibG9jayAtIDEpO1xcbjQ5NDQ6XFx0XFxuNDk0NTpcXHRcXHRcXHQvKlxcbjQ5NDY6XFx0XFx0XFx0ICogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gTm9uLWJsb2NraW5nIGxvb2t1cDogYmggYWJvdmVcXG40OTQ3OlxcdFxcdFxcdCAqIGlzIGxvY2tlZCwgYW5kIGJsb2NraW5nIGhlcmUgd291bGQgZm9saW9fbG9jaygpIGFnYWluc3QgYVxcbjQ5NDg6XFx0XFx0XFx0ICogYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKCkgdGhhdCBsb2NrcyBiaCB0aGUgb3RoZXIgd2F5IHJvdW5kLlxcbjQ5NDk6XFx0XFx0XFx0ICovXFxuNDk1MDpcXHRcXHRcXHRiaXRtYXBfYmggPSBzYl9maW5kX2dldF9ibG9jayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpO1xcbjQ5NTE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFiaXRtYXBfYmgpKVxcbjQ5NTI6XFx0XFx0XFx0XFx0Z290byBtYWtlX2lvO1xcbjQ5NTM6XFx0XFxuNDk1NDpcXHRcXHRcXHQvKlxcbjQ5NTU6XFx0XFx0XFx0ICogSWYgdGhlIGlub2RlIGJpdG1hcCBpc24ndCBpbiBjYWNoZSB0aGVuIHRoZVxcbjQ5NTY6XFx0XFx0XFx0ICogb3B0aW1pc2F0aW9uIG1heSBlbmQgdXAgcGVyZm9ybWluZyB0d28gcmVhZHMgaW5zdGVhZFxcbjQ5NTc6XFx0XFx0XFx0ICogb2Ygb25lLCBzbyBza2lwIGl0LlxcbjQ5NTg6XFx0XFx0XFx0ICovXFxuNDk1OTpcXHRcXHRcXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaXRtYXBfYmgpKSB7XFxuNDk2MDpcXHRcXHRcXHRcXHRicmVsc2UoYml0bWFwX2JoKTtcXG40OTYxOlxcdFxcdFxcdFxcdGdvdG8gbWFrZV9pbztcXG40OTYyOlxcdFxcdFxcdH1cXG40OTYzOlxcdFxcdFxcdGZvciAoaSA9IHN0YXJ0OyBpIFxcdTAwM2Mgc3RhcnQgKyBpbm9kZXNfcGVyX2Jsb2NrOyBpKyspIHtcXG40OTY0OlxcdFxcdFxcdFxcdGlmIChpID09IGlub2RlX29mZnNldClcXG40OTY1OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ5NjY6XFx0XFx0XFx0XFx0aWYgKGV4dDRfdGVzdF9iaXQoaSwgYml0bWFwX2JoLVxcdTAwM2ViX2RhdGEpKVxcbjQ5Njc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDk2ODpcXHRcXHRcXHR9XFxuNDk2OTpcXHRcXHRcXHRicmVsc2UoYml0bWFwX2JoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NTYuMTQ1NDcwMDI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNDMzMzQwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaGFuZ2U6IEEgRGVlcGVyIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJ3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSBidWZmZXIgaGVhZHMgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBgX19leHQ0X2dldF9pbm9kZV9sb2MoKWAuIFByZXZpb3VzbHksIHdlIHVzZWQgYHNiX2dldGJsaygpYCwgd2hpY2gsIEkga25vdywgaXMgYSBibG9ja2luZyBvcGVyYXRpb24g4oCTIGl0IGZpbmRzIG9yICphbGxvY2F0ZXMqIGEgYnVmZmVyIGhlYWQsIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gVGhhdCBhbGxvY2F0aW9uIGNhbiBpbnRyb2R1Y2UgZGVsYXlzLCB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgYWxsb2NhdGlvbi4gTm93LCB3ZSdyZSBzd2FwcGluZyB0aGF0IG91dCB3aXRoIGBzYl9maW5kX2dldF9ibG9jaygpYC4gVGhhdCdzIGEgY2xldmVyIG1vdmUuIFRoaXMgZnVuY3Rpb24gKm9ubHkqIGxvb2tzIGZvciB0aGUgYnVmZmVyIGhlYWQgaW4gdGhlIHBhZ2Ugb3IgYnVmZmVyIGNhY2hlOyBpdCBkb2Vzbid0IGFsbG9jYXRlIGFueXRoaW5nIGlmIGl0J3Mgbm90IHRoZXJlLCBzbyBubyBibG9ja2luZy5cblxuSWYgYHNiX2ZpbmRfZ2V0X2Jsb2NrYCBkb2Vzbid0IGZpbmQgdGhlIGJ1ZmZlciBoZWFkLCB3ZSBqdW1wIHRvIGBtYWtlX2lvYCwgd2hpY2ggcHJlc3VtYWJseSBoYW5kbGVzIHRoZSBJL08gdG8gZ2V0IGl0LiBJZiBpdCAqZG9lcyogZmluZCBpdCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgdXAtdG8tZGF0ZS4gYCFidWZmZXJfdXB0b2RhdGUoYml0bWFwX2JoKWAgYW5kIGlmIGl0IGlzbid0LCB3ZSBza2lwIG9wdGltaXphdGlvbiwgYW5kIG9mZiB0byBgbWFrZV9pb2Agd2UgZ28uIElmIGl0ICppcyogdXB0b2RhdGUsIHRoZW4gd2UgcmVhZCBgYml0bWFwX2JoLVx1MDAzZWJfZGF0YWAuIFNpbXBsZS4gVGhpcyBzZWVtcyB0byBiZSBhIGRlYWRsb2NrIGZpeCDigJMgYWRkcmVzc2luZyBhIGxvY2tpbmcgb3JkZXIgaXNzdWUgYmV0d2VlbiB0aGUgYnVmZmVyIGxvY2sgYW5kIHRoZSBmb2xpbyBsb2NrLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIG91ciBvdmVyYWxsIHN0YWJpbGl0eS5cblxuTm93LCB0aGUgbWFpbiBjb25jZXJuOiBhcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdpdGggdGhpcyBjaGFuZ2U/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYnVmZmVycyBhcmUgYmVpbmcgY3JlYXRlZC4gV2UncmUganVzdCBmaW5kaW5nIGFuIGV4aXN0aW5nIG9uZSwgb3IgZG9pbmcgdGhlIEkvTy5cbiogICBObyBrZXJuZWwtdG8tdXNlciBzcGFjZSBjb3B5aW5nIG1vZGlmaWNhdGlvbnMuXG4qICAgTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgYmVpbmcgcmVhZCBkaXJlY3RseS5cbiogICBgc2JfZmluZF9nZXRfYmxvY2tgIGlzIGVpdGhlciByZXR1cm5pbmcgYW4gZXhpc3RpbmcgYGJ1ZmZlcl9oZWFkYCAod2hpY2ggd2UgY2hlY2sgaXMgdmFsaWQpLCBvciBOVUxMLlxuKiAgIElmIHdlICpkbyogZ2V0IGEgYGJpdG1hcF9iaGAsIHdlIGNoZWNrIGl0LCBhbmQgdGhlbiBmb3IgYGJ1ZmZlcl91cHRvZGF0ZWAsIGlmIHRoZSBkYXRhIGlzIHVwdG9kYXRlLCBpdCdzIHNhZmUgdG8gcmVhZCBgYl9kYXRhYC4gSWYgbm90LCB3ZSBmYWxsIHRocm91Z2ggdG8gYG1ha2VfaW9gLlxuKiAgIElmIGl0J3Mgbm90IHByZXNlbnQgb3Igbm90IHVwLXRvLWRhdGUsIHdlIGhpdCBgbWFrZV9pb2AsIHdoaWNoIGhhbmRsZXMgdGhlIHJlYWQgb24gYGJoYC5cblxuSXQgc2VlbXMgc2FmZS4gVGhpcyBjaGFuZ2UgYXBwZWFycyB0byBqdXN0IGFkZHJlc3MgYSBwb3RlbnRpYWwgZGVhZGxvY2ssIHNwZWNpZmljYWxseSBhbiBBQkJBIGRlYWRsb2NrL2xvY2sgaW52ZXJzaW9uLiBBbmQgaXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy5cblxuTGV0J3MgY29uZmlybTpcblxuKiAgIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBnZXR0aW5nIHNlbnQgdG8gdXNlciBzcGFjZS5cbiogICBObyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuKiAgIE5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuKiAgIE5vIG5ldyBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoaXMgaXMgYWxsIGNvbnNpc3RlbnQgd2l0aCBLTVNBTiB2cy4gS0FTQU4gY29uc2lkZXJhdGlvbnMuIFdlJ3JlIHJlcGxhY2luZyBhIGJsb2NraW5nIG9wZXJhdGlvbiAoYHNiX2dldGJsaygpYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBvbmUgKGBzYl9maW5kX2dldF9ibG9jaygpYCksIHNvbHZpbmcgYSBsb2NrIGludmVyc2lvbiB0aGF0IGNvdWxkIGJlIGRldGVjdGVkIGJ5IExPQ0tERVAuIFNpbmNlIG5vIG5ldyB2dWxuZXJhYmlsaXRpZXMgaW4gdGVybXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrIHZhcmlhYmxlcywgb3Iga2VybmVsLXRvLXVzZXIgY29waWVzIGFyZSBiZWluZyBleHBvc2VkIG9yIG1vZGlmaWVkLCBLTVNBTiBmdXp6aW5nIGlzbid0IG5lZWRlZC4gUmVndWxhciBLQVNBTi9MT0NLREVQIGlzIGVub3VnaC4gRXhjZWxsZW50LiBMZXQncyBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBmb3JtYXR0ZWQuIFJlYWR5IHRvIHNldCByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjg3LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjI1OjAyLjM4ODgwNjIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGBzYl9nZXRibGsoKWAgdG8gYHNiX2ZpbmRfZ2V0X2Jsb2NrKClgIGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYCB3aXRoaW4gYGZzL2V4dDQvaW5vZGUuY2AuIFRoaXMgcmVwbGFjZXMgYSBwb3RlbnRpYWxseSBibG9ja2luZyBidWZmZXIgYWxsb2NhdGlvbiB3aXRoIGEgbm9uLWJsb2NraW5nIHBhZ2UvYnVmZmVyIGNhY2hlIGxvb2t1cCB0byBhdm9pZCBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gZm9saW8gbG9ja3MgYW5kIGJ1ZmZlciBoZWFkIGxvY2tzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jdXJyZW5jeS9sb2NraW5nLXJlbGF0ZWQgKGRldGVjdGFibGUgYnkgTE9DS0RFUCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgYHNiX2dldGJsaygpYCB0byBgc2JfZmluZF9nZXRfYmxvY2soKWAgaW4gYF9fZXh0NF9nZXRfaW5vZGVfbG9jKClgIHdpdGhpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhpcyByZXBsYWNlcyBhIHBvdGVudGlhbGx5IGJsb2NraW5nIGJ1ZmZlciBhbGxvY2F0aW9uIHdpdGggYSBub24tYmxvY2tpbmcgcGFnZS9idWZmZXIgY2FjaGUgbG9va3VwIHRvIGF2b2lkIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2sgYmV0d2VlbiBmb2xpbyBsb2NrcyBhbmQgYnVmZmVyIGhlYWQgbG9ja3MuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGNvbmN1cnJlbmN5L2xvY2tpbmctcmVsYXRlZCAoZGV0ZWN0YWJsZSBieSBMT0NLREVQKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaHVzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjrl65[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 21:02:28 +0000 UTC FinishedAt: 2026-09-06 21:25:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "1e64bde9-47b2-4137-a2f3-6d00b3b6e17d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__ext4_get_inode_loc", "ext4_get_inode_loc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfZ2V0X2lub2RlX2xvYyYjMzQ7LAogICAgJiMzNDtleHQ0X2dldF9pbm9kZV9sb2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGBzYl9nZXRibGsoKWAgdG8gYHNiX2ZpbmRfZ2V0X2Jsb2NrKClgIGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYCB3aXRoaW4gYGZzL2V4dDQvaW5vZGUuY2AuIFRoaXMgcmVwbGFjZXMgYSBwb3RlbnRpYWxseSBibG9ja2luZyBidWZmZXIgYWxsb2NhdGlvbiB3aXRoIGEgbm9uLWJsb2NraW5nIHBhZ2UvYnVmZmVyIGNhY2hlIGxvb2t1cCB0byBhdm9pZCBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gZm9saW8gbG9ja3MgYW5kIGJ1ZmZlciBoZWFkIGxvY2tzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY3VycmVuY3kvbG9ja2luZy1yZWxhdGVkIChkZXRlY3RhYmxlIGJ5IExPQ0tERVApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnVmZmVyIGNhY2hlIGxvb2t1cCBiZWhhdmlvciBpbiBfX2V4dDRfZ2V0X2lub2RlX2xvYygpIGJ5IHVzaW5nIHNiX2ZpbmRfZ2V0X2Jsb2NrKCkgaW5zdGVhZCBvZiBzYl9nZXRibGsoKSB0byBhdm9pZCBsb2NrIGludmVyc2lvbiBkZWFkbG9ja3MuIFRoaXMgaXMgcmVhY2hhYmxlLCBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gdmVyaWZ5IGlub2RlIGFsbG9jYXRpb24sIHJlYWQsIGFuZCB3cml0ZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY5Yzk3ZTE2NzhkNDI4ZTdjYWI3MmI0OTFhNzdjZDY3OTFjODA4MDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIxOjI0OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggYmQ0Yjc3OGRmOWViMi4uMTNlM2NiODI5NDYxOSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNDk0Miw4ICYjNDM7NDk0MiwxMiBAQCBzdGF0aWMgaW50IF9fZXh0NF9nZXRfaW5vZGVfbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuIFxuIFx0XHRzdGFydCA9IGlub2RlX29mZnNldCBcdTAwMjYgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7XG4gXG4tXHRcdC8qIElzIHRoZSBpbm9kZSBiaXRtYXAgaW4gY2FjaGU/ICovXG4tXHRcdGJpdG1hcF9iaCA9IHNiX2dldGJsayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElzIHRoZSBpbm9kZSBiaXRtYXAgaW4gY2FjaGU/IE5vbi1ibG9ja2luZyBsb29rdXA6IGJoIGFib3ZlXG4mIzQzO1x0XHQgKiBpcyBsb2NrZWQsIGFuZCBibG9ja2luZyBoZXJlIHdvdWxkIGZvbGlvX2xvY2soKSBhZ2FpbnN0IGFcbiYjNDM7XHRcdCAqIGJsb2NrX3JlYWRfZnVsbF9mb2xpbygpIHRoYXQgbG9ja3MgYmggdGhlIG90aGVyIHdheSByb3VuZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Yml0bWFwX2JoID0gc2JfZmluZF9nZXRfYmxvY2soc2IsIGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFiaXRtYXBfYmgpKVxuIFx0XHRcdGdvdG8gbWFrZV9pbztcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19leHQ0X2dldF9pbm9kZV9sb2MmIzM0OywKICAgICYjMzQ7ZXh0NF9nZXRfaW5vZGVfbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJ1ZmZlciBjYWNoZSBsb29rdXAgYmVoYXZpb3IgaW4gX19leHQ0X2dldF9pbm9kZV9sb2MoKSBieSB1c2luZyBzYl9maW5kX2dldF9ibG9jaygpIGluc3RlYWQgb2Ygc2JfZ2V0YmxrKCkgdG8gYXZvaWQgbG9jayBpbnZlcnNpb24gZGVhZGxvY2tzLiBUaGlzIGlzIHJlYWNoYWJsZSwgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIHZlcmlmeSBpbm9kZSBhbGxvY2F0aW9uLCByZWFkLCBhbmQgd3JpdGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmOWM5N2UxNjc4ZDQyOGU3Y2FiNzJiNDkxYTc3Y2Q2NzkxYzgwODA2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAyMToyNDozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBiZDRiNzc4ZGY5ZWIyLi4xM2UzY2I4Mjk0NjE5IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jCkBAIC00OTQyLDggJiM0Mzs0OTQyLDEyIEBAIHN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sCiAKIAkJc3RhcnQgPSBpbm9kZV9vZmZzZXQgJmFtcDsgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7CiAKLQkJLyogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gKi8KLQkJYml0bWFwX2JoID0gc2JfZ2V0YmxrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7CiYjNDM7CQkvKgomIzQzOwkJICogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gTm9uLWJsb2NraW5nIGxvb2t1cDogYmggYWJvdmUKJiM0MzsJCSAqIGlzIGxvY2tlZCwgYW5kIGJsb2NraW5nIGhlcmUgd291bGQgZm9saW9fbG9jaygpIGFnYWluc3QgYQomIzQzOwkJICogYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKCkgdGhhdCBsb2NrcyBiaCB0aGUgb3RoZXIgd2F5IHJvdW5kLgomIzQzOwkJICovCiYjNDM7CQliaXRtYXBfYmggPSBzYl9maW5kX2dldF9ibG9jayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpOwogCQlpZiAodW5saWtlbHkoIWJpdG1hcF9iaCkpCiAJCQlnb3RvIG1ha2VfaW87CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIGV4dDQgaW5vZGUgcmV0cmlldmFsIGluIGZzL2V4dDQvaW5vZGUuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBoZXJlLiBUaGUgZGlmZiBpbmRpY2F0ZXMgYSBtb2RpZmljYXRpb24gaW4gYGZzL2V4dDQvaW5vZGUuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYF9fZXh0NF9nZXRfaW5vZGVfbG9jKClgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxvb2tzIHRvIGJlIHJlcGxhY2luZyBgc2JfZ2V0YmxrYCB3aXRoIGBzYl9maW5kX2dldF9ibG9ja2Agd2hlbiBkZWFsaW5nIHdpdGggdGhlIGlub2RlIGJpdG1hcC4gT2theSwgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGlzIGxpbmUgaW4gdGhlIHNvdXJjZSBjb2RlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDQ5NDIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFsdGVyYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGlzIGlzIGFib3V0IG9wdGltaXphdGlvbjsgdXNpbmcgYHNiX2ZpbmRfZ2V0X2Jsb2NrYCBjb3VsZCBwb3RlbnRpYWxseSBieXBhc3MgYW4gdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBpZiB0aGUgYmxvY2sgaXMgYWxyZWFkeSBpbiB0aGUgYnVmZmVyIGNhY2hlLiBBbHRlcm5hdGl2ZWx5LCBjb3VsZCBpdCBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGJ1ZyByZWxhdGVkIHRvIGJsb2NrIHJldHJpZXZhbCBhbmQgY2FjaGluZz8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ5MjA6XHRcbjQ5MjE6XHRcdGJoID0gc2JfZ2V0YmxrKHNiLCBibG9jayk7XG40OTIyOlx0XHRpZiAodW5saWtlbHkoIWJoKSlcbjQ5MjM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40OTI0Olx0XHRpZiAoZXh0NF9idWZmZXJfdXB0b2RhdGUoYmgpKVxuNDkyNTpcdFx0XHRnb3RvIGhhc19idWZmZXI7XG40OTI2Olx0XG40OTI3Olx0XHRsb2NrX2J1ZmZlcihiaCk7XG40OTI4Olx0XHRpZiAoZXh0NF9idWZmZXJfdXB0b2RhdGUoYmgpKSB7XG40OTI5Olx0XHRcdC8qIFNvbWVvbmUgYnJvdWdodCBpdCB1cHRvZGF0ZSB3aGlsZSB3ZSB3YWl0ZWQgKi9cbjQ5MzA6XHRcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG40OTMxOlx0XHRcdGdvdG8gaGFzX2J1ZmZlcjtcbjQ5MzI6XHRcdH1cbjQ5MzM6XHRcbjQ5MzQ6XHRcdC8qXG40OTM1Olx0XHQgKiBJZiB3ZSBoYXZlIGFsbCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5vZGUgaW4gbWVtb3J5IGFuZCB0aGlzXG40OTM2Olx0XHQgKiBpcyB0aGUgb25seSB2YWxpZCBpbm9kZSBpbiB0aGUgYmxvY2ssIHdlIG5lZWQgbm90IHJlYWQgdGhlXG40OTM3Olx0XHQgKiBibG9jay5cbjQ5Mzg6XHRcdCAqL1xuNDkzOTpcdFx0aWYgKGlub2RlIFx1MDAyNlx1MDAyNiAhZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKSkge1xuNDk0MDpcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJpdG1hcF9iaDtcbjQ5NDE6XHRcdFx0aW50IGksIHN0YXJ0O1xuNDk0MjpcdFxuNDk0MzpcdFx0XHRzdGFydCA9IGlub2RlX29mZnNldCBcdTAwMjYgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7XG40OTQ0Olx0XG40OTQ1Olx0XHRcdC8qXG40OTQ2Olx0XHRcdCAqIElzIHRoZSBpbm9kZSBiaXRtYXAgaW4gY2FjaGU/IE5vbi1ibG9ja2luZyBsb29rdXA6IGJoIGFib3ZlXG40OTQ3Olx0XHRcdCAqIGlzIGxvY2tlZCwgYW5kIGJsb2NraW5nIGhlcmUgd291bGQgZm9saW9fbG9jaygpIGFnYWluc3QgYVxuNDk0ODpcdFx0XHQgKiBibG9ja19yZWFkX2Z1bGxfZm9saW8oKSB0aGF0IGxvY2tzIGJoIHRoZSBvdGhlciB3YXkgcm91bmQuXG40OTQ5Olx0XHRcdCAqL1xuNDk1MDpcdFx0XHRiaXRtYXBfYmggPSBzYl9maW5kX2dldF9ibG9jayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpO1xuNDk1MTpcdFx0XHRpZiAodW5saWtlbHkoIWJpdG1hcF9iaCkpXG40OTUyOlx0XHRcdFx0Z290byBtYWtlX2lvO1xuNDk1MzpcdFxuNDk1NDpcdFx0XHQvKlxuNDk1NTpcdFx0XHQgKiBJZiB0aGUgaW5vZGUgYml0bWFwIGlzbiYjMzk7dCBpbiBjYWNoZSB0aGVuIHRoZVxuNDk1NjpcdFx0XHQgKiBvcHRpbWlzYXRpb24gbWF5IGVuZCB1cCBwZXJmb3JtaW5nIHR3byByZWFkcyBpbnN0ZWFkXG40OTU3Olx0XHRcdCAqIG9mIG9uZSwgc28gc2tpcCBpdC5cbjQ5NTg6XHRcdFx0ICovXG40OTU5Olx0XHRcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJpdG1hcF9iaCkpIHtcbjQ5NjA6XHRcdFx0XHRicmVsc2UoYml0bWFwX2JoKTtcbjQ5NjE6XHRcdFx0XHRnb3RvIG1ha2VfaW87XG40OTYyOlx0XHRcdH1cbjQ5NjM6XHRcdFx0Zm9yIChpID0gc3RhcnQ7IGkgXHUwMDNjIHN0YXJ0ICYjNDM7IGlub2Rlc19wZXJfYmxvY2s7IGkmIzQzOyYjNDM7KSB7XG40OTY0Olx0XHRcdFx0aWYgKGkgPT0gaW5vZGVfb2Zmc2V0KVxuNDk2NTpcdFx0XHRcdFx0Y29udGludWU7XG40OTY2Olx0XHRcdFx0aWYgKGV4dDRfdGVzdF9iaXQoaSwgYml0bWFwX2JoLVx1MDAzZWJfZGF0YSkpXG40OTY3Olx0XHRcdFx0XHRicmVhaztcbjQ5Njg6XHRcdFx0fVxuNDk2OTpcdFx0XHRicmVsc2UoYml0bWFwX2JoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDU2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGV4dDQgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlcGxhY2luZyBgc2JfZ2V0YmxrYCB3aXRoIGBzYl9maW5kX2dldF9ibG9ja2Agd2l0aGluIGV4dDQmIzM5O3MgYF9fZXh0NF9nZXRfaW5vZGVfbG9jYCBmdW5jdGlvbi4gVGhlIGtleSBkaWZmZXJlbmNlLCBhbmQgdGhlIGxpa2VseSByZWFzb24gZm9yIHRoZSBjaGFuZ2UsIGlzIHRoYXQgYHNiX2dldGJsa2AgYWxsb2NhdGVzIG5ldyBidWZmZXIgaGVhZHMvZm9saW9zIGFuZCBjYW4gYmxvY2sgd2hpbGUgZG9pbmcgc28uIGBzYl9maW5kX2dldF9ibG9ja2AsIG9uIHRoZSBvdGhlciBoYW5kLCAqb25seSogbG9va3MgZm9yIGV4aXN0aW5nIGJsb2NrcywgYXZvaWRpbmcgYWxsb2NhdGlvbiBhbmQgbG9ja2luZy4gQmluZ28hIFRoYXQgc2NyZWFtcyAmIzM0O2RlYWRsb2NrIGZpeCYjMzQ7IHRvIG1lLCBsaWtlbHkgcmVsYXRlZCB0byBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb25zIHdpdGhpbiBgYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKClgIG9yIHNpbWlsYXIgZnVuY3Rpb25zLiBTbWFydCBtb3ZlLgoKTm93LCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4uLiBpcyB0aGlzIGNvZGUgcGF0aCBldmVuIHJlbGV2YW50IHRvIG91ciBlZmZvcnRzPyBZZXMsIGV4dDQgaXMgZGVmaW5pdGVseSBhIHByaW1lIHRhcmdldC4gU3RhbmRhcmQgUUVNVS9HQ0Ugc3l6a2FsbGVyIHNldHVwcyB3aWxsIGVhc2lseSBoaXQgZXh0NCwgYW5kIGl0JiMzOTtzIHJlYWRpbHkgbW91bnRhYmxlLiBUaGF0JiMzOTtzIGEgaHVnZSAmIzM0O3llcyYjMzQ7IGZvciByZWFjaGFiaWxpdHkuIFRoaXMgaXMgKmNvcmUqIGZpbGVzeXN0ZW0gY29kZSwgc28gYSBjaGFuZ2UgaGVyZSBpcyBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci4gV29ydGhGdXp6aW5nID0gVHJ1ZS4KCkkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIG5hbWUgYWdhaW4sIGNvbmZpcm1pbmcgdGhhdCB0aGlzIGlzIGBfX2V4dDRfZ2V0X2lub2RlX2xvY2AuIEkgc2hvdWxkIGFsc28gZXhhbWluZSB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLCBhbmQgYW55IG5lYXJieSBmdW5jdGlvbnMsIGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2V4dDRfZ2V0X2lub2RlX2xvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYz00NzgzPXN0YXRpYyBpbnQgZXh0NF9maWxsX3Jhd19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy00ODgzLSAqL1xuZnMvZXh0NC9pbm9kZS5jOjQ4ODQ6c3RhdGljIGludCBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbmZzL2V4dDQvaW5vZGUuYy00ODg1LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTAzMS1cbmZzL2V4dDQvaW5vZGUuYzo1MDMyOnN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9pbm9kZS5jLTUwMzMtXHRcdFx0XHRcdHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUwMzctXG5mcy9leHQ0L2lub2RlLmM6NTAzODpcdHJldCA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBOVUxMLCBpbG9jLFxuZnMvZXh0NC9pbm9kZS5jLTUwMzktXHRcdFx0XHRcdFx1MDAyNmVycl9ibGspO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MDQ4PWludCBleHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTA1Mi1cbmZzL2V4dDQvaW5vZGUuYzo1MDUzOlx0cmV0ID0gX19leHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIGlub2RlLCBpbG9jLFxuZnMvZXh0NC9pbm9kZS5jLTUwNTQtXHRcdFx0XHRcdFx1MDAyNmVycl9ibGspO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MTE1PWludCBleHQ0X2dldF9mY19pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUxMTcte1xuZnMvZXh0NC9pbm9kZS5jOjUxMTg6XHRyZXR1cm4gX19leHQ0X2dldF9pbm9kZV9sb2Moc2IsIGlubywgTlVMTCwgaWxvYywgTlVMTCk7XG5mcy9leHQ0L2lub2RlLmMtNTExOS19XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUzMjE9c3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTM3OC1cbmZzL2V4dDQvaW5vZGUuYzo1Mzc5Olx0cmV0ID0gX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lub2RlLmMtNTM4MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTU5MTE9aW50IGV4dDRfc3luY19pbm9kZV9tZXRhZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTkyMC1cbmZzL2V4dDQvaW5vZGUuYzo1OTIxOlx0ZXJyID0gX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lub2RlLmMtNTkyMi1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQwOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlub2RlIGxvY2F0aW9uIHJldHJpZXZhbCBpbiBleHQ0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGZldGNoaW5nIGlub2RlIGxvY2F0aW9ucywgc3BlY2lmaWNhbGx5IGBleHQ0X2dldF9pbm9kZV9sb2NgIGFuZCBpdHMgaW50ZXJuYWwgZnVuY3Rpb24gYF9fZXh0NF9nZXRfaW5vZGVfbG9jYC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVpciBpbnRlcmFjdGlvbi4gSSBzZWUgYSBzcGVjaWZpYyBjb25kaXRpb25hbCBjaGVjayBvbiBsaW5lIDQ5MzksIHdoZXJlIHRoZSBjb2RlIGNoZWNrcyBpZiB0aGUgaW5vZGUgaXMgcHJlc2VudCwgYW5kIHRoZW4gaWYgaXQgKmRvZXNuJiMzOTt0KiBoYXZlIHRoZSBgRVhUNF9TVEFURV9YQVRUUmAgc3RhdGUgc2V0LiBXaXRoaW4gdGhhdCBjb25kaXRpb25hbCBibG9jaywgYF9fZXh0NF9nZXRfaW5vZGVfbG9jYCBnZXRzIGNhbGxlZCBieSBgZXh0NF9nZXRfaW5vZGVfbG9jYCB3aGVuIHRoZSBpbm9kZSBwb2ludGVyIGlzbiYjMzk7dCBOVUxMLiBJdCBpcyB3b3J0aCBub3RpbmcgaGVyZSB0aGF0IGBpbm9kZSAhPSBOVUxMYCBpcyB0aGUgY29uZGl0aW9uIHRvIGhhdmUgYF9fZXh0NF9nZXRfaW5vZGVfbG9jYCBjYWxsZWQgYnkgYGV4dDRfZ2V0X2lub2RlX2xvY2AuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgb2YgaW50ZXJlc3QuIE5vdywgSSBzaG91bGQgZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgZXh0NF9nZXRfaW5vZGVfbG9jYCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHV0aWxpemVkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSYjMzk7cyBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9nZXRfaW5vZGVfbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzE5Mj1leHRlcm4gaW50IGV4dDRfY2hhbmdlX2lub2RlX2pvdXJuYWxfZmxhZyhzdHJ1Y3QgaW5vZGUgKiwgaW50KTtcbmZzL2V4dDQvZXh0NC5oOjMxOTM6aW50IGV4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKTtcbmZzL2V4dDQvZXh0NC5oLTMxOTQtaW50IGV4dDRfZ2V0X2lub2RlX2xvY19ub2lvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTUyMzA9c3RhdGljIGludCBleHQ0X2lvbWFwX3hhdHRyX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTUyNDItXG5mcy9leHQ0L2V4dGVudHMuYzo1MjQzOlx0XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2V4dGVudHMuYy01MjQ0LVx0XHRpZiAoZXJyb3IpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMTA9aW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTE3LVxuZnMvZXh0NC9pbmxpbmUuYzoxMTg6XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTExOS1cdGlmIChlcnJvcikge1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTQzPWludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNTYtXG5mcy9leHQ0L2lubGluZS5jOjE1NzpcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTU4LVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MjY2PXN0YXRpYyBpbnQgZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTI3OC1cbmZzL2V4dDQvaW5saW5lLmM6Mjc5Olx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0yODAtXHRpZiAoZXJyb3IpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0zMzU9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzUxLVxuZnMvZXh0NC9pbmxpbmUuYzozNTI6XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTM1My1cdGlmIChlcnJvcilcbi0tXG5mcy9leHQ0L2lubGluZS5jPTQzNT1zdGF0aWMgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTQ1NC1cbmZzL2V4dDQvaW5saW5lLmM6NDU1Olx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy00NTYtXHRpZiAoZXJyb3IpIHtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTUwMj1zdGF0aWMgaW50IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9leHQ0L2lubGluZS5jLTUxOC1cbmZzL2V4dDQvaW5saW5lLmM6NTE5Olx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtNTIwLVx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2lubGluZS5jPTU3MT1zdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy01OTEtXG5mcy9leHQ0L2lubGluZS5jOjU5MjpcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTU5My1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz02OTU9aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTcwNi1cbmZzL2V4dDQvaW5saW5lLmM6NzA3Olx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtNzA4LVx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2lubGluZS5jPTc5Mz1pbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtODA1LVx0aWYgKGxpa2VseShjb3BpZWQpKSB7XG5mcy9leHQ0L2lubGluZS5jOjgwNjpcdFx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtODA3LVx0XHRpZiAocmV0KSB7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMTk4PWludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEyMDQtXG5mcy9leHQ0L2lubGluZS5jOjEyMDU6XHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTIwNi1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMjY3PWludCBleHQ0X2lubGluZWRpcl90b190cmVlKHN0cnVjdCBmaWxlICpkaXJfZmlsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEyODMtXG5mcy9leHQ0L2lubGluZS5jOjEyODQ6XHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0xMjg1LVx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2lubGluZS5jPTEzODg9aW50IGV4dDRfcmVhZF9pbmxpbmVfZGlyKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQwMi1cbmZzL2V4dDQvaW5saW5lLmM6MTQwMzpcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTE0MDQtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTUyOD12b2lkICpleHQ0X3JlYWRfaW5saW5lX2xpbmsoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE1MzMtXG5mcy9leHQ0L2lubGluZS5jOjE1MzQ6XHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0xNTM1LVx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2lubGluZS5jPTE1NTc9c3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2dldF9maXJzdF9pbmxpbmVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE1NjItXG5mcy9leHQ0L2lubGluZS5jOjE1NjM6XHQqcmV0dmFsID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTU2NC1cdGlmICgqcmV0dmFsKVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTU3Nz1pbnQgZXh0NF90cnlfY3JlYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNTgzLVxuZnMvZXh0NC9pbmxpbmUuYzoxNTg0Olx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTU4NS1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xNjEwPXN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9maW5kX2lubGluZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2MjUtXG5mcy9leHQ0L2lubGluZS5jOjE2MjY6XHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcdTAwMjZpcy5pbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTYyNy1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xNjczPWludCBleHQ0X2RlbGV0ZV9pbmxpbmVfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2ODItXG5mcy9leHQ0L2lubGluZS5jOjE2ODM6XHRlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTY4NC1cdGlmIChlcnIpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xNzU2PWJvb2wgZW1wdHlfaW5saW5lX2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgaW50ICpoYXNfaW5saW5lX2RhdGEpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNzY1LVxuZnMvZXh0NC9pbmxpbmUuYzoxNzY2Olx0ZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGRpciwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lubGluZS5jLTE3NjctXHRpZiAoZXJyKSB7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xODMwPWludCBleHQ0X2lubGluZV9kYXRhX2lvbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xODM5LVxuZnMvZXh0NC9pbmxpbmUuYzoxODQwOlx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0xODQxLVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTg2Mj1pbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xODkyLVxuZnMvZXh0NC9pbmxpbmUuYzoxODkzOlx0aWYgKChlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpKSAhPSAwKVxuZnMvZXh0NC9pbmxpbmUuYy0xODk0LVx0XHRnb3RvIG91dDtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTE5NzQ9aW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTk5OS1cdGlsb2MuYmggPSBOVUxMO1xuZnMvZXh0NC9pbmxpbmUuYzoyMDAwOlx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0yMDAxLVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQvaW5vZGUuYz00NzgzPXN0YXRpYyBpbnQgZXh0NF9maWxsX3Jhd19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy00ODgzLSAqL1xuZnMvZXh0NC9pbm9kZS5jOjQ4ODQ6c3RhdGljIGludCBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbmZzL2V4dDQvaW5vZGUuYy00ODg1LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTAzMj1zdGF0aWMgaW50IF9fZXh0NF9nZXRfaW5vZGVfbG9jX25vaW5tZW0oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTAzNy1cbmZzL2V4dDQvaW5vZGUuYzo1MDM4Olx0cmV0ID0gX19leHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUtXHUwMDNlaV9zYiwgaW5vZGUtXHUwMDNlaV9pbm8sIE5VTEwsIGlsb2MsXG5mcy9leHQ0L2lub2RlLmMtNTAzOS1cdFx0XHRcdFx0XHUwMDI2ZXJyX2Jsayk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUwNDctXG5mcy9leHQ0L2lub2RlLmM6NTA0ODppbnQgZXh0NF9nZXRfaW5vZGVfbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXG5mcy9leHQ0L2lub2RlLmMtNTA0OS17XG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUwNTItXG5mcy9leHQ0L2lub2RlLmM6NTA1MzpcdHJldCA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLVx1MDAzZWlfaW5vLCBpbm9kZSwgaWxvYyxcbmZzL2V4dDQvaW5vZGUuYy01MDU0LVx0XHRcdFx0XHRcdTAwMjZlcnJfYmxrKTtcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTA2My0vKlxuZnMvZXh0NC9pbm9kZS5jOjUwNjQ6ICogZXh0NF9nZXRfaW5vZGVfbG9jX25vaW8oKSBpcyBhIGJlc3QtZWZmb3J0IHZhcmlhbnQgb2YgZXh0NF9nZXRfaW5vZGVfbG9jKCkuXG5mcy9leHQ0L2lub2RlLmMtNTA2NS0gKiBJdCBsb29rcyB1cCB0aGUgaW5vZGUgdGFibGUgYmxvY2sgaW4gdGhlIGJ1ZmZlciBjYWNoZSBhbmQgcmV0dXJucyAtRUFHQUlOIGlmXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUxMTU9aW50IGV4dDRfZ2V0X2ZjX2lub2RlX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTExNy17XG5mcy9leHQ0L2lub2RlLmM6NTExODpcdHJldHVybiBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzYiwgaW5vLCBOVUxMLCBpbG9jLCBOVUxMKTtcbmZzL2V4dDQvaW5vZGUuYy01MTE5LX1cbi0tXG5mcy9leHQ0L2lub2RlLmM9NjUwMT1leHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjUwOS1cbmZzL2V4dDQvaW5vZGUuYzo2NTEwOlx0ZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBpbG9jKTtcbmZzL2V4dDQvaW5vZGUuYy02NTExLVx0aWYgKCFlcnIpIHtcbi0tXG5mcy9leHQ0L2lvY3RsLmM9NzE2PXN0YXRpYyBpbnQgZXh0NF9pb2N0bF9zZXRwcm9qZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIF9fdTMyIHByb2ppZClcbi0tXG5mcy9leHQ0L2lvY3RsLmMtNzUwLVxuZnMvZXh0NC9pb2N0bC5jOjc1MTpcdGVyciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L2lvY3RsLmMtNzUyLVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L3hhdHRyLmM9NjQ2PWV4dDRfeGF0dHJfaWJvZHlfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL2V4dDQveGF0dHIuYy02NTgtXHRcdHJldHVybiAtRU5PREFUQTtcbmZzL2V4dDQveGF0dHIuYzo2NTk6XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L3hhdHRyLmMtNjYwLVx0aWYgKGVycm9yKVxuLS1cbmZzL2V4dDQveGF0dHIuYz03ODk9ZXh0NF94YXR0cl9pYm9keV9saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTc5OC1cdFx0cmV0dXJuIDA7XG5mcy9leHQ0L3hhdHRyLmM6Nzk5Olx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC94YXR0ci5jLTgwMC1cdGlmIChlcnJvcilcbi0tXG5mcy9leHQ0L3hhdHRyLmM9ODY2PWludCBleHQ0X2dldF9pbm9kZV91c2FnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90ICp1c2FnZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmMtODc4LVx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikpIHtcbmZzL2V4dDQveGF0dHIuYzo4Nzk6XHRcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aWxvYyk7XG5mcy9leHQ0L3hhdHRyLmMtODgwLVx0XHRpZiAocmV0KVxuLS1cbmZzL2V4dDQveGF0dHIuYz0xMTcxPWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTExODctXHRlbHNlIHtcbmZzL2V4dDQveGF0dHIuYzoxMTg4Olx0XHRlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MocGFyZW50LCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQveGF0dHIuYy0xMTg5LVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTI2MDc9c3RhdGljIGludCBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjY1Ny1cbmZzL2V4dDQveGF0dHIuYzoyNjU4Olx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLVx1MDAzZWlsb2MpO1xuZnMvZXh0NC94YXR0ci5jLTI2NTktXHRpZiAoZXJyb3IpXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI4Nzg9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI4OTctXG5mcy9leHQ0L3hhdHRyLmM6Mjg5ODpcdFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC94YXR0ci5jLTI4OTktXHRcdGlmIChlcnJvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3OTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRVhUNCBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGV4dDQgZmlsZXN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBtYWluIEtjb25maWcgZmlsZSBmb3IgYSBnZW5lcmFsIG92ZXJ2aWV3IOKAkyBgRVhUNF9GU2Agc2hvdWxkIGJlIHRoZSBrZXkgc3ltYm9sLiBUaGVuLCB0byBnZXQgdGhlIHNwZWNpZmljcyBhbmQgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgc3ltYm9sLCBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGV4dDQtc3BlY2lmaWMgS2NvbmZpZyBmaWxlIGxvY2F0ZWQgd2l0aGluIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGRpcmVjdG9yeTogYGZzL2V4dDQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZGV0YWlsZWQgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gZXh0NC4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgd2F5IHRvIHRyYWNlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdoaWNoIEkgYWxyZWFkeSBrbm93IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBFWFQ0X0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA1Olx0XHRzZWxlY3QgSkJEMlxuICAgNjpcdFx0c2VsZWN0IENSQzE2XG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdHNlbGVjdCBGU19JT01BUFxuICAgOTpcdFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxuICAxMjpcdFxuICAxMzpcdFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXG4gIDE0Olx0XHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcbiAgMTU6XHRcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxuICAxNjpcdFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcbiAgMTc6XHRcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXG4gIDE4Olx0XHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxuICAxOTpcdFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XG4gIDIwOlx0XHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cbiAgMjE6XHRcbiAgMjI6XHRcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXG4gIDIzOlx0XHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcbiAgMjQ6XHRcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcbiAgMjU6XHRcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xuICAyNjpcdFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcbiAgMjc6XHRcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcbiAgMjg6XHRcdCAgY29tcGF0aWJsZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxuICAzMTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7VXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEVYVDRfRlNcbiAgMzg6XHRcdGRlcGVuZHMgb24gRVhUMl9GUz1uXG4gIDM5Olx0XHRkZWZhdWx0IHlcbiAgNDA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MTAKCQkJCQkJCW91dHB1dDogMTI3CgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnM6IGBfX2V4dDRfZ2V0X2lub2RlX2xvY2AgYW5kIGBleHQ0X2dldF9pbm9kZV9sb2NgLiBUaG9zZSBhcmUgbXkgZm9jdXMgcG9pbnRzIGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLCBgRVhUNF9GU2AgaXMgZW5hYmxlZCwgd2hpY2ggaXMgY3J1Y2lhbCwgc28gdGhpcyBhcmVhIGlzIGluIHNjb3BlLgoKVGhlIHN5c3RlbSBmbGFnZ2VkIHRoaXMgYXMgd29ydGggZnV6emluZywgd2hpY2ggbWVhbnMgSSBzaG91bGQgZGlnIGRlZXBlci4gTGV0IG1lIGNvbmZpcm06IFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGhvdyB0aGUgZXh0NCBpbm9kZSBsb2NhdGlvbiBpcyBsb29rZWQgdXAsIHN3aXRjaGluZyB0byBgc2JfZmluZF9nZXRfYmxvY2tgIHdoaWNoIGlzIG5vbi1ibG9ja2luZywgdG8gcHJldmVudCBkZWFkbG9ja3MuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyBhbHRlcmluZyB0aGUgZnVuZGFtZW50YWwgYmxvY2sgbG9va3VwIGFuZCBjYWNoaW5nIG1lY2hhbmlzbSB3aXRoaW4gYGV4dDRgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBpbm9kZSBiaXRtYXAgcmVhZHMuIEl0JiMzOTtzIHRvdWNoaW5nIGBfX2V4dDRfZ2V0X2lub2RlX2xvY2Agd2l0aGluIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlLiBUaGlzIGlzIGEgY29yZSBjaGFuZ2UuIFN3aXRjaGluZyBmcm9tIGBzYl9nZXRibGtgIHRvIGBzYl9maW5kX2dldF9ibG9ja2AgaXMgYSBub3RhYmxlIHNoaWZ0IGluIGhvdyB0aGUgZmlsZSBzeXN0ZW0gaGFuZGxlcyBwb3RlbnRpYWwgY29udGVudGlvbi4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGFsbCB0aGUgZGV0YWlscyBsaW5lIHVwLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBqdXN0aWZpZWQuIFRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZXh0NF9nZXRfaW5vZGVfbG9jJiMzNDssCiAgICAmIzM0O2V4dDRfZ2V0X2lub2RlX2xvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBidWZmZXIgY2FjaGUgbG9va3VwIGJlaGF2aW9yIGluIF9fZXh0NF9nZXRfaW5vZGVfbG9jKCkgYnkgdXNpbmcgc2JfZmluZF9nZXRfYmxvY2soKSBpbnN0ZWFkIG9mIHNiX2dldGJsaygpIHRvIGF2b2lkIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2Nrcy4gVGhpcyBpcyByZWFjaGFibGUsIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgaW5vZGUgYWxsb2NhdGlvbiwgcmVhZCwgYW5kIHdyaXRlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19leHQ0X2dldF9pbm9kZV9sb2MmIzM0OywKICAgICYjMzQ7ZXh0NF9nZXRfaW5vZGVfbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJ1ZmZlciBjYWNoZSBsb29rdXAgYmVoYXZpb3IgaW4gX19leHQ0X2dldF9pbm9kZV9sb2MoKSBieSB1c2luZyBzYl9maW5kX2dldF9ibG9jaygpIGluc3RlYWQgb2Ygc2JfZ2V0YmxrKCkgdG8gYXZvaWQgbG9jayBpbnZlcnNpb24gZGVhZGxvY2tzLiBUaGlzIGlzIHJlYWNoYWJsZSwgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIHZlcmlmeSBpbm9kZSBhbGxvY2F0aW9uLCByZWFkLCBhbmQgd3JpdGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGBzYl9nZXRibGsoKWAgdG8gYHNiX2ZpbmRfZ2V0X2Jsb2NrKClgIGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYCB3aXRoaW4gYGZzL2V4dDQvaW5vZGUuY2AuIFRoaXMgcmVwbGFjZXMgYSBwb3RlbnRpYWxseSBibG9ja2luZyBidWZmZXIgYWxsb2NhdGlvbiB3aXRoIGEgbm9uLWJsb2NraW5nIHBhZ2UvYnVmZmVyIGNhY2hlIGxvb2t1cCB0byBhdm9pZCBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gZm9saW8gbG9ja3MgYW5kIGJ1ZmZlciBoZWFkIGxvY2tzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY3VycmVuY3kvbG9ja2luZy1yZWxhdGVkIChkZXRlY3RhYmxlIGJ5IExPQ0tERVApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5Yzk3ZTE2NzhkNDI4ZTdjYWI3MmI0OTFhNzdjZDY3OTFjODA4MDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIxOjI0OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGJkNGI3NzhkZjllYjIuLjEzZTNjYjgyOTQ2MTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTQ5NDIsOCAmIzQzOzQ5NDIsMTIgQEAgc3RhdGljIGludCBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubywKIAogCQlzdGFydCA9IGlub2RlX29mZnNldCAmYW1wOyB+KGlub2Rlc19wZXJfYmxvY2sgLSAxKTsKIAotCQkvKiBJcyB0aGUgaW5vZGUgYml0bWFwIGluIGNhY2hlPyAqLwotCQliaXRtYXBfYmggPSBzYl9nZXRibGsoc2IsIGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJcyB0aGUgaW5vZGUgYml0bWFwIGluIGNhY2hlPyBOb24tYmxvY2tpbmcgbG9va3VwOiBiaCBhYm92ZQomIzQzOwkJICogaXMgbG9ja2VkLCBhbmQgYmxvY2tpbmcgaGVyZSB3b3VsZCBmb2xpb19sb2NrKCkgYWdhaW5zdCBhCiYjNDM7CQkgKiBibG9ja19yZWFkX2Z1bGxfZm9saW8oKSB0aGF0IGxvY2tzIGJoIHRoZSBvdGhlciB3YXkgcm91bmQuCiYjNDM7CQkgKi8KJiM0MzsJCWJpdG1hcF9iaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7CiAJCWlmICh1bmxpa2VseSghYml0bWFwX2JoKSkKIAkJCWdvdG8gbWFrZV9pbzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEp1c3RpZmljYXRpb246IEV4dDQgSW5vZGUuYyBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGFzc2VzcyB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBkaWZmIGlzIGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBsaW5lIDQ5NDIuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgcmVwbGFjZWQgYHNiX2dldGJsaygpYCB3aXRoIGBzYl9maW5kX2dldF9ibG9jaygpYCBmb3IgcmV0cmlldmluZyB0aGUgaW5vZGUgYml0bWFwIGJsb2NrLiBUaGUgY29tbWVudCBtZW50aW9ucyBub24tYmxvY2tpbmcgbG9va3VwIGFuZCBhIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpbyB3aXRoIGBibG9ja19yZWFkX2Z1bGxfZm9saW8oKWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCB3b3J0aCBhIGNsb3NlciBsb29rLiBEZWFkbG9jayBhdm9pZGFuY2UgaXMgYWx3YXlzIGEgZ29vZCB0aGluZywgZXNwZWNpYWxseSBpbiBhIGZpbGUgc3lzdGVtIGNvbnRleHQuIGBzYl9maW5kX2dldF9ibG9jaygpYCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBub3cgdHJ5aW5nIHRvIHJldHJpZXZlIHRoZSBibG9jayBmcm9tIHRoZSBidWZmZXIgY2FjaGUgaW4gYSBub24tYmxvY2tpbmcgbWFubmVyLiBJZiBpdCYjMzk7cyBub3QgcHJlc2VudCwgaXQmIzM5O2xsIHRyaWdnZXIgYW4gSS9PIHBhdGggZWxzZXdoZXJlLCBJJiMzOTtkIGd1ZXNzLgoKR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGxvdy1sZXZlbCBibG9jayByZXRyaWV2YWwgYW5kIGEgY3JpdGljYWwgcGF0aCBpbiBleHQ0JiMzOTtzIGlub2RlIG9wZXJhdGlvbnMsIGFuZCB0aGUgZXhwbGljaXQgbWVudGlvbiBvZiBhdm9pZGluZyBhIGxvY2sgb3JkZXJpbmcgaXNzdWUgd2l0aCBhIHBvdGVudGlhbGx5IGJsb2NraW5nIGZ1bmN0aW9uLCB0aGlzIGFic29sdXRlbHkgd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwb3NzaWJpbGl0eSBvZiBtaXNzZWQgbG9ja2luZywgaW5jb3JyZWN0IHVzYWdlIG9mIGJ1ZmZlciBoZWFkcywgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgbm9uLWJsb2NraW5nIGxvb2t1cCBtZXRob2QgaXMgdmVyeSByZWFsLiBJdCBhbHNvIG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gc2VlIGlmIGFueSBvdGhlciBzaW1pbGFyIGNhbGxzIGV4aXN0LiBXZSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBob3cgYHNiX2ZpbmRfZ2V0X2Jsb2NrYCBpcyBoYW5kbGVkIGludGVybmFsbHksIGFuZCBzZWUgaG93IHRoZSBJL08gcGF0aCBpcyBwcm90ZWN0ZWQgb3IgY29vcmRpbmF0ZWQuIFRoaXMgY2hhbmdlIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBleHBvc2VkIHVuZGVyIEtNU0FOLiBJIHRoaW5rIHdlIG5lZWQgdG8gdGhyb3cgc29tZSBmdXp6aW5nIGN5Y2xlcyBhdCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDkyMDpcdFxuNDkyMTpcdFx0YmggPSBzYl9nZXRibGsoc2IsIGJsb2NrKTtcbjQ5MjI6XHRcdGlmICh1bmxpa2VseSghYmgpKVxuNDkyMzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQ5MjQ6XHRcdGlmIChleHQ0X2J1ZmZlcl91cHRvZGF0ZShiaCkpXG40OTI1Olx0XHRcdGdvdG8gaGFzX2J1ZmZlcjtcbjQ5MjY6XHRcbjQ5Mjc6XHRcdGxvY2tfYnVmZmVyKGJoKTtcbjQ5Mjg6XHRcdGlmIChleHQ0X2J1ZmZlcl91cHRvZGF0ZShiaCkpIHtcbjQ5Mjk6XHRcdFx0LyogU29tZW9uZSBicm91Z2h0IGl0IHVwdG9kYXRlIHdoaWxlIHdlIHdhaXRlZCAqL1xuNDkzMDpcdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbjQ5MzE6XHRcdFx0Z290byBoYXNfYnVmZmVyO1xuNDkzMjpcdFx0fVxuNDkzMzpcdFxuNDkzNDpcdFx0LypcbjQ5MzU6XHRcdCAqIElmIHdlIGhhdmUgYWxsIGluZm9ybWF0aW9uIG9mIHRoZSBpbm9kZSBpbiBtZW1vcnkgYW5kIHRoaXNcbjQ5MzY6XHRcdCAqIGlzIHRoZSBvbmx5IHZhbGlkIGlub2RlIGluIHRoZSBibG9jaywgd2UgbmVlZCBub3QgcmVhZCB0aGVcbjQ5Mzc6XHRcdCAqIGJsb2NrLlxuNDkzODpcdFx0ICovXG40OTM5Olx0XHRpZiAoaW5vZGUgXHUwMDI2XHUwMDI2ICFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpKSB7XG40OTQwOlx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoO1xuNDk0MTpcdFx0XHRpbnQgaSwgc3RhcnQ7XG40OTQyOlx0XG40OTQzOlx0XHRcdHN0YXJ0ID0gaW5vZGVfb2Zmc2V0IFx1MDAyNiB+KGlub2Rlc19wZXJfYmxvY2sgLSAxKTtcbjQ5NDQ6XHRcbjQ5NDU6XHRcdFx0LypcbjQ5NDY6XHRcdFx0ICogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gTm9uLWJsb2NraW5nIGxvb2t1cDogYmggYWJvdmVcbjQ5NDc6XHRcdFx0ICogaXMgbG9ja2VkLCBhbmQgYmxvY2tpbmcgaGVyZSB3b3VsZCBmb2xpb19sb2NrKCkgYWdhaW5zdCBhXG40OTQ4Olx0XHRcdCAqIGJsb2NrX3JlYWRfZnVsbF9mb2xpbygpIHRoYXQgbG9ja3MgYmggdGhlIG90aGVyIHdheSByb3VuZC5cbjQ5NDk6XHRcdFx0ICovXG40OTUwOlx0XHRcdGJpdG1hcF9iaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7XG40OTUxOlx0XHRcdGlmICh1bmxpa2VseSghYml0bWFwX2JoKSlcbjQ5NTI6XHRcdFx0XHRnb3RvIG1ha2VfaW87XG40OTUzOlx0XG40OTU0Olx0XHRcdC8qXG40OTU1Olx0XHRcdCAqIElmIHRoZSBpbm9kZSBiaXRtYXAgaXNuJiMzOTt0IGluIGNhY2hlIHRoZW4gdGhlXG40OTU2Olx0XHRcdCAqIG9wdGltaXNhdGlvbiBtYXkgZW5kIHVwIHBlcmZvcm1pbmcgdHdvIHJlYWRzIGluc3RlYWRcbjQ5NTc6XHRcdFx0ICogb2Ygb25lLCBzbyBza2lwIGl0LlxuNDk1ODpcdFx0XHQgKi9cbjQ5NTk6XHRcdFx0aWYgKCFidWZmZXJfdXB0b2RhdGUoYml0bWFwX2JoKSkge1xuNDk2MDpcdFx0XHRcdGJyZWxzZShiaXRtYXBfYmgpO1xuNDk2MTpcdFx0XHRcdGdvdG8gbWFrZV9pbztcbjQ5NjI6XHRcdFx0fVxuNDk2MzpcdFx0XHRmb3IgKGkgPSBzdGFydDsgaSBcdTAwM2Mgc3RhcnQgJiM0MzsgaW5vZGVzX3Blcl9ibG9jazsgaSYjNDM7JiM0MzspIHtcbjQ5NjQ6XHRcdFx0XHRpZiAoaSA9PSBpbm9kZV9vZmZzZXQpXG40OTY1Olx0XHRcdFx0XHRjb250aW51ZTtcbjQ5NjY6XHRcdFx0XHRpZiAoZXh0NF90ZXN0X2JpdChpLCBiaXRtYXBfYmgtXHUwMDNlYl9kYXRhKSlcbjQ5Njc6XHRcdFx0XHRcdGJyZWFrO1xuNDk2ODpcdFx0XHR9XG40OTY5Olx0XHRcdGJyZWxzZShiaXRtYXBfYmgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg3CgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENoYW5nZTogQSBEZWVwZXIgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIGJ1ZmZlciBoZWFkcyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYC4gUHJldmlvdXNseSwgd2UgdXNlZCBgc2JfZ2V0YmxrKClgLCB3aGljaCwgSSBrbm93LCBpcyBhIGJsb2NraW5nIG9wZXJhdGlvbiDigJMgaXQgZmluZHMgb3IgKmFsbG9jYXRlcyogYSBidWZmZXIgaGVhZCwgY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24mIzM5O3QgYWxyZWFkeSBleGlzdC4gVGhhdCBhbGxvY2F0aW9uIGNhbiBpbnRyb2R1Y2UgZGVsYXlzLCB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgYWxsb2NhdGlvbi4gTm93LCB3ZSYjMzk7cmUgc3dhcHBpbmcgdGhhdCBvdXQgd2l0aCBgc2JfZmluZF9nZXRfYmxvY2soKWAuIFRoYXQmIzM5O3MgYSBjbGV2ZXIgbW92ZS4gVGhpcyBmdW5jdGlvbiAqb25seSogbG9va3MgZm9yIHRoZSBidWZmZXIgaGVhZCBpbiB0aGUgcGFnZSBvciBidWZmZXIgY2FjaGU7IGl0IGRvZXNuJiMzOTt0IGFsbG9jYXRlIGFueXRoaW5nIGlmIGl0JiMzOTtzIG5vdCB0aGVyZSwgc28gbm8gYmxvY2tpbmcuCgpJZiBgc2JfZmluZF9nZXRfYmxvY2tgIGRvZXNuJiMzOTt0IGZpbmQgdGhlIGJ1ZmZlciBoZWFkLCB3ZSBqdW1wIHRvIGBtYWtlX2lvYCwgd2hpY2ggcHJlc3VtYWJseSBoYW5kbGVzIHRoZSBJL08gdG8gZ2V0IGl0LiBJZiBpdCAqZG9lcyogZmluZCBpdCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgdXAtdG8tZGF0ZS4gYCFidWZmZXJfdXB0b2RhdGUoYml0bWFwX2JoKWAgYW5kIGlmIGl0IGlzbiYjMzk7dCwgd2Ugc2tpcCBvcHRpbWl6YXRpb24sIGFuZCBvZmYgdG8gYG1ha2VfaW9gIHdlIGdvLiBJZiBpdCAqaXMqIHVwdG9kYXRlLCB0aGVuIHdlIHJlYWQgYGJpdG1hcF9iaC0mZ3Q7Yl9kYXRhYC4gU2ltcGxlLiBUaGlzIHNlZW1zIHRvIGJlIGEgZGVhZGxvY2sgZml4IOKAkyBhZGRyZXNzaW5nIGEgbG9ja2luZyBvcmRlciBpc3N1ZSBiZXR3ZWVuIHRoZSBidWZmZXIgbG9jayBhbmQgdGhlIGZvbGlvIGxvY2ssIHdoaWNoIGlzIGltcG9ydGFudC4gVGhpcyBpcyBjcml0aWNhbCBmb3Igb3VyIG92ZXJhbGwgc3RhYmlsaXR5LgoKTm93LCB0aGUgbWFpbiBjb25jZXJuOiBhcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdpdGggdGhpcyBjaGFuZ2U/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuCgoqICAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBidWZmZXJzIGFyZSBiZWluZyBjcmVhdGVkLiBXZSYjMzk7cmUganVzdCBmaW5kaW5nIGFuIGV4aXN0aW5nIG9uZSwgb3IgZG9pbmcgdGhlIEkvTy4KKiAgIE5vIGtlcm5lbC10by11c2VyIHNwYWNlIGNvcHlpbmcgbW9kaWZpY2F0aW9ucy4KKiAgIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIGJlaW5nIHJlYWQgZGlyZWN0bHkuCiogICBgc2JfZmluZF9nZXRfYmxvY2tgIGlzIGVpdGhlciByZXR1cm5pbmcgYW4gZXhpc3RpbmcgYGJ1ZmZlcl9oZWFkYCAod2hpY2ggd2UgY2hlY2sgaXMgdmFsaWQpLCBvciBOVUxMLgoqICAgSWYgd2UgKmRvKiBnZXQgYSBgYml0bWFwX2JoYCwgd2UgY2hlY2sgaXQsIGFuZCB0aGVuIGZvciBgYnVmZmVyX3VwdG9kYXRlYCwgaWYgdGhlIGRhdGEgaXMgdXB0b2RhdGUsIGl0JiMzOTtzIHNhZmUgdG8gcmVhZCBgYl9kYXRhYC4gSWYgbm90LCB3ZSBmYWxsIHRocm91Z2ggdG8gYG1ha2VfaW9gLgoqICAgSWYgaXQmIzM5O3Mgbm90IHByZXNlbnQgb3Igbm90IHVwLXRvLWRhdGUsIHdlIGhpdCBgbWFrZV9pb2AsIHdoaWNoIGhhbmRsZXMgdGhlIHJlYWQgb24gYGJoYC4KCkl0IHNlZW1zIHNhZmUuIFRoaXMgY2hhbmdlIGFwcGVhcnMgdG8ganVzdCBhZGRyZXNzIGEgcG90ZW50aWFsIGRlYWRsb2NrLCBzcGVjaWZpY2FsbHkgYW4gQUJCQSBkZWFkbG9jay9sb2NrIGludmVyc2lvbi4gQW5kIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLgoKTGV0JiMzOTtzIGNvbmZpcm06CgoqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGdldHRpbmcgc2VudCB0byB1c2VyIHNwYWNlLgoqICAgTm8gY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKiAgIE5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgoqICAgTm8gbmV3IGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS4KClRoaXMgaXMgYWxsIGNvbnNpc3RlbnQgd2l0aCBLTVNBTiB2cy4gS0FTQU4gY29uc2lkZXJhdGlvbnMuIFdlJiMzOTtyZSByZXBsYWNpbmcgYSBibG9ja2luZyBvcGVyYXRpb24gKGBzYl9nZXRibGsoKWApIHdpdGggYSBub24tYmxvY2tpbmcgb25lIChgc2JfZmluZF9nZXRfYmxvY2soKWApLCBzb2x2aW5nIGEgbG9jayBpbnZlcnNpb24gdGhhdCBjb3VsZCBiZSBkZXRlY3RlZCBieSBMT0NLREVQLiBTaW5jZSBubyBuZXcgdnVsbmVyYWJpbGl0aWVzIGluIHRlcm1zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjayB2YXJpYWJsZXMsIG9yIGtlcm5lbC10by11c2VyIGNvcGllcyBhcmUgYmVpbmcgZXhwb3NlZCBvciBtb2RpZmllZCwgS01TQU4gZnV6emluZyBpc24mIzM5O3QgbmVlZGVkLiBSZWd1bGFyIEtBU0FOL0xPQ0tERVAgaXMgZW5vdWdoLiBFeGNlbGxlbnQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBmb3JtYXR0ZWQuIFJlYWR5IHRvIHNldCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGBzYl9nZXRibGsoKWAgdG8gYHNiX2ZpbmRfZ2V0X2Jsb2NrKClgIGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYCB3aXRoaW4gYGZzL2V4dDQvaW5vZGUuY2AuIFRoaXMgcmVwbGFjZXMgYSBwb3RlbnRpYWxseSBibG9ja2luZyBidWZmZXIgYWxsb2NhdGlvbiB3aXRoIGEgbm9uLWJsb2NraW5nIHBhZ2UvYnVmZmVyIGNhY2hlIGxvb2t1cCB0byBhdm9pZCBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gZm9saW8gbG9ja3MgYW5kIGJ1ZmZlciBoZWFkIGxvY2tzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY3VycmVuY3kvbG9ja2luZy1yZWxhdGVkIChkZXRlY3RhYmxlIGJ5IExPQ0tERVApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgYHNiX2dldGJsaygpYCB0byBgc2JfZmluZF9nZXRfYmxvY2soKWAgaW4gYF9fZXh0NF9nZXRfaW5vZGVfbG9jKClgIHdpdGhpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhpcyByZXBsYWNlcyBhIHBvdGVudGlhbGx5IGJsb2NraW5nIGJ1ZmZlciBhbGxvY2F0aW9uIHdpdGggYSBub24tYmxvY2tpbmcgcGFnZS9idWZmZXIgY2FjaGUgbG9va3VwIHRvIGF2b2lkIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2sgYmV0d2VlbiBmb2xpbyBsb2NrcyBhbmQgYnVmZmVyIGhlYWQgbG9ja3MuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jdXJyZW5jeS9sb2NraW5nLXJlbGF0ZWQgKGRldGVjdGFibGUgYnkgTE9DS0RFUCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDozMy40MTk2MjUwMTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODk2OTIyMTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19leHQ0X2dldF9pbm9kZV9sb2NcIixcbiAgICBcImV4dDRfZ2V0X2lub2RlX2xvY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBgc2JfZ2V0YmxrKClgIHRvIGBzYl9maW5kX2dldF9ibG9jaygpYCBpbiBgX19leHQ0X2dldF9pbm9kZV9sb2MoKWAgd2l0aGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGlzIHJlcGxhY2VzIGEgcG90ZW50aWFsbHkgYmxvY2tpbmcgYnVmZmVyIGFsbG9jYXRpb24gd2l0aCBhIG5vbi1ibG9ja2luZyBwYWdlL2J1ZmZlciBjYWNoZSBsb29rdXAgdG8gYXZvaWQgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGZvbGlvIGxvY2tzIGFuZCBidWZmZXIgaGVhZCBsb2Nrcy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY3VycmVuY3kvbG9ja2luZy1yZWxhdGVkIChkZXRlY3RhYmxlIGJ5IExPQ0tERVApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBidWZmZXIgY2FjaGUgbG9va3VwIGJlaGF2aW9yIGluIF9fZXh0NF9nZXRfaW5vZGVfbG9jKCkgYnkgdXNpbmcgc2JfZmluZF9nZXRfYmxvY2soKSBpbnN0ZWFkIG9mIHNiX2dldGJsaygpIHRvIGF2b2lkIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2Nrcy4gVGhpcyBpcyByZWFjaGFibGUsIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgaW5vZGUgYWxsb2NhdGlvbiwgcmVhZCwgYW5kIHdyaXRlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDozMy40MTk2MzA5NzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzUyNzU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY5Yzk3ZTE2NzhkNDI4ZTdjYWI3MmI0OTFhNzdjZDY3OTFjODA4MDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAyMToyNDozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcXG5pbmRleCBiZDRiNzc4ZGY5ZWIyLi4xM2UzY2I4Mjk0NjE5IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC00OTQyLDggKzQ5NDIsMTIgQEAgc3RhdGljIGludCBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcXG4gXFxuIFxcdFxcdHN0YXJ0ID0gaW5vZGVfb2Zmc2V0IFxcdTAwMjYgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7XFxuIFxcbi1cXHRcXHQvKiBJcyB0aGUgaW5vZGUgYml0bWFwIGluIGNhY2hlPyAqL1xcbi1cXHRcXHRiaXRtYXBfYmggPSBzYl9nZXRibGsoc2IsIGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gTm9uLWJsb2NraW5nIGxvb2t1cDogYmggYWJvdmVcXG4rXFx0XFx0ICogaXMgbG9ja2VkLCBhbmQgYmxvY2tpbmcgaGVyZSB3b3VsZCBmb2xpb19sb2NrKCkgYWdhaW5zdCBhXFxuK1xcdFxcdCAqIGJsb2NrX3JlYWRfZnVsbF9mb2xpbygpIHRoYXQgbG9ja3MgYmggdGhlIG90aGVyIHdheSByb3VuZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGJpdG1hcF9iaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7XFxuIFxcdFxcdGlmICh1bmxpa2VseSghYml0bWFwX2JoKSlcXG4gXFx0XFx0XFx0Z290byBtYWtlX2lvO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6MzMuOTA3ODcwMDE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODcxMTE3Nzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19leHQ0X2dldF9pbm9kZV9sb2NcIixcbiAgICBcImV4dDRfZ2V0X2lub2RlX2xvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJ1ZmZlciBjYWNoZSBsb29rdXAgYmVoYXZpb3IgaW4gX19leHQ0X2dldF9pbm9kZV9sb2MoKSBieSB1c2luZyBzYl9maW5kX2dldF9ibG9jaygpIGluc3RlYWQgb2Ygc2JfZ2V0YmxrKCkgdG8gYXZvaWQgbG9jayBpbnZlcnNpb24gZGVhZGxvY2tzLiBUaGlzIGlzIHJlYWNoYWJsZSwgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIHZlcmlmeSBpbm9kZSBhbGxvY2F0aW9uLCByZWFkLCBhbmQgd3JpdGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjljOTdlMTY3OGQ0MjhlN2NhYjcyYjQ5MWE3N2NkNjc5MWM4MDgwNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMjE6MjQ6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGJkNGI3NzhkZjllYjIuLjEzZTNjYjgyOTQ2MTkgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTQ5NDIsOCArNDk0MiwxMiBAQCBzdGF0aWMgaW50IF9fZXh0NF9nZXRfaW5vZGVfbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuIFxuIFx0XHRzdGFydCA9IGlub2RlX29mZnNldCBcdTAwMjYgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7XG4gXG4tXHRcdC8qIElzIHRoZSBpbm9kZSBiaXRtYXAgaW4gY2FjaGU/ICovXG4tXHRcdGJpdG1hcF9iaCA9IHNiX2dldGJsayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpO1xuK1x0XHQvKlxuK1x0XHQgKiBJcyB0aGUgaW5vZGUgYml0bWFwIGluIGNhY2hlPyBOb24tYmxvY2tpbmcgbG9va3VwOiBiaCBhYm92ZVxuK1x0XHQgKiBpcyBsb2NrZWQsIGFuZCBibG9ja2luZyBoZXJlIHdvdWxkIGZvbGlvX2xvY2soKSBhZ2FpbnN0IGFcbitcdFx0ICogYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKCkgdGhhdCBsb2NrcyBiaCB0aGUgb3RoZXIgd2F5IHJvdW5kLlxuK1x0XHQgKi9cbitcdFx0Yml0bWFwX2JoID0gc2JfZmluZF9nZXRfYmxvY2soc2IsIGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFiaXRtYXBfYmgpKVxuIFx0XHRcdGdvdG8gbWFrZV9pbztcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjI0OjMzLjkwNzg3MjA1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMjQzNzU0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBleHQ0IGlub2RlIHJldHJpZXZhbCBpbiBmcy9leHQ0L2lub2RlLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCdzIGNoYW5nZWQgaGVyZS4gVGhlIGRpZmYgaW5kaWNhdGVzIGEgbW9kaWZpY2F0aW9uIGluIGBmcy9leHQ0L2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsb29rcyB0byBiZSByZXBsYWNpbmcgYHNiX2dldGJsa2Agd2l0aCBgc2JfZmluZF9nZXRfYmxvY2tgIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBpbm9kZSBiaXRtYXAuIE9rYXksIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBsaW5lIGluIHRoZSBzb3VyY2UgY29kZS4gTGV0J3MgaGVhZCBvdmVyIHRvIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDQ5NDIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFsdGVyYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGlzIGlzIGFib3V0IG9wdGltaXphdGlvbjsgdXNpbmcgYHNiX2ZpbmRfZ2V0X2Jsb2NrYCBjb3VsZCBwb3RlbnRpYWxseSBieXBhc3MgYW4gdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBpZiB0aGUgYmxvY2sgaXMgYWxyZWFkeSBpbiB0aGUgYnVmZmVyIGNhY2hlLiBBbHRlcm5hdGl2ZWx5LCBjb3VsZCBpdCBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGJ1ZyByZWxhdGVkIHRvIGJsb2NrIHJldHJpZXZhbCBhbmQgY2FjaGluZz8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDozOS4wMzIyNTA3MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ5MjA6XFx0XFxuNDkyMTpcXHRcXHRiaCA9IHNiX2dldGJsayhzYiwgYmxvY2spO1xcbjQ5MjI6XFx0XFx0aWYgKHVubGlrZWx5KCFiaCkpXFxuNDkyMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG40OTI0OlxcdFxcdGlmIChleHQ0X2J1ZmZlcl91cHRvZGF0ZShiaCkpXFxuNDkyNTpcXHRcXHRcXHRnb3RvIGhhc19idWZmZXI7XFxuNDkyNjpcXHRcXG40OTI3OlxcdFxcdGxvY2tfYnVmZmVyKGJoKTtcXG40OTI4OlxcdFxcdGlmIChleHQ0X2J1ZmZlcl91cHRvZGF0ZShiaCkpIHtcXG40OTI5OlxcdFxcdFxcdC8qIFNvbWVvbmUgYnJvdWdodCBpdCB1cHRvZGF0ZSB3aGlsZSB3ZSB3YWl0ZWQgKi9cXG40OTMwOlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjQ5MzE6XFx0XFx0XFx0Z290byBoYXNfYnVmZmVyO1xcbjQ5MzI6XFx0XFx0fVxcbjQ5MzM6XFx0XFxuNDkzNDpcXHRcXHQvKlxcbjQ5MzU6XFx0XFx0ICogSWYgd2UgaGF2ZSBhbGwgaW5mb3JtYXRpb24gb2YgdGhlIGlub2RlIGluIG1lbW9yeSBhbmQgdGhpc1xcbjQ5MzY6XFx0XFx0ICogaXMgdGhlIG9ubHkgdmFsaWQgaW5vZGUgaW4gdGhlIGJsb2NrLCB3ZSBuZWVkIG5vdCByZWFkIHRoZVxcbjQ5Mzc6XFx0XFx0ICogYmxvY2suXFxuNDkzODpcXHRcXHQgKi9cXG40OTM5OlxcdFxcdGlmIChpbm9kZSBcXHUwMDI2XFx1MDAyNiAhZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKSkge1xcbjQ5NDA6XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaXRtYXBfYmg7XFxuNDk0MTpcXHRcXHRcXHRpbnQgaSwgc3RhcnQ7XFxuNDk0MjpcXHRcXG40OTQzOlxcdFxcdFxcdHN0YXJ0ID0gaW5vZGVfb2Zmc2V0IFxcdTAwMjYgfihpbm9kZXNfcGVyX2Jsb2NrIC0gMSk7XFxuNDk0NDpcXHRcXG40OTQ1OlxcdFxcdFxcdC8qXFxuNDk0NjpcXHRcXHRcXHQgKiBJcyB0aGUgaW5vZGUgYml0bWFwIGluIGNhY2hlPyBOb24tYmxvY2tpbmcgbG9va3VwOiBiaCBhYm92ZVxcbjQ5NDc6XFx0XFx0XFx0ICogaXMgbG9ja2VkLCBhbmQgYmxvY2tpbmcgaGVyZSB3b3VsZCBmb2xpb19sb2NrKCkgYWdhaW5zdCBhXFxuNDk0ODpcXHRcXHRcXHQgKiBibG9ja19yZWFkX2Z1bGxfZm9saW8oKSB0aGF0IGxvY2tzIGJoIHRoZSBvdGhlciB3YXkgcm91bmQuXFxuNDk0OTpcXHRcXHRcXHQgKi9cXG40OTUwOlxcdFxcdFxcdGJpdG1hcF9iaCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7XFxuNDk1MTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWJpdG1hcF9iaCkpXFxuNDk1MjpcXHRcXHRcXHRcXHRnb3RvIG1ha2VfaW87XFxuNDk1MzpcXHRcXG40OTU0OlxcdFxcdFxcdC8qXFxuNDk1NTpcXHRcXHRcXHQgKiBJZiB0aGUgaW5vZGUgYml0bWFwIGlzbid0IGluIGNhY2hlIHRoZW4gdGhlXFxuNDk1NjpcXHRcXHRcXHQgKiBvcHRpbWlzYXRpb24gbWF5IGVuZCB1cCBwZXJmb3JtaW5nIHR3byByZWFkcyBpbnN0ZWFkXFxuNDk1NzpcXHRcXHRcXHQgKiBvZiBvbmUsIHNvIHNraXAgaXQuXFxuNDk1ODpcXHRcXHRcXHQgKi9cXG40OTU5OlxcdFxcdFxcdGlmICghYnVmZmVyX3VwdG9kYXRlKGJpdG1hcF9iaCkpIHtcXG40OTYwOlxcdFxcdFxcdFxcdGJyZWxzZShiaXRtYXBfYmgpO1xcbjQ5NjE6XFx0XFx0XFx0XFx0Z290byBtYWtlX2lvO1xcbjQ5NjI6XFx0XFx0XFx0fVxcbjQ5NjM6XFx0XFx0XFx0Zm9yIChpID0gc3RhcnQ7IGkgXFx1MDAzYyBzdGFydCArIGlub2Rlc19wZXJfYmxvY2s7IGkrKykge1xcbjQ5NjQ6XFx0XFx0XFx0XFx0aWYgKGkgPT0gaW5vZGVfb2Zmc2V0KVxcbjQ5NjU6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNDk2NjpcXHRcXHRcXHRcXHRpZiAoZXh0NF90ZXN0X2JpdChpLCBiaXRtYXBfYmgtXFx1MDAzZWJfZGF0YSkpXFxuNDk2NzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG40OTY4OlxcdFxcdFxcdH1cXG40OTY5OlxcdFxcdFxcdGJyZWxzZShiaXRtYXBfYmgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDozOS4wMzI2NzI4NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDcxNTQ1OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGV4dDQgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlcGxhY2luZyBgc2JfZ2V0YmxrYCB3aXRoIGBzYl9maW5kX2dldF9ibG9ja2Agd2l0aGluIGV4dDQncyBgX19leHQ0X2dldF9pbm9kZV9sb2NgIGZ1bmN0aW9uLiBUaGUga2V5IGRpZmZlcmVuY2UsIGFuZCB0aGUgbGlrZWx5IHJlYXNvbiBmb3IgdGhlIGNoYW5nZSwgaXMgdGhhdCBgc2JfZ2V0YmxrYCBhbGxvY2F0ZXMgbmV3IGJ1ZmZlciBoZWFkcy9mb2xpb3MgYW5kIGNhbiBibG9jayB3aGlsZSBkb2luZyBzby4gYHNiX2ZpbmRfZ2V0X2Jsb2NrYCwgb24gdGhlIG90aGVyIGhhbmQsICpvbmx5KiBsb29rcyBmb3IgZXhpc3RpbmcgYmxvY2tzLCBhdm9pZGluZyBhbGxvY2F0aW9uIGFuZCBsb2NraW5nLiBCaW5nbyEgVGhhdCBzY3JlYW1zIFwiZGVhZGxvY2sgZml4XCIgdG8gbWUsIGxpa2VseSByZWxhdGVkIHRvIHBvdGVudGlhbCBsb2NrIGludmVyc2lvbnMgd2l0aGluIGBibG9ja19yZWFkX2Z1bGxfZm9saW8oKWAgb3Igc2ltaWxhciBmdW5jdGlvbnMuIFNtYXJ0IG1vdmUuXG5cbk5vdywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuLi4gaXMgdGhpcyBjb2RlIHBhdGggZXZlbiByZWxldmFudCB0byBvdXIgZWZmb3J0cz8gWWVzLCBleHQ0IGlzIGRlZmluaXRlbHkgYSBwcmltZSB0YXJnZXQuIFN0YW5kYXJkIFFFTVUvR0NFIHN5emthbGxlciBzZXR1cHMgd2lsbCBlYXNpbHkgaGl0IGV4dDQsIGFuZCBpdCdzIHJlYWRpbHkgbW91bnRhYmxlLiBUaGF0J3MgYSBodWdlIFwieWVzXCIgZm9yIHJlYWNoYWJpbGl0eS4gVGhpcyBpcyAqY29yZSogZmlsZXN5c3RlbSBjb2RlLCBzbyBhIGNoYW5nZSBoZXJlIGlzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBXb3J0aEZ1enppbmcgPSBUcnVlLlxuXG5JJ2xsIHdhbnQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIG5hbWUgYWdhaW4sIGNvbmZpcm1pbmcgdGhhdCB0aGlzIGlzIGBfX2V4dDRfZ2V0X2lub2RlX2xvY2AuIEkgc2hvdWxkIGFsc28gZXhhbWluZSB0aGUgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLCBhbmQgYW55IG5lYXJieSBmdW5jdGlvbnMsIGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgcGljdHVyZSBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjI0OjQyLjEwNDIyNjU3OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA1ODEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2V4dDRfZ2V0X2lub2RlX2xvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9NDc4Mz1zdGF0aWMgaW50IGV4dDRfZmlsbF9yYXdfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00ODgzLSAqL1xcbmZzL2V4dDQvaW5vZGUuYzo0ODg0OnN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuZnMvZXh0NC9pbm9kZS5jLTQ4ODUtXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MDMxLVxcbmZzL2V4dDQvaW5vZGUuYzo1MDMyOnN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvaW5vZGUuYy01MDMzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTAzNy1cXG5mcy9leHQ0L2lub2RlLmM6NTAzODpcXHRyZXQgPSBfX2V4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUtXFx1MDAzZWlfaW5vLCBOVUxMLCBpbG9jLFxcbmZzL2V4dDQvaW5vZGUuYy01MDM5LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZlcnJfYmxrKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MDQ4PWludCBleHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MDUyLVxcbmZzL2V4dDQvaW5vZGUuYzo1MDUzOlxcdHJldCA9IF9fZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLVxcdTAwM2VpX3NiLCBpbm9kZS1cXHUwMDNlaV9pbm8sIGlub2RlLCBpbG9jLFxcbmZzL2V4dDQvaW5vZGUuYy01MDU0LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZlcnJfYmxrKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MTE1PWludCBleHQ0X2dldF9mY19pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTExNy17XFxuZnMvZXh0NC9pbm9kZS5jOjUxMTg6XFx0cmV0dXJuIF9fZXh0NF9nZXRfaW5vZGVfbG9jKHNiLCBpbm8sIE5VTEwsIGlsb2MsIE5VTEwpO1xcbmZzL2V4dDQvaW5vZGUuYy01MTE5LX1cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MzIxPXN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTM3OC1cXG5mcy9leHQ0L2lub2RlLmM6NTM3OTpcXHRyZXQgPSBfX2V4dDRfZ2V0X2lub2RlX2xvY19ub2lubWVtKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbm9kZS5jLTUzODAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTkxMT1pbnQgZXh0NF9zeW5jX2lub2RlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU5MjAtXFxuZnMvZXh0NC9pbm9kZS5jOjU5MjE6XFx0ZXJyID0gX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5vZGUuYy01OTIyLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjI0OjQyLjE1MTI5MDEyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTg1NDkxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpbm9kZSBsb2NhdGlvbiByZXRyaWV2YWwgaW4gZXh0NCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBmb3IgZmV0Y2hpbmcgaW5vZGUgbG9jYXRpb25zLCBzcGVjaWZpY2FsbHkgYGV4dDRfZ2V0X2lub2RlX2xvY2AgYW5kIGl0cyBpbnRlcm5hbCBmdW5jdGlvbiBgX19leHQ0X2dldF9pbm9kZV9sb2NgLiBJJ20gZm9jdXNpbmcgb24gdGhlaXIgaW50ZXJhY3Rpb24uIEkgc2VlIGEgc3BlY2lmaWMgY29uZGl0aW9uYWwgY2hlY2sgb24gbGluZSA0OTM5LCB3aGVyZSB0aGUgY29kZSBjaGVja3MgaWYgdGhlIGlub2RlIGlzIHByZXNlbnQsIGFuZCB0aGVuIGlmIGl0ICpkb2Vzbid0KiBoYXZlIHRoZSBgRVhUNF9TVEFURV9YQVRUUmAgc3RhdGUgc2V0LiBXaXRoaW4gdGhhdCBjb25kaXRpb25hbCBibG9jaywgYF9fZXh0NF9nZXRfaW5vZGVfbG9jYCBnZXRzIGNhbGxlZCBieSBgZXh0NF9nZXRfaW5vZGVfbG9jYCB3aGVuIHRoZSBpbm9kZSBwb2ludGVyIGlzbid0IE5VTEwuIEl0IGlzIHdvcnRoIG5vdGluZyBoZXJlIHRoYXQgYGlub2RlICE9IE5VTExgIGlzIHRoZSBjb25kaXRpb24gdG8gaGF2ZSBgX19leHQ0X2dldF9pbm9kZV9sb2NgIGNhbGxlZCBieSBgZXh0NF9nZXRfaW5vZGVfbG9jYC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBvZiBpbnRlcmVzdC4gTm93LCBJIHNob3VsZCBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBleHQ0X2dldF9pbm9kZV9sb2NgIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgd2l0aGluIHRoZSBmaWxlc3lzdGVtJ3Mgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjI0OjQ0LjM2OTg0MTU5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1MTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2dldF9pbm9kZV9sb2NcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zMTkyPWV4dGVybiBpbnQgZXh0NF9jaGFuZ2VfaW5vZGVfam91cm5hbF9mbGFnKHN0cnVjdCBpbm9kZSAqLCBpbnQpO1xcbmZzL2V4dDQvZXh0NC5oOjMxOTM6aW50IGV4dDRfZ2V0X2lub2RlX2xvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKTtcXG5mcy9leHQ0L2V4dDQuaC0zMTk0LWludCBleHQ0X2dldF9pbm9kZV9sb2Nfbm9pbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTUyMzA9c3RhdGljIGludCBleHQ0X2lvbWFwX3hhdHRyX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTI0Mi1cXG5mcy9leHQ0L2V4dGVudHMuYzo1MjQzOlxcdFxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNTI0NC1cXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTExMD1pbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExNy1cXG5mcy9leHQ0L2lubGluZS5jOjExODpcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTE5LVxcdGlmIChlcnJvcikge1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xNDM9aW50IGV4dDRfZmluZF9pbmxpbmVfZGF0YV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTU2LVxcbmZzL2V4dDQvaW5saW5lLmM6MTU3OlxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNTgtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0yNjY9c3RhdGljIGludCBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yNzgtXFxuZnMvZXh0NC9pbmxpbmUuYzoyNzk6XFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpcy5pbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTI4MC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTMzNT1zdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTM1MS1cXG5mcy9leHQ0L2lubGluZS5jOjM1MjpcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlzLmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMzUzLVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NDM1PXN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy00NTQtXFxuZnMvZXh0NC9pbmxpbmUuYzo0NTU6XFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpcy5pbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTQ1Ni1cXHRpZiAoZXJyb3IpIHtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NTAyPXN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01MTgtXFxuZnMvZXh0NC9pbmxpbmUuYzo1MTk6XFx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy01MjAtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NTcxPXN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNTkxLVxcbmZzL2V4dDQvaW5saW5lLmM6NTkyOlxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtNTkzLVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTY5NT1pbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy03MDYtXFxuZnMvZXh0NC9pbmxpbmUuYzo3MDc6XFx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy03MDgtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NzkzPWludCBleHQ0X3dyaXRlX2lubGluZV9kYXRhX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTgwNS1cXHRpZiAobGlrZWx5KGNvcGllZCkpIHtcXG5mcy9leHQ0L2lubGluZS5jOjgwNjpcXHRcXHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTgwNy1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTExOTg9aW50IGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMjA0LVxcbmZzL2V4dDQvaW5saW5lLmM6MTIwNTpcXHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMjA2LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEyNjc9aW50IGV4dDRfaW5saW5lZGlyX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMjgzLVxcbmZzL2V4dDQvaW5saW5lLmM6MTI4NDpcXHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTEyODUtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTM4OD1pbnQgZXh0NF9yZWFkX2lubGluZV9kaXIoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE0MDItXFxuZnMvZXh0NC9pbmxpbmUuYzoxNDAzOlxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTQwNC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xNTI4PXZvaWQgKmV4dDRfcmVhZF9pbmxpbmVfbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNTMzLVxcbmZzL2V4dDQvaW5saW5lLmM6MTUzNDpcXHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTE1MzUtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTU1Nz1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZ2V0X2ZpcnN0X2lubGluZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNTYyLVxcbmZzL2V4dDQvaW5saW5lLmM6MTU2MzpcXHQqcmV0dmFsID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNTY0LVxcdGlmICgqcmV0dmFsKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xNTc3PWludCBleHQ0X3RyeV9jcmVhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTU4My1cXG5mcy9leHQ0L2lubGluZS5jOjE1ODQ6XFx0cmV0ID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNTg1LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE2MTA9c3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2ZpbmRfaW5saW5lX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNjI1LVxcbmZzL2V4dDQvaW5saW5lLmM6MTYyNjpcXHRyZXQgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcXHUwMDI2aXMuaWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNjI3LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE2NzM9aW50IGV4dDRfZGVsZXRlX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNjgyLVxcbmZzL2V4dDQvaW5saW5lLmM6MTY4MzpcXHRlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MoZGlyLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNjg0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE3NTY9Ym9vbCBlbXB0eV9pbmxpbmVfZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgKmhhc19pbmxpbmVfZGF0YSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTc2NS1cXG5mcy9leHQ0L2lubGluZS5jOjE3NjY6XFx0ZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGRpciwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTc2Ny1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE4MzA9aW50IGV4dDRfaW5saW5lX2RhdGFfaW9tYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlvbWFwICppb21hcClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTgzOS1cXG5mcy9leHQ0L2lubGluZS5jOjE4NDA6XFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTE4NDEtXFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xODYyPWludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTg5Mi1cXG5mcy9leHQ0L2lubGluZS5jOjE4OTM6XFx0aWYgKChlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpcy5pbG9jKSkgIT0gMClcXG5mcy9leHQ0L2lubGluZS5jLTE4OTQtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE5NzQ9aW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xOTk5LVxcdGlsb2MuYmggPSBOVUxMO1xcbmZzL2V4dDQvaW5saW5lLmM6MjAwMDpcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMjAwMS1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDc4Mz1zdGF0aWMgaW50IGV4dDRfZmlsbF9yYXdfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00ODgzLSAqL1xcbmZzL2V4dDQvaW5vZGUuYzo0ODg0OnN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuZnMvZXh0NC9pbm9kZS5jLTQ4ODUtXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MDMyPXN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Nfbm9pbm1lbShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUwMzctXFxuZnMvZXh0NC9pbm9kZS5jOjUwMzg6XFx0cmV0ID0gX19leHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLVxcdTAwM2VpX2lubywgTlVMTCwgaWxvYyxcXG5mcy9leHQ0L2lub2RlLmMtNTAzOS1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZXJyX2Jsayk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTA0Ny1cXG5mcy9leHQ0L2lub2RlLmM6NTA0ODppbnQgZXh0NF9nZXRfaW5vZGVfbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXFxuZnMvZXh0NC9pbm9kZS5jLTUwNDkte1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUwNTItXFxuZnMvZXh0NC9pbm9kZS5jOjUwNTM6XFx0cmV0ID0gX19leHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUtXFx1MDAzZWlfc2IsIGlub2RlLVxcdTAwM2VpX2lubywgaW5vZGUsIGlsb2MsXFxuZnMvZXh0NC9pbm9kZS5jLTUwNTQtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmVycl9ibGspO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUwNjMtLypcXG5mcy9leHQ0L2lub2RlLmM6NTA2NDogKiBleHQ0X2dldF9pbm9kZV9sb2Nfbm9pbygpIGlzIGEgYmVzdC1lZmZvcnQgdmFyaWFudCBvZiBleHQ0X2dldF9pbm9kZV9sb2MoKS5cXG5mcy9leHQ0L2lub2RlLmMtNTA2NS0gKiBJdCBsb29rcyB1cCB0aGUgaW5vZGUgdGFibGUgYmxvY2sgaW4gdGhlIGJ1ZmZlciBjYWNoZSBhbmQgcmV0dXJucyAtRUFHQUlOIGlmXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTExNT1pbnQgZXh0NF9nZXRfZmNfaW5vZGVfbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUxMTcte1xcbmZzL2V4dDQvaW5vZGUuYzo1MTE4OlxcdHJldHVybiBfX2V4dDRfZ2V0X2lub2RlX2xvYyhzYiwgaW5vLCBOVUxMLCBpbG9jLCBOVUxMKTtcXG5mcy9leHQ0L2lub2RlLmMtNTExOS19XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NjUwMT1leHQ0X3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02NTA5LVxcbmZzL2V4dDQvaW5vZGUuYzo2NTEwOlxcdGVyciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgaWxvYyk7XFxuZnMvZXh0NC9pbm9kZS5jLTY1MTEtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz03MTY9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldHByb2plY3Qoc3RydWN0IGlub2RlICppbm9kZSwgX191MzIgcHJvamlkKVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTc1MC1cXG5mcy9leHQ0L2lvY3RsLmM6NzUxOlxcdGVyciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW9jdGwuYy03NTItXFx0aWYgKGVycilcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz02NDY9ZXh0NF94YXR0cl9pYm9keV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtNjU4LVxcdFxcdHJldHVybiAtRU5PREFUQTtcXG5mcy9leHQ0L3hhdHRyLmM6NjU5OlxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC94YXR0ci5jLTY2MC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9Nzg5PWV4dDRfeGF0dHJfaWJvZHlfbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTc5OC1cXHRcXHRyZXR1cm4gMDtcXG5mcy9leHQ0L3hhdHRyLmM6Nzk5OlxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC94YXR0ci5jLTgwMC1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9ODY2PWludCBleHQ0X2dldF9pbm9kZV91c2FnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90ICp1c2FnZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy04NzgtXFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikpIHtcXG5mcy9leHQ0L3hhdHRyLmM6ODc5OlxcdFxcdHJldCA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQveGF0dHIuYy04ODAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xMTcxPWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTE4Ny1cXHRlbHNlIHtcXG5mcy9leHQ0L3hhdHRyLmM6MTE4ODpcXHRcXHRlcnIgPSBleHQ0X2dldF9pbm9kZV9sb2MocGFyZW50LCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC94YXR0ci5jLTExODktXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI2MDc9c3RhdGljIGludCBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNjU3LVxcbmZzL2V4dDQveGF0dHIuYzoyNjU4OlxcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMtXFx1MDAzZWlsb2MpO1xcbmZzL2V4dDQveGF0dHIuYy0yNjU5LVxcdGlmIChlcnJvcilcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yODc4PWludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI4OTctXFxuZnMvZXh0NC94YXR0ci5jOjI4OTg6XFx0XFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjg5OS1cXHRcXHRpZiAoZXJyb3IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NDQuNDE3Mzk2NzcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NzgwMzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEVYVDQgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGV4dDQgZmlsZXN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgbWFpbiBLY29uZmlnIGZpbGUgZm9yIGEgZ2VuZXJhbCBvdmVydmlldyDigJMgYEVYVDRfRlNgIHNob3VsZCBiZSB0aGUga2V5IHN5bWJvbC4gVGhlbiwgdG8gZ2V0IHRoZSBzcGVjaWZpY3MgYW5kIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IHN5bWJvbCwgSSdsbCBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGV4dDQtc3BlY2lmaWMgS2NvbmZpZyBmaWxlIGxvY2F0ZWQgd2l0aGluIHRoZSBmaWxlc3lzdGVtJ3MgZGlyZWN0b3J5OiBgZnMvZXh0NC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGV0YWlsZWQgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gZXh0NC4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgd2F5IHRvIHRyYWNlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdoaWNoIEkgYWxyZWFkeSBrbm93IVxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NDYuNDA1MjAyNTIxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEVYVDRfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDU6XFx0XFx0c2VsZWN0IEpCRDJcXG4gICA2OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA5OlxcdFxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXFxuICAxNDpcXHRcXHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcXG4gIDE1OlxcdFxcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxcbiAgMTY6XFx0XFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcXG4gIDE3OlxcdFxcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXFxuICAxODpcXHRcXHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxcbiAgMTk6XFx0XFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XFxuICAyMDpcXHRcXHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcXG4gIDIzOlxcdFxcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxcbiAgMjQ6XFx0XFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxcbiAgMjU6XFx0XFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XFxuICAyNjpcXHRcXHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xcbiAgMjc6XFx0XFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxcbiAgMjg6XFx0XFx0ICBjb21wYXRpYmxlLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcXG4gIDMxOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuICAzNjpcXHRcXHRib29sIFxcXCJVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gRVhUMl9GUz1uXFxuICAzOTpcXHRcXHRkZWZhdWx0IHlcXG4gIDQwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NDYuNDA1MjgxMTUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMzI0MTY1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnM6IGBfX2V4dDRfZ2V0X2lub2RlX2xvY2AgYW5kIGBleHQ0X2dldF9pbm9kZV9sb2NgLiBUaG9zZSBhcmUgbXkgZm9jdXMgcG9pbnRzIGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLCBgRVhUNF9GU2AgaXMgZW5hYmxlZCwgd2hpY2ggaXMgY3J1Y2lhbCwgc28gdGhpcyBhcmVhIGlzIGluIHNjb3BlLlxuXG5UaGUgc3lzdGVtIGZsYWdnZWQgdGhpcyBhcyB3b3J0aCBmdXp6aW5nLCB3aGljaCBtZWFucyBJIHNob3VsZCBkaWcgZGVlcGVyLiBMZXQgbWUgY29uZmlybTogVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgaG93IHRoZSBleHQ0IGlub2RlIGxvY2F0aW9uIGlzIGxvb2tlZCB1cCwgc3dpdGNoaW5nIHRvIGBzYl9maW5kX2dldF9ibG9ja2Agd2hpY2ggaXMgbm9uLWJsb2NraW5nLCB0byBwcmV2ZW50IGRlYWRsb2Nrcy4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0J3MgYWx0ZXJpbmcgdGhlIGZ1bmRhbWVudGFsIGJsb2NrIGxvb2t1cCBhbmQgY2FjaGluZyBtZWNoYW5pc20gd2l0aGluIGBleHQ0YCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaW5vZGUgYml0bWFwIHJlYWRzLiBJdCdzIHRvdWNoaW5nIGBfX2V4dDRfZ2V0X2lub2RlX2xvY2Agd2l0aGluIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlLiBUaGlzIGlzIGEgY29yZSBjaGFuZ2UuIFN3aXRjaGluZyBmcm9tIGBzYl9nZXRibGtgIHRvIGBzYl9maW5kX2dldF9ibG9ja2AgaXMgYSBub3RhYmxlIHNoaWZ0IGluIGhvdyB0aGUgZmlsZSBzeXN0ZW0gaGFuZGxlcyBwb3RlbnRpYWwgY29udGVudGlvbi5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBhbGwgdGhlIGRldGFpbHMgbGluZSB1cC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMganVzdGlmaWVkLiBUaGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYxMCwiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDo1Mi41Mzc3MDE0MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTM0MzA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZXh0NF9nZXRfaW5vZGVfbG9jXCIsXG4gICAgXCJleHQ0X2dldF9pbm9kZV9sb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBidWZmZXIgY2FjaGUgbG9va3VwIGJlaGF2aW9yIGluIF9fZXh0NF9nZXRfaW5vZGVfbG9jKCkgYnkgdXNpbmcgc2JfZmluZF9nZXRfYmxvY2soKSBpbnN0ZWFkIG9mIHNiX2dldGJsaygpIHRvIGF2b2lkIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2Nrcy4gVGhpcyBpcyByZWFjaGFibGUsIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgaW5vZGUgYWxsb2NhdGlvbiwgcmVhZCwgYW5kIHdyaXRlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2V4dDRfZ2V0X2lub2RlX2xvY1wiLFxuICAgIFwiZXh0NF9nZXRfaW5vZGVfbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnVmZmVyIGNhY2hlIGxvb2t1cCBiZWhhdmlvciBpbiBfX2V4dDRfZ2V0X2lub2RlX2xvYygpIGJ5IHVzaW5nIHNiX2ZpbmRfZ2V0X2Jsb2NrKCkgaW5zdGVhZCBvZiBzYl9nZXRibGsoKSB0byBhdm9pZCBsb2NrIGludmVyc2lvbiBkZWFkbG9ja3MuIFRoaXMgaXMgcmVhY2hhYmxlLCBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gdmVyaWZ5IGlub2RlIGFsbG9jYXRpb24sIHJlYWQsIGFuZCB3cml0ZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NTIuNjE5MDUxNjE0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY5Nzc2MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NTIuNjE5NjM4MzIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTc2OTE4NTY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBgc2JfZ2V0YmxrKClgIHRvIGBzYl9maW5kX2dldF9ibG9jaygpYCBpbiBgX19leHQ0X2dldF9pbm9kZV9sb2MoKWAgd2l0aGluIGBmcy9leHQ0L2lub2RlLmNgLiBUaGlzIHJlcGxhY2VzIGEgcG90ZW50aWFsbHkgYmxvY2tpbmcgYnVmZmVyIGFsbG9jYXRpb24gd2l0aCBhIG5vbi1ibG9ja2luZyBwYWdlL2J1ZmZlciBjYWNoZSBsb29rdXAgdG8gYXZvaWQgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGZvbGlvIGxvY2tzIGFuZCBidWZmZXIgaGVhZCBsb2Nrcy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgY29uY3VycmVuY3kvbG9ja2luZy1yZWxhdGVkIChkZXRlY3RhYmxlIGJ5IExPQ0tERVApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmOWM5N2UxNjc4ZDQyOGU3Y2FiNzJiNDkxYTc3Y2Q2NzkxYzgwODA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMToyNDozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggYmQ0Yjc3OGRmOWViMi4uMTNlM2NiODI5NDYxOSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNDk0Miw4ICs0OTQyLDEyIEBAIHN0YXRpYyBpbnQgX19leHQ0X2dldF9pbm9kZV9sb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXG4gXG4gXHRcdHN0YXJ0ID0gaW5vZGVfb2Zmc2V0IFx1MDAyNiB+KGlub2Rlc19wZXJfYmxvY2sgLSAxKTtcbiBcbi1cdFx0LyogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gKi9cbi1cdFx0Yml0bWFwX2JoID0gc2JfZ2V0YmxrKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZ2RwKSk7XG4rXHRcdC8qXG4rXHRcdCAqIElzIHRoZSBpbm9kZSBiaXRtYXAgaW4gY2FjaGU/IE5vbi1ibG9ja2luZyBsb29rdXA6IGJoIGFib3ZlXG4rXHRcdCAqIGlzIGxvY2tlZCwgYW5kIGJsb2NraW5nIGhlcmUgd291bGQgZm9saW9fbG9jaygpIGFnYWluc3QgYVxuK1x0XHQgKiBibG9ja19yZWFkX2Z1bGxfZm9saW8oKSB0aGF0IGxvY2tzIGJoIHRoZSBvdGhlciB3YXkgcm91bmQuXG4rXHRcdCAqL1xuK1x0XHRiaXRtYXBfYmggPSBzYl9maW5kX2dldF9ibG9jayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpO1xuIFx0XHRpZiAodW5saWtlbHkoIWJpdG1hcF9iaCkpXG4gXHRcdFx0Z290byBtYWtlX2lvO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NTIuNjE5NjQwMTYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MjUwODAwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBKdXN0aWZpY2F0aW9uOiBFeHQ0IElub2RlLmMgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gYXNzZXNzIHRoaXMgcGF0Y2ggYW5kIGRlY2lkZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIHNlZS4uLiB0aGUgZGlmZiBpcyBpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgbGluZSA0OTQyLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgcmVwbGFjZWQgYHNiX2dldGJsaygpYCB3aXRoIGBzYl9maW5kX2dldF9ibG9jaygpYCBmb3IgcmV0cmlldmluZyB0aGUgaW5vZGUgYml0bWFwIGJsb2NrLiBUaGUgY29tbWVudCBtZW50aW9ucyBub24tYmxvY2tpbmcgbG9va3VwIGFuZCBhIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpbyB3aXRoIGBibG9ja19yZWFkX2Z1bGxfZm9saW8oKWAuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHdvcnRoIGEgY2xvc2VyIGxvb2suIERlYWRsb2NrIGF2b2lkYW5jZSBpcyBhbHdheXMgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IGluIGEgZmlsZSBzeXN0ZW0gY29udGV4dC4gYHNiX2ZpbmRfZ2V0X2Jsb2NrKClgIHN1Z2dlc3RzIHRoZXkncmUgbm93IHRyeWluZyB0byByZXRyaWV2ZSB0aGUgYmxvY2sgZnJvbSB0aGUgYnVmZmVyIGNhY2hlIGluIGEgbm9uLWJsb2NraW5nIG1hbm5lci4gSWYgaXQncyBub3QgcHJlc2VudCwgaXQnbGwgdHJpZ2dlciBhbiBJL08gcGF0aCBlbHNld2hlcmUsIEknZCBndWVzcy5cblxuR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGxvdy1sZXZlbCBibG9jayByZXRyaWV2YWwgYW5kIGEgY3JpdGljYWwgcGF0aCBpbiBleHQ0J3MgaW5vZGUgb3BlcmF0aW9ucywgYW5kIHRoZSBleHBsaWNpdCBtZW50aW9uIG9mIGF2b2lkaW5nIGEgbG9jayBvcmRlcmluZyBpc3N1ZSB3aXRoIGEgcG90ZW50aWFsbHkgYmxvY2tpbmcgZnVuY3Rpb24sIHRoaXMgYWJzb2x1dGVseSB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHBvc3NpYmlsaXR5IG9mIG1pc3NlZCBsb2NraW5nLCBpbmNvcnJlY3QgdXNhZ2Ugb2YgYnVmZmVyIGhlYWRzLCBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGludHJvZHVjZWQgYnkgdGhlIG5ldyBub24tYmxvY2tpbmcgbG9va3VwIG1ldGhvZCBpcyB2ZXJ5IHJlYWwuIEl0IGFsc28gbWlnaHQgYmUgd29ydGh3aGlsZSB0byBzZWUgaWYgYW55IG90aGVyIHNpbWlsYXIgY2FsbHMgZXhpc3QuIFdlIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGhvdyBgc2JfZmluZF9nZXRfYmxvY2tgIGlzIGhhbmRsZWQgaW50ZXJuYWxseSwgYW5kIHNlZSBob3cgdGhlIEkvTyBwYXRoIGlzIHByb3RlY3RlZCBvciBjb29yZGluYXRlZC4gVGhpcyBjaGFuZ2UgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgdW5kZXIgS01TQU4uIEkgdGhpbmsgd2UgbmVlZCB0byB0aHJvdyBzb21lIGZ1enppbmcgY3ljbGVzIGF0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToyNDo1Ni4xNDQ3MjM2NDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0OTIwOlxcdFxcbjQ5MjE6XFx0XFx0YmggPSBzYl9nZXRibGsoc2IsIGJsb2NrKTtcXG40OTIyOlxcdFxcdGlmICh1bmxpa2VseSghYmgpKVxcbjQ5MjM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDkyNDpcXHRcXHRpZiAoZXh0NF9idWZmZXJfdXB0b2RhdGUoYmgpKVxcbjQ5MjU6XFx0XFx0XFx0Z290byBoYXNfYnVmZmVyO1xcbjQ5MjY6XFx0XFxuNDkyNzpcXHRcXHRsb2NrX2J1ZmZlcihiaCk7XFxuNDkyODpcXHRcXHRpZiAoZXh0NF9idWZmZXJfdXB0b2RhdGUoYmgpKSB7XFxuNDkyOTpcXHRcXHRcXHQvKiBTb21lb25lIGJyb3VnaHQgaXQgdXB0b2RhdGUgd2hpbGUgd2Ugd2FpdGVkICovXFxuNDkzMDpcXHRcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG40OTMxOlxcdFxcdFxcdGdvdG8gaGFzX2J1ZmZlcjtcXG40OTMyOlxcdFxcdH1cXG40OTMzOlxcdFxcbjQ5MzQ6XFx0XFx0LypcXG40OTM1OlxcdFxcdCAqIElmIHdlIGhhdmUgYWxsIGluZm9ybWF0aW9uIG9mIHRoZSBpbm9kZSBpbiBtZW1vcnkgYW5kIHRoaXNcXG40OTM2OlxcdFxcdCAqIGlzIHRoZSBvbmx5IHZhbGlkIGlub2RlIGluIHRoZSBibG9jaywgd2UgbmVlZCBub3QgcmVhZCB0aGVcXG40OTM3OlxcdFxcdCAqIGJsb2NrLlxcbjQ5Mzg6XFx0XFx0ICovXFxuNDkzOTpcXHRcXHRpZiAoaW5vZGUgXFx1MDAyNlxcdTAwMjYgIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikpIHtcXG40OTQwOlxcdFxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoO1xcbjQ5NDE6XFx0XFx0XFx0aW50IGksIHN0YXJ0O1xcbjQ5NDI6XFx0XFxuNDk0MzpcXHRcXHRcXHRzdGFydCA9IGlub2RlX29mZnNldCBcXHUwMDI2IH4oaW5vZGVzX3Blcl9ibG9jayAtIDEpO1xcbjQ5NDQ6XFx0XFxuNDk0NTpcXHRcXHRcXHQvKlxcbjQ5NDY6XFx0XFx0XFx0ICogSXMgdGhlIGlub2RlIGJpdG1hcCBpbiBjYWNoZT8gTm9uLWJsb2NraW5nIGxvb2t1cDogYmggYWJvdmVcXG40OTQ3OlxcdFxcdFxcdCAqIGlzIGxvY2tlZCwgYW5kIGJsb2NraW5nIGhlcmUgd291bGQgZm9saW9fbG9jaygpIGFnYWluc3QgYVxcbjQ5NDg6XFx0XFx0XFx0ICogYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKCkgdGhhdCBsb2NrcyBiaCB0aGUgb3RoZXIgd2F5IHJvdW5kLlxcbjQ5NDk6XFx0XFx0XFx0ICovXFxuNDk1MDpcXHRcXHRcXHRiaXRtYXBfYmggPSBzYl9maW5kX2dldF9ibG9jayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCkpO1xcbjQ5NTE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFiaXRtYXBfYmgpKVxcbjQ5NTI6XFx0XFx0XFx0XFx0Z290byBtYWtlX2lvO1xcbjQ5NTM6XFx0XFxuNDk1NDpcXHRcXHRcXHQvKlxcbjQ5NTU6XFx0XFx0XFx0ICogSWYgdGhlIGlub2RlIGJpdG1hcCBpc24ndCBpbiBjYWNoZSB0aGVuIHRoZVxcbjQ5NTY6XFx0XFx0XFx0ICogb3B0aW1pc2F0aW9uIG1heSBlbmQgdXAgcGVyZm9ybWluZyB0d28gcmVhZHMgaW5zdGVhZFxcbjQ5NTc6XFx0XFx0XFx0ICogb2Ygb25lLCBzbyBza2lwIGl0LlxcbjQ5NTg6XFx0XFx0XFx0ICovXFxuNDk1OTpcXHRcXHRcXHRpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaXRtYXBfYmgpKSB7XFxuNDk2MDpcXHRcXHRcXHRcXHRicmVsc2UoYml0bWFwX2JoKTtcXG40OTYxOlxcdFxcdFxcdFxcdGdvdG8gbWFrZV9pbztcXG40OTYyOlxcdFxcdFxcdH1cXG40OTYzOlxcdFxcdFxcdGZvciAoaSA9IHN0YXJ0OyBpIFxcdTAwM2Mgc3RhcnQgKyBpbm9kZXNfcGVyX2Jsb2NrOyBpKyspIHtcXG40OTY0OlxcdFxcdFxcdFxcdGlmIChpID09IGlub2RlX29mZnNldClcXG40OTY1OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ5NjY6XFx0XFx0XFx0XFx0aWYgKGV4dDRfdGVzdF9iaXQoaSwgYml0bWFwX2JoLVxcdTAwM2ViX2RhdGEpKVxcbjQ5Njc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDk2ODpcXHRcXHRcXHR9XFxuNDk2OTpcXHRcXHRcXHRicmVsc2UoYml0bWFwX2JoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MjQ6NTYuMTQ1NDcwMDI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNDMzMzQwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaGFuZ2U6IEEgRGVlcGVyIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJ3JlIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSBidWZmZXIgaGVhZHMgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBgX19leHQ0X2dldF9pbm9kZV9sb2MoKWAuIFByZXZpb3VzbHksIHdlIHVzZWQgYHNiX2dldGJsaygpYCwgd2hpY2gsIEkga25vdywgaXMgYSBibG9ja2luZyBvcGVyYXRpb24g4oCTIGl0IGZpbmRzIG9yICphbGxvY2F0ZXMqIGEgYnVmZmVyIGhlYWQsIGNyZWF0aW5nIGl0IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gVGhhdCBhbGxvY2F0aW9uIGNhbiBpbnRyb2R1Y2UgZGVsYXlzLCB3YWl0aW5nIG9uIGZvbGlvIGxvY2tzIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgYWxsb2NhdGlvbi4gTm93LCB3ZSdyZSBzd2FwcGluZyB0aGF0IG91dCB3aXRoIGBzYl9maW5kX2dldF9ibG9jaygpYC4gVGhhdCdzIGEgY2xldmVyIG1vdmUuIFRoaXMgZnVuY3Rpb24gKm9ubHkqIGxvb2tzIGZvciB0aGUgYnVmZmVyIGhlYWQgaW4gdGhlIHBhZ2Ugb3IgYnVmZmVyIGNhY2hlOyBpdCBkb2Vzbid0IGFsbG9jYXRlIGFueXRoaW5nIGlmIGl0J3Mgbm90IHRoZXJlLCBzbyBubyBibG9ja2luZy5cblxuSWYgYHNiX2ZpbmRfZ2V0X2Jsb2NrYCBkb2Vzbid0IGZpbmQgdGhlIGJ1ZmZlciBoZWFkLCB3ZSBqdW1wIHRvIGBtYWtlX2lvYCwgd2hpY2ggcHJlc3VtYWJseSBoYW5kbGVzIHRoZSBJL08gdG8gZ2V0IGl0LiBJZiBpdCAqZG9lcyogZmluZCBpdCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgdXAtdG8tZGF0ZS4gYCFidWZmZXJfdXB0b2RhdGUoYml0bWFwX2JoKWAgYW5kIGlmIGl0IGlzbid0LCB3ZSBza2lwIG9wdGltaXphdGlvbiwgYW5kIG9mZiB0byBgbWFrZV9pb2Agd2UgZ28uIElmIGl0ICppcyogdXB0b2RhdGUsIHRoZW4gd2UgcmVhZCBgYml0bWFwX2JoLVx1MDAzZWJfZGF0YWAuIFNpbXBsZS4gVGhpcyBzZWVtcyB0byBiZSBhIGRlYWRsb2NrIGZpeCDigJMgYWRkcmVzc2luZyBhIGxvY2tpbmcgb3JkZXIgaXNzdWUgYmV0d2VlbiB0aGUgYnVmZmVyIGxvY2sgYW5kIHRoZSBmb2xpbyBsb2NrLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIG91ciBvdmVyYWxsIHN0YWJpbGl0eS5cblxuTm93LCB0aGUgbWFpbiBjb25jZXJuOiBhcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdpdGggdGhpcyBjaGFuZ2U/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC5cblxuKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYnVmZmVycyBhcmUgYmVpbmcgY3JlYXRlZC4gV2UncmUganVzdCBmaW5kaW5nIGFuIGV4aXN0aW5nIG9uZSwgb3IgZG9pbmcgdGhlIEkvTy5cbiogICBObyBrZXJuZWwtdG8tdXNlciBzcGFjZSBjb3B5aW5nIG1vZGlmaWNhdGlvbnMuXG4qICAgTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgYmVpbmcgcmVhZCBkaXJlY3RseS5cbiogICBgc2JfZmluZF9nZXRfYmxvY2tgIGlzIGVpdGhlciByZXR1cm5pbmcgYW4gZXhpc3RpbmcgYGJ1ZmZlcl9oZWFkYCAod2hpY2ggd2UgY2hlY2sgaXMgdmFsaWQpLCBvciBOVUxMLlxuKiAgIElmIHdlICpkbyogZ2V0IGEgYGJpdG1hcF9iaGAsIHdlIGNoZWNrIGl0LCBhbmQgdGhlbiBmb3IgYGJ1ZmZlcl91cHRvZGF0ZWAsIGlmIHRoZSBkYXRhIGlzIHVwdG9kYXRlLCBpdCdzIHNhZmUgdG8gcmVhZCBgYl9kYXRhYC4gSWYgbm90LCB3ZSBmYWxsIHRocm91Z2ggdG8gYG1ha2VfaW9gLlxuKiAgIElmIGl0J3Mgbm90IHByZXNlbnQgb3Igbm90IHVwLXRvLWRhdGUsIHdlIGhpdCBgbWFrZV9pb2AsIHdoaWNoIGhhbmRsZXMgdGhlIHJlYWQgb24gYGJoYC5cblxuSXQgc2VlbXMgc2FmZS4gVGhpcyBjaGFuZ2UgYXBwZWFycyB0byBqdXN0IGFkZHJlc3MgYSBwb3RlbnRpYWwgZGVhZGxvY2ssIHNwZWNpZmljYWxseSBhbiBBQkJBIGRlYWRsb2NrL2xvY2sgaW52ZXJzaW9uLiBBbmQgaXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy5cblxuTGV0J3MgY29uZmlybTpcblxuKiAgIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBnZXR0aW5nIHNlbnQgdG8gdXNlciBzcGFjZS5cbiogICBObyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuKiAgIE5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuKiAgIE5vIG5ldyBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoaXMgaXMgYWxsIGNvbnNpc3RlbnQgd2l0aCBLTVNBTiB2cy4gS0FTQU4gY29uc2lkZXJhdGlvbnMuIFdlJ3JlIHJlcGxhY2luZyBhIGJsb2NraW5nIG9wZXJhdGlvbiAoYHNiX2dldGJsaygpYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBvbmUgKGBzYl9maW5kX2dldF9ibG9jaygpYCksIHNvbHZpbmcgYSBsb2NrIGludmVyc2lvbiB0aGF0IGNvdWxkIGJlIGRldGVjdGVkIGJ5IExPQ0tERVAuIFNpbmNlIG5vIG5ldyB2dWxuZXJhYmlsaXRpZXMgaW4gdGVybXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrIHZhcmlhYmxlcywgb3Iga2VybmVsLXRvLXVzZXIgY29waWVzIGFyZSBiZWluZyBleHBvc2VkIG9yIG1vZGlmaWVkLCBLTVNBTiBmdXp6aW5nIGlzbid0IG5lZWRlZC4gUmVndWxhciBLQVNBTi9MT0NLREVQIGlzIGVub3VnaC4gRXhjZWxsZW50LiBMZXQncyBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBmb3JtYXR0ZWQuIFJlYWR5IHRvIHNldCByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjg3LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjI1OjAyLjM4ODgwNjIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGBzYl9nZXRibGsoKWAgdG8gYHNiX2ZpbmRfZ2V0X2Jsb2NrKClgIGluIGBfX2V4dDRfZ2V0X2lub2RlX2xvYygpYCB3aXRoaW4gYGZzL2V4dDQvaW5vZGUuY2AuIFRoaXMgcmVwbGFjZXMgYSBwb3RlbnRpYWxseSBibG9ja2luZyBidWZmZXIgYWxsb2NhdGlvbiB3aXRoIGEgbm9uLWJsb2NraW5nIHBhZ2UvYnVmZmVyIGNhY2hlIGxvb2t1cCB0byBhdm9pZCBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gZm9saW8gbG9ja3MgYW5kIGJ1ZmZlciBoZWFkIGxvY2tzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBjb25jdXJyZW5jeS9sb2NraW5nLXJlbGF0ZWQgKGRldGVjdGFibGUgYnkgTE9DS0RFUCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGludHJvZHVjZSBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgYHNiX2dldGJsaygpYCB0byBgc2JfZmluZF9nZXRfYmxvY2soKWAgaW4gYF9fZXh0NF9nZXRfaW5vZGVfbG9jKClgIHdpdGhpbiBgZnMvZXh0NC9pbm9kZS5jYC4gVGhpcyByZXBsYWNlcyBhIHBvdGVudGlhbGx5IGJsb2NraW5nIGJ1ZmZlciBhbGxvY2F0aW9uIHdpdGggYSBub24tYmxvY2tpbmcgcGFnZS9idWZmZXIgY2FjaGUgbG9va3VwIHRvIGF2b2lkIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2sgYmV0d2VlbiBmb2xpbyBsb2NrcyBhbmQgYnVmZmVyIGhlYWQgbG9ja3MuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGNvbmN1cnJlbmN5L2xvY2tpbmctcmVsYXRlZCAoZGV0ZWN0YWJsZSBieSBMT0NLREVQKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgaW50cm9kdWNlIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaHVzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjrl65[1] Phase: Succeeded StartedAt: 2026-09-06 21:25:13 +0000 UTC FinishedAt: 2026-09-06 21:25:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 21:25:13 +0000 UTC FinishedAt: 2026-09-06 21:25:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2] Phase: Succeeded StartedAt: 2026-09-06 21:25:13 +0000 UTC FinishedAt: 2026-09-07 01:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 21:25:13 +0000 UTC FinishedAt: 2026-09-07 01:15:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 21:25:13 +0000 UTC FinishedAt: 2026-09-06 21:25:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 21:25:13 +0000 UTC FinishedAt: 2026-09-06 21:25:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowjrl65/series-workflowjrl65-convert-artifact-3726488323/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 21:25:24 +0000 UTC FinishedAt: 2026-09-06 21:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 21:25:24 +0000 UTC FinishedAt: 2026-09-06 21:50:13 +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:*34916b52-120d-442b-b78e-9ee1f792090a,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-workflowjrl65/series-workflowjrl65-convert-artifact-3726488323/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": "23e68048-bde1-4adc-86d7-d4876b66382e", "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-workflowjrl65/series-workflowjrl65-build-action-1817207665/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 21:25:24 +0000 UTC FinishedAt: 2026-09-06 21:49:50 +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:*34916b52-120d-442b-b78e-9ee1f792090a,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-workflowjrl65/series-workflowjrl65-convert-artifact-3726488323/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": "23e68048-bde1-4adc-86d7-d4876b66382e", "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-workflowjrl65/series-workflowjrl65-build-action-1817207665/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 21:50:13 +0000 UTC FinishedAt: 2026-09-06 21:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 21:50:13 +0000 UTC FinishedAt: 2026-09-06 21:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 21:50:13 +0000 UTC FinishedAt: 2026-09-06 21:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 21:50:13 +0000 UTC FinishedAt: 2026-09-06 21:50:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowjrl65/series-workflowjrl65-convert-artifact-101202874/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 21:50:23 +0000 UTC FinishedAt: 2026-09-06 21:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 21:50:23 +0000 UTC FinishedAt: 2026-09-06 21:52:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*23e68048-bde1-4adc-86d7-d4876b66382e,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-workflowjrl65/series-workflowjrl65-build-action-1817207665/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-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 21:52:22 +0000 UTC FinishedAt: 2026-09-06 21:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 21:52:22 +0000 UTC FinishedAt: 2026-09-06 21:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 21:52:22 +0000 UTC FinishedAt: 2026-09-06 22:11:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 21:52:22 +0000 UTC FinishedAt: 2026-09-06 22:11:53 +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:*34916b52-120d-442b-b78e-9ee1f792090a,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-workflowjrl65/series-workflowjrl65-convert-artifact-101202874/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": "b0576d16-a9d3-4e89-b280-1931772e8a4c", "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-workflowjrl65/series-workflowjrl65-build-action-2570512926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 21:52:22 +0000 UTC FinishedAt: 2026-09-06 22:11:43 +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:*34916b52-120d-442b-b78e-9ee1f792090a,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-workflowjrl65/series-workflowjrl65-convert-artifact-101202874/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": "b0576d16-a9d3-4e89-b280-1931772e8a4c", "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-workflowjrl65/series-workflowjrl65-build-action-2570512926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 22:11:53 +0000 UTC FinishedAt: 2026-09-06 22:11:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 22:11:53 +0000 UTC FinishedAt: 2026-09-06 22:11:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 22:11:53 +0000 UTC FinishedAt: 2026-09-06 22:13:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 22:11:53 +0000 UTC FinishedAt: 2026-09-06 22:13:42 +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:*b0576d16-a9d3-4e89-b280-1931772e8a4c,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-workflowjrl65/series-workflowjrl65-build-action-2570512926/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-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 22:13:52 +0000 UTC FinishedAt: 2026-09-07 01:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 22:13:52 +0000 UTC FinishedAt: 2026-09-07 01:15:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"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:*23e68048-bde1-4adc-86d7-d4876b66382e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b0576d16-a9d3-4e89-b280-1931772e8a4c,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-workflowjrl65/series-workflowjrl65-build-action-1817207665/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-workflowjrl65/series-workflowjrl65-build-action-2570512926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 22:13:52 +0000 UTC FinishedAt: 2026-09-06 22:14:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 22:13:52 +0000 UTC FinishedAt: 2026-09-06 22:13:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"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-workflowjrl65/series-workflowjrl65-convert-artifact-453755887/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 22:13:52 +0000 UTC FinishedAt: 2026-09-06 22:13:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 22:13:52 +0000 UTC FinishedAt: 2026-09-06 22:13:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 22:13:52 +0000 UTC FinishedAt: 2026-09-06 22:13:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 22:14:02 +0000 UTC FinishedAt: 2026-09-07 01:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjrl65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_get_inode_loc","ext4_get_inode_loc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"1e64bde9-47b2-4137-a2f3-6d00b3b6e17d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 22:14:02 +0000 UTC FinishedAt: 2026-09-07 01:15:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*23e68048-bde1-4adc-86d7-d4876b66382e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b0576d16-a9d3-4e89-b280-1931772e8a4c,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-workflowjrl65/series-workflowjrl65-build-action-1817207665/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-workflowjrl65/series-workflowjrl65-build-action-2570512926/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-workflowjrl65/series-workflowjrl65-convert-artifact-453755887/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,}