Name: series-workflowxttzr Phase: Succeeded StartedAt: 2026-07-14 02:49:25 +0000 UTC FinishedAt: 2026-07-14 07:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[0] Phase: Succeeded StartedAt: 2026-07-14 02:49:25 +0000 UTC FinishedAt: 2026-07-14 03:14:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 02:49:25 +0000 UTC FinishedAt: 2026-07-14 03:14:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_POSIX_ACL", "FUSE_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_POSIX_ACL", "FUSE_FS" ], "series_id": "7abfdc6b-3365-4e77-89a9-8f8b9beb8469" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "forget_all_cached_acls", "forget_cached_acl" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1BPU0lYX0FDTCYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyYjMzQ7LAogICAgJiMzNDtmb3JnZXRfY2FjaGVkX2FjbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIHdoZXJlIGBBQ0xfRE9OVF9DQUNIRWAgY291bGQgYmUgaW5jb3JyZWN0bHkgcmVwbGFjZWQgd2l0aCBgQUNMX05PVF9DQUNIRURgLCBpbmFkdmVydGVudGx5IGVuYWJsaW5nIEFDTCBjYWNoaW5nIGZvciBpbm9kZXMgdGhhdCBzaG91bGRuJiMzOTt0IGhhdmUgaXQgKGUuZy4sIEZVU0UgbW91bnRzIHdpdGhvdXQgYEZVU0VfUE9TSVhfQUNMYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFZGUy9BQ0wgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBhbmQgYGZvcmdldF9jYWNoZWRfYWNsYCB0byBlbnN1cmUgQUNMIGNhY2hpbmcgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzU3NjFjZDU1ZDgyNzYwZWQ4YThmN2Y1ODhlOTcyNmNmYWJmNWEwY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDAzOjEzOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Bvc2l4X2FjbC5jIGIvZnMvcG9zaXhfYWNsLmNcbmluZGV4IGI0YmZlNGRkZjY0ZWE1Li4zZGM2MmMxYzI3MDg3YSAxMDA2NDRcbi0tLSBhL2ZzL3Bvc2l4X2FjbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wb3NpeF9hY2wuY1xuQEAgLTkzLDYgJiM0Mzs5MywxMyBAQCBzdGF0aWMgdm9pZCBfX2ZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKipwKVxuIHtcbiBcdHN0cnVjdCBwb3NpeF9hY2wgKm9sZDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFDTF9ET05UX0NBQ0hFIGlzIGV4cGVjdGVkIHRvIGJlIGEgXCYjMzQ7Y29uc3RcJiMzNDsgdmFsdWUgYW5kIHhjaGcgaXQgd2l0aFxuJiM0MztcdCAqIEFDTF9OT1RfQ0FDSEVEIHdvdWxkIGVuYWJsZSBhY2wgY2FjaGluZyBmb3IgdGhlIGlub2RlIC1cbiYjNDM7XHQgKiBjbGVhcmx5IG5vdCB3aGF0IHRoZSBjYWxsZXIgaGFzIGludGVuZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChSRUFEX09OQ0UoKnApID09IEFDTF9ET05UX0NBQ0hFKVxuJiM0MztcdFx0cmV0dXJuO1xuIFx0b2xkID0geGNoZyhwLCBBQ0xfTk9UX0NBQ0hFRCk7XG4gXHRpZiAoIWlzX3VuY2FjaGVkX2FjbChvbGQpKVxuIFx0XHRwb3NpeF9hY2xfcmVsZWFzZShvbGQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXG5pbmRleCA2MTJhYWQ2OWE5M2FhNC4uZjQ3MTQxNDg0Mjc1MGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXG5AQCAtNSw2ICYjNDM7NSwxMyBAQCBDRkxBR1MgJiM0Mzs9IC1XYWxsIC1PMiAtZyAkKEtIRFJfSU5DTFVERVMpXG4gVEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0XG4gVEVTVF9HRU5fRklMRVMgOj0gZnVzZV9tbnRcbiBcbiYjNDM7IyBmdXNlX2FjbF9jYWNoZV90ZXN0IHJlcXVpcmVzIGxpYmZ1c2UzOyBhZGQgaXQgb25seSB3aGVuIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnQuXG4mIzQzO0FDTF9DRkxBR1MgOj0gJChzaGVsbCBwa2ctY29uZmlnIGZ1c2UzIC0tY2ZsYWdzIDJcdTAwM2UvZGV2L251bGwpXG4mIzQzO0FDTF9MRExJQlMgOj0gJChzaGVsbCBwa2ctY29uZmlnIGZ1c2UzIC0tbGlicyAyXHUwMDNlL2Rldi9udWxsKVxuJiM0MztpZm5lcSAoJChBQ0xfQ0ZMQUdTKSwpXG4mIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSBmdXNlX2FjbF9jYWNoZV90ZXN0XG4mIzQzO2VuZGlmXG4mIzQzO1xuIGluY2x1ZGUgLi4vLi4vbGliLm1rXG4gXG4gVkFSX0NGTEFHUyA6PSAkKHNoZWxsIHBrZy1jb25maWcgZnVzZSAtLWNmbGFncyAyXHUwMDNlL2Rldi9udWxsKVxuQEAgLTE5LDMgJiM0MzsyNiw2IEBAIGVuZGlmXG4gXG4gJChPVVRQVVQpL2Z1c2VfbW50OiBDRkxBR1MgJiM0Mzs9ICQoVkFSX0NGTEFHUylcbiAkKE9VVFBVVCkvZnVzZV9tbnQ6IExETElCUyAmIzQzOz0gJChWQVJfTERMSUJTKVxuJiM0MztcbiYjNDM7JChPVVRQVVQpL2Z1c2VfYWNsX2NhY2hlX3Rlc3Q6IENGTEFHUyAmIzQzOz0gJChBQ0xfQ0ZMQUdTKVxuJiM0MzskKE9VVFBVVCkvZnVzZV9hY2xfY2FjaGVfdGVzdDogTERMSUJTICYjNDM7PSAkKEFDTF9MRExJQlMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iMmU1ZGI4NTU1MDQwOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDM0OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBUZXN0OiBGVVNFIEFDTCBjYWNoaW5nIGJ1ZyB0cmlnZ2VyZWQgYnkgQVRfU1RBVFhfRk9SQ0VfU1lOQ1xuJiM0MzsgKlxuJiM0MzsgKiBBIEZVU0UgbW91bnQgdGhhdCBkb2VzIG5vdCBuZWdvdGlhdGUgRlVTRV9QT1NJWF9BQ0wgaW5pdGlhbGlzZXMgZXZlcnkgaW5vZGVcbiYjNDM7ICogd2l0aCBpX2FjbCA9IGlfZGVmYXVsdF9hY2wgPSBBQ0xfRE9OVF9DQUNIRS4gIFdoZW4gYSBmcmVzaCBzdGF0IGlzIG5lZWRlZFxuJiM0MzsgKiAoZS5nLiBBVF9TVEFUWF9GT1JDRV9TWU5DKSwgZnVzZV91cGRhdGVfZ2V0X2F0dHIoKSBjYWxsc1xuJiM0MzsgKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIGlzc3VpbmcgRlVTRV9HRVRBVFRSLiAgT24gYW4gdW5maXhlZCBrZXJuZWwsXG4mIzQzOyAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxuJiM0MzsgKiBpbmFkdmVydGVudGx5IGVuYWJsaW5nIHRoZSBrZXJuZWwgQUNMIGNhY2hlIGZvciB0aGF0IGlub2RlLiAgVGhlIG5leHRcbiYjNDM7ICogZ2V0eGF0dHIgcG9wdWxhdGVzIHRoZSBjYWNoZS4gIEJlY2F1c2UgZnVzZV9zZXRfYWNsKCkgc2tpcHNcbiYjNDM7ICogZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGZvciAhZmMtXHUwMDNlcG9zaXhfYWNsIG1vdW50cywgYW55IHN1YnNlcXVlbnQgY2hhbmdlIHRvXG4mIzQzOyAqIHRoZSBBQ0wgbGVhdmVzIHRoZSBzdGFsZSBrZXJuZWwgZW50cnkgaW4gcGxhY2UsIGFuZCB0aGUgbmV4dCBnZXR4YXR0ciByZXR1cm5zXG4mIzQzOyAqIHdyb25nIGRhdGEgd2l0aG91dCBldmVyIHJlYWNoaW5nIHRoZSBGVVNFIGRhZW1vbi5cbiYjNDM7ICpcbiYjNDM7ICogRml4IChmcy9wb3NpeF9hY2wuYyk6IF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXR1cm5zIGVhcmx5IHdoZW4gKnAgaXNcbiYjNDM7ICogQUNMX0RPTlRfQ0FDSEUsIHByZXNlcnZpbmcgdGhlIFwmIzM0O25ldmVyIGNhY2hlXCYjMzQ7IGludmFyaWFudCBmb3IgdGhlIGlub2RlJiMzOTtzXG4mIzQzOyAqIGxpZmV0aW1lLlxuJiM0MzsgKlxuJiM0MzsgKiBUZXN0IG91dGxpbmU6XG4mIzQzOyAqICAxLiBNb3VudCBhIG1pbmltYWwgRlVTRSBmcyAobm8gRlVTRV9QT1NJWF9BQ0wgbmVnb3RpYXRlZCkuXG4mIzQzOyAqICAyLiBsZ2V0eGF0dHIgLVx1MDAzZSBkYWVtb24gY2FsbGVkLCBBQ0xfQSByZXR1cm5lZCwgTk9UIGNhY2hlZCAoQUNMX0RPTlRfQ0FDSEUpLlxuJiM0MzsgKiAgMy4gc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgLVx1MDAzZSBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgY2FsbGVkLlxuJiM0MzsgKiAgICAgQnVnZ3k6ICBBQ0xfRE9OVF9DQUNIRSAtXHUwMDNlIEFDTF9OT1RfQ0FDSEVEIChjYWNoZSBlbmFibGVkKS5cbiYjNDM7ICogICAgIEZpeGVkOiAgQUNMX0RPTlRfQ0FDSEUgcHJlc2VydmVkLlxuJiM0MzsgKiAgNC4gbGdldHhhdHRyIC1cdTAwM2UgZGFlbW9uIGNhbGxlZCwgQUNMX0EgcmV0dXJuZWQuXG4mIzQzOyAqICAgICBCdWdneTogIHJlc3VsdCBub3cgY2FjaGVkIChBQ0xfTk9UX0NBQ0hFRCAtXHUwMDNlIGNhY2hlZCkuXG4mIzQzOyAqICAgICBGaXhlZDogIHJlc3VsdCBzdGlsbCBub3QgY2FjaGVkLlxuJiM0MzsgKiAgNS4gRGFlbW9uIHN3aXRjaGVzIHRvIEFDTF9CIGludGVybmFsbHkgKGRpZmZlcmVudCBzaXplKS5cbiYjNDM7ICogIDYuIGxnZXR4YXR0ciAtXHUwMDNlIHNob3VsZCByZXR1cm4gQUNMX0IgKDQ0IGJ5dGVzKS5cbiYjNDM7ICogICAgIEJ1Z2d5OiAgY2FjaGUgaGl0LCByZXR1cm5zIHN0YWxlIEFDTF9BICgyOCBieXRlcykuIEZBSUwuXG4mIzQzOyAqICAgICBGaXhlZDogIG5vIGNhY2hlLCBkYWVtb24gY2FsbGVkLCByZXR1cm5zIEFDTF9CICg0NCBieXRlcykuIFBBU1MuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy94YXR0ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZVU0VfVVNFX1ZFUlNJT04gMzFcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZnVzZV9sb3dsZXZlbC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiAtLS0tIEFDTCBiaW5hcnkgZW5jb2RpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzOy8qXG4mIzQzOyAqIFBPU0lYIEFDTCB2MiB4YXR0ciBmb3JtYXQgKGxpdHRsZS1lbmRpYW4pOlxuJiM0MzsgKiAgIGhlYWRlcjogdTMyIHZlcnNpb24gKD0gMHgwMDAwMDAwMilcbiYjNDM7ICogICBlbnRyeTogIHUxNiB0YWcgfCB1MTYgcGVybSB8IHUzMiBpZFxuJiM0MzsgKlxuJiM0MzsgKiBFbnRyaWVzIG11c3QgYXBwZWFyIGluIHRhZy1hc2NlbmRpbmcgb3JkZXI7IG5hbWVkIFVTRVIvR1JPVVAgZW50cmllc1xuJiM0MzsgKiByZXF1aXJlIGEgTUFTSyBlbnRyeS4gIEJvdGggQUNMcyBwYXNzIHBvc2l4X2FjbF9mcm9tX3hhdHRyKCkgdmFsaWRhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsvKiBBQ0xfQTogMyBlbnRyaWVzIChVU0VSX09CSjpyd3gsIEdST1VQX09CSjpyLXgsIE9USEVSOnIteCkgPSAyOCBieXRlcyAqL1xuJiM0MztzdGF0aWMgY29uc3QgdWludDhfdCBhY2xfYVtdID0ge1xuJiM0MztcdDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHYyIGhlYWRlciAgICAgICovXG4mIzQzO1x0MHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogVVNFUl9PQkogIHJ3eCAgKi9cbiYjNDM7XHQweDA0LCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBHUk9VUF9PQkogci14ICAqL1xuJiM0MztcdDB4MjAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIE9USEVSICAgICByLXggICovXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBQ0xfQjogNSBlbnRyaWVzIOKAlCBhZGRzIFVTRVIgdWlkPTEgYW5kIE1BU0sgPSA0NCBieXRlcy5cbiYjNDM7ICogQSBuYW1lZCBVU0VSIGVudHJ5IHJlcXVpcmVzIGEgTUFTSzsgYWxsIHRhZ3MgaW4gYXNjZW5kaW5nIG9yZGVyLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHVpbnQ4X3QgYWNsX2JbXSA9IHtcbiYjNDM7XHQweDAyLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2MiBoZWFkZXIgICAgICAgKi9cbiYjNDM7XHQweDAxLCAweDAwLCAweDA3LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBVU0VSX09CSiAgIHJ3eCAgKi9cbiYjNDM7XHQweDAyLCAweDAwLCAweDA3LCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAvKiBVU0VSIHVpZD0xIHJ3eCAgKi9cbiYjNDM7XHQweDA0LCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBHUk9VUF9PQkogIHIteCAgKi9cbiYjNDM7XHQweDEwLCAweDAwLCAweDA3LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBNQVNLICAgICAgIHJ3eCAgKi9cbiYjNDM7XHQweDIwLCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBPVEhFUiAgICAgIHIteCAgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIC0tLS0gU2hhcmVkIHN0YXRlIChkYWVtb24gdGhyZWFkIFx1MDAzYy1cdTAwM2UgdGVzdCB0aHJlYWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZJTEVfSU5PICAyXG4mIzQzOyNkZWZpbmUgRklMRV9OQU1FIFwmIzM0O3Rlc3RmaWxlXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFlbW9uX3N0YXRlIHtcbiYjNDM7XHRwdGhyZWFkX211dGV4X3QgbG9jaztcbiYjNDM7XHRjb25zdCB1aW50OF90ICAqYWNsO1xuJiM0MztcdHNpemVfdCAgICAgICAgICBhY2xfc2l6ZTtcbiYjNDM7XHRpbnQgICAgICAgICAgICAgZ2V0eGF0dHJfY291bnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBHbG9iYWw6IGNhbGxiYWNrcyBhcmUgc3RhdGVsZXNzIGZucyBzbyB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsLlxuJiM0MzsgKiBTYWZlIGJlY2F1c2Ugb25seSBvbmUgdGVzdCBpbnN0YW5jZSBydW5zIGF0IGEgdGltZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGFlbW9uX3N0YXRlIGdfZHMgPSB7XG4mIzQzO1x0LmxvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogLS0tLSBGVVNFIGxvd2xldmVsIGNhbGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZnNfbG9va3VwKGZ1c2VfcmVxX3QgcmVxLCBmdXNlX2lub190IHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGlmIChwYXJlbnQgIT0gRlVTRV9ST09UX0lEIHx8IHN0cmNtcChuYW1lLCBGSUxFX05BTUUpKSB7XG4mIzQzO1x0XHRmdXNlX3JlcGx5X2VycihyZXEsIEVOT0VOVCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHN0cnVjdCBmdXNlX2VudHJ5X3BhcmFtIGUgPSB7fTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMb25nIGF0dHIvZW50cnkgdGltZW91dHMgc28gdGhhdCBub3JtYWwgc3RhdCgpIGNhbGxzIGRvIG5vdFxuJiM0MztcdCAqIGV4cGlyZSBhbmQgdHJpZ2dlciBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgb24gdGhlaXIgb3duO1xuJiM0MztcdCAqIG9ubHkgdGhlIGV4cGxpY2l0IEFUX1NUQVRYX0ZPUkNFX1NZTkMgc2hvdWxkIHRyaWdnZXIgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZS5pbm8gICAgICAgICAgICAgPSBGSUxFX0lOTztcbiYjNDM7XHRlLmdlbmVyYXRpb24gICAgICA9IDE7XG4mIzQzO1x0ZS5hdHRyX3RpbWVvdXQgICAgPSAxMC4wO1xuJiM0MztcdGUuZW50cnlfdGltZW91dCAgID0gMTAuMDtcbiYjNDM7XHRlLmF0dHIuc3RfaW5vICAgICA9IEZJTEVfSU5PO1xuJiM0MztcdGUuYXR0ci5zdF9tb2RlICAgID0gU19JRlJFRyB8IDA2NDQ7XG4mIzQzO1x0ZS5hdHRyLnN0X25saW5rICAgPSAxO1xuJiM0MztcdGZ1c2VfcmVwbHlfZW50cnkocmVxLCBcdTAwMjZlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZnNfZ2V0YXR0cihmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBpbm8sXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGZ1c2VfZmlsZV9pbmZvICpmaSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdGF0IHN0ID0ge307XG4mIzQzO1xuJiM0MztcdCh2b2lkKWZpO1xuJiM0MztcdGlmIChpbm8gPT0gRlVTRV9ST09UX0lEKSB7XG4mIzQzO1x0XHRzdC5zdF9pbm8gICA9IEZVU0VfUk9PVF9JRDtcbiYjNDM7XHRcdHN0LnN0X21vZGUgID0gU19JRkRJUiB8IDA3NTU7XG4mIzQzO1x0XHRzdC5zdF9ubGluayA9IDI7XG4mIzQzO1x0fSBlbHNlIGlmIChpbm8gPT0gRklMRV9JTk8pIHtcbiYjNDM7XHRcdHN0LnN0X2lubyAgID0gRklMRV9JTk87XG4mIzQzO1x0XHRzdC5zdF9tb2RlICA9IFNfSUZSRUcgfCAwNjQ0O1xuJiM0MztcdFx0c3Quc3RfbmxpbmsgPSAxO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRmdXNlX3JlcGx5X2VycihyZXEsIEVOT0VOVCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGZ1c2VfcmVwbHlfYXR0cihyZXEsIFx1MDAyNnN0LCAxMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGZzX2dldHhhdHRyKGZ1c2VfcmVxX3QgcmVxLCBmdXNlX2lub190IGlubywgY29uc3QgY2hhciAqbmFtZSxcbiYjNDM7XHRcdFx0c2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaW5vICE9IEZJTEVfSU5PIHx8XG4mIzQzO1x0ICAgIHN0cmNtcChuYW1lLCBcJiMzNDtzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1wmIzM0OykgIT0gMCkge1xuJiM0MztcdFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9EQVRBKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZnX2RzLmxvY2spO1xuJiM0MztcdGNvbnN0IHVpbnQ4X3QgKmFjbCAgICAgID0gZ19kcy5hY2w7XG4mIzQzO1x0c2l6ZV90ICAgICAgICAgYWNsX3NpemUgPSBnX2RzLmFjbF9zaXplO1xuJiM0MztcdGdfZHMuZ2V0eGF0dHJfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplID09IDApXG4mIzQzO1x0XHRmdXNlX3JlcGx5X3hhdHRyKHJlcSwgYWNsX3NpemUpO1xuJiM0MztcdGVsc2UgaWYgKHNpemUgXHUwMDNjIGFjbF9zaXplKVxuJiM0MztcdFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFUkFOR0UpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGZ1c2VfcmVwbHlfYnVmKHJlcSwgKGNvbnN0IGNoYXIgKilhY2wsIGFjbF9zaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmdXNlX2xvd2xldmVsX29wcyBmc19vcHMgPSB7XG4mIzQzO1x0Lmxvb2t1cCAgID0gZnNfbG9va3VwLFxuJiM0MztcdC5nZXRhdHRyICA9IGZzX2dldGF0dHIsXG4mIzQzO1x0LmdldHhhdHRyID0gZnNfZ2V0eGF0dHIsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiAtLS0tIERhZW1vbiB0aHJlYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnJ1bl9kYWVtb24odm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0ZnVzZV9zZXNzaW9uX2xvb3AoKHN0cnVjdCBmdXNlX3Nlc3Npb24gKilhcmcpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tIGtzZWxmdGVzdCBoYXJuZXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7RklYVFVSRShhY2xfY2FjaGUpIHtcbiYjNDM7XHRzdHJ1Y3QgZnVzZV9zZXNzaW9uICpzZTtcbiYjNDM7XHRjaGFyICAgICAgICAgICAgICAgICBtb3VudHBvaW50W1BBVEhfTUFYXTtcbiYjNDM7XHRjaGFyICAgICAgICAgICAgICAgICBmaWxlX3BhdGhbUEFUSF9NQVhdO1xuJiM0MztcdHB0aHJlYWRfdCAgICAgICAgICAgIHRocmVhZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAoYWNsX2NhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqZnVzZV9hcmd2W10gPSB7IFwmIzM0O2Z1c2VfYWNsX2NhY2hlX3Rlc3RcJiMzNDssIE5VTEwgfTtcbiYjNDM7XHRzdHJ1Y3QgZnVzZV9hcmdzIGFyZ3MgPSBGVVNFX0FSR1NfSU5JVCgxLCBmdXNlX2FyZ3YpO1xuJiM0MztcbiYjNDM7XHRnX2RzLmFjbCAgICAgICAgICAgID0gYWNsX2E7XG4mIzQzO1x0Z19kcy5hY2xfc2l6ZSAgICAgICA9IHNpemVvZihhY2xfYSk7XG4mIzQzO1x0Z19kcy5nZXR4YXR0cl9jb3VudCA9IDA7XG4mIzQzO1xuJiM0MztcdHN0cmNweShzZWxmLVx1MDAzZW1vdW50cG9pbnQsIFwmIzM0Oy90bXAvYWNsX2NhY2hlX3Rlc3RfWFhYWFhYXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIW1rZHRlbXAoc2VsZi1cdTAwM2Vtb3VudHBvaW50KSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtta2R0ZW1wOiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoc2VsZi1cdTAwM2VmaWxlX3BhdGgsIHNpemVvZihzZWxmLVx1MDAzZWZpbGVfcGF0aCksXG4mIzQzO1x0XHQgXCYjMzQ7JXMvXCYjMzQ7IEZJTEVfTkFNRSwgc2VsZi1cdTAwM2Vtb3VudHBvaW50KTtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VzZSA9IGZ1c2Vfc2Vzc2lvbl9uZXcoXHUwMDI2YXJncywgXHUwMDI2ZnNfb3BzLCBzaXplb2YoZnNfb3BzKSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFzZWxmLVx1MDAzZXNlKSB7XG4mIzQzO1x0XHRybWRpcihzZWxmLVx1MDAzZW1vdW50cG9pbnQpO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O2Z1c2Vfc2Vzc2lvbl9uZXcgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmdXNlX3Nlc3Npb25fbW91bnQoc2VsZi1cdTAwM2VzZSwgc2VsZi1cdTAwM2Vtb3VudHBvaW50KSkge1xuJiM0MztcdFx0ZnVzZV9zZXNzaW9uX2Rlc3Ryb3koc2VsZi1cdTAwM2VzZSk7XG4mIzQzO1x0XHRybWRpcihzZWxmLVx1MDAzZW1vdW50cG9pbnQpO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O2Z1c2Vfc2Vzc2lvbl9tb3VudCBmYWlsZWQgXCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7KG1pc3NpbmcgZnVzZXJtb3VudDMgb3IgaW5zdWZmaWNpZW50IHByaXZpbGVnZXMpXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwdGhyZWFkX2NyZWF0ZShcdTAwMjZzZWxmLVx1MDAzZXRocmVhZCwgTlVMTCwgcnVuX2RhZW1vbiwgc2VsZi1cdTAwM2VzZSkpIHtcbiYjNDM7XHRcdGZ1c2Vfc2Vzc2lvbl91bm1vdW50KHNlbGYtXHUwMDNlc2UpO1xuJiM0MztcdFx0ZnVzZV9zZXNzaW9uX2Rlc3Ryb3koc2VsZi1cdTAwM2VzZSk7XG4mIzQzO1x0XHRybWRpcihzZWxmLVx1MDAzZW1vdW50cG9pbnQpO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3B0aHJlYWRfY3JlYXRlOiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZ1c2Vfb3B0X2ZyZWVfYXJncyhcdTAwMjZhcmdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihhY2xfY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRmdXNlX3Nlc3Npb25fZXhpdChzZWxmLVx1MDAzZXNlKTtcbiYjNDM7XHRmdXNlX3Nlc3Npb25fdW5tb3VudChzZWxmLVx1MDAzZXNlKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4oc2VsZi1cdTAwM2V0aHJlYWQsIE5VTEwpO1xuJiM0MztcdGZ1c2Vfc2Vzc2lvbl9kZXN0cm95KHNlbGYtXHUwMDNlc2UpO1xuJiM0MztcdHJtZGlyKHNlbGYtXHUwMDNlbW91bnRwb2ludCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZG9fZm9yY2Vfc3RhdHgoY29uc3QgY2hhciAqcGF0aClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdGF0eCBzdHg7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzeXNjYWxsKFNZU19zdGF0eCwgQVRfRkRDV0QsIHBhdGgsXG4mIzQzO1x0XHQgICAgICAgQVRfU1RBVFhfRk9SQ0VfU1lOQywgU1RBVFhfQkFTSUNfU1RBVFMsIFx1MDAyNnN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihhY2xfY2FjaGUsIHN0YWxlX2FmdGVyX2ZvcmNlX3N5bmMpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICAgIGJ1Zls1MTJdO1xuJiM0MztcdHNzaXplX3Qgc3o7XG4mIzQzO1x0aW50ICAgICBjb3VudDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdGVwIDE6IHR3byBnZXR4YXR0ciBjYWxscyBiZWZvcmUgYW55IHN0YXR4KEZPUkNFX1NZTkMpLlxuJiM0MztcdCAqIGlfYWNsID09IEFDTF9ET05UX0NBQ0hFLiAgX19nZXRfYWNsJiMzOTtzIGNtcHhjaGcocCwgQUNMX05PVF9DQUNIRUQsXG4mIzQzO1x0ICogc2VudGluZWwpIGZpbmRzICpwICE9IEFDTF9OT1RfQ0FDSEVEIG9uIGV2ZXJ5IGNhbGwsIHNvIHRoZSBzZW50aW5lbFxuJiM0MztcdCAqIGlzIG5ldmVyIHBsYWNlZCBhbmQgdGhlIHJlc3VsdCBpcyBuZXZlciBjYWNoZWQuICBCb3RoIGNhbGxzIG11c3RcbiYjNDM7XHQgKiByZWFjaCB0aGUgZGFlbW9uLCBwcm92aW5nIEFDTF9ET05UX0NBQ0hFIHN1cHByZXNzZXMgY2FjaGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzeiA9IGxnZXR4YXR0cihzZWxmLVx1MDAzZWZpbGVfcGF0aCwgXCYjMzQ7c3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3NcJiMzNDssXG4mIzQzO1x0XHQgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHN6LCAoc3NpemVfdClzaXplb2YoYWNsX2EpKTtcbiYjNDM7XG4mIzQzO1x0c3ogPSBsZ2V0eGF0dHIoc2VsZi1cdTAwM2VmaWxlX3BhdGgsIFwmIzM0O3N5c3RlbS5wb3NpeF9hY2xfYWNjZXNzXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdEFTU0VSVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9hKSk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZnX2RzLmxvY2spO1xuJiM0MztcdGNvdW50ID0gZ19kcy5nZXR4YXR0cl9jb3VudDtcbiYjNDM7XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZnX2RzLmxvY2spO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoY291bnQsIDIpO1xuJiM0MztcdFRIX0xPRyhcJiMzNDtzdGVwIDEgT0s6IGJvdGggcHJlLXRyaWdnZXIgZ2V0eGF0dHJzIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksIFwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDtBQ0xfRE9OVF9DQUNIRSBpcyB3b3JraW5nXCYjMzQ7LCBjb3VudCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3RlcCAyOiBzdGF0eChBVF9TVEFUWF9GT1JDRV9TWU5DKS5cbiYjNDM7XHQgKiBmdXNlX3VwZGF0ZV9nZXRfYXR0cigpIGNhbGxzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSBiZWZvcmUgc2VuZGluZ1xuJiM0MztcdCAqIEZVU0VfR0VUQVRUUi5cbiYjNDM7XHQgKiAgIEJ1Z2d5IGtlcm5lbDogIEFDTF9ET05UX0NBQ0hFIC1cdTAwM2UgQUNMX05PVF9DQUNIRUQgIChjYWNoZSBlbmFibGVkKVxuJiM0MztcdCAqICAgRml4ZWQga2VybmVsOiAgQUNMX0RPTlRfQ0FDSEUgcHJlc2VydmVkICAgICAgICAgICAobm8gZWZmZWN0KVxuJiM0MztcdCAqL1xuJiM0MztcdEFTU0VSVF9FUShkb19mb3JjZV9zdGF0eChzZWxmLVx1MDAzZWZpbGVfcGF0aCksIDApO1xuJiM0MztcdFRIX0xPRyhcJiMzNDtzdGVwIDIgT0s6IHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpIHN1Y2NlZWRlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3RlcCAzOiBnZXR4YXR0ciDigJQgY2FjaGUgcG9wdWxhdGlvbiBhdHRlbXB0IGFmdGVyIHRoZSB0cmlnZ2VyLlxuJiM0MztcdCAqICAgQnVnZ3k6ICAqcCA9PSBBQ0xfTk9UX0NBQ0hFRCAtXHUwMDNlIHNlbnRpbmVsIHBsYWNlZCAtXHUwMDNlIGZ1c2VfZ2V0X2lub2RlX2FjbFxuJiM0MztcdCAqICAgICAgICAgICBjYWxsZWQgLVx1MDAzZSBBQ0xfQSBwYXJzZWQgYW5kIHN0b3JlZCBpbiB0aGUga2VybmVsIGNhY2hlLlxuJiM0MztcdCAqICAgRml4ZWQ6ICAqcCA9PSBBQ0xfRE9OVF9DQUNIRSAtXHUwMDNlIHNlbnRpbmVsIHBsYWNlbWVudCBza2lwcGVkIC1cdTAwM2VcbiYjNDM7XHQgKiAgICAgICAgICAgZnVzZV9nZXRfaW5vZGVfYWNsIGNhbGxlZCBidXQgcmVzdWx0IG5vdCBjYWNoZWQuXG4mIzQzO1x0ICogRWl0aGVyIHdheSB0aGUgY29ycmVjdCBBQ0xfQSBpcyByZXR1cm5lZCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHN6ID0gbGdldHhhdHRyKHNlbGYtXHUwMDNlZmlsZV9wYXRoLCBcJiMzNDtzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1wmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3osIChzc2l6ZV90KXNpemVvZihhY2xfYSkpO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2Z19kcy5sb2NrKTtcbiYjNDM7XHRjb3VudCA9IGdfZHMuZ2V0eGF0dHJfY291bnQ7XG4mIzQzO1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2Z19kcy5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGNvdW50LCAzKTtcbiYjNDM7XHRUSF9MT0coXCYjMzQ7c3RlcCAzIE9LOiBwb3N0LXRyaWdnZXIgZ2V0eGF0dHIgcmVhY2hlZCBkYWVtb24gKGNvdW50PSVkKSwgXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0O3JldHVybmVkIGNvcnJlY3QgQUNMX0EgKCV6ZCBieXRlcylcJiMzNDssIGNvdW50LCBzeik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3RlcCA0OiBzd2l0Y2ggZGFlbW9uIHRvIEFDTF9CIChkaWZmZXJlbnQgc2l6ZTogNDQgdnMgMjggYnl0ZXMpLlxuJiM0MztcdCAqIFNpbXVsYXRlcyBhbiBBQ0wgY2hhbmdlIHRoYXQgZnVzZV9zZXRfYWNsKCkgd291bGQgTk9UIGludmFsaWRhdGUgZm9yXG4mIzQzO1x0ICogIWZjLVx1MDAzZXBvc2l4X2FjbCBtb3VudHMgKGl0IHNraXBzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMgaW4gdGhhdCBjYXNlKS5cbiYjNDM7XHQgKiBPbiBhIGZpeGVkIGtlcm5lbCB0aGUgQUNMIHdhcyBuZXZlciBjYWNoZWQsIHNvIHRoaXMgaXMgbW9vdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2Z19kcy5sb2NrKTtcbiYjNDM7XHRnX2RzLmFjbCAgICAgID0gYWNsX2I7XG4mIzQzO1x0Z19kcy5hY2xfc2l6ZSA9IHNpemVvZihhY2xfYik7XG4mIzQzO1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2Z19kcy5sb2NrKTtcbiYjNDM7XHRUSF9MT0coXCYjMzQ7c3RlcCA0OiBkYWVtb24gc3dpdGNoZWQgdG8gQUNMX0IgKCV6dSBieXRlcylcJiMzNDssIHNpemVvZihhY2xfYikpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN0ZXAgNTogZ2V0eGF0dHIg4oCUIHRoZSBkZWNpc2l2ZSBjaGVjay5cbiYjNDM7XHQgKiAgIEJ1Z2d5IGtlcm5lbDogIGNhY2hlIGhpdCAtXHUwMDNlIHN0YWxlIEFDTF9BICgyOCBieXRlcyksIGNvdW50IHN0YXlzIDMuXG4mIzQzO1x0ICogICBGaXhlZCBrZXJuZWw6ICBubyBjYWNoZSAtXHUwMDNlIGRhZW1vbiBjYWxsZWQgLVx1MDAzZSBBQ0xfQiAoNDQgYnl0ZXMpLCBjb3VudCA0LlxuJiM0MztcdCAqL1xuJiM0MztcdHN6ID0gbGdldHhhdHRyKHNlbGYtXHUwMDNlZmlsZV9wYXRoLCBcJiMzNDtzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1wmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XG4mIzQzO1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4mIzQzO1x0Y291bnQgPSBnX2RzLmdldHhhdHRyX2NvdW50O1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChzeiA9PSAoc3NpemVfdClzaXplb2YoYWNsX2EpKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O3N0ZXAgNSBCVUc6IHN0YWxlIEFDTF9BICglemQgYnl0ZXMpIGZyb20ga2VybmVsIGNhY2hlIFwmIzM0O1xuJiM0MztcdFx0ICAgICAgIFwmIzM0Oyhjb3VudD0lZCk7IEFDTF9ET05UX0NBQ0hFIGNvcnJ1cHRlZCBieSBcJiMzNDtcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKClcJiMzNDssIHN6LCBjb3VudCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O3N0ZXAgNSBPSzogZGFlbW9uIHJlYWNoZWQgKGNvdW50PSVkKSwgXCYjMzQ7XG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7ZnJlc2ggQUNMX0IgKCV6ZCBieXRlcylcJiMzNDssIGNvdW50LCBzeik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9iKSk7XG4mIzQzO1x0RVhQRUNUX0VRKGNvdW50LCA0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMmIzM0OywKICAgICYjMzQ7Zm9yZ2V0X2NhY2hlZF9hY2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCB3aGVyZSBgQUNMX0RPTlRfQ0FDSEVgIGNvdWxkIGJlIGluY29ycmVjdGx5IHJlcGxhY2VkIHdpdGggYEFDTF9OT1RfQ0FDSEVEYCwgaW5hZHZlcnRlbnRseSBlbmFibGluZyBBQ0wgY2FjaGluZyBmb3IgaW5vZGVzIHRoYXQgc2hvdWxkbiYjMzk7dCBoYXZlIGl0IChlLmcuLCBGVVNFIG1vdW50cyB3aXRob3V0IGBGVVNFX1BPU0lYX0FDTGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMvQUNMIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgdG8gZW5zdXJlIEFDTCBjYWNoaW5nIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzU3NjFjZDU1ZDgyNzYwZWQ4YThmN2Y1ODhlOTcyNmNmYWJmNWEwYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDE0IDAzOjEzOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcG9zaXhfYWNsLmMgYi9mcy9wb3NpeF9hY2wuYwppbmRleCBiNGJmZTRkZGY2NGVhNS4uM2RjNjJjMWMyNzA4N2EgMTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC05Myw2ICYjNDM7OTMsMTMgQEAgc3RhdGljIHZvaWQgX19mb3JnZXRfY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICoqcCkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICpvbGQ7CiAKJiM0MzsJLyoKJiM0MzsJICogQUNMX0RPTlRfQ0FDSEUgaXMgZXhwZWN0ZWQgdG8gYmUgYSAmIzM0O2NvbnN0JiMzNDsgdmFsdWUgYW5kIHhjaGcgaXQgd2l0aAomIzQzOwkgKiBBQ0xfTk9UX0NBQ0hFRCB3b3VsZCBlbmFibGUgYWNsIGNhY2hpbmcgZm9yIHRoZSBpbm9kZSAtCiYjNDM7CSAqIGNsZWFybHkgbm90IHdoYXQgdGhlIGNhbGxlciBoYXMgaW50ZW5kZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoUkVBRF9PTkNFKCpwKSA9PSBBQ0xfRE9OVF9DQUNIRSkKJiM0MzsJCXJldHVybjsKIAlvbGQgPSB4Y2hnKHAsIEFDTF9OT1RfQ0FDSEVEKTsKIAlpZiAoIWlzX3VuY2FjaGVkX2FjbChvbGQpKQogCQlwb3NpeF9hY2xfcmVsZWFzZShvbGQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGUKaW5kZXggNjEyYWFkNjlhOTNhYTQuLmY0NzE0MTQ4NDI3NTBhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGUKQEAgLTUsNiAmIzQzOzUsMTMgQEAgQ0ZMQUdTICYjNDM7PSAtV2FsbCAtTzIgLWcgJChLSERSX0lOQ0xVREVTKQogVEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0CiBURVNUX0dFTl9GSUxFUyA6PSBmdXNlX21udAogCiYjNDM7IyBmdXNlX2FjbF9jYWNoZV90ZXN0IHJlcXVpcmVzIGxpYmZ1c2UzOyBhZGQgaXQgb25seSB3aGVuIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnQuCiYjNDM7QUNMX0NGTEFHUyA6PSAkKHNoZWxsIHBrZy1jb25maWcgZnVzZTMgLS1jZmxhZ3MgMiZndDsvZGV2L251bGwpCiYjNDM7QUNMX0xETElCUyA6PSAkKHNoZWxsIHBrZy1jb25maWcgZnVzZTMgLS1saWJzIDImZ3Q7L2Rldi9udWxsKQomIzQzO2lmbmVxICgkKEFDTF9DRkxBR1MpLCkKJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gZnVzZV9hY2xfY2FjaGVfdGVzdAomIzQzO2VuZGlmCiYjNDM7CiBpbmNsdWRlIC4uLy4uL2xpYi5tawogCiBWQVJfQ0ZMQUdTIDo9ICQoc2hlbGwgcGtnLWNvbmZpZyBmdXNlIC0tY2ZsYWdzIDImZ3Q7L2Rldi9udWxsKQpAQCAtMTksMyAmIzQzOzI2LDYgQEAgZW5kaWYKIAogJChPVVRQVVQpL2Z1c2VfbW50OiBDRkxBR1MgJiM0Mzs9ICQoVkFSX0NGTEFHUykKICQoT1VUUFVUKS9mdXNlX21udDogTERMSUJTICYjNDM7PSAkKFZBUl9MRExJQlMpCiYjNDM7CiYjNDM7JChPVVRQVVQpL2Z1c2VfYWNsX2NhY2hlX3Rlc3Q6IENGTEFHUyAmIzQzOz0gJChBQ0xfQ0ZMQUdTKQomIzQzOyQoT1VUUFVUKS9mdXNlX2FjbF9jYWNoZV90ZXN0OiBMRExJQlMgJiM0Mzs9ICQoQUNMX0xETElCUykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIyZTVkYjg1NTUwNDA5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMzQ4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFRlc3Q6IEZVU0UgQUNMIGNhY2hpbmcgYnVnIHRyaWdnZXJlZCBieSBBVF9TVEFUWF9GT1JDRV9TWU5DCiYjNDM7ICoKJiM0MzsgKiBBIEZVU0UgbW91bnQgdGhhdCBkb2VzIG5vdCBuZWdvdGlhdGUgRlVTRV9QT1NJWF9BQ0wgaW5pdGlhbGlzZXMgZXZlcnkgaW5vZGUKJiM0MzsgKiB3aXRoIGlfYWNsID0gaV9kZWZhdWx0X2FjbCA9IEFDTF9ET05UX0NBQ0hFLiAgV2hlbiBhIGZyZXNoIHN0YXQgaXMgbmVlZGVkCiYjNDM7ICogKGUuZy4gQVRfU1RBVFhfRk9SQ0VfU1lOQyksIGZ1c2VfdXBkYXRlX2dldF9hdHRyKCkgY2FsbHMKJiM0MzsgKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIGlzc3VpbmcgRlVTRV9HRVRBVFRSLiAgT24gYW4gdW5maXhlZCBrZXJuZWwsCiYjNDM7ICogX19mb3JnZXRfY2FjaGVkX2FjbCgpIHJlcGxhY2VzIEFDTF9ET05UX0NBQ0hFIHdpdGggQUNMX05PVF9DQUNIRUQsCiYjNDM7ICogaW5hZHZlcnRlbnRseSBlbmFibGluZyB0aGUga2VybmVsIEFDTCBjYWNoZSBmb3IgdGhhdCBpbm9kZS4gIFRoZSBuZXh0CiYjNDM7ICogZ2V0eGF0dHIgcG9wdWxhdGVzIHRoZSBjYWNoZS4gIEJlY2F1c2UgZnVzZV9zZXRfYWNsKCkgc2tpcHMKJiM0MzsgKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgZm9yICFmYy0mZ3Q7cG9zaXhfYWNsIG1vdW50cywgYW55IHN1YnNlcXVlbnQgY2hhbmdlIHRvCiYjNDM7ICogdGhlIEFDTCBsZWF2ZXMgdGhlIHN0YWxlIGtlcm5lbCBlbnRyeSBpbiBwbGFjZSwgYW5kIHRoZSBuZXh0IGdldHhhdHRyIHJldHVybnMKJiM0MzsgKiB3cm9uZyBkYXRhIHdpdGhvdXQgZXZlciByZWFjaGluZyB0aGUgRlVTRSBkYWVtb24uCiYjNDM7ICoKJiM0MzsgKiBGaXggKGZzL3Bvc2l4X2FjbC5jKTogX19mb3JnZXRfY2FjaGVkX2FjbCgpIHJldHVybnMgZWFybHkgd2hlbiAqcCBpcwomIzQzOyAqIEFDTF9ET05UX0NBQ0hFLCBwcmVzZXJ2aW5nIHRoZSAmIzM0O25ldmVyIGNhY2hlJiMzNDsgaW52YXJpYW50IGZvciB0aGUgaW5vZGUmIzM5O3MKJiM0MzsgKiBsaWZldGltZS4KJiM0MzsgKgomIzQzOyAqIFRlc3Qgb3V0bGluZToKJiM0MzsgKiAgMS4gTW91bnQgYSBtaW5pbWFsIEZVU0UgZnMgKG5vIEZVU0VfUE9TSVhfQUNMIG5lZ290aWF0ZWQpLgomIzQzOyAqICAyLiBsZ2V0eGF0dHIgLSZndDsgZGFlbW9uIGNhbGxlZCwgQUNMX0EgcmV0dXJuZWQsIE5PVCBjYWNoZWQgKEFDTF9ET05UX0NBQ0hFKS4KJiM0MzsgKiAgMy4gc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgLSZndDsgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGNhbGxlZC4KJiM0MzsgKiAgICAgQnVnZ3k6ICBBQ0xfRE9OVF9DQUNIRSAtJmd0OyBBQ0xfTk9UX0NBQ0hFRCAoY2FjaGUgZW5hYmxlZCkuCiYjNDM7ICogICAgIEZpeGVkOiAgQUNMX0RPTlRfQ0FDSEUgcHJlc2VydmVkLgomIzQzOyAqICA0LiBsZ2V0eGF0dHIgLSZndDsgZGFlbW9uIGNhbGxlZCwgQUNMX0EgcmV0dXJuZWQuCiYjNDM7ICogICAgIEJ1Z2d5OiAgcmVzdWx0IG5vdyBjYWNoZWQgKEFDTF9OT1RfQ0FDSEVEIC0mZ3Q7IGNhY2hlZCkuCiYjNDM7ICogICAgIEZpeGVkOiAgcmVzdWx0IHN0aWxsIG5vdCBjYWNoZWQuCiYjNDM7ICogIDUuIERhZW1vbiBzd2l0Y2hlcyB0byBBQ0xfQiBpbnRlcm5hbGx5IChkaWZmZXJlbnQgc2l6ZSkuCiYjNDM7ICogIDYuIGxnZXR4YXR0ciAtJmd0OyBzaG91bGQgcmV0dXJuIEFDTF9CICg0NCBieXRlcykuCiYjNDM7ICogICAgIEJ1Z2d5OiAgY2FjaGUgaGl0LCByZXR1cm5zIHN0YWxlIEFDTF9BICgyOCBieXRlcykuIEZBSUwuCiYjNDM7ICogICAgIEZpeGVkOiAgbm8gY2FjaGUsIGRhZW1vbiBjYWxsZWQsIHJldHVybnMgQUNMX0IgKDQ0IGJ5dGVzKS4gUEFTUy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy94YXR0ci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEZVU0VfVVNFX1ZFUlNJT04gMzEKJiM0MzsjaW5jbHVkZSAmbHQ7ZnVzZV9sb3dsZXZlbC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiYjNDM7CiYjNDM7LyogLS0tLSBBQ0wgYmluYXJ5IGVuY29kaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwomIzQzOy8qCiYjNDM7ICogUE9TSVggQUNMIHYyIHhhdHRyIGZvcm1hdCAobGl0dGxlLWVuZGlhbik6CiYjNDM7ICogICBoZWFkZXI6IHUzMiB2ZXJzaW9uICg9IDB4MDAwMDAwMDIpCiYjNDM7ICogICBlbnRyeTogIHUxNiB0YWcgfCB1MTYgcGVybSB8IHUzMiBpZAomIzQzOyAqCiYjNDM7ICogRW50cmllcyBtdXN0IGFwcGVhciBpbiB0YWctYXNjZW5kaW5nIG9yZGVyOyBuYW1lZCBVU0VSL0dST1VQIGVudHJpZXMKJiM0MzsgKiByZXF1aXJlIGEgTUFTSyBlbnRyeS4gIEJvdGggQUNMcyBwYXNzIHBvc2l4X2FjbF9mcm9tX3hhdHRyKCkgdmFsaWRhdGlvbi4KJiM0MzsgKi8KJiM0MzsKJiM0MzsvKiBBQ0xfQTogMyBlbnRyaWVzIChVU0VSX09CSjpyd3gsIEdST1VQX09CSjpyLXgsIE9USEVSOnIteCkgPSAyOCBieXRlcyAqLwomIzQzO3N0YXRpYyBjb25zdCB1aW50OF90IGFjbF9hW10gPSB7CiYjNDM7CTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHYyIGhlYWRlciAgICAgICovCiYjNDM7CTB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIFVTRVJfT0JKICByd3ggICovCiYjNDM7CTB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIEdST1VQX09CSiByLXggICovCiYjNDM7CTB4MjAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIE9USEVSICAgICByLXggICovCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFDTF9COiA1IGVudHJpZXMg4oCUIGFkZHMgVVNFUiB1aWQ9MSBhbmQgTUFTSyA9IDQ0IGJ5dGVzLgomIzQzOyAqIEEgbmFtZWQgVVNFUiBlbnRyeSByZXF1aXJlcyBhIE1BU0s7IGFsbCB0YWdzIGluIGFzY2VuZGluZyBvcmRlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdWludDhfdCBhY2xfYltdID0gewomIzQzOwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2MiBoZWFkZXIgICAgICAgKi8KJiM0MzsJMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogVVNFUl9PQkogICByd3ggICovCiYjNDM7CTB4MDIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIFVTRVIgdWlkPTEgcnd4ICAqLwomIzQzOwkweDA0LCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBHUk9VUF9PQkogIHIteCAgKi8KJiM0MzsJMHgxMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogTUFTSyAgICAgICByd3ggICovCiYjNDM7CTB4MjAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIE9USEVSICAgICAgci14ICAqLwomIzQzO307CiYjNDM7CiYjNDM7LyogLS0tLSBTaGFyZWQgc3RhdGUgKGRhZW1vbiB0aHJlYWQgJmx0Oy0mZ3Q7IHRlc3QgdGhyZWFkKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwomIzQzOwomIzQzOyNkZWZpbmUgRklMRV9JTk8gIDIKJiM0MzsjZGVmaW5lIEZJTEVfTkFNRSAmIzM0O3Rlc3RmaWxlJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgZGFlbW9uX3N0YXRlIHsKJiM0MzsJcHRocmVhZF9tdXRleF90IGxvY2s7CiYjNDM7CWNvbnN0IHVpbnQ4X3QgICphY2w7CiYjNDM7CXNpemVfdCAgICAgICAgICBhY2xfc2l6ZTsKJiM0MzsJaW50ICAgICAgICAgICAgIGdldHhhdHRyX2NvdW50OwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBHbG9iYWw6IGNhbGxiYWNrcyBhcmUgc3RhdGVsZXNzIGZucyBzbyB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsLgomIzQzOyAqIFNhZmUgYmVjYXVzZSBvbmx5IG9uZSB0ZXN0IGluc3RhbmNlIHJ1bnMgYXQgYSB0aW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGFlbW9uX3N0YXRlIGdfZHMgPSB7CiYjNDM7CS5sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIC0tLS0gRlVTRSBsb3dsZXZlbCBjYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBmc19sb29rdXAoZnVzZV9yZXFfdCByZXEsIGZ1c2VfaW5vX3QgcGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJaWYgKHBhcmVudCAhPSBGVVNFX1JPT1RfSUQgfHwgc3RyY21wKG5hbWUsIEZJTEVfTkFNRSkpIHsKJiM0MzsJCWZ1c2VfcmVwbHlfZXJyKHJlcSwgRU5PRU5UKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlzdHJ1Y3QgZnVzZV9lbnRyeV9wYXJhbSBlID0ge307CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIExvbmcgYXR0ci9lbnRyeSB0aW1lb3V0cyBzbyB0aGF0IG5vcm1hbCBzdGF0KCkgY2FsbHMgZG8gbm90CiYjNDM7CSAqIGV4cGlyZSBhbmQgdHJpZ2dlciBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgb24gdGhlaXIgb3duOwomIzQzOwkgKiBvbmx5IHRoZSBleHBsaWNpdCBBVF9TVEFUWF9GT1JDRV9TWU5DIHNob3VsZCB0cmlnZ2VyIGl0LgomIzQzOwkgKi8KJiM0MzsJZS5pbm8gICAgICAgICAgICAgPSBGSUxFX0lOTzsKJiM0MzsJZS5nZW5lcmF0aW9uICAgICAgPSAxOwomIzQzOwllLmF0dHJfdGltZW91dCAgICA9IDEwLjA7CiYjNDM7CWUuZW50cnlfdGltZW91dCAgID0gMTAuMDsKJiM0MzsJZS5hdHRyLnN0X2lubyAgICAgPSBGSUxFX0lOTzsKJiM0MzsJZS5hdHRyLnN0X21vZGUgICAgPSBTX0lGUkVHIHwgMDY0NDsKJiM0MzsJZS5hdHRyLnN0X25saW5rICAgPSAxOwomIzQzOwlmdXNlX3JlcGx5X2VudHJ5KHJlcSwgJmFtcDtlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZnNfZ2V0YXR0cihmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBpbm8sCiYjNDM7CQkgICAgICAgc3RydWN0IGZ1c2VfZmlsZV9pbmZvICpmaSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdGF0IHN0ID0ge307CiYjNDM7CiYjNDM7CSh2b2lkKWZpOwomIzQzOwlpZiAoaW5vID09IEZVU0VfUk9PVF9JRCkgewomIzQzOwkJc3Quc3RfaW5vICAgPSBGVVNFX1JPT1RfSUQ7CiYjNDM7CQlzdC5zdF9tb2RlICA9IFNfSUZESVIgfCAwNzU1OwomIzQzOwkJc3Quc3RfbmxpbmsgPSAyOwomIzQzOwl9IGVsc2UgaWYgKGlubyA9PSBGSUxFX0lOTykgewomIzQzOwkJc3Quc3RfaW5vICAgPSBGSUxFX0lOTzsKJiM0MzsJCXN0LnN0X21vZGUgID0gU19JRlJFRyB8IDA2NDQ7CiYjNDM7CQlzdC5zdF9ubGluayA9IDE7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmdXNlX3JlcGx5X2VycihyZXEsIEVOT0VOVCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJZnVzZV9yZXBseV9hdHRyKHJlcSwgJmFtcDtzdCwgMTApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBmc19nZXR4YXR0cihmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBpbm8sIGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlpZiAoaW5vICE9IEZJTEVfSU5PIHx8CiYjNDM7CSAgICBzdHJjbXAobmFtZSwgJiMzNDtzeXN0ZW0ucG9zaXhfYWNsX2FjY2VzcyYjMzQ7KSAhPSAwKSB7CiYjNDM7CQlmdXNlX3JlcGx5X2VycihyZXEsIEVOT0RBVEEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO2dfZHMubG9jayk7CiYjNDM7CWNvbnN0IHVpbnQ4X3QgKmFjbCAgICAgID0gZ19kcy5hY2w7CiYjNDM7CXNpemVfdCAgICAgICAgIGFjbF9zaXplID0gZ19kcy5hY2xfc2l6ZTsKJiM0MzsJZ19kcy5nZXR4YXR0cl9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7Z19kcy5sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMCkKJiM0MzsJCWZ1c2VfcmVwbHlfeGF0dHIocmVxLCBhY2xfc2l6ZSk7CiYjNDM7CWVsc2UgaWYgKHNpemUgJmx0OyBhY2xfc2l6ZSkKJiM0MzsJCWZ1c2VfcmVwbHlfZXJyKHJlcSwgRVJBTkdFKTsKJiM0MzsJZWxzZQomIzQzOwkJZnVzZV9yZXBseV9idWYocmVxLCAoY29uc3QgY2hhciAqKWFjbCwgYWNsX3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZ1c2VfbG93bGV2ZWxfb3BzIGZzX29wcyA9IHsKJiM0MzsJLmxvb2t1cCAgID0gZnNfbG9va3VwLAomIzQzOwkuZ2V0YXR0ciAgPSBmc19nZXRhdHRyLAomIzQzOwkuZ2V0eGF0dHIgPSBmc19nZXR4YXR0ciwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIC0tLS0gRGFlbW9uIHRocmVhZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnJ1bl9kYWVtb24odm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJZnVzZV9zZXNzaW9uX2xvb3AoKHN0cnVjdCBmdXNlX3Nlc3Npb24gKilhcmcpOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogLS0tLSBrc2VsZnRlc3QgaGFybmVzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztGSVhUVVJFKGFjbF9jYWNoZSkgewomIzQzOwlzdHJ1Y3QgZnVzZV9zZXNzaW9uICpzZTsKJiM0MzsJY2hhciAgICAgICAgICAgICAgICAgbW91bnRwb2ludFtQQVRIX01BWF07CiYjNDM7CWNoYXIgICAgICAgICAgICAgICAgIGZpbGVfcGF0aFtQQVRIX01BWF07CiYjNDM7CXB0aHJlYWRfdCAgICAgICAgICAgIHRocmVhZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoYWNsX2NhY2hlKQomIzQzO3sKJiM0MzsJY2hhciAqZnVzZV9hcmd2W10gPSB7ICYjMzQ7ZnVzZV9hY2xfY2FjaGVfdGVzdCYjMzQ7LCBOVUxMIH07CiYjNDM7CXN0cnVjdCBmdXNlX2FyZ3MgYXJncyA9IEZVU0VfQVJHU19JTklUKDEsIGZ1c2VfYXJndik7CiYjNDM7CiYjNDM7CWdfZHMuYWNsICAgICAgICAgICAgPSBhY2xfYTsKJiM0MzsJZ19kcy5hY2xfc2l6ZSAgICAgICA9IHNpemVvZihhY2xfYSk7CiYjNDM7CWdfZHMuZ2V0eGF0dHJfY291bnQgPSAwOwomIzQzOwomIzQzOwlzdHJjcHkoc2VsZi0mZ3Q7bW91bnRwb2ludCwgJiMzNDsvdG1wL2FjbF9jYWNoZV90ZXN0X1hYWFhYWCYjMzQ7KTsKJiM0MzsJaWYgKCFta2R0ZW1wKHNlbGYtJmd0O21vdW50cG9pbnQpKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bWtkdGVtcDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsKJiM0MzsJc25wcmludGYoc2VsZi0mZ3Q7ZmlsZV9wYXRoLCBzaXplb2Yoc2VsZi0mZ3Q7ZmlsZV9wYXRoKSwKJiM0MzsJCSAmIzM0OyVzLyYjMzQ7IEZJTEVfTkFNRSwgc2VsZi0mZ3Q7bW91bnRwb2ludCk7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O3NlID0gZnVzZV9zZXNzaW9uX25ldygmYW1wO2FyZ3MsICZhbXA7ZnNfb3BzLCBzaXplb2YoZnNfb3BzKSwgTlVMTCk7CiYjNDM7CWlmICghc2VsZi0mZ3Q7c2UpIHsKJiM0MzsJCXJtZGlyKHNlbGYtJmd0O21vdW50cG9pbnQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7ZnVzZV9zZXNzaW9uX25ldyBmYWlsZWQmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZ1c2Vfc2Vzc2lvbl9tb3VudChzZWxmLSZndDtzZSwgc2VsZi0mZ3Q7bW91bnRwb2ludCkpIHsKJiM0MzsJCWZ1c2Vfc2Vzc2lvbl9kZXN0cm95KHNlbGYtJmd0O3NlKTsKJiM0MzsJCXJtZGlyKHNlbGYtJmd0O21vdW50cG9pbnQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7ZnVzZV9zZXNzaW9uX21vdW50IGZhaWxlZCAmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsobWlzc2luZyBmdXNlcm1vdW50MyBvciBpbnN1ZmZpY2llbnQgcHJpdmlsZWdlcykmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHB0aHJlYWRfY3JlYXRlKCZhbXA7c2VsZi0mZ3Q7dGhyZWFkLCBOVUxMLCBydW5fZGFlbW9uLCBzZWxmLSZndDtzZSkpIHsKJiM0MzsJCWZ1c2Vfc2Vzc2lvbl91bm1vdW50KHNlbGYtJmd0O3NlKTsKJiM0MzsJCWZ1c2Vfc2Vzc2lvbl9kZXN0cm95KHNlbGYtJmd0O3NlKTsKJiM0MzsJCXJtZGlyKHNlbGYtJmd0O21vdW50cG9pbnQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7cHRocmVhZF9jcmVhdGU6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZnVzZV9vcHRfZnJlZV9hcmdzKCZhbXA7YXJncyk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04oYWNsX2NhY2hlKQomIzQzO3sKJiM0MzsJZnVzZV9zZXNzaW9uX2V4aXQoc2VsZi0mZ3Q7c2UpOwomIzQzOwlmdXNlX3Nlc3Npb25fdW5tb3VudChzZWxmLSZndDtzZSk7CiYjNDM7CXB0aHJlYWRfam9pbihzZWxmLSZndDt0aHJlYWQsIE5VTEwpOwomIzQzOwlmdXNlX3Nlc3Npb25fZGVzdHJveShzZWxmLSZndDtzZSk7CiYjNDM7CXJtZGlyKHNlbGYtJmd0O21vdW50cG9pbnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRvX2ZvcmNlX3N0YXR4KGNvbnN0IGNoYXIgKnBhdGgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3RhdHggc3R4OwomIzQzOwomIzQzOwlyZXR1cm4gc3lzY2FsbChTWVNfc3RhdHgsIEFUX0ZEQ1dELCBwYXRoLAomIzQzOwkJICAgICAgIEFUX1NUQVRYX0ZPUkNFX1NZTkMsIFNUQVRYX0JBU0lDX1NUQVRTLCAmYW1wO3N0eCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihhY2xfY2FjaGUsIHN0YWxlX2FmdGVyX2ZvcmNlX3N5bmMpCiYjNDM7ewomIzQzOwljaGFyICAgIGJ1Zls1MTJdOwomIzQzOwlzc2l6ZV90IHN6OwomIzQzOwlpbnQgICAgIGNvdW50OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTdGVwIDE6IHR3byBnZXR4YXR0ciBjYWxscyBiZWZvcmUgYW55IHN0YXR4KEZPUkNFX1NZTkMpLgomIzQzOwkgKiBpX2FjbCA9PSBBQ0xfRE9OVF9DQUNIRS4gIF9fZ2V0X2FjbCYjMzk7cyBjbXB4Y2hnKHAsIEFDTF9OT1RfQ0FDSEVELAomIzQzOwkgKiBzZW50aW5lbCkgZmluZHMgKnAgIT0gQUNMX05PVF9DQUNIRUQgb24gZXZlcnkgY2FsbCwgc28gdGhlIHNlbnRpbmVsCiYjNDM7CSAqIGlzIG5ldmVyIHBsYWNlZCBhbmQgdGhlIHJlc3VsdCBpcyBuZXZlciBjYWNoZWQuICBCb3RoIGNhbGxzIG11c3QKJiM0MzsJICogcmVhY2ggdGhlIGRhZW1vbiwgcHJvdmluZyBBQ0xfRE9OVF9DQUNIRSBzdXBwcmVzc2VzIGNhY2hpbmcuCiYjNDM7CSAqLwomIzQzOwlzeiA9IGxnZXR4YXR0cihzZWxmLSZndDtmaWxlX3BhdGgsICYjMzQ7c3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3MmIzM0OywKJiM0MzsJCSAgICAgICBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJQVNTRVJUX0VRKHN6LCAoc3NpemVfdClzaXplb2YoYWNsX2EpKTsKJiM0MzsKJiM0MzsJc3ogPSBsZ2V0eGF0dHIoc2VsZi0mZ3Q7ZmlsZV9wYXRoLCAmIzM0O3N5c3RlbS5wb3NpeF9hY2xfYWNjZXNzJiMzNDssCiYjNDM7CQkgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CUFTU0VSVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9hKSk7CiYjNDM7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO2dfZHMubG9jayk7CiYjNDM7CWNvdW50ID0gZ19kcy5nZXR4YXR0cl9jb3VudDsKJiM0MzsJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtnX2RzLmxvY2spOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoY291bnQsIDIpOwomIzQzOwlUSF9MT0coJiMzNDtzdGVwIDEgT0s6IGJvdGggcHJlLXRyaWdnZXIgZ2V0eGF0dHJzIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksICYjMzQ7CiYjNDM7CSAgICAgICAmIzM0O0FDTF9ET05UX0NBQ0hFIGlzIHdvcmtpbmcmIzM0OywgY291bnQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTdGVwIDI6IHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpLgomIzQzOwkgKiBmdXNlX3VwZGF0ZV9nZXRfYXR0cigpIGNhbGxzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSBiZWZvcmUgc2VuZGluZwomIzQzOwkgKiBGVVNFX0dFVEFUVFIuCiYjNDM7CSAqICAgQnVnZ3kga2VybmVsOiAgQUNMX0RPTlRfQ0FDSEUgLSZndDsgQUNMX05PVF9DQUNIRUQgIChjYWNoZSBlbmFibGVkKQomIzQzOwkgKiAgIEZpeGVkIGtlcm5lbDogIEFDTF9ET05UX0NBQ0hFIHByZXNlcnZlZCAgICAgICAgICAgKG5vIGVmZmVjdCkKJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShkb19mb3JjZV9zdGF0eChzZWxmLSZndDtmaWxlX3BhdGgpLCAwKTsKJiM0MzsJVEhfTE9HKCYjMzQ7c3RlcCAyIE9LOiBzdGF0eChBVF9TVEFUWF9GT1JDRV9TWU5DKSBzdWNjZWVkZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN0ZXAgMzogZ2V0eGF0dHIg4oCUIGNhY2hlIHBvcHVsYXRpb24gYXR0ZW1wdCBhZnRlciB0aGUgdHJpZ2dlci4KJiM0MzsJICogICBCdWdneTogICpwID09IEFDTF9OT1RfQ0FDSEVEIC0mZ3Q7IHNlbnRpbmVsIHBsYWNlZCAtJmd0OyBmdXNlX2dldF9pbm9kZV9hY2wKJiM0MzsJICogICAgICAgICAgIGNhbGxlZCAtJmd0OyBBQ0xfQSBwYXJzZWQgYW5kIHN0b3JlZCBpbiB0aGUga2VybmVsIGNhY2hlLgomIzQzOwkgKiAgIEZpeGVkOiAgKnAgPT0gQUNMX0RPTlRfQ0FDSEUgLSZndDsgc2VudGluZWwgcGxhY2VtZW50IHNraXBwZWQgLSZndDsKJiM0MzsJICogICAgICAgICAgIGZ1c2VfZ2V0X2lub2RlX2FjbCBjYWxsZWQgYnV0IHJlc3VsdCBub3QgY2FjaGVkLgomIzQzOwkgKiBFaXRoZXIgd2F5IHRoZSBjb3JyZWN0IEFDTF9BIGlzIHJldHVybmVkIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlzeiA9IGxnZXR4YXR0cihzZWxmLSZndDtmaWxlX3BhdGgsICYjMzQ7c3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3MmIzM0OywKJiM0MzsJCSAgICAgICBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJQVNTRVJUX0VRKHN6LCAoc3NpemVfdClzaXplb2YoYWNsX2EpKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7Z19kcy5sb2NrKTsKJiM0MzsJY291bnQgPSBnX2RzLmdldHhhdHRyX2NvdW50OwomIzQzOwlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO2dfZHMubG9jayk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShjb3VudCwgMyk7CiYjNDM7CVRIX0xPRygmIzM0O3N0ZXAgMyBPSzogcG9zdC10cmlnZ2VyIGdldHhhdHRyIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksICYjMzQ7CiYjNDM7CSAgICAgICAmIzM0O3JldHVybmVkIGNvcnJlY3QgQUNMX0EgKCV6ZCBieXRlcykmIzM0OywgY291bnQsIHN6KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3RlcCA0OiBzd2l0Y2ggZGFlbW9uIHRvIEFDTF9CIChkaWZmZXJlbnQgc2l6ZTogNDQgdnMgMjggYnl0ZXMpLgomIzQzOwkgKiBTaW11bGF0ZXMgYW4gQUNMIGNoYW5nZSB0aGF0IGZ1c2Vfc2V0X2FjbCgpIHdvdWxkIE5PVCBpbnZhbGlkYXRlIGZvcgomIzQzOwkgKiAhZmMtJmd0O3Bvc2l4X2FjbCBtb3VudHMgKGl0IHNraXBzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMgaW4gdGhhdCBjYXNlKS4KJiM0MzsJICogT24gYSBmaXhlZCBrZXJuZWwgdGhlIEFDTCB3YXMgbmV2ZXIgY2FjaGVkLCBzbyB0aGlzIGlzIG1vb3QuCiYjNDM7CSAqLwomIzQzOwlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtnX2RzLmxvY2spOwomIzQzOwlnX2RzLmFjbCAgICAgID0gYWNsX2I7CiYjNDM7CWdfZHMuYWNsX3NpemUgPSBzaXplb2YoYWNsX2IpOwomIzQzOwlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO2dfZHMubG9jayk7CiYjNDM7CVRIX0xPRygmIzM0O3N0ZXAgNDogZGFlbW9uIHN3aXRjaGVkIHRvIEFDTF9CICglenUgYnl0ZXMpJiMzNDssIHNpemVvZihhY2xfYikpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTdGVwIDU6IGdldHhhdHRyIOKAlCB0aGUgZGVjaXNpdmUgY2hlY2suCiYjNDM7CSAqICAgQnVnZ3kga2VybmVsOiAgY2FjaGUgaGl0IC0mZ3Q7IHN0YWxlIEFDTF9BICgyOCBieXRlcyksIGNvdW50IHN0YXlzIDMuCiYjNDM7CSAqICAgRml4ZWQga2VybmVsOiAgbm8gY2FjaGUgLSZndDsgZGFlbW9uIGNhbGxlZCAtJmd0OyBBQ0xfQiAoNDQgYnl0ZXMpLCBjb3VudCA0LgomIzQzOwkgKi8KJiM0MzsJc3ogPSBsZ2V0eGF0dHIoc2VsZi0mZ3Q7ZmlsZV9wYXRoLCAmIzM0O3N5c3RlbS5wb3NpeF9hY2xfYWNjZXNzJiMzNDssCiYjNDM7CQkgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO2dfZHMubG9jayk7CiYjNDM7CWNvdW50ID0gZ19kcy5nZXR4YXR0cl9jb3VudDsKJiM0MzsJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtnX2RzLmxvY2spOwomIzQzOwomIzQzOwlpZiAoc3ogPT0gKHNzaXplX3Qpc2l6ZW9mKGFjbF9hKSkKJiM0MzsJCVRIX0xPRygmIzM0O3N0ZXAgNSBCVUc6IHN0YWxlIEFDTF9BICglemQgYnl0ZXMpIGZyb20ga2VybmVsIGNhY2hlICYjMzQ7CiYjNDM7CQkgICAgICAgJiMzNDsoY291bnQ9JWQpOyBBQ0xfRE9OVF9DQUNIRSBjb3JydXB0ZWQgYnkgJiMzNDsKJiM0MzsJCSAgICAgICAmIzM0O2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSYjMzQ7LCBzeiwgY291bnQpOwomIzQzOwllbHNlCiYjNDM7CQlUSF9MT0coJiMzNDtzdGVwIDUgT0s6IGRhZW1vbiByZWFjaGVkIChjb3VudD0lZCksICYjMzQ7CiYjNDM7CQkgICAgICAgJiMzNDtmcmVzaCBBQ0xfQiAoJXpkIGJ5dGVzKSYjMzQ7LCBjb3VudCwgc3opOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc3osIChzc2l6ZV90KXNpemVvZihhY2xfYikpOwomIzQzOwlFWFBFQ1RfRVEoY291bnQsIDQpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDE5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZnMvcG9zaXhfYWNsLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvcG9zaXhfYWNsLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCBmdW5jdGlvbi4gVGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIFZGUyBhbmQgQUNMIGhhbmRsaW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHkuCgpCYXNpY2FsbHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGlmIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IGBwYCAod2hpY2gsIGFzIEkgcmVjYWxsLCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgY2FjaGVkIEFDTCBzdGF0dXMpIGlzIGFscmVhZHkgYEFDTF9ET05UX0NBQ0hFYCwgaXQgaW1tZWRpYXRlbHkgcmV0dXJucy4gVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhlIHJhdGlvbmFsZSwgd2hpY2ggaXMgY3J1Y2lhbCBoZXJlLiBUaGV5IGFyZSBjb25jZXJuZWQgdGhhdCBgeGNoZ2BpbmcgYEFDTF9ET05UX0NBQ0hFYCAod2hpY2ggaXMsIGJ5IGRlZmluaXRpb24sIGludGVuZGVkIHRvIGJlIGEgKmNvbnN0YW50KiBtZWFuaW5nIHRoYXQgdGhlIEFDTCAqc2hvdWxkbiYjMzk7dCogYmUgY2FjaGVkKSB3aXRoIGBBQ0xfTk9UX0NBQ0hFRGAgKG1lYW5pbmcgdGhlIEFDTCAqaXNuJiMzOTt0KiBjYWNoZWQpIHdvdWxkIGluYWR2ZXJ0ZW50bHkgKmVuYWJsZSogY2FjaGluZyB3aGVuIHRoZSBpbnRlbnRpb24gaXMgdGhlIG9wcG9zaXRlLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGB4Y2hnYCBjYW4gYmUgYSBibHVudCB0b29sLCBhbmQgd2Ugd291bGRuJiMzOTt0IHdhbnQgdG8gYWNjaWRlbnRhbGx5IGZsaXAgYSBjcnVjaWFsIGZsYWcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgcHJpbWFyaWx5IGltcGFjdHMgZmlsZXN5c3RlbXMgdGhhdCBkZWxpYmVyYXRlbHkgKmF2b2lkKiBjYWNoaW5nIEFDTHMsIHdoaWNoLCBhcyB0aGUgdGV4dCBub3Rlcywgd2lsbCBkZWZpbml0ZWx5IGluY2x1ZGUgRlVTRSB3aXRob3V0IGBGVVNFX1BPU0lYX0FDTGAuIEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUsIGJ1dCBuYXN0eSwgYnVncyBpZiB3ZSB3ZXJlIHRvIGluYWR2ZXJ0ZW50bHkgZW5hYmxlIGNhY2hpbmcgd2hlbiBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZGlzYWJsZWQuIFNvLCB0aGUgZml4IG1ha2VzIHNlbnNlLgoKTm93LCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgX19mb3JnZXRfY2FjaGVkX2FjbGAgaW4gYGZzL3Bvc2l4X2FjbC5jYCB0byBzZWUgaWYgbXkgbWVudGFsIG1vZGVsIGlzIGNvcnJlY3QuIEkgd2FudCB0byB0cmFjZSB0aGUgY29kZSB0byBiZSAxMDAlIHN1cmUgdGhpcyBsb2dpYyBhcHBsaWVzIHdoZXJlIEkgdGhpbmsgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvcmdldF9jYWNoZWRfYWNsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Bvc2l4X2FjbC5jPTkwPUVYUE9SVF9TWU1CT0woc2V0X2NhY2hlZF9hY2wpO1xuZnMvcG9zaXhfYWNsLmMtOTEtXG5mcy9wb3NpeF9hY2wuYzo5MjpzdGF0aWMgdm9pZCBfX2ZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKipwKVxuZnMvcG9zaXhfYWNsLmMtOTMte1xuLS1cbmZzL3Bvc2l4X2FjbC5jPTEwOD12b2lkIGZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKVxuZnMvcG9zaXhfYWNsLmMtMTA5LXtcbmZzL3Bvc2l4X2FjbC5jOjExMDpcdF9fZm9yZ2V0X2NhY2hlZF9hY2woYWNsX2J5X3R5cGUoaW5vZGUsIHR5cGUpKTtcbmZzL3Bvc2l4X2FjbC5jLTExMS19XG4tLVxuZnMvcG9zaXhfYWNsLmM9MTE0PXZvaWQgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvcG9zaXhfYWNsLmMtMTE1LXtcbmZzL3Bvc2l4X2FjbC5jOjExNjpcdF9fZm9yZ2V0X2NhY2hlZF9hY2woXHUwMDI2aW5vZGUtXHUwMDNlaV9hY2wpO1xuZnMvcG9zaXhfYWNsLmM6MTE3Olx0X19mb3JnZXRfY2FjaGVkX2FjbChcdTAwMjZpbm9kZS1cdTAwM2VpX2RlZmF1bHRfYWNsKTtcbmZzL3Bvc2l4X2FjbC5jLTExOC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtOC0gKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIGlzc3VpbmcgRlVTRV9HRVRBVFRSLiAgT24gYW4gdW5maXhlZCBrZXJuZWwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzo5OiAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTAtICogaW5hZHZlcnRlbnRseSBlbmFibGluZyB0aGUga2VybmVsIEFDTCBjYWNoZSBmb3IgdGhhdCBpbm9kZS4gIFRoZSBuZXh0XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTUtICpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjE2OiAqIEZpeCAoZnMvcG9zaXhfYWNsLmMpOiBfX2ZvcmdldF9jYWNoZWRfYWNsKCkgcmV0dXJucyBlYXJseSB3aGVuICpwIGlzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0xNy0gKiBBQ0xfRE9OVF9DQUNIRSwgcHJlc2VydmluZyB0aGUgXCYjMzQ7bmV2ZXIgY2FjaGVcJiMzNDsgaW52YXJpYW50IGZvciB0aGUgaW5vZGUmIzM5O3NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjYwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gQUNMIGNhY2hpbmcsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgY2FsbGVkIGJ5IGBmb3JnZXRfY2FjaGVkX2FjbGAgYW5kIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCwgc28gdGhvc2UgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgcGF0aHMuIEdvb2QuIEl0JiMzOTtzIGFsc28gYWRkaW5nIGEgc2VsZnRlc3QgZm9yIEZVU0Ug4oCTIGltcG9ydGFudCBmb3IgZW5zdXJpbmcgZnVuY3Rpb25hbGl0eSBhZnRlciB0aGUgY2hhbmdlLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMb29rcyBsaWtlIGBmcy9wb3NpeF9hY2wuY2AgaXMgdGhlIGtleSBmaWxlIGhlcmUsIGFuZCBpdOKAmXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0ZTX1BPU0lYX0FDTGAgaXMgZW5hYmxlZC4gVGltZSB0byBjb25maXJtIHRoYXQsIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgaW50ZXJhY3Rpb25zIG9yIHVuZXhwZWN0ZWQgY29uZGl0aW9uYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bvc2l4X2FjbC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GU19NQkNBQ0hFKVx0JiM0Mzs9IG1iY2FjaGUub1xuZnMvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0ZTX1BPU0lYX0FDTClcdCYjNDM7PSBwb3NpeF9hY2wub1xuZnMvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX05GU19DT01NT04pXHQmIzQzOz0gbmZzX2NvbW1vbi9cbi0tXG5mcy9wb3NpeF9hY2wuYz03MzU9c3RhdGljIGludCBwb3NpeF9hY2xfZml4X3hhdHRyX2NvbW1vbihjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4tLVxuZnMvcG9zaXhfYWNsLmMtNzc2LSAqXG5mcy9wb3NpeF9hY2wuYzo3Nzc6ICogUmV0dXJuOiBBbGxvY2F0ZWQgc3RydWN0IHBvc2l4X2FjbCBvbiBzdWNjZXNzLCBOVUxMIGZvciBhIHZhbGlkIGhlYWRlciBidXRcbmZzL3Bvc2l4X2FjbC5jLTc3OC0gKiAgICAgICAgIHdpdGhvdXQgYWN0dWFsIFBPU0lYIEFDTCBlbnRyaWVzLCBvciBFUlJfUFRSKCkgZW5jb2RlZCBlcnJvciBjb2RlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3NpeCBBQ0wgQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19GU19QT1NJWF9BQ0xgLCByaWdodD8gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4gVGhlIHRlc3QgZnJhbWV3b3JrIGxldmVyYWdlcyBGVVNFLCB3aGljaCBpbW1lZGlhdGVseSBtYWRlIG1lIHRoaW5rIGFib3V0IGBDT05GSUdfRlVTRV9GU2AgYW5kIHBvdGVudGlhbGx5IGZ1enppbmcgRlVTRSBwYXRocy4gSG93ZXZlciwgdGhlIHJvb3QgY2F1c2UgaXMgZmlybWx5IHdpdGhpbiBgZnMvcG9zaXhfYWNsLmNgLgoKQWhhLCBgQ09ORklHX0ZTX1BPU0lYX0FDTGAgaXMgbW9yZSBmdW5kYW1lbnRhbCB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQ7IGl04oCZcyBhIGNvcmUgY29uZmlnIG9wdGlvbiwgb2Z0ZW4gaW5kaXJlY3RseSBzZWxlY3RlZCBieSBvdGhlciBmaWxlIHN5c3RlbXMuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQuCgpOb3csIG15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2luY2UgYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGlzIHN0YXRpYywgbXkgYXR0ZW50aW9uIG5lZWRzIHRvIGJlIG9uIGBmb3JnZXRfY2FjaGVkX2FjbGAgYW5kIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYC4gSeKAmW0gYWxzbyBnb2luZyB0byBub3RlIHRoYXQgYGZ1c2VfdXBkYXRlX2dldF9hdHRyYCBpcyBwb3RlbnRpYWxseSBhIHRyaWdnZXIgZnVuY3Rpb24sIHNpbmNlIGl04oCZcyByZWxhdGVkLgoKV2FpdCwgdG8gYmUgY2xlYXIsIHRoZSBidWcgaXMgd2l0aGluIHRoZSBzdGF0aWMgZnVuY3Rpb24gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGl0c2VsZiwgYnV0IHRoYXTigJlzIGNhbGxlZCBieSBgZm9yZ2V0X2NhY2hlZF9hY2xgIGFuZCBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AsIHNvIG15IGRpcmVjdCBmb2N1cyBpcyBvbiB0aG9zZS4KCk5vdywgSSYjMzk7bGwgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGNoZWNraW5nIHRoZSBjYWxsZXJzIG9mIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3JnZXRfYWxsX2NhY2hlZF9hY2xzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NlcGgvY2Fwcy5jPTM0ODg9c3RhdGljIHZvaWQgaGFuZGxlX2NhcF9ncmFudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2NlcGgvY2Fwcy5jLTM2MjAtXHRcdFx0Y2ktXHUwMDNlaV94YXR0cnMudmVyc2lvbiA9IHZlcnNpb247XG5mcy9jZXBoL2NhcHMuYzozNjIxOlx0XHRcdGNlcGhfZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XG5mcy9jZXBoL2NhcHMuYy0zNjIyLVx0XHRcdGNlcGhfc2VjdXJpdHlfaW52YWxpZGF0ZV9zZWNjdHgoaW5vZGUpO1xuLS1cbmZzL2NlcGgvaW5vZGUuYz0xMDEzPWludCBjZXBoX2ZpbGxfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKmxvY2tlZF9wYWdlLFxuLS1cbmZzL2NlcGgvaW5vZGUuYy0xMjM4LVx0XHRjaS1cdTAwM2VpX3hhdHRycy52ZXJzaW9uID0gbGU2NF90b19jcHUoaW5mby1cdTAwM2V4YXR0cl92ZXJzaW9uKTtcbmZzL2NlcGgvaW5vZGUuYzoxMjM5Olx0XHRjZXBoX2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xuZnMvY2VwaC9pbm9kZS5jLTEyNDAtXHRcdGNlcGhfc2VjdXJpdHlfaW52YWxpZGF0ZV9zZWNjdHgoaW5vZGUpO1xuLS1cbmZzL2NlcGgvc3VwZXIuaD0xMjMyPXZvaWQgY2VwaF9pbml0X2lub2RlX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9jZXBoL3N1cGVyLmgtMTIzNC1cbmZzL2NlcGgvc3VwZXIuaDoxMjM1OnN0YXRpYyBpbmxpbmUgdm9pZCBjZXBoX2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2NlcGgvc3VwZXIuaC0xMjM2LXtcbmZzL2NlcGgvc3VwZXIuaDoxMjM3OiAgICAgICBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcbmZzL2NlcGgvc3VwZXIuaC0xMjM4LX1cbi0tXG5mcy9jZXBoL3N1cGVyLmg9MTI1MD1zdGF0aWMgaW5saW5lIHZvaWQgY2VwaF9pbml0X2lub2RlX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9jZXBoL3N1cGVyLmgtMTI1NC1cbmZzL2NlcGgvc3VwZXIuaDoxMjU1OnN0YXRpYyBpbmxpbmUgdm9pZCBjZXBoX2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2NlcGgvc3VwZXIuaC0xMjU2LXtcbi0tXG5mcy9mdXNlL2FjbC5jPTkzPWludCBmdXNlX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9mdXNlL2FjbC5jLTE1NS1cdFx0ICovXG5mcy9mdXNlL2FjbC5jOjE1NjpcdFx0Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XG5mcy9mdXNlL2FjbC5jLTE1Ny1cdFx0ZnVzZV9pbnZhbGlkYXRlX2F0dHIoaW5vZGUpO1xuLS1cbmZzL2Z1c2UvZGlyLmM9MzgzPXN0YXRpYyBpbnQgZnVzZV9kZW50cnlfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuZnMvZnVzZS9kaXIuYy00NDYtXG5mcy9mdXNlL2Rpci5jOjQ0NzpcdFx0Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XG5mcy9mdXNlL2Rpci5jLTQ0OC1cdFx0ZnVzZV9jaGFuZ2VfYXR0cmlidXRlcyhpbm9kZSwgXHUwMDI2b3V0YXJnLmF0dHIsIE5VTEwsXG4tLVxuZnMvZnVzZS9kaXIuYz0xNTIyPXN0YXRpYyBpbnQgZnVzZV91cGRhdGVfZ2V0X2F0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZnVzZS9kaXIuYy0xNTUxLVx0aWYgKHN5bmMpIHtcbmZzL2Z1c2UvZGlyLmM6MTU1MjpcdFx0Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XG5mcy9mdXNlL2Rpci5jLTE1NTMtXHRcdC8qIFRyeSBzdGF0eCBpZiBCVElNRSBpcyByZXF1ZXN0ZWQgKi9cbi0tXG5mcy9mdXNlL2Rpci5jPTE3MjY9c3RhdGljIGludCBmdXNlX3Blcm1fZ2V0YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbi0tXG5mcy9mdXNlL2Rpci5jLTE3MzAtXG5mcy9mdXNlL2Rpci5jOjE3MzE6XHRmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcbmZzL2Z1c2UvZGlyLmMtMTczMi1cdHJldHVybiBmdXNlX2RvX2dldGF0dHIoXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIE5VTEwsIE5VTEwpO1xuLS1cbmZzL2Z1c2UvZGlyLmM9MjMwNz1zdGF0aWMgaW50IGZ1c2Vfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZW50cnksXG4tLVxuZnMvZnVzZS9kaXIuYy0yMzYwLVx0XHRpZiAoZmMtXHUwMDNlcG9zaXhfYWNsKVxuZnMvZnVzZS9kaXIuYzoyMzYxOlx0XHRcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xuZnMvZnVzZS9kaXIuYy0yMzYyLVxuLS1cbmZzL2Z1c2UvaW5vZGUuYz01NDU9aW50IGZ1c2VfcmV2ZXJzZV9pbnZhbF9pbm9kZShzdHJ1Y3QgZnVzZV9jb25uICpmYywgdTY0IG5vZGVpZCxcbi0tXG5mcy9mdXNlL2lub2RlLmMtNTYyLVx0ZnVzZV9pbnZhbGlkYXRlX2F0dHIoaW5vZGUpO1xuZnMvZnVzZS9pbm9kZS5jOjU2MzpcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xuZnMvZnVzZS9pbm9kZS5jLTU2NC1cdGlmIChvZmZzZXQgXHUwMDNlPSAwKSB7XG4tLVxuZnMvZnVzZS9yZWFkZGlyLmM9MTUzPXN0YXRpYyBpbnQgZnVzZV9kaXJlbnRwbHVzX2xpbmsoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMjI4LVxuZnMvZnVzZS9yZWFkZGlyLmM6MjI5Olx0XHRmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcbmZzL2Z1c2UvcmVhZGRpci5jLTIzMC1cdFx0ZnVzZV9jaGFuZ2VfYXR0cmlidXRlcyhpbm9kZSwgXHUwMDI2by1cdTAwM2VhdHRyLCBOVUxMLFxuLS1cbmZzL2dmczIvZ2xvcHMuYz0zNTg9c3RhdGljIHZvaWQgaW5vZGVfZ29faW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgZmxhZ3MpXG4tLVxuZnMvZ2ZzMi9nbG9wcy5jLTM2OC1cdFx0XHRzZXRfYml0KEdMRl9JTlNUQU5USUFURV9ORUVERUQsIFx1MDAyNmdsLVx1MDAzZWdsX2ZsYWdzKTtcbmZzL2dmczIvZ2xvcHMuYzozNjk6XHRcdFx0Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhcdTAwMjZpcC1cdTAwM2VpX2lub2RlKTtcbmZzL2dmczIvZ2xvcHMuYy0zNzAtXHRcdFx0c2VjdXJpdHlfaW5vZGVfaW52YWxpZGF0ZV9zZWNjdHgoXHUwMDI2aXAtXHUwMDNlaV9pbm9kZSk7XG4tLVxuZnMvbmZzL25mczNwcm9jLmM9MTA3Nj1jb25zdCBzdHJ1Y3QgbmZzX3JwY19vcHMgbmZzX3YzX2NsaWVudG9wcyA9IHtcbi0tXG5mcy9uZnMvbmZzM3Byb2MuYy0xMTE4LVx0LmxvY2tcdFx0PSBuZnMzX3Byb2NfbG9jayxcbmZzL25mcy9uZnMzcHJvYy5jOjExMTk6XHQuY2xlYXJfYWNsX2NhY2hlID0gZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyxcbmZzL25mcy9uZnMzcHJvYy5jLTExMjAtXHQuY2xvc2VfY29udGV4dFx0PSBuZnNfY2xvc2VfY29udGV4dCxcbi0tXG5mcy9vY2ZzMi9kbG1nbHVlLmM9Mzk1OD1zdGF0aWMgaW50IG9jZnMyX2RhdGFfY29udmVydF93b3JrZXIoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLFxuLS1cbmZzL29jZnMyL2RsbWdsdWUuYy00MDAyLW91dF9mb3JnZXQ6XG5mcy9vY2ZzMi9kbG1nbHVlLmM6NDAwMzpcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xuZnMvb2NmczIvZGxtZ2x1ZS5jLTQwMDQtXG4tLVxuZnMvcG9zaXhfYWNsLmM9MTEyPUVYUE9SVF9TWU1CT0woZm9yZ2V0X2NhY2hlZF9hY2wpO1xuZnMvcG9zaXhfYWNsLmMtMTEzLVxuZnMvcG9zaXhfYWNsLmM6MTE0OnZvaWQgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvcG9zaXhfYWNsLmMtMTE1LXtcbi0tXG5mcy9wb3NpeF9hY2wuYy0xMTgtfVxuZnMvcG9zaXhfYWNsLmM6MTE5OkVYUE9SVF9TWU1CT0woZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyk7XG5mcy9wb3NpeF9hY2wuYy0xMjAtXG4tLVxuaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaD05Nj12b2lkIGZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTtcbmluY2x1ZGUvbGludXgvcG9zaXhfYWNsLmg6OTc6dm9pZCBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaC05OC1pbnQgcG9zaXhfYWNsX3ZhbGlkKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqLCBjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICopO1xuLS1cbmluY2x1ZGUvbGludXgvcG9zaXhfYWNsLmg9MTMzPXN0YXRpYyBpbmxpbmUgaW50IHBvc2l4X2FjbF9jcmVhdGUoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCAqbW9kZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oLTEzOS1cbmluY2x1ZGUvbGludXgvcG9zaXhfYWNsLmg6MTQwOnN0YXRpYyBpbmxpbmUgdm9pZCBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oLTE0MS17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtNy0gKiAoZS5nLiBBVF9TVEFUWF9GT1JDRV9TWU5DKSwgZnVzZV91cGRhdGVfZ2V0X2F0dHIoKSBjYWxsc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmM6ODogKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIGlzc3VpbmcgRlVTRV9HRVRBVFRSLiAgT24gYW4gdW5maXhlZCBrZXJuZWwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy05LSAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTExLSAqIGdldHhhdHRyIHBvcHVsYXRlcyB0aGUgY2FjaGUuICBCZWNhdXNlIGZ1c2Vfc2V0X2FjbCgpIHNraXBzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzoxMjogKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgZm9yICFmYy1cdTAwM2Vwb3NpeF9hY2wgbW91bnRzLCBhbnkgc3Vic2VxdWVudCBjaGFuZ2UgdG9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTEzLSAqIHRoZSBBQ0wgbGVhdmVzIHRoZSBzdGFsZSBrZXJuZWwgZW50cnkgaW4gcGxhY2UsIGFuZCB0aGUgbmV4dCBnZXR4YXR0ciByZXR1cm5zXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMjItICogIDIuIGxnZXR4YXR0ciAtXHUwMDNlIGRhZW1vbiBjYWxsZWQsIEFDTF9BIHJldHVybmVkLCBOT1QgY2FjaGVkIChBQ0xfRE9OVF9DQUNIRSkuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzoyMzogKiAgMy4gc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgLVx1MDAzZSBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgY2FsbGVkLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMjQtICogICAgIEJ1Z2d5OiAgQUNMX0RPTlRfQ0FDSEUgLVx1MDAzZSBBQ0xfTk9UX0NBQ0hFRCAoY2FjaGUgZW5hYmxlZCkuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmM9MTA3PXN0YXRpYyB2b2lkIGZzX2xvb2t1cChmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTE2LVx0ICogTG9uZyBhdHRyL2VudHJ5IHRpbWVvdXRzIHNvIHRoYXQgbm9ybWFsIHN0YXQoKSBjYWxscyBkbyBub3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjExNzpcdCAqIGV4cGlyZSBhbmQgdHJpZ2dlciBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgb24gdGhlaXIgb3duO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTE4LVx0ICogb25seSB0aGUgZXhwbGljaXQgQVRfU1RBVFhfRk9SQ0VfU1lOQyBzaG91bGQgdHJpZ2dlciBpdC5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYz0yNTM9VEVTVF9GKGFjbF9jYWNoZSwgc3RhbGVfYWZ0ZXJfZm9yY2Vfc3luYylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0yODMtXHQgKiBTdGVwIDI6IHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmM6Mjg0Olx0ICogZnVzZV91cGRhdGVfZ2V0X2F0dHIoKSBjYWxscyBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIHNlbmRpbmdcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTI4NS1cdCAqIEZVU0VfR0VUQVRUUi5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0zMTQtXHQgKiBTaW11bGF0ZXMgYW4gQUNMIGNoYW5nZSB0aGF0IGZ1c2Vfc2V0X2FjbCgpIHdvdWxkIE5PVCBpbnZhbGlkYXRlIGZvclxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmM6MzE1Olx0ICogIWZjLVx1MDAzZXBvc2l4X2FjbCBtb3VudHMgKGl0IHNraXBzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMgaW4gdGhhdCBjYXNlKS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTMxNi1cdCAqIE9uIGEgZml4ZWQga2VybmVsIHRoZSBBQ0wgd2FzIG5ldmVyIGNhY2hlZCwgc28gdGhpcyBpcyBtb290LlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTMzOC1cdFx0ICAgICAgIFwmIzM0Oyhjb3VudD0lZCk7IEFDTF9ET05UX0NBQ0hFIGNvcnJ1cHRlZCBieSBcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjMzOTpcdFx0ICAgICAgIFwmIzM0O2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKVwmIzM0Oywgc3osIGNvdW50KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTM0MC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM3MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBBQ0wgQ2FjaGluZyBhbmQgRlVTRSBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGZvcmdldF9hbGxfY2FjaGVkX2FjbHNgIGlzICpldmVyeXdoZXJlKiDigJMgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGJ5IGEgc2xldyBvZiBuZXR3b3JrIGFuZCBkaXN0cmlidXRlZCBmaWxlc3lzdGVtczogRlVTRSwgTkZTLCBPQ0ZTMiwgQ2VwaCwgYW5kIEdGUzIuIFRoYXQgcmVhbGx5IGhpZ2hsaWdodHMgdGhlIHNjb3BlIG9mIHRoaXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYXJlYSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgYnVnIGlzIGxpbmtlZCB0byBgQUNMX0RPTlRfQ0FDSEVgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZpbGVzeXN0ZW1zIHRoYXQgKmFyZW4mIzM5O3QqIHN1cHBvc2VkIHRvIGJlIGNhY2hpbmcgQUNMcy4KClNpbmNlIHdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uIHRoaXMgc3BlY2lmaWMgYmVoYXZpb3IsIEkgbmVlZCB0byBmb2N1cyBvbiBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBgZm9yZ2V0X2NhY2hlZF9hY2xgLiBGVVNFIHVzZXMgdGhpcyB3aGVuIGAhZmMtJmd0O3Bvc2l4X2FjbGAgaXMgc2V0LiBXaGlsZSBgZnVzZV91cGRhdGVfZ2V0X2F0dHJgIHNvdW5kcyBsaWtlIGEgdXNlZnVsIHN5bWJvbCBmb3IgdGFyZ2V0ZWQgRlVTRSB0ZXN0aW5nLCBpdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBidWcgbGllcyB3aXRoaW4gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgLiBBbHRob3VnaCBgX19mb3JnZXRfY2FjaGVkX2FjbGAgaXMgc3RhdGljLCBzbyBJIGNhbiYjMzk7dCB1c2UgaXQgZGlyZWN0bHkgYXMgYSBmdXp6ZXIgZm9jdXMgc3ltYm9sLCBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgdXNlZnVsLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlnIGltcGxpY2F0aW9ucy4gSXMgYENPTkZJR19GU19QT1NJWF9BQ0xgIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJdCBzZWVtcyBsaWtlIGl0LCBidXQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gT2theSwgeWVzIGl0IGlzIHRoZSBtYWluIGNvbmZpZywgdGhvdWdoIGBDT05GSUdfRlVTRV9GU2AgaXMgcHJvYmFibHkgYWxzbyB1c2VmdWwgc2luY2Ugb3VyIHRlc3QgZW52aXJvbm1lbnQgdXNlcyBGVVNFLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRob3NlIHR3byBhcmUgZW5hYmxlZC4KCkFuZCB5ZXMsIGBDT05GSUdfRlNfUE9TSVhfQUNMYCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgb3B0aW9uIOKAkyBpdCYjMzk7cyByaWdodCB0aGVyZSBpbiBgZnMvS2NvbmZpZ2AuIEV4Y2VsbGVudC4gV2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX1BPU0lYX0FDTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTkwPWNvbmZpZyBGU19EQVhfUE1EXG4tLVxuZnMvS2NvbmZpZy0xMDEtI1xuZnMvS2NvbmZpZzoxMDI6Y29uZmlnIEZTX1BPU0lYX0FDTFxuZnMvS2NvbmZpZy0xMDMtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjg0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipWYWxpZGF0aW5nIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gWWVwLCBgRlNfUE9TSVhfQUNMYCBpcyBkZWZpbml0ZWx5IGEgbGVnaXRpbWF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm8gcmVkIGZsYWdzIHRoZXJlLiBUaGF04oCZcyBzdGFuZGFyZCBwcmFjdGljZSBmb3IgYWNjZXNzIGNvbnRyb2wgYW5kIGlzIHVzdWFsbHkgc3RyYWlnaHRmb3J3YXJkLiBUaGVuLCBsZXQmIzM5O3Mgc2VlLi4uIGFoLCBhbmQgb2YgY291cnNlLCBgRlVTRV9GU2AgaXMgYSBnbyBhcyB3ZWxsLiBObyBzdXJwcmlzZXMuIFdlJiMzOTt2ZSBnb3QgdGhlIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZTsgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IHNvIGZhci4gVGhhdCBjb25maXJtcyBhIGJhc2UgbGV2ZWwgb2Ygb3BlcmF0aW9uYWwgY29tcGV0ZW5jZTsgbm8gaW1tZWRpYXRlIGlzc3VlcyB0byBhZGRyZXNzIG9uIHRoaXMgZnJvbnQuIFRpbWUgdG8gbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVU0VfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU1NAoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBQ0wgQ2FjaGluZyBCdWcgRml4KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gQUNMcywgc3BlY2lmaWNhbGx5IGBGU19QT1NJWF9BQ0xgIGFuZCBgRlVTRV9GU2AuIFRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAuIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogaXMgYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGRlZmluZWQgaW4gYGZzL3Bvc2l4X2FjbC5jYD8gWWVwLCBpdCYjMzk7cyB0aGVyZS4KClRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgdGhpczogdGhlcmUmIzM5O3MgYSBidWcgaW4gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIHRoYXQgbWlzaGFuZGxlcyB0aGUgYEFDTF9ET05UX0NBQ0hFYCBmbGFnLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIEFDTCBjYWNoaW5nIGJlaW5nIGVuYWJsZWQgd2hlbiBpdCBzaG91bGRuJiMzOTt0IGJlLiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgVkZTL0FDTCBsb2dpYywgbWVhbmluZyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBleGFtaW5hdGlvbi4gVGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgdGhpcyB0byBjb25maXJtIGNvcnJlY3QgYmVoYXZpb3Igd2lsbCBiZSB0byBmb2N1cyBvbiB0aG9zZSBjYWxscyB0byBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgYW5kIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHRyYW5zaXRpb25zIG9mIHRoZSBBQ0wgY2FjaGluZyBzdGF0ZS4gSSYjMzk7bSBnb2luZyB0byBnZXQgdGhlIHJlc3VsdHMgcmVhZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMmIzM0OywKICAgICYjMzQ7Zm9yZ2V0X2NhY2hlZF9hY2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCB3aGVyZSBgQUNMX0RPTlRfQ0FDSEVgIGNvdWxkIGJlIGluY29ycmVjdGx5IHJlcGxhY2VkIHdpdGggYEFDTF9OT1RfQ0FDSEVEYCwgaW5hZHZlcnRlbnRseSBlbmFibGluZyBBQ0wgY2FjaGluZyBmb3IgaW5vZGVzIHRoYXQgc2hvdWxkbiYjMzk7dCBoYXZlIGl0IChlLmcuLCBGVVNFIG1vdW50cyB3aXRob3V0IGBGVVNFX1BPU0lYX0FDTGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMvQUNMIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgdG8gZW5zdXJlIEFDTCBjYWNoaW5nIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfUE9TSVhfQUNMJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb3JnZXRfYWxsX2NhY2hlZF9hY2xzJiMzNDssCiAgICAmIzM0O2ZvcmdldF9jYWNoZWRfYWNsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgX19mb3JnZXRfY2FjaGVkX2FjbGAgd2hlcmUgYEFDTF9ET05UX0NBQ0hFYCBjb3VsZCBiZSBpbmNvcnJlY3RseSByZXBsYWNlZCB3aXRoIGBBQ0xfTk9UX0NBQ0hFRGAsIGluYWR2ZXJ0ZW50bHkgZW5hYmxpbmcgQUNMIGNhY2hpbmcgZm9yIGlub2RlcyB0aGF0IHNob3VsZG4mIzM5O3QgaGF2ZSBpdCAoZS5nLiwgRlVTRSBtb3VudHMgd2l0aG91dCBgRlVTRV9QT1NJWF9BQ0xgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTL0FDTCBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYGZvcmdldF9hbGxfY2FjaGVkX2FjbHNgIGFuZCBgZm9yZ2V0X2NhY2hlZF9hY2xgIHRvIGVuc3VyZSBBQ0wgY2FjaGluZyBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwMzoxMzozMC43NTk0MzQ1MzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDQwODUxMTA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19QT1NJWF9BQ0xcIixcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb3JnZXRfYWxsX2NhY2hlZF9hY2xzXCIsXG4gICAgXCJmb3JnZXRfY2FjaGVkX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgX19mb3JnZXRfY2FjaGVkX2FjbGAgd2hlcmUgYEFDTF9ET05UX0NBQ0hFYCBjb3VsZCBiZSBpbmNvcnJlY3RseSByZXBsYWNlZCB3aXRoIGBBQ0xfTk9UX0NBQ0hFRGAsIGluYWR2ZXJ0ZW50bHkgZW5hYmxpbmcgQUNMIGNhY2hpbmcgZm9yIGlub2RlcyB0aGF0IHNob3VsZG4ndCBoYXZlIGl0IChlLmcuLCBGVVNFIG1vdW50cyB3aXRob3V0IGBGVVNFX1BPU0lYX0FDTGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMvQUNMIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgdG8gZW5zdXJlIEFDTCBjYWNoaW5nIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6MzAuNzU5NDM5MDU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTExMjQzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NTc2MWNkNTVkODI3NjBlZDhhOGY3ZjU4OGU5NzI2Y2ZhYmY1YTBjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDAzOjEzOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Bvc2l4X2FjbC5jIGIvZnMvcG9zaXhfYWNsLmNcXG5pbmRleCBiNGJmZTRkZGY2NGVhNS4uM2RjNjJjMWMyNzA4N2EgMTAwNjQ0XFxuLS0tIGEvZnMvcG9zaXhfYWNsLmNcXG4rKysgYi9mcy9wb3NpeF9hY2wuY1xcbkBAIC05Myw2ICs5MywxMyBAQCBzdGF0aWMgdm9pZCBfX2ZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKipwKVxcbiB7XFxuIFxcdHN0cnVjdCBwb3NpeF9hY2wgKm9sZDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEFDTF9ET05UX0NBQ0hFIGlzIGV4cGVjdGVkIHRvIGJlIGEgXFxcImNvbnN0XFxcIiB2YWx1ZSBhbmQgeGNoZyBpdCB3aXRoXFxuK1xcdCAqIEFDTF9OT1RfQ0FDSEVEIHdvdWxkIGVuYWJsZSBhY2wgY2FjaGluZyBmb3IgdGhlIGlub2RlIC1cXG4rXFx0ICogY2xlYXJseSBub3Qgd2hhdCB0aGUgY2FsbGVyIGhhcyBpbnRlbmRlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChSRUFEX09OQ0UoKnApID09IEFDTF9ET05UX0NBQ0hFKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcdG9sZCA9IHhjaGcocCwgQUNMX05PVF9DQUNIRUQpO1xcbiBcXHRpZiAoIWlzX3VuY2FjaGVkX2FjbChvbGQpKVxcbiBcXHRcXHRwb3NpeF9hY2xfcmVsZWFzZShvbGQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxcbmluZGV4IDYxMmFhZDY5YTkzYWE0Li5mNDcxNDE0ODQyNzUwYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxcbkBAIC01LDYgKzUsMTMgQEAgQ0ZMQUdTICs9IC1XYWxsIC1PMiAtZyAkKEtIRFJfSU5DTFVERVMpXFxuIFRFU1RfR0VOX1BST0dTIDo9IGZ1c2VjdGxfdGVzdFxcbiBURVNUX0dFTl9GSUxFUyA6PSBmdXNlX21udFxcbiBcXG4rIyBmdXNlX2FjbF9jYWNoZV90ZXN0IHJlcXVpcmVzIGxpYmZ1c2UzOyBhZGQgaXQgb25seSB3aGVuIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnQuXFxuK0FDTF9DRkxBR1MgOj0gJChzaGVsbCBwa2ctY29uZmlnIGZ1c2UzIC0tY2ZsYWdzIDJcXHUwMDNlL2Rldi9udWxsKVxcbitBQ0xfTERMSUJTIDo9ICQoc2hlbGwgcGtnLWNvbmZpZyBmdXNlMyAtLWxpYnMgMlxcdTAwM2UvZGV2L251bGwpXFxuK2lmbmVxICgkKEFDTF9DRkxBR1MpLClcXG4rVEVTVF9HRU5fUFJPR1MgKz0gZnVzZV9hY2xfY2FjaGVfdGVzdFxcbitlbmRpZlxcbitcXG4gaW5jbHVkZSAuLi8uLi9saWIubWtcXG4gXFxuIFZBUl9DRkxBR1MgOj0gJChzaGVsbCBwa2ctY29uZmlnIGZ1c2UgLS1jZmxhZ3MgMlxcdTAwM2UvZGV2L251bGwpXFxuQEAgLTE5LDMgKzI2LDYgQEAgZW5kaWZcXG4gXFxuICQoT1VUUFVUKS9mdXNlX21udDogQ0ZMQUdTICs9ICQoVkFSX0NGTEFHUylcXG4gJChPVVRQVVQpL2Z1c2VfbW50OiBMRExJQlMgKz0gJChWQVJfTERMSUJTKVxcbitcXG4rJChPVVRQVVQpL2Z1c2VfYWNsX2NhY2hlX3Rlc3Q6IENGTEFHUyArPSAkKEFDTF9DRkxBR1MpXFxuKyQoT1VUUFVUKS9mdXNlX2FjbF9jYWNoZV90ZXN0OiBMRExJQlMgKz0gJChBQ0xfTERMSUJTKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjJlNWRiODU1NTA0MDlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmNcXG5AQCAtMCwwICsxLDM0OCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBUZXN0OiBGVVNFIEFDTCBjYWNoaW5nIGJ1ZyB0cmlnZ2VyZWQgYnkgQVRfU1RBVFhfRk9SQ0VfU1lOQ1xcbisgKlxcbisgKiBBIEZVU0UgbW91bnQgdGhhdCBkb2VzIG5vdCBuZWdvdGlhdGUgRlVTRV9QT1NJWF9BQ0wgaW5pdGlhbGlzZXMgZXZlcnkgaW5vZGVcXG4rICogd2l0aCBpX2FjbCA9IGlfZGVmYXVsdF9hY2wgPSBBQ0xfRE9OVF9DQUNIRS4gIFdoZW4gYSBmcmVzaCBzdGF0IGlzIG5lZWRlZFxcbisgKiAoZS5nLiBBVF9TVEFUWF9GT1JDRV9TWU5DKSwgZnVzZV91cGRhdGVfZ2V0X2F0dHIoKSBjYWxsc1xcbisgKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIGlzc3VpbmcgRlVTRV9HRVRBVFRSLiAgT24gYW4gdW5maXhlZCBrZXJuZWwsXFxuKyAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxcbisgKiBpbmFkdmVydGVudGx5IGVuYWJsaW5nIHRoZSBrZXJuZWwgQUNMIGNhY2hlIGZvciB0aGF0IGlub2RlLiAgVGhlIG5leHRcXG4rICogZ2V0eGF0dHIgcG9wdWxhdGVzIHRoZSBjYWNoZS4gIEJlY2F1c2UgZnVzZV9zZXRfYWNsKCkgc2tpcHNcXG4rICogZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGZvciAhZmMtXFx1MDAzZXBvc2l4X2FjbCBtb3VudHMsIGFueSBzdWJzZXF1ZW50IGNoYW5nZSB0b1xcbisgKiB0aGUgQUNMIGxlYXZlcyB0aGUgc3RhbGUga2VybmVsIGVudHJ5IGluIHBsYWNlLCBhbmQgdGhlIG5leHQgZ2V0eGF0dHIgcmV0dXJuc1xcbisgKiB3cm9uZyBkYXRhIHdpdGhvdXQgZXZlciByZWFjaGluZyB0aGUgRlVTRSBkYWVtb24uXFxuKyAqXFxuKyAqIEZpeCAoZnMvcG9zaXhfYWNsLmMpOiBfX2ZvcmdldF9jYWNoZWRfYWNsKCkgcmV0dXJucyBlYXJseSB3aGVuICpwIGlzXFxuKyAqIEFDTF9ET05UX0NBQ0hFLCBwcmVzZXJ2aW5nIHRoZSBcXFwibmV2ZXIgY2FjaGVcXFwiIGludmFyaWFudCBmb3IgdGhlIGlub2RlJ3NcXG4rICogbGlmZXRpbWUuXFxuKyAqXFxuKyAqIFRlc3Qgb3V0bGluZTpcXG4rICogIDEuIE1vdW50IGEgbWluaW1hbCBGVVNFIGZzIChubyBGVVNFX1BPU0lYX0FDTCBuZWdvdGlhdGVkKS5cXG4rICogIDIuIGxnZXR4YXR0ciAtXFx1MDAzZSBkYWVtb24gY2FsbGVkLCBBQ0xfQSByZXR1cm5lZCwgTk9UIGNhY2hlZCAoQUNMX0RPTlRfQ0FDSEUpLlxcbisgKiAgMy4gc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgLVxcdTAwM2UgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGNhbGxlZC5cXG4rICogICAgIEJ1Z2d5OiAgQUNMX0RPTlRfQ0FDSEUgLVxcdTAwM2UgQUNMX05PVF9DQUNIRUQgKGNhY2hlIGVuYWJsZWQpLlxcbisgKiAgICAgRml4ZWQ6ICBBQ0xfRE9OVF9DQUNIRSBwcmVzZXJ2ZWQuXFxuKyAqICA0LiBsZ2V0eGF0dHIgLVxcdTAwM2UgZGFlbW9uIGNhbGxlZCwgQUNMX0EgcmV0dXJuZWQuXFxuKyAqICAgICBCdWdneTogIHJlc3VsdCBub3cgY2FjaGVkIChBQ0xfTk9UX0NBQ0hFRCAtXFx1MDAzZSBjYWNoZWQpLlxcbisgKiAgICAgRml4ZWQ6ICByZXN1bHQgc3RpbGwgbm90IGNhY2hlZC5cXG4rICogIDUuIERhZW1vbiBzd2l0Y2hlcyB0byBBQ0xfQiBpbnRlcm5hbGx5IChkaWZmZXJlbnQgc2l6ZSkuXFxuKyAqICA2LiBsZ2V0eGF0dHIgLVxcdTAwM2Ugc2hvdWxkIHJldHVybiBBQ0xfQiAoNDQgYnl0ZXMpLlxcbisgKiAgICAgQnVnZ3k6ICBjYWNoZSBoaXQsIHJldHVybnMgc3RhbGUgQUNMX0EgKDI4IGJ5dGVzKS4gRkFJTC5cXG4rICogICAgIEZpeGVkOiAgbm8gY2FjaGUsIGRhZW1vbiBjYWxsZWQsIHJldHVybnMgQUNMX0IgKDQ0IGJ5dGVzKS4gUEFTUy5cXG4rICovXFxuK1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3hhdHRyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgRlVTRV9VU0VfVkVSU0lPTiAzMVxcbisjaW5jbHVkZSBcXHUwMDNjZnVzZV9sb3dsZXZlbC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisvKiAtLS0tIEFDTCBiaW5hcnkgZW5jb2RpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuKy8qXFxuKyAqIFBPU0lYIEFDTCB2MiB4YXR0ciBmb3JtYXQgKGxpdHRsZS1lbmRpYW4pOlxcbisgKiAgIGhlYWRlcjogdTMyIHZlcnNpb24gKD0gMHgwMDAwMDAwMilcXG4rICogICBlbnRyeTogIHUxNiB0YWcgfCB1MTYgcGVybSB8IHUzMiBpZFxcbisgKlxcbisgKiBFbnRyaWVzIG11c3QgYXBwZWFyIGluIHRhZy1hc2NlbmRpbmcgb3JkZXI7IG5hbWVkIFVTRVIvR1JPVVAgZW50cmllc1xcbisgKiByZXF1aXJlIGEgTUFTSyBlbnRyeS4gIEJvdGggQUNMcyBwYXNzIHBvc2l4X2FjbF9mcm9tX3hhdHRyKCkgdmFsaWRhdGlvbi5cXG4rICovXFxuK1xcbisvKiBBQ0xfQTogMyBlbnRyaWVzIChVU0VSX09CSjpyd3gsIEdST1VQX09CSjpyLXgsIE9USEVSOnIteCkgPSAyOCBieXRlcyAqL1xcbitzdGF0aWMgY29uc3QgdWludDhfdCBhY2xfYVtdID0ge1xcbitcXHQweDAyLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2MiBoZWFkZXIgICAgICAqL1xcbitcXHQweDAxLCAweDAwLCAweDA3LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBVU0VSX09CSiAgcnd4ICAqL1xcbitcXHQweDA0LCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBHUk9VUF9PQkogci14ICAqL1xcbitcXHQweDIwLCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBPVEhFUiAgICAgci14ICAqL1xcbit9O1xcbitcXG4rLypcXG4rICogQUNMX0I6IDUgZW50cmllcyDigJQgYWRkcyBVU0VSIHVpZD0xIGFuZCBNQVNLID0gNDQgYnl0ZXMuXFxuKyAqIEEgbmFtZWQgVVNFUiBlbnRyeSByZXF1aXJlcyBhIE1BU0s7IGFsbCB0YWdzIGluIGFzY2VuZGluZyBvcmRlci5cXG4rICovXFxuK3N0YXRpYyBjb25zdCB1aW50OF90IGFjbF9iW10gPSB7XFxuK1xcdDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHYyIGhlYWRlciAgICAgICAqL1xcbitcXHQweDAxLCAweDAwLCAweDA3LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBVU0VSX09CSiAgIHJ3eCAgKi9cXG4rXFx0MHgwMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgLyogVVNFUiB1aWQ9MSByd3ggICovXFxuK1xcdDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIEdST1VQX09CSiAgci14ICAqL1xcbitcXHQweDEwLCAweDAwLCAweDA3LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBNQVNLICAgICAgIHJ3eCAgKi9cXG4rXFx0MHgyMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogT1RIRVIgICAgICByLXggICovXFxuK307XFxuK1xcbisvKiAtLS0tIFNoYXJlZCBzdGF0ZSAoZGFlbW9uIHRocmVhZCBcXHUwMDNjLVxcdTAwM2UgdGVzdCB0aHJlYWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbisjZGVmaW5lIEZJTEVfSU5PICAyXFxuKyNkZWZpbmUgRklMRV9OQU1FIFxcXCJ0ZXN0ZmlsZVxcXCJcXG4rXFxuK3N0cnVjdCBkYWVtb25fc3RhdGUge1xcbitcXHRwdGhyZWFkX211dGV4X3QgbG9jaztcXG4rXFx0Y29uc3QgdWludDhfdCAgKmFjbDtcXG4rXFx0c2l6ZV90ICAgICAgICAgIGFjbF9zaXplO1xcbitcXHRpbnQgICAgICAgICAgICAgZ2V0eGF0dHJfY291bnQ7XFxuK307XFxuK1xcbisvKlxcbisgKiBHbG9iYWw6IGNhbGxiYWNrcyBhcmUgc3RhdGVsZXNzIGZucyBzbyB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsLlxcbisgKiBTYWZlIGJlY2F1c2Ugb25seSBvbmUgdGVzdCBpbnN0YW5jZSBydW5zIGF0IGEgdGltZS5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZGFlbW9uX3N0YXRlIGdfZHMgPSB7XFxuK1xcdC5sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUixcXG4rfTtcXG4rXFxuKy8qIC0tLS0gRlVTRSBsb3dsZXZlbCBjYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cXG4rXFxuK3N0YXRpYyB2b2lkIGZzX2xvb2t1cChmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0aWYgKHBhcmVudCAhPSBGVVNFX1JPT1RfSUQgfHwgc3RyY21wKG5hbWUsIEZJTEVfTkFNRSkpIHtcXG4rXFx0XFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9FTlQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0c3RydWN0IGZ1c2VfZW50cnlfcGFyYW0gZSA9IHt9O1xcbitcXG4rXFx0LypcXG4rXFx0ICogTG9uZyBhdHRyL2VudHJ5IHRpbWVvdXRzIHNvIHRoYXQgbm9ybWFsIHN0YXQoKSBjYWxscyBkbyBub3RcXG4rXFx0ICogZXhwaXJlIGFuZCB0cmlnZ2VyIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSBvbiB0aGVpciBvd247XFxuK1xcdCAqIG9ubHkgdGhlIGV4cGxpY2l0IEFUX1NUQVRYX0ZPUkNFX1NZTkMgc2hvdWxkIHRyaWdnZXIgaXQuXFxuK1xcdCAqL1xcbitcXHRlLmlubyAgICAgICAgICAgICA9IEZJTEVfSU5PO1xcbitcXHRlLmdlbmVyYXRpb24gICAgICA9IDE7XFxuK1xcdGUuYXR0cl90aW1lb3V0ICAgID0gMTAuMDtcXG4rXFx0ZS5lbnRyeV90aW1lb3V0ICAgPSAxMC4wO1xcbitcXHRlLmF0dHIuc3RfaW5vICAgICA9IEZJTEVfSU5PO1xcbitcXHRlLmF0dHIuc3RfbW9kZSAgICA9IFNfSUZSRUcgfCAwNjQ0O1xcbitcXHRlLmF0dHIuc3RfbmxpbmsgICA9IDE7XFxuK1xcdGZ1c2VfcmVwbHlfZW50cnkocmVxLCBcXHUwMDI2ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGZzX2dldGF0dHIoZnVzZV9yZXFfdCByZXEsIGZ1c2VfaW5vX3QgaW5vLFxcbitcXHRcXHQgICAgICAgc3RydWN0IGZ1c2VfZmlsZV9pbmZvICpmaSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3RhdCBzdCA9IHt9O1xcbitcXG4rXFx0KHZvaWQpZmk7XFxuK1xcdGlmIChpbm8gPT0gRlVTRV9ST09UX0lEKSB7XFxuK1xcdFxcdHN0LnN0X2lubyAgID0gRlVTRV9ST09UX0lEO1xcbitcXHRcXHRzdC5zdF9tb2RlICA9IFNfSUZESVIgfCAwNzU1O1xcbitcXHRcXHRzdC5zdF9ubGluayA9IDI7XFxuK1xcdH0gZWxzZSBpZiAoaW5vID09IEZJTEVfSU5PKSB7XFxuK1xcdFxcdHN0LnN0X2lubyAgID0gRklMRV9JTk87XFxuK1xcdFxcdHN0LnN0X21vZGUgID0gU19JRlJFRyB8IDA2NDQ7XFxuK1xcdFxcdHN0LnN0X25saW5rID0gMTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9FTlQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0ZnVzZV9yZXBseV9hdHRyKHJlcSwgXFx1MDAyNnN0LCAxMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGZzX2dldHhhdHRyKGZ1c2VfcmVxX3QgcmVxLCBmdXNlX2lub190IGlubywgY29uc3QgY2hhciAqbmFtZSxcXG4rXFx0XFx0XFx0c2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0aWYgKGlubyAhPSBGSUxFX0lOTyB8fFxcbitcXHQgICAgc3RyY21wKG5hbWUsIFxcXCJzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1xcXCIpICE9IDApIHtcXG4rXFx0XFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9EQVRBKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNmdfZHMubG9jayk7XFxuK1xcdGNvbnN0IHVpbnQ4X3QgKmFjbCAgICAgID0gZ19kcy5hY2w7XFxuK1xcdHNpemVfdCAgICAgICAgIGFjbF9zaXplID0gZ19kcy5hY2xfc2l6ZTtcXG4rXFx0Z19kcy5nZXR4YXR0cl9jb3VudCsrO1xcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2Z19kcy5sb2NrKTtcXG4rXFxuK1xcdGlmIChzaXplID09IDApXFxuK1xcdFxcdGZ1c2VfcmVwbHlfeGF0dHIocmVxLCBhY2xfc2l6ZSk7XFxuK1xcdGVsc2UgaWYgKHNpemUgXFx1MDAzYyBhY2xfc2l6ZSlcXG4rXFx0XFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFUkFOR0UpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGZ1c2VfcmVwbHlfYnVmKHJlcSwgKGNvbnN0IGNoYXIgKilhY2wsIGFjbF9zaXplKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmdXNlX2xvd2xldmVsX29wcyBmc19vcHMgPSB7XFxuK1xcdC5sb29rdXAgICA9IGZzX2xvb2t1cCxcXG4rXFx0LmdldGF0dHIgID0gZnNfZ2V0YXR0cixcXG4rXFx0LmdldHhhdHRyID0gZnNfZ2V0eGF0dHIsXFxuK307XFxuK1xcbisvKiAtLS0tIERhZW1vbiB0aHJlYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xcbitcXG4rc3RhdGljIHZvaWQgKnJ1bl9kYWVtb24odm9pZCAqYXJnKVxcbit7XFxuK1xcdGZ1c2Vfc2Vzc2lvbl9sb29wKChzdHJ1Y3QgZnVzZV9zZXNzaW9uICopYXJnKTtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuKy8qIC0tLS0ga3NlbGZ0ZXN0IGhhcm5lc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbitGSVhUVVJFKGFjbF9jYWNoZSkge1xcbitcXHRzdHJ1Y3QgZnVzZV9zZXNzaW9uICpzZTtcXG4rXFx0Y2hhciAgICAgICAgICAgICAgICAgbW91bnRwb2ludFtQQVRIX01BWF07XFxuK1xcdGNoYXIgICAgICAgICAgICAgICAgIGZpbGVfcGF0aFtQQVRIX01BWF07XFxuK1xcdHB0aHJlYWRfdCAgICAgICAgICAgIHRocmVhZDtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoYWNsX2NhY2hlKVxcbit7XFxuK1xcdGNoYXIgKmZ1c2VfYXJndltdID0geyBcXFwiZnVzZV9hY2xfY2FjaGVfdGVzdFxcXCIsIE5VTEwgfTtcXG4rXFx0c3RydWN0IGZ1c2VfYXJncyBhcmdzID0gRlVTRV9BUkdTX0lOSVQoMSwgZnVzZV9hcmd2KTtcXG4rXFxuK1xcdGdfZHMuYWNsICAgICAgICAgICAgPSBhY2xfYTtcXG4rXFx0Z19kcy5hY2xfc2l6ZSAgICAgICA9IHNpemVvZihhY2xfYSk7XFxuK1xcdGdfZHMuZ2V0eGF0dHJfY291bnQgPSAwO1xcbitcXG4rXFx0c3RyY3B5KHNlbGYtXFx1MDAzZW1vdW50cG9pbnQsIFxcXCIvdG1wL2FjbF9jYWNoZV90ZXN0X1hYWFhYWFxcXCIpO1xcbitcXHRpZiAoIW1rZHRlbXAoc2VsZi1cXHUwMDNlbW91bnRwb2ludCkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibWtkdGVtcDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXG4rXFx0c25wcmludGYoc2VsZi1cXHUwMDNlZmlsZV9wYXRoLCBzaXplb2Yoc2VsZi1cXHUwMDNlZmlsZV9wYXRoKSxcXG4rXFx0XFx0IFxcXCIlcy9cXFwiIEZJTEVfTkFNRSwgc2VsZi1cXHUwMDNlbW91bnRwb2ludCk7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VzZSA9IGZ1c2Vfc2Vzc2lvbl9uZXcoXFx1MDAyNmFyZ3MsIFxcdTAwMjZmc19vcHMsIHNpemVvZihmc19vcHMpLCBOVUxMKTtcXG4rXFx0aWYgKCFzZWxmLVxcdTAwM2VzZSkge1xcbitcXHRcXHRybWRpcihzZWxmLVxcdTAwM2Vtb3VudHBvaW50KTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJmdXNlX3Nlc3Npb25fbmV3IGZhaWxlZFxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZnVzZV9zZXNzaW9uX21vdW50KHNlbGYtXFx1MDAzZXNlLCBzZWxmLVxcdTAwM2Vtb3VudHBvaW50KSkge1xcbitcXHRcXHRmdXNlX3Nlc3Npb25fZGVzdHJveShzZWxmLVxcdTAwM2VzZSk7XFxuK1xcdFxcdHJtZGlyKHNlbGYtXFx1MDAzZW1vdW50cG9pbnQpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImZ1c2Vfc2Vzc2lvbl9tb3VudCBmYWlsZWQgXFxcIlxcbitcXHRcXHRcXHQgICAgIFxcXCIobWlzc2luZyBmdXNlcm1vdW50MyBvciBpbnN1ZmZpY2llbnQgcHJpdmlsZWdlcylcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZzZWxmLVxcdTAwM2V0aHJlYWQsIE5VTEwsIHJ1bl9kYWVtb24sIHNlbGYtXFx1MDAzZXNlKSkge1xcbitcXHRcXHRmdXNlX3Nlc3Npb25fdW5tb3VudChzZWxmLVxcdTAwM2VzZSk7XFxuK1xcdFxcdGZ1c2Vfc2Vzc2lvbl9kZXN0cm95KHNlbGYtXFx1MDAzZXNlKTtcXG4rXFx0XFx0cm1kaXIoc2VsZi1cXHUwMDNlbW91bnRwb2ludCk7XFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwicHRocmVhZF9jcmVhdGU6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0fVxcbitcXG4rXFx0ZnVzZV9vcHRfZnJlZV9hcmdzKFxcdTAwMjZhcmdzKTtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihhY2xfY2FjaGUpXFxuK3tcXG4rXFx0ZnVzZV9zZXNzaW9uX2V4aXQoc2VsZi1cXHUwMDNlc2UpO1xcbitcXHRmdXNlX3Nlc3Npb25fdW5tb3VudChzZWxmLVxcdTAwM2VzZSk7XFxuK1xcdHB0aHJlYWRfam9pbihzZWxmLVxcdTAwM2V0aHJlYWQsIE5VTEwpO1xcbitcXHRmdXNlX3Nlc3Npb25fZGVzdHJveShzZWxmLVxcdTAwM2VzZSk7XFxuK1xcdHJtZGlyKHNlbGYtXFx1MDAzZW1vdW50cG9pbnQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRvX2ZvcmNlX3N0YXR4KGNvbnN0IGNoYXIgKnBhdGgpXFxuK3tcXG4rXFx0c3RydWN0IHN0YXR4IHN0eDtcXG4rXFxuK1xcdHJldHVybiBzeXNjYWxsKFNZU19zdGF0eCwgQVRfRkRDV0QsIHBhdGgsXFxuK1xcdFxcdCAgICAgICBBVF9TVEFUWF9GT1JDRV9TWU5DLCBTVEFUWF9CQVNJQ19TVEFUUywgXFx1MDAyNnN0eCk7XFxuK31cXG4rXFxuK1RFU1RfRihhY2xfY2FjaGUsIHN0YWxlX2FmdGVyX2ZvcmNlX3N5bmMpXFxuK3tcXG4rXFx0Y2hhciAgICBidWZbNTEyXTtcXG4rXFx0c3NpemVfdCBzejtcXG4rXFx0aW50ICAgICBjb3VudDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN0ZXAgMTogdHdvIGdldHhhdHRyIGNhbGxzIGJlZm9yZSBhbnkgc3RhdHgoRk9SQ0VfU1lOQykuXFxuK1xcdCAqIGlfYWNsID09IEFDTF9ET05UX0NBQ0hFLiAgX19nZXRfYWNsJ3MgY21weGNoZyhwLCBBQ0xfTk9UX0NBQ0hFRCxcXG4rXFx0ICogc2VudGluZWwpIGZpbmRzICpwICE9IEFDTF9OT1RfQ0FDSEVEIG9uIGV2ZXJ5IGNhbGwsIHNvIHRoZSBzZW50aW5lbFxcbitcXHQgKiBpcyBuZXZlciBwbGFjZWQgYW5kIHRoZSByZXN1bHQgaXMgbmV2ZXIgY2FjaGVkLiAgQm90aCBjYWxscyBtdXN0XFxuK1xcdCAqIHJlYWNoIHRoZSBkYWVtb24sIHByb3ZpbmcgQUNMX0RPTlRfQ0FDSEUgc3VwcHJlc3NlcyBjYWNoaW5nLlxcbitcXHQgKi9cXG4rXFx0c3ogPSBsZ2V0eGF0dHIoc2VsZi1cXHUwMDNlZmlsZV9wYXRoLCBcXFwic3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3NcXFwiLFxcbitcXHRcXHQgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7XFxuK1xcdEFTU0VSVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9hKSk7XFxuK1xcbitcXHRzeiA9IGxnZXR4YXR0cihzZWxmLVxcdTAwM2VmaWxlX3BhdGgsIFxcXCJzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1xcXCIsXFxuK1xcdFxcdCAgICAgICBidWYsIHNpemVvZihidWYpKTtcXG4rXFx0QVNTRVJUX0VRKHN6LCAoc3NpemVfdClzaXplb2YoYWNsX2EpKTtcXG4rXFxuK1xcdHB0aHJlYWRfbXV0ZXhfbG9jayhcXHUwMDI2Z19kcy5sb2NrKTtcXG4rXFx0Y291bnQgPSBnX2RzLmdldHhhdHRyX2NvdW50O1xcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2Z19kcy5sb2NrKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShjb3VudCwgMik7XFxuK1xcdFRIX0xPRyhcXFwic3RlcCAxIE9LOiBib3RoIHByZS10cmlnZ2VyIGdldHhhdHRycyByZWFjaGVkIGRhZW1vbiAoY291bnQ9JWQpLCBcXFwiXFxuK1xcdCAgICAgICBcXFwiQUNMX0RPTlRfQ0FDSEUgaXMgd29ya2luZ1xcXCIsIGNvdW50KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN0ZXAgMjogc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykuXFxuK1xcdCAqIGZ1c2VfdXBkYXRlX2dldF9hdHRyKCkgY2FsbHMgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGJlZm9yZSBzZW5kaW5nXFxuK1xcdCAqIEZVU0VfR0VUQVRUUi5cXG4rXFx0ICogICBCdWdneSBrZXJuZWw6ICBBQ0xfRE9OVF9DQUNIRSAtXFx1MDAzZSBBQ0xfTk9UX0NBQ0hFRCAgKGNhY2hlIGVuYWJsZWQpXFxuK1xcdCAqICAgRml4ZWQga2VybmVsOiAgQUNMX0RPTlRfQ0FDSEUgcHJlc2VydmVkICAgICAgICAgICAobm8gZWZmZWN0KVxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKGRvX2ZvcmNlX3N0YXR4KHNlbGYtXFx1MDAzZWZpbGVfcGF0aCksIDApO1xcbitcXHRUSF9MT0coXFxcInN0ZXAgMiBPSzogc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgc3VjY2VlZGVkXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTdGVwIDM6IGdldHhhdHRyIOKAlCBjYWNoZSBwb3B1bGF0aW9uIGF0dGVtcHQgYWZ0ZXIgdGhlIHRyaWdnZXIuXFxuK1xcdCAqICAgQnVnZ3k6ICAqcCA9PSBBQ0xfTk9UX0NBQ0hFRCAtXFx1MDAzZSBzZW50aW5lbCBwbGFjZWQgLVxcdTAwM2UgZnVzZV9nZXRfaW5vZGVfYWNsXFxuK1xcdCAqICAgICAgICAgICBjYWxsZWQgLVxcdTAwM2UgQUNMX0EgcGFyc2VkIGFuZCBzdG9yZWQgaW4gdGhlIGtlcm5lbCBjYWNoZS5cXG4rXFx0ICogICBGaXhlZDogICpwID09IEFDTF9ET05UX0NBQ0hFIC1cXHUwMDNlIHNlbnRpbmVsIHBsYWNlbWVudCBza2lwcGVkIC1cXHUwMDNlXFxuK1xcdCAqICAgICAgICAgICBmdXNlX2dldF9pbm9kZV9hY2wgY2FsbGVkIGJ1dCByZXN1bHQgbm90IGNhY2hlZC5cXG4rXFx0ICogRWl0aGVyIHdheSB0aGUgY29ycmVjdCBBQ0xfQSBpcyByZXR1cm5lZCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0c3ogPSBsZ2V0eGF0dHIoc2VsZi1cXHUwMDNlZmlsZV9wYXRoLCBcXFwic3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3NcXFwiLFxcbitcXHRcXHQgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7XFxuK1xcdEFTU0VSVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9hKSk7XFxuK1xcbitcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNmdfZHMubG9jayk7XFxuK1xcdGNvdW50ID0gZ19kcy5nZXR4YXR0cl9jb3VudDtcXG4rXFx0cHRocmVhZF9tdXRleF91bmxvY2soXFx1MDAyNmdfZHMubG9jayk7XFxuK1xcbitcXHRBU1NFUlRfRVEoY291bnQsIDMpO1xcbitcXHRUSF9MT0coXFxcInN0ZXAgMyBPSzogcG9zdC10cmlnZ2VyIGdldHhhdHRyIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksIFxcXCJcXG4rXFx0ICAgICAgIFxcXCJyZXR1cm5lZCBjb3JyZWN0IEFDTF9BICglemQgYnl0ZXMpXFxcIiwgY291bnQsIHN6KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN0ZXAgNDogc3dpdGNoIGRhZW1vbiB0byBBQ0xfQiAoZGlmZmVyZW50IHNpemU6IDQ0IHZzIDI4IGJ5dGVzKS5cXG4rXFx0ICogU2ltdWxhdGVzIGFuIEFDTCBjaGFuZ2UgdGhhdCBmdXNlX3NldF9hY2woKSB3b3VsZCBOT1QgaW52YWxpZGF0ZSBmb3JcXG4rXFx0ICogIWZjLVxcdTAwM2Vwb3NpeF9hY2wgbW91bnRzIChpdCBza2lwcyBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzIGluIHRoYXQgY2FzZSkuXFxuK1xcdCAqIE9uIGEgZml4ZWQga2VybmVsIHRoZSBBQ0wgd2FzIG5ldmVyIGNhY2hlZCwgc28gdGhpcyBpcyBtb290LlxcbitcXHQgKi9cXG4rXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZnX2RzLmxvY2spO1xcbitcXHRnX2RzLmFjbCAgICAgID0gYWNsX2I7XFxuK1xcdGdfZHMuYWNsX3NpemUgPSBzaXplb2YoYWNsX2IpO1xcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2Z19kcy5sb2NrKTtcXG4rXFx0VEhfTE9HKFxcXCJzdGVwIDQ6IGRhZW1vbiBzd2l0Y2hlZCB0byBBQ0xfQiAoJXp1IGJ5dGVzKVxcXCIsIHNpemVvZihhY2xfYikpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU3RlcCA1OiBnZXR4YXR0ciDigJQgdGhlIGRlY2lzaXZlIGNoZWNrLlxcbitcXHQgKiAgIEJ1Z2d5IGtlcm5lbDogIGNhY2hlIGhpdCAtXFx1MDAzZSBzdGFsZSBBQ0xfQSAoMjggYnl0ZXMpLCBjb3VudCBzdGF5cyAzLlxcbitcXHQgKiAgIEZpeGVkIGtlcm5lbDogIG5vIGNhY2hlIC1cXHUwMDNlIGRhZW1vbiBjYWxsZWQgLVxcdTAwM2UgQUNMX0IgKDQ0IGJ5dGVzKSwgY291bnQgNC5cXG4rXFx0ICovXFxuK1xcdHN6ID0gbGdldHhhdHRyKHNlbGYtXFx1MDAzZWZpbGVfcGF0aCwgXFxcInN5c3RlbS5wb3NpeF9hY2xfYWNjZXNzXFxcIixcXG4rXFx0XFx0ICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXG4rXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZnX2RzLmxvY2spO1xcbitcXHRjb3VudCA9IGdfZHMuZ2V0eGF0dHJfY291bnQ7XFxuK1xcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFxcdTAwMjZnX2RzLmxvY2spO1xcbitcXG4rXFx0aWYgKHN6ID09IChzc2l6ZV90KXNpemVvZihhY2xfYSkpXFxuK1xcdFxcdFRIX0xPRyhcXFwic3RlcCA1IEJVRzogc3RhbGUgQUNMX0EgKCV6ZCBieXRlcykgZnJvbSBrZXJuZWwgY2FjaGUgXFxcIlxcbitcXHRcXHQgICAgICAgXFxcIihjb3VudD0lZCk7IEFDTF9ET05UX0NBQ0hFIGNvcnJ1cHRlZCBieSBcXFwiXFxuK1xcdFxcdCAgICAgICBcXFwiZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpXFxcIiwgc3osIGNvdW50KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRUSF9MT0coXFxcInN0ZXAgNSBPSzogZGFlbW9uIHJlYWNoZWQgKGNvdW50PSVkKSwgXFxcIlxcbitcXHRcXHQgICAgICAgXFxcImZyZXNoIEFDTF9CICglemQgYnl0ZXMpXFxcIiwgY291bnQsIHN6KTtcXG4rXFxuK1xcdEVYUEVDVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9iKSk7XFxuK1xcdEVYUEVDVF9FUShjb3VudCwgNCk7XFxuK31cXG4rXFxuK1RFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDAzOjEzOjMxLjI1MTIzNzEwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MTY2OTgyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfUE9TSVhfQUNMXCIsXG4gICAgXCJGVVNFX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc1wiLFxuICAgIFwiZm9yZ2V0X2NhY2hlZF9hY2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIHdoZXJlIGBBQ0xfRE9OVF9DQUNIRWAgY291bGQgYmUgaW5jb3JyZWN0bHkgcmVwbGFjZWQgd2l0aCBgQUNMX05PVF9DQUNIRURgLCBpbmFkdmVydGVudGx5IGVuYWJsaW5nIEFDTCBjYWNoaW5nIGZvciBpbm9kZXMgdGhhdCBzaG91bGRuJ3QgaGF2ZSBpdCAoZS5nLiwgRlVTRSBtb3VudHMgd2l0aG91dCBgRlVTRV9QT1NJWF9BQ0xgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTL0FDTCBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYGZvcmdldF9hbGxfY2FjaGVkX2FjbHNgIGFuZCBgZm9yZ2V0X2NhY2hlZF9hY2xgIHRvIGVuc3VyZSBBQ0wgY2FjaGluZyBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzU3NjFjZDU1ZDgyNzYwZWQ4YThmN2Y1ODhlOTcyNmNmYWJmNWEwY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDAzOjEzOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcG9zaXhfYWNsLmMgYi9mcy9wb3NpeF9hY2wuY1xuaW5kZXggYjRiZmU0ZGRmNjRlYTUuLjNkYzYyYzFjMjcwODdhIDEwMDY0NFxuLS0tIGEvZnMvcG9zaXhfYWNsLmNcbisrKyBiL2ZzL3Bvc2l4X2FjbC5jXG5AQCAtOTMsNiArOTMsMTMgQEAgc3RhdGljIHZvaWQgX19mb3JnZXRfY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICoqcClcbiB7XG4gXHRzdHJ1Y3QgcG9zaXhfYWNsICpvbGQ7XG4gXG4rXHQvKlxuK1x0ICogQUNMX0RPTlRfQ0FDSEUgaXMgZXhwZWN0ZWQgdG8gYmUgYSBcImNvbnN0XCIgdmFsdWUgYW5kIHhjaGcgaXQgd2l0aFxuK1x0ICogQUNMX05PVF9DQUNIRUQgd291bGQgZW5hYmxlIGFjbCBjYWNoaW5nIGZvciB0aGUgaW5vZGUgLVxuK1x0ICogY2xlYXJseSBub3Qgd2hhdCB0aGUgY2FsbGVyIGhhcyBpbnRlbmRlZC5cbitcdCAqL1xuK1x0aWYgKFJFQURfT05DRSgqcCkgPT0gQUNMX0RPTlRfQ0FDSEUpXG4rXHRcdHJldHVybjtcbiBcdG9sZCA9IHhjaGcocCwgQUNMX05PVF9DQUNIRUQpO1xuIFx0aWYgKCFpc191bmNhY2hlZF9hY2wob2xkKSlcbiBcdFx0cG9zaXhfYWNsX3JlbGVhc2Uob2xkKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuaW5kZXggNjEyYWFkNjlhOTNhYTQuLmY0NzE0MTQ4NDI3NTBhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuQEAgLTUsNiArNSwxMyBAQCBDRkxBR1MgKz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUylcbiBURVNUX0dFTl9QUk9HUyA6PSBmdXNlY3RsX3Rlc3RcbiBURVNUX0dFTl9GSUxFUyA6PSBmdXNlX21udFxuIFxuKyMgZnVzZV9hY2xfY2FjaGVfdGVzdCByZXF1aXJlcyBsaWJmdXNlMzsgYWRkIGl0IG9ubHkgd2hlbiB0aGUgbGlicmFyeSBpcyBwcmVzZW50LlxuK0FDTF9DRkxBR1MgOj0gJChzaGVsbCBwa2ctY29uZmlnIGZ1c2UzIC0tY2ZsYWdzIDJcdTAwM2UvZGV2L251bGwpXG4rQUNMX0xETElCUyA6PSAkKHNoZWxsIHBrZy1jb25maWcgZnVzZTMgLS1saWJzIDJcdTAwM2UvZGV2L251bGwpXG4raWZuZXEgKCQoQUNMX0NGTEFHUyksKVxuK1RFU1RfR0VOX1BST0dTICs9IGZ1c2VfYWNsX2NhY2hlX3Rlc3RcbitlbmRpZlxuK1xuIGluY2x1ZGUgLi4vLi4vbGliLm1rXG4gXG4gVkFSX0NGTEFHUyA6PSAkKHNoZWxsIHBrZy1jb25maWcgZnVzZSAtLWNmbGFncyAyXHUwMDNlL2Rldi9udWxsKVxuQEAgLTE5LDMgKzI2LDYgQEAgZW5kaWZcbiBcbiAkKE9VVFBVVCkvZnVzZV9tbnQ6IENGTEFHUyArPSAkKFZBUl9DRkxBR1MpXG4gJChPVVRQVVQpL2Z1c2VfbW50OiBMRExJQlMgKz0gJChWQVJfTERMSUJTKVxuK1xuKyQoT1VUUFVUKS9mdXNlX2FjbF9jYWNoZV90ZXN0OiBDRkxBR1MgKz0gJChBQ0xfQ0ZMQUdTKVxuKyQoT1VUUFVUKS9mdXNlX2FjbF9jYWNoZV90ZXN0OiBMRExJQlMgKz0gJChBQ0xfTERMSUJTKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjJlNWRiODU1NTA0MDlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jXG5AQCAtMCwwICsxLDM0OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBUZXN0OiBGVVNFIEFDTCBjYWNoaW5nIGJ1ZyB0cmlnZ2VyZWQgYnkgQVRfU1RBVFhfRk9SQ0VfU1lOQ1xuKyAqXG4rICogQSBGVVNFIG1vdW50IHRoYXQgZG9lcyBub3QgbmVnb3RpYXRlIEZVU0VfUE9TSVhfQUNMIGluaXRpYWxpc2VzIGV2ZXJ5IGlub2RlXG4rICogd2l0aCBpX2FjbCA9IGlfZGVmYXVsdF9hY2wgPSBBQ0xfRE9OVF9DQUNIRS4gIFdoZW4gYSBmcmVzaCBzdGF0IGlzIG5lZWRlZFxuKyAqIChlLmcuIEFUX1NUQVRYX0ZPUkNFX1NZTkMpLCBmdXNlX3VwZGF0ZV9nZXRfYXR0cigpIGNhbGxzXG4rICogZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGJlZm9yZSBpc3N1aW5nIEZVU0VfR0VUQVRUUi4gIE9uIGFuIHVuZml4ZWQga2VybmVsLFxuKyAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxuKyAqIGluYWR2ZXJ0ZW50bHkgZW5hYmxpbmcgdGhlIGtlcm5lbCBBQ0wgY2FjaGUgZm9yIHRoYXQgaW5vZGUuICBUaGUgbmV4dFxuKyAqIGdldHhhdHRyIHBvcHVsYXRlcyB0aGUgY2FjaGUuICBCZWNhdXNlIGZ1c2Vfc2V0X2FjbCgpIHNraXBzXG4rICogZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGZvciAhZmMtXHUwMDNlcG9zaXhfYWNsIG1vdW50cywgYW55IHN1YnNlcXVlbnQgY2hhbmdlIHRvXG4rICogdGhlIEFDTCBsZWF2ZXMgdGhlIHN0YWxlIGtlcm5lbCBlbnRyeSBpbiBwbGFjZSwgYW5kIHRoZSBuZXh0IGdldHhhdHRyIHJldHVybnNcbisgKiB3cm9uZyBkYXRhIHdpdGhvdXQgZXZlciByZWFjaGluZyB0aGUgRlVTRSBkYWVtb24uXG4rICpcbisgKiBGaXggKGZzL3Bvc2l4X2FjbC5jKTogX19mb3JnZXRfY2FjaGVkX2FjbCgpIHJldHVybnMgZWFybHkgd2hlbiAqcCBpc1xuKyAqIEFDTF9ET05UX0NBQ0hFLCBwcmVzZXJ2aW5nIHRoZSBcIm5ldmVyIGNhY2hlXCIgaW52YXJpYW50IGZvciB0aGUgaW5vZGUnc1xuKyAqIGxpZmV0aW1lLlxuKyAqXG4rICogVGVzdCBvdXRsaW5lOlxuKyAqICAxLiBNb3VudCBhIG1pbmltYWwgRlVTRSBmcyAobm8gRlVTRV9QT1NJWF9BQ0wgbmVnb3RpYXRlZCkuXG4rICogIDIuIGxnZXR4YXR0ciAtXHUwMDNlIGRhZW1vbiBjYWxsZWQsIEFDTF9BIHJldHVybmVkLCBOT1QgY2FjaGVkIChBQ0xfRE9OVF9DQUNIRSkuXG4rICogIDMuIHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpIC1cdTAwM2UgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGNhbGxlZC5cbisgKiAgICAgQnVnZ3k6ICBBQ0xfRE9OVF9DQUNIRSAtXHUwMDNlIEFDTF9OT1RfQ0FDSEVEIChjYWNoZSBlbmFibGVkKS5cbisgKiAgICAgRml4ZWQ6ICBBQ0xfRE9OVF9DQUNIRSBwcmVzZXJ2ZWQuXG4rICogIDQuIGxnZXR4YXR0ciAtXHUwMDNlIGRhZW1vbiBjYWxsZWQsIEFDTF9BIHJldHVybmVkLlxuKyAqICAgICBCdWdneTogIHJlc3VsdCBub3cgY2FjaGVkIChBQ0xfTk9UX0NBQ0hFRCAtXHUwMDNlIGNhY2hlZCkuXG4rICogICAgIEZpeGVkOiAgcmVzdWx0IHN0aWxsIG5vdCBjYWNoZWQuXG4rICogIDUuIERhZW1vbiBzd2l0Y2hlcyB0byBBQ0xfQiBpbnRlcm5hbGx5IChkaWZmZXJlbnQgc2l6ZSkuXG4rICogIDYuIGxnZXR4YXR0ciAtXHUwMDNlIHNob3VsZCByZXR1cm4gQUNMX0IgKDQ0IGJ5dGVzKS5cbisgKiAgICAgQnVnZ3k6ICBjYWNoZSBoaXQsIHJldHVybnMgc3RhbGUgQUNMX0EgKDI4IGJ5dGVzKS4gRkFJTC5cbisgKiAgICAgRml4ZWQ6ICBubyBjYWNoZSwgZGFlbW9uIGNhbGxlZCwgcmV0dXJucyBBQ0xfQiAoNDQgYnl0ZXMpLiBQQVNTLlxuKyAqL1xuK1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3hhdHRyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNkZWZpbmUgRlVTRV9VU0VfVkVSU0lPTiAzMVxuKyNpbmNsdWRlIFx1MDAzY2Z1c2VfbG93bGV2ZWwuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4rXG4rLyogLS0tLSBBQ0wgYmluYXJ5IGVuY29kaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuKy8qXG4rICogUE9TSVggQUNMIHYyIHhhdHRyIGZvcm1hdCAobGl0dGxlLWVuZGlhbik6XG4rICogICBoZWFkZXI6IHUzMiB2ZXJzaW9uICg9IDB4MDAwMDAwMDIpXG4rICogICBlbnRyeTogIHUxNiB0YWcgfCB1MTYgcGVybSB8IHUzMiBpZFxuKyAqXG4rICogRW50cmllcyBtdXN0IGFwcGVhciBpbiB0YWctYXNjZW5kaW5nIG9yZGVyOyBuYW1lZCBVU0VSL0dST1VQIGVudHJpZXNcbisgKiByZXF1aXJlIGEgTUFTSyBlbnRyeS4gIEJvdGggQUNMcyBwYXNzIHBvc2l4X2FjbF9mcm9tX3hhdHRyKCkgdmFsaWRhdGlvbi5cbisgKi9cbitcbisvKiBBQ0xfQTogMyBlbnRyaWVzIChVU0VSX09CSjpyd3gsIEdST1VQX09CSjpyLXgsIE9USEVSOnIteCkgPSAyOCBieXRlcyAqL1xuK3N0YXRpYyBjb25zdCB1aW50OF90IGFjbF9hW10gPSB7XG4rXHQweDAyLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2MiBoZWFkZXIgICAgICAqL1xuK1x0MHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogVVNFUl9PQkogIHJ3eCAgKi9cbitcdDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIEdST1VQX09CSiByLXggICovXG4rXHQweDIwLCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBPVEhFUiAgICAgci14ICAqL1xuK307XG4rXG4rLypcbisgKiBBQ0xfQjogNSBlbnRyaWVzIOKAlCBhZGRzIFVTRVIgdWlkPTEgYW5kIE1BU0sgPSA0NCBieXRlcy5cbisgKiBBIG5hbWVkIFVTRVIgZW50cnkgcmVxdWlyZXMgYSBNQVNLOyBhbGwgdGFncyBpbiBhc2NlbmRpbmcgb3JkZXIuXG4rICovXG4rc3RhdGljIGNvbnN0IHVpbnQ4X3QgYWNsX2JbXSA9IHtcbitcdDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHYyIGhlYWRlciAgICAgICAqL1xuK1x0MHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogVVNFUl9PQkogICByd3ggICovXG4rXHQweDAyLCAweDAwLCAweDA3LCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAvKiBVU0VSIHVpZD0xIHJ3eCAgKi9cbitcdDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIEdST1VQX09CSiAgci14ICAqL1xuK1x0MHgxMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogTUFTSyAgICAgICByd3ggICovXG4rXHQweDIwLCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBPVEhFUiAgICAgIHIteCAgKi9cbit9O1xuK1xuKy8qIC0tLS0gU2hhcmVkIHN0YXRlIChkYWVtb24gdGhyZWFkIFx1MDAzYy1cdTAwM2UgdGVzdCB0aHJlYWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4rXG4rI2RlZmluZSBGSUxFX0lOTyAgMlxuKyNkZWZpbmUgRklMRV9OQU1FIFwidGVzdGZpbGVcIlxuK1xuK3N0cnVjdCBkYWVtb25fc3RhdGUge1xuK1x0cHRocmVhZF9tdXRleF90IGxvY2s7XG4rXHRjb25zdCB1aW50OF90ICAqYWNsO1xuK1x0c2l6ZV90ICAgICAgICAgIGFjbF9zaXplO1xuK1x0aW50ICAgICAgICAgICAgIGdldHhhdHRyX2NvdW50O1xuK307XG4rXG4rLypcbisgKiBHbG9iYWw6IGNhbGxiYWNrcyBhcmUgc3RhdGVsZXNzIGZucyBzbyB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsLlxuKyAqIFNhZmUgYmVjYXVzZSBvbmx5IG9uZSB0ZXN0IGluc3RhbmNlIHJ1bnMgYXQgYSB0aW1lLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgZGFlbW9uX3N0YXRlIGdfZHMgPSB7XG4rXHQubG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsXG4rfTtcbitcbisvKiAtLS0tIEZVU0UgbG93bGV2ZWwgY2FsbGJhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4rXG4rc3RhdGljIHZvaWQgZnNfbG9va3VwKGZ1c2VfcmVxX3QgcmVxLCBmdXNlX2lub190IHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRpZiAocGFyZW50ICE9IEZVU0VfUk9PVF9JRCB8fCBzdHJjbXAobmFtZSwgRklMRV9OQU1FKSkge1xuK1x0XHRmdXNlX3JlcGx5X2VycihyZXEsIEVOT0VOVCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHN0cnVjdCBmdXNlX2VudHJ5X3BhcmFtIGUgPSB7fTtcbitcbitcdC8qXG4rXHQgKiBMb25nIGF0dHIvZW50cnkgdGltZW91dHMgc28gdGhhdCBub3JtYWwgc3RhdCgpIGNhbGxzIGRvIG5vdFxuK1x0ICogZXhwaXJlIGFuZCB0cmlnZ2VyIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSBvbiB0aGVpciBvd247XG4rXHQgKiBvbmx5IHRoZSBleHBsaWNpdCBBVF9TVEFUWF9GT1JDRV9TWU5DIHNob3VsZCB0cmlnZ2VyIGl0LlxuK1x0ICovXG4rXHRlLmlubyAgICAgICAgICAgICA9IEZJTEVfSU5PO1xuK1x0ZS5nZW5lcmF0aW9uICAgICAgPSAxO1xuK1x0ZS5hdHRyX3RpbWVvdXQgICAgPSAxMC4wO1xuK1x0ZS5lbnRyeV90aW1lb3V0ICAgPSAxMC4wO1xuK1x0ZS5hdHRyLnN0X2lubyAgICAgPSBGSUxFX0lOTztcbitcdGUuYXR0ci5zdF9tb2RlICAgID0gU19JRlJFRyB8IDA2NDQ7XG4rXHRlLmF0dHIuc3RfbmxpbmsgICA9IDE7XG4rXHRmdXNlX3JlcGx5X2VudHJ5KHJlcSwgXHUwMDI2ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGZzX2dldGF0dHIoZnVzZV9yZXFfdCByZXEsIGZ1c2VfaW5vX3QgaW5vLFxuK1x0XHQgICAgICAgc3RydWN0IGZ1c2VfZmlsZV9pbmZvICpmaSlcbit7XG4rXHRzdHJ1Y3Qgc3RhdCBzdCA9IHt9O1xuK1xuK1x0KHZvaWQpZmk7XG4rXHRpZiAoaW5vID09IEZVU0VfUk9PVF9JRCkge1xuK1x0XHRzdC5zdF9pbm8gICA9IEZVU0VfUk9PVF9JRDtcbitcdFx0c3Quc3RfbW9kZSAgPSBTX0lGRElSIHwgMDc1NTtcbitcdFx0c3Quc3RfbmxpbmsgPSAyO1xuK1x0fSBlbHNlIGlmIChpbm8gPT0gRklMRV9JTk8pIHtcbitcdFx0c3Quc3RfaW5vICAgPSBGSUxFX0lOTztcbitcdFx0c3Quc3RfbW9kZSAgPSBTX0lGUkVHIHwgMDY0NDtcbitcdFx0c3Quc3RfbmxpbmsgPSAxO1xuK1x0fSBlbHNlIHtcbitcdFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9FTlQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRmdXNlX3JlcGx5X2F0dHIocmVxLCBcdTAwMjZzdCwgMTApO1xuK31cbitcbitzdGF0aWMgdm9pZCBmc19nZXR4YXR0cihmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBpbm8sIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0c2l6ZV90IHNpemUpXG4re1xuK1x0aWYgKGlubyAhPSBGSUxFX0lOTyB8fFxuK1x0ICAgIHN0cmNtcChuYW1lLCBcInN5c3RlbS5wb3NpeF9hY2xfYWNjZXNzXCIpICE9IDApIHtcbitcdFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9EQVRBKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4rXHRjb25zdCB1aW50OF90ICphY2wgICAgICA9IGdfZHMuYWNsO1xuK1x0c2l6ZV90ICAgICAgICAgYWNsX3NpemUgPSBnX2RzLmFjbF9zaXplO1xuK1x0Z19kcy5nZXR4YXR0cl9jb3VudCsrO1xuK1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2Z19kcy5sb2NrKTtcbitcbitcdGlmIChzaXplID09IDApXG4rXHRcdGZ1c2VfcmVwbHlfeGF0dHIocmVxLCBhY2xfc2l6ZSk7XG4rXHRlbHNlIGlmIChzaXplIFx1MDAzYyBhY2xfc2l6ZSlcbitcdFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFUkFOR0UpO1xuK1x0ZWxzZVxuK1x0XHRmdXNlX3JlcGx5X2J1ZihyZXEsIChjb25zdCBjaGFyICopYWNsLCBhY2xfc2l6ZSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnVzZV9sb3dsZXZlbF9vcHMgZnNfb3BzID0ge1xuK1x0Lmxvb2t1cCAgID0gZnNfbG9va3VwLFxuK1x0LmdldGF0dHIgID0gZnNfZ2V0YXR0cixcbitcdC5nZXR4YXR0ciA9IGZzX2dldHhhdHRyLFxuK307XG4rXG4rLyogLS0tLSBEYWVtb24gdGhyZWFkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbitcbitzdGF0aWMgdm9pZCAqcnVuX2RhZW1vbih2b2lkICphcmcpXG4re1xuK1x0ZnVzZV9zZXNzaW9uX2xvb3AoKHN0cnVjdCBmdXNlX3Nlc3Npb24gKilhcmcpO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuKy8qIC0tLS0ga3NlbGZ0ZXN0IGhhcm5lc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4rXG4rRklYVFVSRShhY2xfY2FjaGUpIHtcbitcdHN0cnVjdCBmdXNlX3Nlc3Npb24gKnNlO1xuK1x0Y2hhciAgICAgICAgICAgICAgICAgbW91bnRwb2ludFtQQVRIX01BWF07XG4rXHRjaGFyICAgICAgICAgICAgICAgICBmaWxlX3BhdGhbUEFUSF9NQVhdO1xuK1x0cHRocmVhZF90ICAgICAgICAgICAgdGhyZWFkO1xuK307XG4rXG4rRklYVFVSRV9TRVRVUChhY2xfY2FjaGUpXG4re1xuK1x0Y2hhciAqZnVzZV9hcmd2W10gPSB7IFwiZnVzZV9hY2xfY2FjaGVfdGVzdFwiLCBOVUxMIH07XG4rXHRzdHJ1Y3QgZnVzZV9hcmdzIGFyZ3MgPSBGVVNFX0FSR1NfSU5JVCgxLCBmdXNlX2FyZ3YpO1xuK1xuK1x0Z19kcy5hY2wgICAgICAgICAgICA9IGFjbF9hO1xuK1x0Z19kcy5hY2xfc2l6ZSAgICAgICA9IHNpemVvZihhY2xfYSk7XG4rXHRnX2RzLmdldHhhdHRyX2NvdW50ID0gMDtcbitcbitcdHN0cmNweShzZWxmLVx1MDAzZW1vdW50cG9pbnQsIFwiL3RtcC9hY2xfY2FjaGVfdGVzdF9YWFhYWFhcIik7XG4rXHRpZiAoIW1rZHRlbXAoc2VsZi1cdTAwM2Vtb3VudHBvaW50KSlcbitcdFx0U0tJUChyZXR1cm4sIFwibWtkdGVtcDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcbitcdHNucHJpbnRmKHNlbGYtXHUwMDNlZmlsZV9wYXRoLCBzaXplb2Yoc2VsZi1cdTAwM2VmaWxlX3BhdGgpLFxuK1x0XHQgXCIlcy9cIiBGSUxFX05BTUUsIHNlbGYtXHUwMDNlbW91bnRwb2ludCk7XG4rXG4rXHRzZWxmLVx1MDAzZXNlID0gZnVzZV9zZXNzaW9uX25ldyhcdTAwMjZhcmdzLCBcdTAwMjZmc19vcHMsIHNpemVvZihmc19vcHMpLCBOVUxMKTtcbitcdGlmICghc2VsZi1cdTAwM2VzZSkge1xuK1x0XHRybWRpcihzZWxmLVx1MDAzZW1vdW50cG9pbnQpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJmdXNlX3Nlc3Npb25fbmV3IGZhaWxlZFwiKTtcbitcdH1cbitcbitcdGlmIChmdXNlX3Nlc3Npb25fbW91bnQoc2VsZi1cdTAwM2VzZSwgc2VsZi1cdTAwM2Vtb3VudHBvaW50KSkge1xuK1x0XHRmdXNlX3Nlc3Npb25fZGVzdHJveShzZWxmLVx1MDAzZXNlKTtcbitcdFx0cm1kaXIoc2VsZi1cdTAwM2Vtb3VudHBvaW50KTtcbitcdFx0U0tJUChyZXR1cm4sIFwiZnVzZV9zZXNzaW9uX21vdW50IGZhaWxlZCBcIlxuK1x0XHRcdCAgICAgXCIobWlzc2luZyBmdXNlcm1vdW50MyBvciBpbnN1ZmZpY2llbnQgcHJpdmlsZWdlcylcIik7XG4rXHR9XG4rXG4rXHRpZiAocHRocmVhZF9jcmVhdGUoXHUwMDI2c2VsZi1cdTAwM2V0aHJlYWQsIE5VTEwsIHJ1bl9kYWVtb24sIHNlbGYtXHUwMDNlc2UpKSB7XG4rXHRcdGZ1c2Vfc2Vzc2lvbl91bm1vdW50KHNlbGYtXHUwMDNlc2UpO1xuK1x0XHRmdXNlX3Nlc3Npb25fZGVzdHJveShzZWxmLVx1MDAzZXNlKTtcbitcdFx0cm1kaXIoc2VsZi1cdTAwM2Vtb3VudHBvaW50KTtcbitcdFx0U0tJUChyZXR1cm4sIFwicHRocmVhZF9jcmVhdGU6ICVzXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHR9XG4rXG4rXHRmdXNlX29wdF9mcmVlX2FyZ3MoXHUwMDI2YXJncyk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oYWNsX2NhY2hlKVxuK3tcbitcdGZ1c2Vfc2Vzc2lvbl9leGl0KHNlbGYtXHUwMDNlc2UpO1xuK1x0ZnVzZV9zZXNzaW9uX3VubW91bnQoc2VsZi1cdTAwM2VzZSk7XG4rXHRwdGhyZWFkX2pvaW4oc2VsZi1cdTAwM2V0aHJlYWQsIE5VTEwpO1xuK1x0ZnVzZV9zZXNzaW9uX2Rlc3Ryb3koc2VsZi1cdTAwM2VzZSk7XG4rXHRybWRpcihzZWxmLVx1MDAzZW1vdW50cG9pbnQpO1xuK31cbitcbitzdGF0aWMgaW50IGRvX2ZvcmNlX3N0YXR4KGNvbnN0IGNoYXIgKnBhdGgpXG4re1xuK1x0c3RydWN0IHN0YXR4IHN0eDtcbitcbitcdHJldHVybiBzeXNjYWxsKFNZU19zdGF0eCwgQVRfRkRDV0QsIHBhdGgsXG4rXHRcdCAgICAgICBBVF9TVEFUWF9GT1JDRV9TWU5DLCBTVEFUWF9CQVNJQ19TVEFUUywgXHUwMDI2c3R4KTtcbit9XG4rXG4rVEVTVF9GKGFjbF9jYWNoZSwgc3RhbGVfYWZ0ZXJfZm9yY2Vfc3luYylcbit7XG4rXHRjaGFyICAgIGJ1Zls1MTJdO1xuK1x0c3NpemVfdCBzejtcbitcdGludCAgICAgY291bnQ7XG4rXG4rXHQvKlxuK1x0ICogU3RlcCAxOiB0d28gZ2V0eGF0dHIgY2FsbHMgYmVmb3JlIGFueSBzdGF0eChGT1JDRV9TWU5DKS5cbitcdCAqIGlfYWNsID09IEFDTF9ET05UX0NBQ0hFLiAgX19nZXRfYWNsJ3MgY21weGNoZyhwLCBBQ0xfTk9UX0NBQ0hFRCxcbitcdCAqIHNlbnRpbmVsKSBmaW5kcyAqcCAhPSBBQ0xfTk9UX0NBQ0hFRCBvbiBldmVyeSBjYWxsLCBzbyB0aGUgc2VudGluZWxcbitcdCAqIGlzIG5ldmVyIHBsYWNlZCBhbmQgdGhlIHJlc3VsdCBpcyBuZXZlciBjYWNoZWQuICBCb3RoIGNhbGxzIG11c3RcbitcdCAqIHJlYWNoIHRoZSBkYWVtb24sIHByb3ZpbmcgQUNMX0RPTlRfQ0FDSEUgc3VwcHJlc3NlcyBjYWNoaW5nLlxuK1x0ICovXG4rXHRzeiA9IGxnZXR4YXR0cihzZWxmLVx1MDAzZWZpbGVfcGF0aCwgXCJzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1wiLFxuK1x0XHQgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRBU1NFUlRfRVEoc3osIChzc2l6ZV90KXNpemVvZihhY2xfYSkpO1xuK1xuK1x0c3ogPSBsZ2V0eGF0dHIoc2VsZi1cdTAwM2VmaWxlX3BhdGgsIFwic3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3NcIixcbitcdFx0ICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0QVNTRVJUX0VRKHN6LCAoc3NpemVfdClzaXplb2YoYWNsX2EpKTtcbitcbitcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZnX2RzLmxvY2spO1xuK1x0Y291bnQgPSBnX2RzLmdldHhhdHRyX2NvdW50O1xuK1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2Z19kcy5sb2NrKTtcbitcbitcdEFTU0VSVF9FUShjb3VudCwgMik7XG4rXHRUSF9MT0coXCJzdGVwIDEgT0s6IGJvdGggcHJlLXRyaWdnZXIgZ2V0eGF0dHJzIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksIFwiXG4rXHQgICAgICAgXCJBQ0xfRE9OVF9DQUNIRSBpcyB3b3JraW5nXCIsIGNvdW50KTtcbitcbitcdC8qXG4rXHQgKiBTdGVwIDI6IHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpLlxuK1x0ICogZnVzZV91cGRhdGVfZ2V0X2F0dHIoKSBjYWxscyBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIHNlbmRpbmdcbitcdCAqIEZVU0VfR0VUQVRUUi5cbitcdCAqICAgQnVnZ3kga2VybmVsOiAgQUNMX0RPTlRfQ0FDSEUgLVx1MDAzZSBBQ0xfTk9UX0NBQ0hFRCAgKGNhY2hlIGVuYWJsZWQpXG4rXHQgKiAgIEZpeGVkIGtlcm5lbDogIEFDTF9ET05UX0NBQ0hFIHByZXNlcnZlZCAgICAgICAgICAgKG5vIGVmZmVjdClcbitcdCAqL1xuK1x0QVNTRVJUX0VRKGRvX2ZvcmNlX3N0YXR4KHNlbGYtXHUwMDNlZmlsZV9wYXRoKSwgMCk7XG4rXHRUSF9MT0coXCJzdGVwIDIgT0s6IHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpIHN1Y2NlZWRlZFwiKTtcbitcbitcdC8qXG4rXHQgKiBTdGVwIDM6IGdldHhhdHRyIOKAlCBjYWNoZSBwb3B1bGF0aW9uIGF0dGVtcHQgYWZ0ZXIgdGhlIHRyaWdnZXIuXG4rXHQgKiAgIEJ1Z2d5OiAgKnAgPT0gQUNMX05PVF9DQUNIRUQgLVx1MDAzZSBzZW50aW5lbCBwbGFjZWQgLVx1MDAzZSBmdXNlX2dldF9pbm9kZV9hY2xcbitcdCAqICAgICAgICAgICBjYWxsZWQgLVx1MDAzZSBBQ0xfQSBwYXJzZWQgYW5kIHN0b3JlZCBpbiB0aGUga2VybmVsIGNhY2hlLlxuK1x0ICogICBGaXhlZDogICpwID09IEFDTF9ET05UX0NBQ0hFIC1cdTAwM2Ugc2VudGluZWwgcGxhY2VtZW50IHNraXBwZWQgLVx1MDAzZVxuK1x0ICogICAgICAgICAgIGZ1c2VfZ2V0X2lub2RlX2FjbCBjYWxsZWQgYnV0IHJlc3VsdCBub3QgY2FjaGVkLlxuK1x0ICogRWl0aGVyIHdheSB0aGUgY29ycmVjdCBBQ0xfQSBpcyByZXR1cm5lZCBoZXJlLlxuK1x0ICovXG4rXHRzeiA9IGxnZXR4YXR0cihzZWxmLVx1MDAzZWZpbGVfcGF0aCwgXCJzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1wiLFxuK1x0XHQgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRBU1NFUlRfRVEoc3osIChzc2l6ZV90KXNpemVvZihhY2xfYSkpO1xuK1xuK1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4rXHRjb3VudCA9IGdfZHMuZ2V0eGF0dHJfY291bnQ7XG4rXHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZnX2RzLmxvY2spO1xuK1xuK1x0QVNTRVJUX0VRKGNvdW50LCAzKTtcbitcdFRIX0xPRyhcInN0ZXAgMyBPSzogcG9zdC10cmlnZ2VyIGdldHhhdHRyIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksIFwiXG4rXHQgICAgICAgXCJyZXR1cm5lZCBjb3JyZWN0IEFDTF9BICglemQgYnl0ZXMpXCIsIGNvdW50LCBzeik7XG4rXG4rXHQvKlxuK1x0ICogU3RlcCA0OiBzd2l0Y2ggZGFlbW9uIHRvIEFDTF9CIChkaWZmZXJlbnQgc2l6ZTogNDQgdnMgMjggYnl0ZXMpLlxuK1x0ICogU2ltdWxhdGVzIGFuIEFDTCBjaGFuZ2UgdGhhdCBmdXNlX3NldF9hY2woKSB3b3VsZCBOT1QgaW52YWxpZGF0ZSBmb3JcbitcdCAqICFmYy1cdTAwM2Vwb3NpeF9hY2wgbW91bnRzIChpdCBza2lwcyBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzIGluIHRoYXQgY2FzZSkuXG4rXHQgKiBPbiBhIGZpeGVkIGtlcm5lbCB0aGUgQUNMIHdhcyBuZXZlciBjYWNoZWQsIHNvIHRoaXMgaXMgbW9vdC5cbitcdCAqL1xuK1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4rXHRnX2RzLmFjbCAgICAgID0gYWNsX2I7XG4rXHRnX2RzLmFjbF9zaXplID0gc2l6ZW9mKGFjbF9iKTtcbitcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4rXHRUSF9MT0coXCJzdGVwIDQ6IGRhZW1vbiBzd2l0Y2hlZCB0byBBQ0xfQiAoJXp1IGJ5dGVzKVwiLCBzaXplb2YoYWNsX2IpKTtcbitcbitcdC8qXG4rXHQgKiBTdGVwIDU6IGdldHhhdHRyIOKAlCB0aGUgZGVjaXNpdmUgY2hlY2suXG4rXHQgKiAgIEJ1Z2d5IGtlcm5lbDogIGNhY2hlIGhpdCAtXHUwMDNlIHN0YWxlIEFDTF9BICgyOCBieXRlcyksIGNvdW50IHN0YXlzIDMuXG4rXHQgKiAgIEZpeGVkIGtlcm5lbDogIG5vIGNhY2hlIC1cdTAwM2UgZGFlbW9uIGNhbGxlZCAtXHUwMDNlIEFDTF9CICg0NCBieXRlcyksIGNvdW50IDQuXG4rXHQgKi9cbitcdHN6ID0gbGdldHhhdHRyKHNlbGYtXHUwMDNlZmlsZV9wYXRoLCBcInN5c3RlbS5wb3NpeF9hY2xfYWNjZXNzXCIsXG4rXHRcdCAgICAgICBidWYsIHNpemVvZihidWYpKTtcbitcbitcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZnX2RzLmxvY2spO1xuK1x0Y291bnQgPSBnX2RzLmdldHhhdHRyX2NvdW50O1xuK1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2Z19kcy5sb2NrKTtcbitcbitcdGlmIChzeiA9PSAoc3NpemVfdClzaXplb2YoYWNsX2EpKVxuK1x0XHRUSF9MT0coXCJzdGVwIDUgQlVHOiBzdGFsZSBBQ0xfQSAoJXpkIGJ5dGVzKSBmcm9tIGtlcm5lbCBjYWNoZSBcIlxuK1x0XHQgICAgICAgXCIoY291bnQ9JWQpOyBBQ0xfRE9OVF9DQUNIRSBjb3JydXB0ZWQgYnkgXCJcbitcdFx0ICAgICAgIFwiZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpXCIsIHN6LCBjb3VudCk7XG4rXHRlbHNlXG4rXHRcdFRIX0xPRyhcInN0ZXAgNSBPSzogZGFlbW9uIHJlYWNoZWQgKGNvdW50PSVkKSwgXCJcbitcdFx0ICAgICAgIFwiZnJlc2ggQUNMX0IgKCV6ZCBieXRlcylcIiwgY291bnQsIHN6KTtcbitcbitcdEVYUEVDVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9iKSk7XG4rXHRFWFBFQ1RfRVEoY291bnQsIDQpO1xuK31cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6MzEuMjUxMjM4ODQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYyOTkzNjcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGZzL3Bvc2l4X2FjbC5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy9wb3NpeF9hY2wuY2AsIHNwZWNpZmljYWxseSB0aGUgYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGZ1bmN0aW9uLiBUaGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBpdCBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgVkZTIGFuZCBBQ0wgaGFuZGxpbmcsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseS5cblxuQmFzaWNhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBpZiB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBgcGAgKHdoaWNoLCBhcyBJIHJlY2FsbCwgbGlrZWx5IHJlcHJlc2VudHMgdGhlIGNhY2hlZCBBQ0wgc3RhdHVzKSBpcyBhbHJlYWR5IGBBQ0xfRE9OVF9DQUNIRWAsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMuIFRoZSBjb21tZW50IGV4cGxhaW5zIHRoZSByYXRpb25hbGUsIHdoaWNoIGlzIGNydWNpYWwgaGVyZS4gVGhleSBhcmUgY29uY2VybmVkIHRoYXQgYHhjaGdgaW5nIGBBQ0xfRE9OVF9DQUNIRWAgKHdoaWNoIGlzLCBieSBkZWZpbml0aW9uLCBpbnRlbmRlZCB0byBiZSBhICpjb25zdGFudCogbWVhbmluZyB0aGF0IHRoZSBBQ0wgKnNob3VsZG4ndCogYmUgY2FjaGVkKSB3aXRoIGBBQ0xfTk9UX0NBQ0hFRGAgKG1lYW5pbmcgdGhlIEFDTCAqaXNuJ3QqIGNhY2hlZCkgd291bGQgaW5hZHZlcnRlbnRseSAqZW5hYmxlKiBjYWNoaW5nIHdoZW4gdGhlIGludGVudGlvbiBpcyB0aGUgb3Bwb3NpdGUuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYHhjaGdgIGNhbiBiZSBhIGJsdW50IHRvb2wsIGFuZCB3ZSB3b3VsZG4ndCB3YW50IHRvIGFjY2lkZW50YWxseSBmbGlwIGEgY3J1Y2lhbCBmbGFnLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgcHJpbWFyaWx5IGltcGFjdHMgZmlsZXN5c3RlbXMgdGhhdCBkZWxpYmVyYXRlbHkgKmF2b2lkKiBjYWNoaW5nIEFDTHMsIHdoaWNoLCBhcyB0aGUgdGV4dCBub3Rlcywgd2lsbCBkZWZpbml0ZWx5IGluY2x1ZGUgRlVTRSB3aXRob3V0IGBGVVNFX1BPU0lYX0FDTGAuIEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUsIGJ1dCBuYXN0eSwgYnVncyBpZiB3ZSB3ZXJlIHRvIGluYWR2ZXJ0ZW50bHkgZW5hYmxlIGNhY2hpbmcgd2hlbiBpdCdzIHNwZWNpZmljYWxseSBkaXNhYmxlZC4gU28sIHRoZSBmaXggbWFrZXMgc2Vuc2UuXG5cbk5vdywgSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgX19mb3JnZXRfY2FjaGVkX2FjbGAgaW4gYGZzL3Bvc2l4X2FjbC5jYCB0byBzZWUgaWYgbXkgbWVudGFsIG1vZGVsIGlzIGNvcnJlY3QuIEkgd2FudCB0byB0cmFjZSB0aGUgY29kZSB0byBiZSAxMDAlIHN1cmUgdGhpcyBsb2dpYyBhcHBsaWVzIHdoZXJlIEkgdGhpbmsgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDAzOjEzOjM2Ljg4MTE3NzI4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIzNTcyNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9yZ2V0X2NhY2hlZF9hY2xcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcG9zaXhfYWNsLmM9OTA9RVhQT1JUX1NZTUJPTChzZXRfY2FjaGVkX2FjbCk7XFxuZnMvcG9zaXhfYWNsLmMtOTEtXFxuZnMvcG9zaXhfYWNsLmM6OTI6c3RhdGljIHZvaWQgX19mb3JnZXRfY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICoqcClcXG5mcy9wb3NpeF9hY2wuYy05My17XFxuLS1cXG5mcy9wb3NpeF9hY2wuYz0xMDg9dm9pZCBmb3JnZXRfY2FjaGVkX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSlcXG5mcy9wb3NpeF9hY2wuYy0xMDkte1xcbmZzL3Bvc2l4X2FjbC5jOjExMDpcXHRfX2ZvcmdldF9jYWNoZWRfYWNsKGFjbF9ieV90eXBlKGlub2RlLCB0eXBlKSk7XFxuZnMvcG9zaXhfYWNsLmMtMTExLX1cXG4tLVxcbmZzL3Bvc2l4X2FjbC5jPTExND12b2lkIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9wb3NpeF9hY2wuYy0xMTUte1xcbmZzL3Bvc2l4X2FjbC5jOjExNjpcXHRfX2ZvcmdldF9jYWNoZWRfYWNsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9hY2wpO1xcbmZzL3Bvc2l4X2FjbC5jOjExNzpcXHRfX2ZvcmdldF9jYWNoZWRfYWNsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kZWZhdWx0X2FjbCk7XFxuZnMvcG9zaXhfYWNsLmMtMTE4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTgtICogZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGJlZm9yZSBpc3N1aW5nIEZVU0VfR0VUQVRUUi4gIE9uIGFuIHVuZml4ZWQga2VybmVsLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjk6ICogX19mb3JnZXRfY2FjaGVkX2FjbCgpIHJlcGxhY2VzIEFDTF9ET05UX0NBQ0hFIHdpdGggQUNMX05PVF9DQUNIRUQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTAtICogaW5hZHZlcnRlbnRseSBlbmFibGluZyB0aGUga2VybmVsIEFDTCBjYWNoZSBmb3IgdGhhdCBpbm9kZS4gIFRoZSBuZXh0XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0xNS0gKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjE2OiAqIEZpeCAoZnMvcG9zaXhfYWNsLmMpOiBfX2ZvcmdldF9jYWNoZWRfYWNsKCkgcmV0dXJucyBlYXJseSB3aGVuICpwIGlzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTctICogQUNMX0RPTlRfQ0FDSEUsIHByZXNlcnZpbmcgdGhlIFxcXCJuZXZlciBjYWNoZVxcXCIgaW52YXJpYW50IGZvciB0aGUgaW5vZGUnc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwMzoxMzozOS4xMDQ3NTg5MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM4NDMyODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gQUNMIGNhY2hpbmcsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgY2FsbGVkIGJ5IGBmb3JnZXRfY2FjaGVkX2FjbGAgYW5kIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCwgc28gdGhvc2UgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgcGF0aHMuIEdvb2QuIEl0J3MgYWxzbyBhZGRpbmcgYSBzZWxmdGVzdCBmb3IgRlVTRSDigJMgaW1wb3J0YW50IGZvciBlbnN1cmluZyBmdW5jdGlvbmFsaXR5IGFmdGVyIHRoZSBjaGFuZ2UuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMb29rcyBsaWtlIGBmcy9wb3NpeF9hY2wuY2AgaXMgdGhlIGtleSBmaWxlIGhlcmUsIGFuZCBpdOKAmXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0ZTX1BPU0lYX0FDTGAgaXMgZW5hYmxlZC4gVGltZSB0byBjb25maXJtIHRoYXQsIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBpbnRlcmFjdGlvbnMgb3IgdW5leHBlY3RlZCBjb25kaXRpb25hbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwMzoxMzo0Mi42NDMxOTM0ODlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM5NjEwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG9zaXhfYWNsLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GU19NQkNBQ0hFKVxcdCs9IG1iY2FjaGUub1xcbmZzL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19GU19QT1NJWF9BQ0wpXFx0Kz0gcG9zaXhfYWNsLm9cXG5mcy9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfTkZTX0NPTU1PTilcXHQrPSBuZnNfY29tbW9uL1xcbi0tXFxuZnMvcG9zaXhfYWNsLmM9NzM1PXN0YXRpYyBpbnQgcG9zaXhfYWNsX2ZpeF94YXR0cl9jb21tb24oY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKVxcbi0tXFxuZnMvcG9zaXhfYWNsLmMtNzc2LSAqXFxuZnMvcG9zaXhfYWNsLmM6Nzc3OiAqIFJldHVybjogQWxsb2NhdGVkIHN0cnVjdCBwb3NpeF9hY2wgb24gc3VjY2VzcywgTlVMTCBmb3IgYSB2YWxpZCBoZWFkZXIgYnV0XFxuZnMvcG9zaXhfYWNsLmMtNzc4LSAqICAgICAgICAgd2l0aG91dCBhY3R1YWwgUE9TSVggQUNMIGVudHJpZXMsIG9yIEVSUl9QVFIoKSBlbmNvZGVkIGVycm9yIGNvZGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDAzOjEzOjQyLjcyNzE1OTI2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDQ2OTUzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3NpeCBBQ0wgQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gV2UncmUgbG9va2luZyBhdCBgQ09ORklHX0ZTX1BPU0lYX0FDTGAsIHJpZ2h0PyBUaGF0J3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoZSB0ZXN0IGZyYW1ld29yayBsZXZlcmFnZXMgRlVTRSwgd2hpY2ggaW1tZWRpYXRlbHkgbWFkZSBtZSB0aGluayBhYm91dCBgQ09ORklHX0ZVU0VfRlNgIGFuZCBwb3RlbnRpYWxseSBmdXp6aW5nIEZVU0UgcGF0aHMuIEhvd2V2ZXIsIHRoZSByb290IGNhdXNlIGlzIGZpcm1seSB3aXRoaW4gYGZzL3Bvc2l4X2FjbC5jYC5cblxuQWhhLCBgQ09ORklHX0ZTX1BPU0lYX0FDTGAgaXMgbW9yZSBmdW5kYW1lbnRhbCB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQ7IGl04oCZcyBhIGNvcmUgY29uZmlnIG9wdGlvbiwgb2Z0ZW4gaW5kaXJlY3RseSBzZWxlY3RlZCBieSBvdGhlciBmaWxlIHN5c3RlbXMuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiBzcGVjaWZpYyBmdW5jdGlvbnMuIFNpbmNlIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCBpcyBzdGF0aWMsIG15IGF0dGVudGlvbiBuZWVkcyB0byBiZSBvbiBgZm9yZ2V0X2NhY2hlZF9hY2xgIGFuZCBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AuIEnigJltIGFsc28gZ29pbmcgdG8gbm90ZSB0aGF0IGBmdXNlX3VwZGF0ZV9nZXRfYXR0cmAgaXMgcG90ZW50aWFsbHkgYSB0cmlnZ2VyIGZ1bmN0aW9uLCBzaW5jZSBpdOKAmXMgcmVsYXRlZC5cblxuV2FpdCwgdG8gYmUgY2xlYXIsIHRoZSBidWcgaXMgd2l0aGluIHRoZSBzdGF0aWMgZnVuY3Rpb24gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGl0c2VsZiwgYnV0IHRoYXTigJlzIGNhbGxlZCBieSBgZm9yZ2V0X2NhY2hlZF9hY2xgIGFuZCBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AsIHNvIG15IGRpcmVjdCBmb2N1cyBpcyBvbiB0aG9zZS5cblxuTm93LCBJJ2xsIHNoaWZ0IG15IGF0dGVudGlvbiB0byBjaGVja2luZyB0aGUgY2FsbGVycyBvZiBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6NDcuNTcxODU2MjQ3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTQ2ODUwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jZXBoL2NhcHMuYz0zNDg4PXN0YXRpYyB2b2lkIGhhbmRsZV9jYXBfZ3JhbnQoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2NlcGgvY2Fwcy5jLTM2MjAtXFx0XFx0XFx0Y2ktXFx1MDAzZWlfeGF0dHJzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbmZzL2NlcGgvY2Fwcy5jOjM2MjE6XFx0XFx0XFx0Y2VwaF9mb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcXG5mcy9jZXBoL2NhcHMuYy0zNjIyLVxcdFxcdFxcdGNlcGhfc2VjdXJpdHlfaW52YWxpZGF0ZV9zZWNjdHgoaW5vZGUpO1xcbi0tXFxuZnMvY2VwaC9pbm9kZS5jPTEwMTM9aW50IGNlcGhfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqbG9ja2VkX3BhZ2UsXFxuLS1cXG5mcy9jZXBoL2lub2RlLmMtMTIzOC1cXHRcXHRjaS1cXHUwMDNlaV94YXR0cnMudmVyc2lvbiA9IGxlNjRfdG9fY3B1KGluZm8tXFx1MDAzZXhhdHRyX3ZlcnNpb24pO1xcbmZzL2NlcGgvaW5vZGUuYzoxMjM5OlxcdFxcdGNlcGhfZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XFxuZnMvY2VwaC9pbm9kZS5jLTEyNDAtXFx0XFx0Y2VwaF9zZWN1cml0eV9pbnZhbGlkYXRlX3NlY2N0eChpbm9kZSk7XFxuLS1cXG5mcy9jZXBoL3N1cGVyLmg9MTIzMj12b2lkIGNlcGhfaW5pdF9pbm9kZV9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9jZXBoL3N1cGVyLmgtMTIzNC1cXG5mcy9jZXBoL3N1cGVyLmg6MTIzNTpzdGF0aWMgaW5saW5lIHZvaWQgY2VwaF9mb3JnZXRfYWxsX2NhY2hlZF9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvY2VwaC9zdXBlci5oLTEyMzYte1xcbmZzL2NlcGgvc3VwZXIuaDoxMjM3OiAgICAgICBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcXG5mcy9jZXBoL3N1cGVyLmgtMTIzOC19XFxuLS1cXG5mcy9jZXBoL3N1cGVyLmg9MTI1MD1zdGF0aWMgaW5saW5lIHZvaWQgY2VwaF9pbml0X2lub2RlX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2NlcGgvc3VwZXIuaC0xMjU0LVxcbmZzL2NlcGgvc3VwZXIuaDoxMjU1OnN0YXRpYyBpbmxpbmUgdm9pZCBjZXBoX2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9jZXBoL3N1cGVyLmgtMTI1Ni17XFxuLS1cXG5mcy9mdXNlL2FjbC5jPTkzPWludCBmdXNlX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2Z1c2UvYWNsLmMtMTU1LVxcdFxcdCAqL1xcbmZzL2Z1c2UvYWNsLmM6MTU2OlxcdFxcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xcbmZzL2Z1c2UvYWNsLmMtMTU3LVxcdFxcdGZ1c2VfaW52YWxpZGF0ZV9hdHRyKGlub2RlKTtcXG4tLVxcbmZzL2Z1c2UvZGlyLmM9MzgzPXN0YXRpYyBpbnQgZnVzZV9kZW50cnlfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5mcy9mdXNlL2Rpci5jLTQ0Ni1cXG5mcy9mdXNlL2Rpci5jOjQ0NzpcXHRcXHRmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcXG5mcy9mdXNlL2Rpci5jLTQ0OC1cXHRcXHRmdXNlX2NoYW5nZV9hdHRyaWJ1dGVzKGlub2RlLCBcXHUwMDI2b3V0YXJnLmF0dHIsIE5VTEwsXFxuLS1cXG5mcy9mdXNlL2Rpci5jPTE1MjI9c3RhdGljIGludCBmdXNlX3VwZGF0ZV9nZXRfYXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2Z1c2UvZGlyLmMtMTU1MS1cXHRpZiAoc3luYykge1xcbmZzL2Z1c2UvZGlyLmM6MTU1MjpcXHRcXHRmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcXG5mcy9mdXNlL2Rpci5jLTE1NTMtXFx0XFx0LyogVHJ5IHN0YXR4IGlmIEJUSU1FIGlzIHJlcXVlc3RlZCAqL1xcbi0tXFxuZnMvZnVzZS9kaXIuYz0xNzI2PXN0YXRpYyBpbnQgZnVzZV9wZXJtX2dldGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuLS1cXG5mcy9mdXNlL2Rpci5jLTE3MzAtXFxuZnMvZnVzZS9kaXIuYzoxNzMxOlxcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xcbmZzL2Z1c2UvZGlyLmMtMTczMi1cXHRyZXR1cm4gZnVzZV9kb19nZXRhdHRyKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTlVMTCwgTlVMTCk7XFxuLS1cXG5mcy9mdXNlL2Rpci5jPTIzMDc9c3RhdGljIGludCBmdXNlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxcbi0tXFxuZnMvZnVzZS9kaXIuYy0yMzYwLVxcdFxcdGlmIChmYy1cXHUwMDNlcG9zaXhfYWNsKVxcbmZzL2Z1c2UvZGlyLmM6MjM2MTpcXHRcXHRcXHRmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcXG5mcy9mdXNlL2Rpci5jLTIzNjItXFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9NTQ1PWludCBmdXNlX3JldmVyc2VfaW52YWxfaW5vZGUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHU2NCBub2RlaWQsXFxuLS1cXG5mcy9mdXNlL2lub2RlLmMtNTYyLVxcdGZ1c2VfaW52YWxpZGF0ZV9hdHRyKGlub2RlKTtcXG5mcy9mdXNlL2lub2RlLmM6NTYzOlxcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xcbmZzL2Z1c2UvaW5vZGUuYy01NjQtXFx0aWYgKG9mZnNldCBcXHUwMDNlPSAwKSB7XFxuLS1cXG5mcy9mdXNlL3JlYWRkaXIuYz0xNTM9c3RhdGljIGludCBmdXNlX2RpcmVudHBsdXNfbGluayhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2Z1c2UvcmVhZGRpci5jLTIyOC1cXG5mcy9mdXNlL3JlYWRkaXIuYzoyMjk6XFx0XFx0Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XFxuZnMvZnVzZS9yZWFkZGlyLmMtMjMwLVxcdFxcdGZ1c2VfY2hhbmdlX2F0dHJpYnV0ZXMoaW5vZGUsIFxcdTAwMjZvLVxcdTAwM2VhdHRyLCBOVUxMLFxcbi0tXFxuZnMvZ2ZzMi9nbG9wcy5jPTM1OD1zdGF0aWMgdm9pZCBpbm9kZV9nb19pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBmbGFncylcXG4tLVxcbmZzL2dmczIvZ2xvcHMuYy0zNjgtXFx0XFx0XFx0c2V0X2JpdChHTEZfSU5TVEFOVElBVEVfTkVFREVELCBcXHUwMDI2Z2wtXFx1MDAzZWdsX2ZsYWdzKTtcXG5mcy9nZnMyL2dsb3BzLmM6MzY5OlxcdFxcdFxcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoXFx1MDAyNmlwLVxcdTAwM2VpX2lub2RlKTtcXG5mcy9nZnMyL2dsb3BzLmMtMzcwLVxcdFxcdFxcdHNlY3VyaXR5X2lub2RlX2ludmFsaWRhdGVfc2VjY3R4KFxcdTAwMjZpcC1cXHUwMDNlaV9pbm9kZSk7XFxuLS1cXG5mcy9uZnMvbmZzM3Byb2MuYz0xMDc2PWNvbnN0IHN0cnVjdCBuZnNfcnBjX29wcyBuZnNfdjNfY2xpZW50b3BzID0ge1xcbi0tXFxuZnMvbmZzL25mczNwcm9jLmMtMTExOC1cXHQubG9ja1xcdFxcdD0gbmZzM19wcm9jX2xvY2ssXFxuZnMvbmZzL25mczNwcm9jLmM6MTExOTpcXHQuY2xlYXJfYWNsX2NhY2hlID0gZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyxcXG5mcy9uZnMvbmZzM3Byb2MuYy0xMTIwLVxcdC5jbG9zZV9jb250ZXh0XFx0PSBuZnNfY2xvc2VfY29udGV4dCxcXG4tLVxcbmZzL29jZnMyL2RsbWdsdWUuYz0zOTU4PXN0YXRpYyBpbnQgb2NmczJfZGF0YV9jb252ZXJ0X3dvcmtlcihzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsXFxuLS1cXG5mcy9vY2ZzMi9kbG1nbHVlLmMtNDAwMi1vdXRfZm9yZ2V0OlxcbmZzL29jZnMyL2RsbWdsdWUuYzo0MDAzOlxcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xcbmZzL29jZnMyL2RsbWdsdWUuYy00MDA0LVxcbi0tXFxuZnMvcG9zaXhfYWNsLmM9MTEyPUVYUE9SVF9TWU1CT0woZm9yZ2V0X2NhY2hlZF9hY2wpO1xcbmZzL3Bvc2l4X2FjbC5jLTExMy1cXG5mcy9wb3NpeF9hY2wuYzoxMTQ6dm9pZCBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvcG9zaXhfYWNsLmMtMTE1LXtcXG4tLVxcbmZzL3Bvc2l4X2FjbC5jLTExOC19XFxuZnMvcG9zaXhfYWNsLmM6MTE5OkVYUE9SVF9TWU1CT0woZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyk7XFxuZnMvcG9zaXhfYWNsLmMtMTIwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaD05Nj12b2lkIGZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oOjk3OnZvaWQgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oLTk4LWludCBwb3NpeF9hY2xfdmFsaWQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICosIGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oPTEzMz1zdGF0aWMgaW5saW5lIGludCBwb3NpeF9hY2xfY3JlYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVtb2RlX3QgKm1vZGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oLTEzOS1cXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oOjE0MDpzdGF0aWMgaW5saW5lIHZvaWQgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmluY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgtMTQxLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTctICogKGUuZy4gQVRfU1RBVFhfRk9SQ0VfU1lOQyksIGZ1c2VfdXBkYXRlX2dldF9hdHRyKCkgY2FsbHNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzo4OiAqIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSBiZWZvcmUgaXNzdWluZyBGVVNFX0dFVEFUVFIuICBPbiBhbiB1bmZpeGVkIGtlcm5lbCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy05LSAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTEtICogZ2V0eGF0dHIgcG9wdWxhdGVzIHRoZSBjYWNoZS4gIEJlY2F1c2UgZnVzZV9zZXRfYWNsKCkgc2tpcHNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzoxMjogKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgZm9yICFmYy1cXHUwMDNlcG9zaXhfYWNsIG1vdW50cywgYW55IHN1YnNlcXVlbnQgY2hhbmdlIHRvXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTMtICogdGhlIEFDTCBsZWF2ZXMgdGhlIHN0YWxlIGtlcm5lbCBlbnRyeSBpbiBwbGFjZSwgYW5kIHRoZSBuZXh0IGdldHhhdHRyIHJldHVybnNcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTIyLSAqICAyLiBsZ2V0eGF0dHIgLVxcdTAwM2UgZGFlbW9uIGNhbGxlZCwgQUNMX0EgcmV0dXJuZWQsIE5PVCBjYWNoZWQgKEFDTF9ET05UX0NBQ0hFKS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzoyMzogKiAgMy4gc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgLVxcdTAwM2UgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGNhbGxlZC5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0yNC0gKiAgICAgQnVnZ3k6ICBBQ0xfRE9OVF9DQUNIRSAtXFx1MDAzZSBBQ0xfTk9UX0NBQ0hFRCAoY2FjaGUgZW5hYmxlZCkuXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYz0xMDc9c3RhdGljIHZvaWQgZnNfbG9va3VwKGZ1c2VfcmVxX3QgcmVxLCBmdXNlX2lub190IHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTExNi1cXHQgKiBMb25nIGF0dHIvZW50cnkgdGltZW91dHMgc28gdGhhdCBub3JtYWwgc3RhdCgpIGNhbGxzIGRvIG5vdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjExNzpcXHQgKiBleHBpcmUgYW5kIHRyaWdnZXIgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIG9uIHRoZWlyIG93bjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0xMTgtXFx0ICogb25seSB0aGUgZXhwbGljaXQgQVRfU1RBVFhfRk9SQ0VfU1lOQyBzaG91bGQgdHJpZ2dlciBpdC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jPTI1Mz1URVNUX0YoYWNsX2NhY2hlLCBzdGFsZV9hZnRlcl9mb3JjZV9zeW5jKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMjgzLVxcdCAqIFN0ZXAgMjogc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmM6Mjg0OlxcdCAqIGZ1c2VfdXBkYXRlX2dldF9hdHRyKCkgY2FsbHMgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGJlZm9yZSBzZW5kaW5nXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMjg1LVxcdCAqIEZVU0VfR0VUQVRUUi5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTMxNC1cXHQgKiBTaW11bGF0ZXMgYW4gQUNMIGNoYW5nZSB0aGF0IGZ1c2Vfc2V0X2FjbCgpIHdvdWxkIE5PVCBpbnZhbGlkYXRlIGZvclxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjMxNTpcXHQgKiAhZmMtXFx1MDAzZXBvc2l4X2FjbCBtb3VudHMgKGl0IHNraXBzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMgaW4gdGhhdCBjYXNlKS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0zMTYtXFx0ICogT24gYSBmaXhlZCBrZXJuZWwgdGhlIEFDTCB3YXMgbmV2ZXIgY2FjaGVkLCBzbyB0aGlzIGlzIG1vb3QuXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0zMzgtXFx0XFx0ICAgICAgIFxcXCIoY291bnQ9JWQpOyBBQ0xfRE9OVF9DQUNIRSBjb3JydXB0ZWQgYnkgXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjMzOTpcXHRcXHQgICAgICAgXFxcImZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKVxcXCIsIHN6LCBjb3VudCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMzQwLVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6NDkuNDg2NTQ1NDczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE1MTM5ODI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBBQ0wgQ2FjaGluZyBhbmQgRlVTRSBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBpcyAqZXZlcnl3aGVyZSog4oCTIGl0J3MgYmVpbmcgY2FsbGVkIGJ5IGEgc2xldyBvZiBuZXR3b3JrIGFuZCBkaXN0cmlidXRlZCBmaWxlc3lzdGVtczogRlVTRSwgTkZTLCBPQ0ZTMiwgQ2VwaCwgYW5kIEdGUzIuIFRoYXQgcmVhbGx5IGhpZ2hsaWdodHMgdGhlIHNjb3BlIG9mIHRoaXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYXJlYSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgYnVnIGlzIGxpbmtlZCB0byBgQUNMX0RPTlRfQ0FDSEVgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggZmlsZXN5c3RlbXMgdGhhdCAqYXJlbid0KiBzdXBwb3NlZCB0byBiZSBjYWNoaW5nIEFDTHMuXG5cblNpbmNlIHdlJ3JlIHplcm9pbmcgaW4gb24gdGhpcyBzcGVjaWZpYyBiZWhhdmlvciwgSSBuZWVkIHRvIGZvY3VzIG9uIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGBmb3JnZXRfY2FjaGVkX2FjbGAuIEZVU0UgdXNlcyB0aGlzIHdoZW4gYCFmYy1cdTAwM2Vwb3NpeF9hY2xgIGlzIHNldC4gV2hpbGUgYGZ1c2VfdXBkYXRlX2dldF9hdHRyYCBzb3VuZHMgbGlrZSBhIHVzZWZ1bCBzeW1ib2wgZm9yIHRhcmdldGVkIEZVU0UgdGVzdGluZywgaXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgYnVnIGxpZXMgd2l0aGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYC4gQWx0aG91Z2ggYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGlzIHN0YXRpYywgc28gSSBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgYXMgYSBmdXp6ZXIgZm9jdXMgc3ltYm9sLCBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgdXNlZnVsLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWcgaW1wbGljYXRpb25zLiBJcyBgQ09ORklHX0ZTX1BPU0lYX0FDTGAgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24/IEl0IHNlZW1zIGxpa2UgaXQsIGJ1dCBsZXQncyBkb3VibGUtY2hlY2suIE9rYXksIHllcyBpdCBpcyB0aGUgbWFpbiBjb25maWcsIHRob3VnaCBgQ09ORklHX0ZVU0VfRlNgIGlzIHByb2JhYmx5IGFsc28gdXNlZnVsIHNpbmNlIG91ciB0ZXN0IGVudmlyb25tZW50IHVzZXMgRlVTRS4gTGV0J3MgbWFrZSBzdXJlIHRob3NlIHR3byBhcmUgZW5hYmxlZC5cblxuQW5kIHllcywgYENPTkZJR19GU19QT1NJWF9BQ0xgIGlzIGRlZmluaXRlbHkgYSB2YWxpZCBvcHRpb24g4oCTIGl0J3MgcmlnaHQgdGhlcmUgaW4gYGZzL0tjb25maWdgLiBFeGNlbGxlbnQuIFdlJ3JlIG9uIHRoZSByaWdodCB0cmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6NTYuNjM3OTQ2NzUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTAyNTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfUE9TSVhfQUNMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTkwPWNvbmZpZyBGU19EQVhfUE1EXFxuLS1cXG5mcy9LY29uZmlnLTEwMS0jXFxuZnMvS2NvbmZpZzoxMDI6Y29uZmlnIEZTX1BPU0lYX0FDTFxcbmZzL0tjb25maWctMTAzLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6NTYuNzIyOTc3MDAyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDI0NzMwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVmFsaWRhdGluZyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBZZXAsIGBGU19QT1NJWF9BQ0xgIGlzIGRlZmluaXRlbHkgYSBsZWdpdGltYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBObyByZWQgZmxhZ3MgdGhlcmUuIFRoYXTigJlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciBhY2Nlc3MgY29udHJvbCBhbmQgaXMgdXN1YWxseSBzdHJhaWdodGZvcndhcmQuIFRoZW4sIGxldCdzIHNlZS4uLiBhaCwgYW5kIG9mIGNvdXJzZSwgYEZVU0VfRlNgIGlzIGEgZ28gYXMgd2VsbC4gTm8gc3VycHJpc2VzLiBXZSd2ZSBnb3QgdGhlIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZTsgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IHNvIGZhci4gVGhhdCBjb25maXJtcyBhIGJhc2UgbGV2ZWwgb2Ygb3BlcmF0aW9uYWwgY29tcGV0ZW5jZTsgbm8gaW1tZWRpYXRlIGlzc3VlcyB0byBhZGRyZXNzIG9uIHRoaXMgZnJvbnQuIFRpbWUgdG8gbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwMzoxMzo1OS41MjU0NTE5OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjg4NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVNFX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6NTkuNjA5MTQ1OTk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzgwNzExNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBQ0wgQ2FjaGluZyBCdWcgRml4KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIEFDTHMsIHNwZWNpZmljYWxseSBgRlNfUE9TSVhfQUNMYCBhbmQgYEZVU0VfRlNgLiBUaGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYGZvcmdldF9hbGxfY2FjaGVkX2FjbHNgIGFuZCBgZm9yZ2V0X2NhY2hlZF9hY2xgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmc6IGlzIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCBkZWZpbmVkIGluIGBmcy9wb3NpeF9hY2wuY2A/IFllcCwgaXQncyB0aGVyZS5cblxuVGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB0aGlzOiB0aGVyZSdzIGEgYnVnIGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCB0aGF0IG1pc2hhbmRsZXMgdGhlIGBBQ0xfRE9OVF9DQUNIRWAgZmxhZywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBBQ0wgY2FjaGluZyBiZWluZyBlbmFibGVkIHdoZW4gaXQgc2hvdWxkbid0IGJlLiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgVkZTL0FDTCBsb2dpYywgbWVhbmluZyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCByZXF1aXJlcyBjYXJlZnVsIGV4YW1pbmF0aW9uLiBUaGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIHRvIGNvbmZpcm0gY29ycmVjdCBiZWhhdmlvciB3aWxsIGJlIHRvIGZvY3VzIG9uIHRob3NlIGNhbGxzIHRvIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBhbmQgYGZvcmdldF9jYWNoZWRfYWNsYCBhbmQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdHJhbnNpdGlvbnMgb2YgdGhlIEFDTCBjYWNoaW5nIHN0YXRlLiBJJ20gZ29pbmcgdG8gZ2V0IHRoZSByZXN1bHRzIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1NCwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTQ6MDUuMDg3MjE5NDc3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3MDkxNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvcmdldF9hbGxfY2FjaGVkX2FjbHNcIixcbiAgICBcImZvcmdldF9jYWNoZWRfYWNsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCB3aGVyZSBgQUNMX0RPTlRfQ0FDSEVgIGNvdWxkIGJlIGluY29ycmVjdGx5IHJlcGxhY2VkIHdpdGggYEFDTF9OT1RfQ0FDSEVEYCwgaW5hZHZlcnRlbnRseSBlbmFibGluZyBBQ0wgY2FjaGluZyBmb3IgaW5vZGVzIHRoYXQgc2hvdWxkbid0IGhhdmUgaXQgKGUuZy4sIEZVU0UgbW91bnRzIHdpdGhvdXQgYEZVU0VfUE9TSVhfQUNMYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFZGUy9BQ0wgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBhbmQgYGZvcmdldF9jYWNoZWRfYWNsYCB0byBlbnN1cmUgQUNMIGNhY2hpbmcgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvcmdldF9hbGxfY2FjaGVkX2FjbHNcIixcbiAgICBcImZvcmdldF9jYWNoZWRfYWNsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCB3aGVyZSBgQUNMX0RPTlRfQ0FDSEVgIGNvdWxkIGJlIGluY29ycmVjdGx5IHJlcGxhY2VkIHdpdGggYEFDTF9OT1RfQ0FDSEVEYCwgaW5hZHZlcnRlbnRseSBlbmFibGluZyBBQ0wgY2FjaGluZyBmb3IgaW5vZGVzIHRoYXQgc2hvdWxkbid0IGhhdmUgaXQgKGUuZy4sIEZVU0UgbW91bnRzIHdpdGhvdXQgYEZVU0VfUE9TSVhfQUNMYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFZGUy9BQ0wgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBhbmQgYGZvcmdldF9jYWNoZWRfYWNsYCB0byBlbnN1cmUgQUNMIGNhY2hpbmcgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxttzr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 02:49:25 +0000 UTC FinishedAt: 2026-07-14 03:14:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_POSIX_ACL", "FUSE_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_POSIX_ACL", "FUSE_FS" ], "series_id": "7abfdc6b-3365-4e77-89a9-8f8b9beb8469" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "forget_all_cached_acls", "forget_cached_acl" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1BPU0lYX0FDTCYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyYjMzQ7LAogICAgJiMzNDtmb3JnZXRfY2FjaGVkX2FjbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIHdoZXJlIGBBQ0xfRE9OVF9DQUNIRWAgY291bGQgYmUgaW5jb3JyZWN0bHkgcmVwbGFjZWQgd2l0aCBgQUNMX05PVF9DQUNIRURgLCBpbmFkdmVydGVudGx5IGVuYWJsaW5nIEFDTCBjYWNoaW5nIGZvciBpbm9kZXMgdGhhdCBzaG91bGRuJiMzOTt0IGhhdmUgaXQgKGUuZy4sIEZVU0UgbW91bnRzIHdpdGhvdXQgYEZVU0VfUE9TSVhfQUNMYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFZGUy9BQ0wgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBhbmQgYGZvcmdldF9jYWNoZWRfYWNsYCB0byBlbnN1cmUgQUNMIGNhY2hpbmcgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzU3NjFjZDU1ZDgyNzYwZWQ4YThmN2Y1ODhlOTcyNmNmYWJmNWEwY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDAzOjEzOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Bvc2l4X2FjbC5jIGIvZnMvcG9zaXhfYWNsLmNcbmluZGV4IGI0YmZlNGRkZjY0ZWE1Li4zZGM2MmMxYzI3MDg3YSAxMDA2NDRcbi0tLSBhL2ZzL3Bvc2l4X2FjbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wb3NpeF9hY2wuY1xuQEAgLTkzLDYgJiM0Mzs5MywxMyBAQCBzdGF0aWMgdm9pZCBfX2ZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKipwKVxuIHtcbiBcdHN0cnVjdCBwb3NpeF9hY2wgKm9sZDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFDTF9ET05UX0NBQ0hFIGlzIGV4cGVjdGVkIHRvIGJlIGEgXCYjMzQ7Y29uc3RcJiMzNDsgdmFsdWUgYW5kIHhjaGcgaXQgd2l0aFxuJiM0MztcdCAqIEFDTF9OT1RfQ0FDSEVEIHdvdWxkIGVuYWJsZSBhY2wgY2FjaGluZyBmb3IgdGhlIGlub2RlIC1cbiYjNDM7XHQgKiBjbGVhcmx5IG5vdCB3aGF0IHRoZSBjYWxsZXIgaGFzIGludGVuZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChSRUFEX09OQ0UoKnApID09IEFDTF9ET05UX0NBQ0hFKVxuJiM0MztcdFx0cmV0dXJuO1xuIFx0b2xkID0geGNoZyhwLCBBQ0xfTk9UX0NBQ0hFRCk7XG4gXHRpZiAoIWlzX3VuY2FjaGVkX2FjbChvbGQpKVxuIFx0XHRwb3NpeF9hY2xfcmVsZWFzZShvbGQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXG5pbmRleCA2MTJhYWQ2OWE5M2FhNC4uZjQ3MTQxNDg0Mjc1MGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXG5AQCAtNSw2ICYjNDM7NSwxMyBAQCBDRkxBR1MgJiM0Mzs9IC1XYWxsIC1PMiAtZyAkKEtIRFJfSU5DTFVERVMpXG4gVEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0XG4gVEVTVF9HRU5fRklMRVMgOj0gZnVzZV9tbnRcbiBcbiYjNDM7IyBmdXNlX2FjbF9jYWNoZV90ZXN0IHJlcXVpcmVzIGxpYmZ1c2UzOyBhZGQgaXQgb25seSB3aGVuIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnQuXG4mIzQzO0FDTF9DRkxBR1MgOj0gJChzaGVsbCBwa2ctY29uZmlnIGZ1c2UzIC0tY2ZsYWdzIDJcdTAwM2UvZGV2L251bGwpXG4mIzQzO0FDTF9MRExJQlMgOj0gJChzaGVsbCBwa2ctY29uZmlnIGZ1c2UzIC0tbGlicyAyXHUwMDNlL2Rldi9udWxsKVxuJiM0MztpZm5lcSAoJChBQ0xfQ0ZMQUdTKSwpXG4mIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSBmdXNlX2FjbF9jYWNoZV90ZXN0XG4mIzQzO2VuZGlmXG4mIzQzO1xuIGluY2x1ZGUgLi4vLi4vbGliLm1rXG4gXG4gVkFSX0NGTEFHUyA6PSAkKHNoZWxsIHBrZy1jb25maWcgZnVzZSAtLWNmbGFncyAyXHUwMDNlL2Rldi9udWxsKVxuQEAgLTE5LDMgJiM0MzsyNiw2IEBAIGVuZGlmXG4gXG4gJChPVVRQVVQpL2Z1c2VfbW50OiBDRkxBR1MgJiM0Mzs9ICQoVkFSX0NGTEFHUylcbiAkKE9VVFBVVCkvZnVzZV9tbnQ6IExETElCUyAmIzQzOz0gJChWQVJfTERMSUJTKVxuJiM0MztcbiYjNDM7JChPVVRQVVQpL2Z1c2VfYWNsX2NhY2hlX3Rlc3Q6IENGTEFHUyAmIzQzOz0gJChBQ0xfQ0ZMQUdTKVxuJiM0MzskKE9VVFBVVCkvZnVzZV9hY2xfY2FjaGVfdGVzdDogTERMSUJTICYjNDM7PSAkKEFDTF9MRExJQlMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iMmU1ZGI4NTU1MDQwOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDM0OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBUZXN0OiBGVVNFIEFDTCBjYWNoaW5nIGJ1ZyB0cmlnZ2VyZWQgYnkgQVRfU1RBVFhfRk9SQ0VfU1lOQ1xuJiM0MzsgKlxuJiM0MzsgKiBBIEZVU0UgbW91bnQgdGhhdCBkb2VzIG5vdCBuZWdvdGlhdGUgRlVTRV9QT1NJWF9BQ0wgaW5pdGlhbGlzZXMgZXZlcnkgaW5vZGVcbiYjNDM7ICogd2l0aCBpX2FjbCA9IGlfZGVmYXVsdF9hY2wgPSBBQ0xfRE9OVF9DQUNIRS4gIFdoZW4gYSBmcmVzaCBzdGF0IGlzIG5lZWRlZFxuJiM0MzsgKiAoZS5nLiBBVF9TVEFUWF9GT1JDRV9TWU5DKSwgZnVzZV91cGRhdGVfZ2V0X2F0dHIoKSBjYWxsc1xuJiM0MzsgKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIGlzc3VpbmcgRlVTRV9HRVRBVFRSLiAgT24gYW4gdW5maXhlZCBrZXJuZWwsXG4mIzQzOyAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxuJiM0MzsgKiBpbmFkdmVydGVudGx5IGVuYWJsaW5nIHRoZSBrZXJuZWwgQUNMIGNhY2hlIGZvciB0aGF0IGlub2RlLiAgVGhlIG5leHRcbiYjNDM7ICogZ2V0eGF0dHIgcG9wdWxhdGVzIHRoZSBjYWNoZS4gIEJlY2F1c2UgZnVzZV9zZXRfYWNsKCkgc2tpcHNcbiYjNDM7ICogZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGZvciAhZmMtXHUwMDNlcG9zaXhfYWNsIG1vdW50cywgYW55IHN1YnNlcXVlbnQgY2hhbmdlIHRvXG4mIzQzOyAqIHRoZSBBQ0wgbGVhdmVzIHRoZSBzdGFsZSBrZXJuZWwgZW50cnkgaW4gcGxhY2UsIGFuZCB0aGUgbmV4dCBnZXR4YXR0ciByZXR1cm5zXG4mIzQzOyAqIHdyb25nIGRhdGEgd2l0aG91dCBldmVyIHJlYWNoaW5nIHRoZSBGVVNFIGRhZW1vbi5cbiYjNDM7ICpcbiYjNDM7ICogRml4IChmcy9wb3NpeF9hY2wuYyk6IF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXR1cm5zIGVhcmx5IHdoZW4gKnAgaXNcbiYjNDM7ICogQUNMX0RPTlRfQ0FDSEUsIHByZXNlcnZpbmcgdGhlIFwmIzM0O25ldmVyIGNhY2hlXCYjMzQ7IGludmFyaWFudCBmb3IgdGhlIGlub2RlJiMzOTtzXG4mIzQzOyAqIGxpZmV0aW1lLlxuJiM0MzsgKlxuJiM0MzsgKiBUZXN0IG91dGxpbmU6XG4mIzQzOyAqICAxLiBNb3VudCBhIG1pbmltYWwgRlVTRSBmcyAobm8gRlVTRV9QT1NJWF9BQ0wgbmVnb3RpYXRlZCkuXG4mIzQzOyAqICAyLiBsZ2V0eGF0dHIgLVx1MDAzZSBkYWVtb24gY2FsbGVkLCBBQ0xfQSByZXR1cm5lZCwgTk9UIGNhY2hlZCAoQUNMX0RPTlRfQ0FDSEUpLlxuJiM0MzsgKiAgMy4gc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgLVx1MDAzZSBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgY2FsbGVkLlxuJiM0MzsgKiAgICAgQnVnZ3k6ICBBQ0xfRE9OVF9DQUNIRSAtXHUwMDNlIEFDTF9OT1RfQ0FDSEVEIChjYWNoZSBlbmFibGVkKS5cbiYjNDM7ICogICAgIEZpeGVkOiAgQUNMX0RPTlRfQ0FDSEUgcHJlc2VydmVkLlxuJiM0MzsgKiAgNC4gbGdldHhhdHRyIC1cdTAwM2UgZGFlbW9uIGNhbGxlZCwgQUNMX0EgcmV0dXJuZWQuXG4mIzQzOyAqICAgICBCdWdneTogIHJlc3VsdCBub3cgY2FjaGVkIChBQ0xfTk9UX0NBQ0hFRCAtXHUwMDNlIGNhY2hlZCkuXG4mIzQzOyAqICAgICBGaXhlZDogIHJlc3VsdCBzdGlsbCBub3QgY2FjaGVkLlxuJiM0MzsgKiAgNS4gRGFlbW9uIHN3aXRjaGVzIHRvIEFDTF9CIGludGVybmFsbHkgKGRpZmZlcmVudCBzaXplKS5cbiYjNDM7ICogIDYuIGxnZXR4YXR0ciAtXHUwMDNlIHNob3VsZCByZXR1cm4gQUNMX0IgKDQ0IGJ5dGVzKS5cbiYjNDM7ICogICAgIEJ1Z2d5OiAgY2FjaGUgaGl0LCByZXR1cm5zIHN0YWxlIEFDTF9BICgyOCBieXRlcykuIEZBSUwuXG4mIzQzOyAqICAgICBGaXhlZDogIG5vIGNhY2hlLCBkYWVtb24gY2FsbGVkLCByZXR1cm5zIEFDTF9CICg0NCBieXRlcykuIFBBU1MuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy94YXR0ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZVU0VfVVNFX1ZFUlNJT04gMzFcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZnVzZV9sb3dsZXZlbC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiAtLS0tIEFDTCBiaW5hcnkgZW5jb2RpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzOy8qXG4mIzQzOyAqIFBPU0lYIEFDTCB2MiB4YXR0ciBmb3JtYXQgKGxpdHRsZS1lbmRpYW4pOlxuJiM0MzsgKiAgIGhlYWRlcjogdTMyIHZlcnNpb24gKD0gMHgwMDAwMDAwMilcbiYjNDM7ICogICBlbnRyeTogIHUxNiB0YWcgfCB1MTYgcGVybSB8IHUzMiBpZFxuJiM0MzsgKlxuJiM0MzsgKiBFbnRyaWVzIG11c3QgYXBwZWFyIGluIHRhZy1hc2NlbmRpbmcgb3JkZXI7IG5hbWVkIFVTRVIvR1JPVVAgZW50cmllc1xuJiM0MzsgKiByZXF1aXJlIGEgTUFTSyBlbnRyeS4gIEJvdGggQUNMcyBwYXNzIHBvc2l4X2FjbF9mcm9tX3hhdHRyKCkgdmFsaWRhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsvKiBBQ0xfQTogMyBlbnRyaWVzIChVU0VSX09CSjpyd3gsIEdST1VQX09CSjpyLXgsIE9USEVSOnIteCkgPSAyOCBieXRlcyAqL1xuJiM0MztzdGF0aWMgY29uc3QgdWludDhfdCBhY2xfYVtdID0ge1xuJiM0MztcdDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHYyIGhlYWRlciAgICAgICovXG4mIzQzO1x0MHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogVVNFUl9PQkogIHJ3eCAgKi9cbiYjNDM7XHQweDA0LCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBHUk9VUF9PQkogci14ICAqL1xuJiM0MztcdDB4MjAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIE9USEVSICAgICByLXggICovXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBQ0xfQjogNSBlbnRyaWVzIOKAlCBhZGRzIFVTRVIgdWlkPTEgYW5kIE1BU0sgPSA0NCBieXRlcy5cbiYjNDM7ICogQSBuYW1lZCBVU0VSIGVudHJ5IHJlcXVpcmVzIGEgTUFTSzsgYWxsIHRhZ3MgaW4gYXNjZW5kaW5nIG9yZGVyLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHVpbnQ4X3QgYWNsX2JbXSA9IHtcbiYjNDM7XHQweDAyLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2MiBoZWFkZXIgICAgICAgKi9cbiYjNDM7XHQweDAxLCAweDAwLCAweDA3LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBVU0VSX09CSiAgIHJ3eCAgKi9cbiYjNDM7XHQweDAyLCAweDAwLCAweDA3LCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAvKiBVU0VSIHVpZD0xIHJ3eCAgKi9cbiYjNDM7XHQweDA0LCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBHUk9VUF9PQkogIHIteCAgKi9cbiYjNDM7XHQweDEwLCAweDAwLCAweDA3LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBNQVNLICAgICAgIHJ3eCAgKi9cbiYjNDM7XHQweDIwLCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBPVEhFUiAgICAgIHIteCAgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIC0tLS0gU2hhcmVkIHN0YXRlIChkYWVtb24gdGhyZWFkIFx1MDAzYy1cdTAwM2UgdGVzdCB0aHJlYWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZJTEVfSU5PICAyXG4mIzQzOyNkZWZpbmUgRklMRV9OQU1FIFwmIzM0O3Rlc3RmaWxlXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGFlbW9uX3N0YXRlIHtcbiYjNDM7XHRwdGhyZWFkX211dGV4X3QgbG9jaztcbiYjNDM7XHRjb25zdCB1aW50OF90ICAqYWNsO1xuJiM0MztcdHNpemVfdCAgICAgICAgICBhY2xfc2l6ZTtcbiYjNDM7XHRpbnQgICAgICAgICAgICAgZ2V0eGF0dHJfY291bnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBHbG9iYWw6IGNhbGxiYWNrcyBhcmUgc3RhdGVsZXNzIGZucyBzbyB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsLlxuJiM0MzsgKiBTYWZlIGJlY2F1c2Ugb25seSBvbmUgdGVzdCBpbnN0YW5jZSBydW5zIGF0IGEgdGltZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGFlbW9uX3N0YXRlIGdfZHMgPSB7XG4mIzQzO1x0LmxvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogLS0tLSBGVVNFIGxvd2xldmVsIGNhbGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZnNfbG9va3VwKGZ1c2VfcmVxX3QgcmVxLCBmdXNlX2lub190IHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGlmIChwYXJlbnQgIT0gRlVTRV9ST09UX0lEIHx8IHN0cmNtcChuYW1lLCBGSUxFX05BTUUpKSB7XG4mIzQzO1x0XHRmdXNlX3JlcGx5X2VycihyZXEsIEVOT0VOVCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHN0cnVjdCBmdXNlX2VudHJ5X3BhcmFtIGUgPSB7fTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMb25nIGF0dHIvZW50cnkgdGltZW91dHMgc28gdGhhdCBub3JtYWwgc3RhdCgpIGNhbGxzIGRvIG5vdFxuJiM0MztcdCAqIGV4cGlyZSBhbmQgdHJpZ2dlciBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgb24gdGhlaXIgb3duO1xuJiM0MztcdCAqIG9ubHkgdGhlIGV4cGxpY2l0IEFUX1NUQVRYX0ZPUkNFX1NZTkMgc2hvdWxkIHRyaWdnZXIgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZS5pbm8gICAgICAgICAgICAgPSBGSUxFX0lOTztcbiYjNDM7XHRlLmdlbmVyYXRpb24gICAgICA9IDE7XG4mIzQzO1x0ZS5hdHRyX3RpbWVvdXQgICAgPSAxMC4wO1xuJiM0MztcdGUuZW50cnlfdGltZW91dCAgID0gMTAuMDtcbiYjNDM7XHRlLmF0dHIuc3RfaW5vICAgICA9IEZJTEVfSU5PO1xuJiM0MztcdGUuYXR0ci5zdF9tb2RlICAgID0gU19JRlJFRyB8IDA2NDQ7XG4mIzQzO1x0ZS5hdHRyLnN0X25saW5rICAgPSAxO1xuJiM0MztcdGZ1c2VfcmVwbHlfZW50cnkocmVxLCBcdTAwMjZlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZnNfZ2V0YXR0cihmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBpbm8sXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGZ1c2VfZmlsZV9pbmZvICpmaSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdGF0IHN0ID0ge307XG4mIzQzO1xuJiM0MztcdCh2b2lkKWZpO1xuJiM0MztcdGlmIChpbm8gPT0gRlVTRV9ST09UX0lEKSB7XG4mIzQzO1x0XHRzdC5zdF9pbm8gICA9IEZVU0VfUk9PVF9JRDtcbiYjNDM7XHRcdHN0LnN0X21vZGUgID0gU19JRkRJUiB8IDA3NTU7XG4mIzQzO1x0XHRzdC5zdF9ubGluayA9IDI7XG4mIzQzO1x0fSBlbHNlIGlmIChpbm8gPT0gRklMRV9JTk8pIHtcbiYjNDM7XHRcdHN0LnN0X2lubyAgID0gRklMRV9JTk87XG4mIzQzO1x0XHRzdC5zdF9tb2RlICA9IFNfSUZSRUcgfCAwNjQ0O1xuJiM0MztcdFx0c3Quc3RfbmxpbmsgPSAxO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRmdXNlX3JlcGx5X2VycihyZXEsIEVOT0VOVCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGZ1c2VfcmVwbHlfYXR0cihyZXEsIFx1MDAyNnN0LCAxMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGZzX2dldHhhdHRyKGZ1c2VfcmVxX3QgcmVxLCBmdXNlX2lub190IGlubywgY29uc3QgY2hhciAqbmFtZSxcbiYjNDM7XHRcdFx0c2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaW5vICE9IEZJTEVfSU5PIHx8XG4mIzQzO1x0ICAgIHN0cmNtcChuYW1lLCBcJiMzNDtzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1wmIzM0OykgIT0gMCkge1xuJiM0MztcdFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9EQVRBKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZnX2RzLmxvY2spO1xuJiM0MztcdGNvbnN0IHVpbnQ4X3QgKmFjbCAgICAgID0gZ19kcy5hY2w7XG4mIzQzO1x0c2l6ZV90ICAgICAgICAgYWNsX3NpemUgPSBnX2RzLmFjbF9zaXplO1xuJiM0MztcdGdfZHMuZ2V0eGF0dHJfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplID09IDApXG4mIzQzO1x0XHRmdXNlX3JlcGx5X3hhdHRyKHJlcSwgYWNsX3NpemUpO1xuJiM0MztcdGVsc2UgaWYgKHNpemUgXHUwMDNjIGFjbF9zaXplKVxuJiM0MztcdFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFUkFOR0UpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGZ1c2VfcmVwbHlfYnVmKHJlcSwgKGNvbnN0IGNoYXIgKilhY2wsIGFjbF9zaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmdXNlX2xvd2xldmVsX29wcyBmc19vcHMgPSB7XG4mIzQzO1x0Lmxvb2t1cCAgID0gZnNfbG9va3VwLFxuJiM0MztcdC5nZXRhdHRyICA9IGZzX2dldGF0dHIsXG4mIzQzO1x0LmdldHhhdHRyID0gZnNfZ2V0eGF0dHIsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiAtLS0tIERhZW1vbiB0aHJlYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnJ1bl9kYWVtb24odm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0ZnVzZV9zZXNzaW9uX2xvb3AoKHN0cnVjdCBmdXNlX3Nlc3Npb24gKilhcmcpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tIGtzZWxmdGVzdCBoYXJuZXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7RklYVFVSRShhY2xfY2FjaGUpIHtcbiYjNDM7XHRzdHJ1Y3QgZnVzZV9zZXNzaW9uICpzZTtcbiYjNDM7XHRjaGFyICAgICAgICAgICAgICAgICBtb3VudHBvaW50W1BBVEhfTUFYXTtcbiYjNDM7XHRjaGFyICAgICAgICAgICAgICAgICBmaWxlX3BhdGhbUEFUSF9NQVhdO1xuJiM0MztcdHB0aHJlYWRfdCAgICAgICAgICAgIHRocmVhZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAoYWNsX2NhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqZnVzZV9hcmd2W10gPSB7IFwmIzM0O2Z1c2VfYWNsX2NhY2hlX3Rlc3RcJiMzNDssIE5VTEwgfTtcbiYjNDM7XHRzdHJ1Y3QgZnVzZV9hcmdzIGFyZ3MgPSBGVVNFX0FSR1NfSU5JVCgxLCBmdXNlX2FyZ3YpO1xuJiM0MztcbiYjNDM7XHRnX2RzLmFjbCAgICAgICAgICAgID0gYWNsX2E7XG4mIzQzO1x0Z19kcy5hY2xfc2l6ZSAgICAgICA9IHNpemVvZihhY2xfYSk7XG4mIzQzO1x0Z19kcy5nZXR4YXR0cl9jb3VudCA9IDA7XG4mIzQzO1xuJiM0MztcdHN0cmNweShzZWxmLVx1MDAzZW1vdW50cG9pbnQsIFwmIzM0Oy90bXAvYWNsX2NhY2hlX3Rlc3RfWFhYWFhYXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIW1rZHRlbXAoc2VsZi1cdTAwM2Vtb3VudHBvaW50KSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtta2R0ZW1wOiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoc2VsZi1cdTAwM2VmaWxlX3BhdGgsIHNpemVvZihzZWxmLVx1MDAzZWZpbGVfcGF0aCksXG4mIzQzO1x0XHQgXCYjMzQ7JXMvXCYjMzQ7IEZJTEVfTkFNRSwgc2VsZi1cdTAwM2Vtb3VudHBvaW50KTtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VzZSA9IGZ1c2Vfc2Vzc2lvbl9uZXcoXHUwMDI2YXJncywgXHUwMDI2ZnNfb3BzLCBzaXplb2YoZnNfb3BzKSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFzZWxmLVx1MDAzZXNlKSB7XG4mIzQzO1x0XHRybWRpcihzZWxmLVx1MDAzZW1vdW50cG9pbnQpO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O2Z1c2Vfc2Vzc2lvbl9uZXcgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmdXNlX3Nlc3Npb25fbW91bnQoc2VsZi1cdTAwM2VzZSwgc2VsZi1cdTAwM2Vtb3VudHBvaW50KSkge1xuJiM0MztcdFx0ZnVzZV9zZXNzaW9uX2Rlc3Ryb3koc2VsZi1cdTAwM2VzZSk7XG4mIzQzO1x0XHRybWRpcihzZWxmLVx1MDAzZW1vdW50cG9pbnQpO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O2Z1c2Vfc2Vzc2lvbl9tb3VudCBmYWlsZWQgXCYjMzQ7XG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7KG1pc3NpbmcgZnVzZXJtb3VudDMgb3IgaW5zdWZmaWNpZW50IHByaXZpbGVnZXMpXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwdGhyZWFkX2NyZWF0ZShcdTAwMjZzZWxmLVx1MDAzZXRocmVhZCwgTlVMTCwgcnVuX2RhZW1vbiwgc2VsZi1cdTAwM2VzZSkpIHtcbiYjNDM7XHRcdGZ1c2Vfc2Vzc2lvbl91bm1vdW50KHNlbGYtXHUwMDNlc2UpO1xuJiM0MztcdFx0ZnVzZV9zZXNzaW9uX2Rlc3Ryb3koc2VsZi1cdTAwM2VzZSk7XG4mIzQzO1x0XHRybWRpcihzZWxmLVx1MDAzZW1vdW50cG9pbnQpO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3B0aHJlYWRfY3JlYXRlOiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZ1c2Vfb3B0X2ZyZWVfYXJncyhcdTAwMjZhcmdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihhY2xfY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRmdXNlX3Nlc3Npb25fZXhpdChzZWxmLVx1MDAzZXNlKTtcbiYjNDM7XHRmdXNlX3Nlc3Npb25fdW5tb3VudChzZWxmLVx1MDAzZXNlKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4oc2VsZi1cdTAwM2V0aHJlYWQsIE5VTEwpO1xuJiM0MztcdGZ1c2Vfc2Vzc2lvbl9kZXN0cm95KHNlbGYtXHUwMDNlc2UpO1xuJiM0MztcdHJtZGlyKHNlbGYtXHUwMDNlbW91bnRwb2ludCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZG9fZm9yY2Vfc3RhdHgoY29uc3QgY2hhciAqcGF0aClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdGF0eCBzdHg7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzeXNjYWxsKFNZU19zdGF0eCwgQVRfRkRDV0QsIHBhdGgsXG4mIzQzO1x0XHQgICAgICAgQVRfU1RBVFhfRk9SQ0VfU1lOQywgU1RBVFhfQkFTSUNfU1RBVFMsIFx1MDAyNnN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihhY2xfY2FjaGUsIHN0YWxlX2FmdGVyX2ZvcmNlX3N5bmMpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICAgIGJ1Zls1MTJdO1xuJiM0MztcdHNzaXplX3Qgc3o7XG4mIzQzO1x0aW50ICAgICBjb3VudDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdGVwIDE6IHR3byBnZXR4YXR0ciBjYWxscyBiZWZvcmUgYW55IHN0YXR4KEZPUkNFX1NZTkMpLlxuJiM0MztcdCAqIGlfYWNsID09IEFDTF9ET05UX0NBQ0hFLiAgX19nZXRfYWNsJiMzOTtzIGNtcHhjaGcocCwgQUNMX05PVF9DQUNIRUQsXG4mIzQzO1x0ICogc2VudGluZWwpIGZpbmRzICpwICE9IEFDTF9OT1RfQ0FDSEVEIG9uIGV2ZXJ5IGNhbGwsIHNvIHRoZSBzZW50aW5lbFxuJiM0MztcdCAqIGlzIG5ldmVyIHBsYWNlZCBhbmQgdGhlIHJlc3VsdCBpcyBuZXZlciBjYWNoZWQuICBCb3RoIGNhbGxzIG11c3RcbiYjNDM7XHQgKiByZWFjaCB0aGUgZGFlbW9uLCBwcm92aW5nIEFDTF9ET05UX0NBQ0hFIHN1cHByZXNzZXMgY2FjaGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzeiA9IGxnZXR4YXR0cihzZWxmLVx1MDAzZWZpbGVfcGF0aCwgXCYjMzQ7c3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3NcJiMzNDssXG4mIzQzO1x0XHQgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHN6LCAoc3NpemVfdClzaXplb2YoYWNsX2EpKTtcbiYjNDM7XG4mIzQzO1x0c3ogPSBsZ2V0eGF0dHIoc2VsZi1cdTAwM2VmaWxlX3BhdGgsIFwmIzM0O3N5c3RlbS5wb3NpeF9hY2xfYWNjZXNzXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdEFTU0VSVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9hKSk7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZnX2RzLmxvY2spO1xuJiM0MztcdGNvdW50ID0gZ19kcy5nZXR4YXR0cl9jb3VudDtcbiYjNDM7XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZnX2RzLmxvY2spO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoY291bnQsIDIpO1xuJiM0MztcdFRIX0xPRyhcJiMzNDtzdGVwIDEgT0s6IGJvdGggcHJlLXRyaWdnZXIgZ2V0eGF0dHJzIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksIFwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDtBQ0xfRE9OVF9DQUNIRSBpcyB3b3JraW5nXCYjMzQ7LCBjb3VudCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3RlcCAyOiBzdGF0eChBVF9TVEFUWF9GT1JDRV9TWU5DKS5cbiYjNDM7XHQgKiBmdXNlX3VwZGF0ZV9nZXRfYXR0cigpIGNhbGxzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSBiZWZvcmUgc2VuZGluZ1xuJiM0MztcdCAqIEZVU0VfR0VUQVRUUi5cbiYjNDM7XHQgKiAgIEJ1Z2d5IGtlcm5lbDogIEFDTF9ET05UX0NBQ0hFIC1cdTAwM2UgQUNMX05PVF9DQUNIRUQgIChjYWNoZSBlbmFibGVkKVxuJiM0MztcdCAqICAgRml4ZWQga2VybmVsOiAgQUNMX0RPTlRfQ0FDSEUgcHJlc2VydmVkICAgICAgICAgICAobm8gZWZmZWN0KVxuJiM0MztcdCAqL1xuJiM0MztcdEFTU0VSVF9FUShkb19mb3JjZV9zdGF0eChzZWxmLVx1MDAzZWZpbGVfcGF0aCksIDApO1xuJiM0MztcdFRIX0xPRyhcJiMzNDtzdGVwIDIgT0s6IHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpIHN1Y2NlZWRlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3RlcCAzOiBnZXR4YXR0ciDigJQgY2FjaGUgcG9wdWxhdGlvbiBhdHRlbXB0IGFmdGVyIHRoZSB0cmlnZ2VyLlxuJiM0MztcdCAqICAgQnVnZ3k6ICAqcCA9PSBBQ0xfTk9UX0NBQ0hFRCAtXHUwMDNlIHNlbnRpbmVsIHBsYWNlZCAtXHUwMDNlIGZ1c2VfZ2V0X2lub2RlX2FjbFxuJiM0MztcdCAqICAgICAgICAgICBjYWxsZWQgLVx1MDAzZSBBQ0xfQSBwYXJzZWQgYW5kIHN0b3JlZCBpbiB0aGUga2VybmVsIGNhY2hlLlxuJiM0MztcdCAqICAgRml4ZWQ6ICAqcCA9PSBBQ0xfRE9OVF9DQUNIRSAtXHUwMDNlIHNlbnRpbmVsIHBsYWNlbWVudCBza2lwcGVkIC1cdTAwM2VcbiYjNDM7XHQgKiAgICAgICAgICAgZnVzZV9nZXRfaW5vZGVfYWNsIGNhbGxlZCBidXQgcmVzdWx0IG5vdCBjYWNoZWQuXG4mIzQzO1x0ICogRWl0aGVyIHdheSB0aGUgY29ycmVjdCBBQ0xfQSBpcyByZXR1cm5lZCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHN6ID0gbGdldHhhdHRyKHNlbGYtXHUwMDNlZmlsZV9wYXRoLCBcJiMzNDtzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1wmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRBU1NFUlRfRVEoc3osIChzc2l6ZV90KXNpemVvZihhY2xfYSkpO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2Z19kcy5sb2NrKTtcbiYjNDM7XHRjb3VudCA9IGdfZHMuZ2V0eGF0dHJfY291bnQ7XG4mIzQzO1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2Z19kcy5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGNvdW50LCAzKTtcbiYjNDM7XHRUSF9MT0coXCYjMzQ7c3RlcCAzIE9LOiBwb3N0LXRyaWdnZXIgZ2V0eGF0dHIgcmVhY2hlZCBkYWVtb24gKGNvdW50PSVkKSwgXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0O3JldHVybmVkIGNvcnJlY3QgQUNMX0EgKCV6ZCBieXRlcylcJiMzNDssIGNvdW50LCBzeik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU3RlcCA0OiBzd2l0Y2ggZGFlbW9uIHRvIEFDTF9CIChkaWZmZXJlbnQgc2l6ZTogNDQgdnMgMjggYnl0ZXMpLlxuJiM0MztcdCAqIFNpbXVsYXRlcyBhbiBBQ0wgY2hhbmdlIHRoYXQgZnVzZV9zZXRfYWNsKCkgd291bGQgTk9UIGludmFsaWRhdGUgZm9yXG4mIzQzO1x0ICogIWZjLVx1MDAzZXBvc2l4X2FjbCBtb3VudHMgKGl0IHNraXBzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMgaW4gdGhhdCBjYXNlKS5cbiYjNDM7XHQgKiBPbiBhIGZpeGVkIGtlcm5lbCB0aGUgQUNMIHdhcyBuZXZlciBjYWNoZWQsIHNvIHRoaXMgaXMgbW9vdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2Z19kcy5sb2NrKTtcbiYjNDM7XHRnX2RzLmFjbCAgICAgID0gYWNsX2I7XG4mIzQzO1x0Z19kcy5hY2xfc2l6ZSA9IHNpemVvZihhY2xfYik7XG4mIzQzO1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2Z19kcy5sb2NrKTtcbiYjNDM7XHRUSF9MT0coXCYjMzQ7c3RlcCA0OiBkYWVtb24gc3dpdGNoZWQgdG8gQUNMX0IgKCV6dSBieXRlcylcJiMzNDssIHNpemVvZihhY2xfYikpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN0ZXAgNTogZ2V0eGF0dHIg4oCUIHRoZSBkZWNpc2l2ZSBjaGVjay5cbiYjNDM7XHQgKiAgIEJ1Z2d5IGtlcm5lbDogIGNhY2hlIGhpdCAtXHUwMDNlIHN0YWxlIEFDTF9BICgyOCBieXRlcyksIGNvdW50IHN0YXlzIDMuXG4mIzQzO1x0ICogICBGaXhlZCBrZXJuZWw6ICBubyBjYWNoZSAtXHUwMDNlIGRhZW1vbiBjYWxsZWQgLVx1MDAzZSBBQ0xfQiAoNDQgYnl0ZXMpLCBjb3VudCA0LlxuJiM0MztcdCAqL1xuJiM0MztcdHN6ID0gbGdldHhhdHRyKHNlbGYtXHUwMDNlZmlsZV9wYXRoLCBcJiMzNDtzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1wmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XG4mIzQzO1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4mIzQzO1x0Y291bnQgPSBnX2RzLmdldHhhdHRyX2NvdW50O1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChzeiA9PSAoc3NpemVfdClzaXplb2YoYWNsX2EpKVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O3N0ZXAgNSBCVUc6IHN0YWxlIEFDTF9BICglemQgYnl0ZXMpIGZyb20ga2VybmVsIGNhY2hlIFwmIzM0O1xuJiM0MztcdFx0ICAgICAgIFwmIzM0Oyhjb3VudD0lZCk7IEFDTF9ET05UX0NBQ0hFIGNvcnJ1cHRlZCBieSBcJiMzNDtcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKClcJiMzNDssIHN6LCBjb3VudCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0VEhfTE9HKFwmIzM0O3N0ZXAgNSBPSzogZGFlbW9uIHJlYWNoZWQgKGNvdW50PSVkKSwgXCYjMzQ7XG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7ZnJlc2ggQUNMX0IgKCV6ZCBieXRlcylcJiMzNDssIGNvdW50LCBzeik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9iKSk7XG4mIzQzO1x0RVhQRUNUX0VRKGNvdW50LCA0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMmIzM0OywKICAgICYjMzQ7Zm9yZ2V0X2NhY2hlZF9hY2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCB3aGVyZSBgQUNMX0RPTlRfQ0FDSEVgIGNvdWxkIGJlIGluY29ycmVjdGx5IHJlcGxhY2VkIHdpdGggYEFDTF9OT1RfQ0FDSEVEYCwgaW5hZHZlcnRlbnRseSBlbmFibGluZyBBQ0wgY2FjaGluZyBmb3IgaW5vZGVzIHRoYXQgc2hvdWxkbiYjMzk7dCBoYXZlIGl0IChlLmcuLCBGVVNFIG1vdW50cyB3aXRob3V0IGBGVVNFX1BPU0lYX0FDTGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMvQUNMIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgdG8gZW5zdXJlIEFDTCBjYWNoaW5nIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzU3NjFjZDU1ZDgyNzYwZWQ4YThmN2Y1ODhlOTcyNmNmYWJmNWEwYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDE0IDAzOjEzOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcG9zaXhfYWNsLmMgYi9mcy9wb3NpeF9hY2wuYwppbmRleCBiNGJmZTRkZGY2NGVhNS4uM2RjNjJjMWMyNzA4N2EgMTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC05Myw2ICYjNDM7OTMsMTMgQEAgc3RhdGljIHZvaWQgX19mb3JnZXRfY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICoqcCkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICpvbGQ7CiAKJiM0MzsJLyoKJiM0MzsJICogQUNMX0RPTlRfQ0FDSEUgaXMgZXhwZWN0ZWQgdG8gYmUgYSAmIzM0O2NvbnN0JiMzNDsgdmFsdWUgYW5kIHhjaGcgaXQgd2l0aAomIzQzOwkgKiBBQ0xfTk9UX0NBQ0hFRCB3b3VsZCBlbmFibGUgYWNsIGNhY2hpbmcgZm9yIHRoZSBpbm9kZSAtCiYjNDM7CSAqIGNsZWFybHkgbm90IHdoYXQgdGhlIGNhbGxlciBoYXMgaW50ZW5kZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoUkVBRF9PTkNFKCpwKSA9PSBBQ0xfRE9OVF9DQUNIRSkKJiM0MzsJCXJldHVybjsKIAlvbGQgPSB4Y2hnKHAsIEFDTF9OT1RfQ0FDSEVEKTsKIAlpZiAoIWlzX3VuY2FjaGVkX2FjbChvbGQpKQogCQlwb3NpeF9hY2xfcmVsZWFzZShvbGQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGUKaW5kZXggNjEyYWFkNjlhOTNhYTQuLmY0NzE0MTQ4NDI3NTBhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvTWFrZWZpbGUKQEAgLTUsNiAmIzQzOzUsMTMgQEAgQ0ZMQUdTICYjNDM7PSAtV2FsbCAtTzIgLWcgJChLSERSX0lOQ0xVREVTKQogVEVTVF9HRU5fUFJPR1MgOj0gZnVzZWN0bF90ZXN0CiBURVNUX0dFTl9GSUxFUyA6PSBmdXNlX21udAogCiYjNDM7IyBmdXNlX2FjbF9jYWNoZV90ZXN0IHJlcXVpcmVzIGxpYmZ1c2UzOyBhZGQgaXQgb25seSB3aGVuIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnQuCiYjNDM7QUNMX0NGTEFHUyA6PSAkKHNoZWxsIHBrZy1jb25maWcgZnVzZTMgLS1jZmxhZ3MgMiZndDsvZGV2L251bGwpCiYjNDM7QUNMX0xETElCUyA6PSAkKHNoZWxsIHBrZy1jb25maWcgZnVzZTMgLS1saWJzIDImZ3Q7L2Rldi9udWxsKQomIzQzO2lmbmVxICgkKEFDTF9DRkxBR1MpLCkKJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gZnVzZV9hY2xfY2FjaGVfdGVzdAomIzQzO2VuZGlmCiYjNDM7CiBpbmNsdWRlIC4uLy4uL2xpYi5tawogCiBWQVJfQ0ZMQUdTIDo9ICQoc2hlbGwgcGtnLWNvbmZpZyBmdXNlIC0tY2ZsYWdzIDImZ3Q7L2Rldi9udWxsKQpAQCAtMTksMyAmIzQzOzI2LDYgQEAgZW5kaWYKIAogJChPVVRQVVQpL2Z1c2VfbW50OiBDRkxBR1MgJiM0Mzs9ICQoVkFSX0NGTEFHUykKICQoT1VUUFVUKS9mdXNlX21udDogTERMSUJTICYjNDM7PSAkKFZBUl9MRExJQlMpCiYjNDM7CiYjNDM7JChPVVRQVVQpL2Z1c2VfYWNsX2NhY2hlX3Rlc3Q6IENGTEFHUyAmIzQzOz0gJChBQ0xfQ0ZMQUdTKQomIzQzOyQoT1VUUFVUKS9mdXNlX2FjbF9jYWNoZV90ZXN0OiBMRExJQlMgJiM0Mzs9ICQoQUNMX0xETElCUykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIyZTVkYjg1NTUwNDA5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMzQ4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFRlc3Q6IEZVU0UgQUNMIGNhY2hpbmcgYnVnIHRyaWdnZXJlZCBieSBBVF9TVEFUWF9GT1JDRV9TWU5DCiYjNDM7ICoKJiM0MzsgKiBBIEZVU0UgbW91bnQgdGhhdCBkb2VzIG5vdCBuZWdvdGlhdGUgRlVTRV9QT1NJWF9BQ0wgaW5pdGlhbGlzZXMgZXZlcnkgaW5vZGUKJiM0MzsgKiB3aXRoIGlfYWNsID0gaV9kZWZhdWx0X2FjbCA9IEFDTF9ET05UX0NBQ0hFLiAgV2hlbiBhIGZyZXNoIHN0YXQgaXMgbmVlZGVkCiYjNDM7ICogKGUuZy4gQVRfU1RBVFhfRk9SQ0VfU1lOQyksIGZ1c2VfdXBkYXRlX2dldF9hdHRyKCkgY2FsbHMKJiM0MzsgKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIGlzc3VpbmcgRlVTRV9HRVRBVFRSLiAgT24gYW4gdW5maXhlZCBrZXJuZWwsCiYjNDM7ICogX19mb3JnZXRfY2FjaGVkX2FjbCgpIHJlcGxhY2VzIEFDTF9ET05UX0NBQ0hFIHdpdGggQUNMX05PVF9DQUNIRUQsCiYjNDM7ICogaW5hZHZlcnRlbnRseSBlbmFibGluZyB0aGUga2VybmVsIEFDTCBjYWNoZSBmb3IgdGhhdCBpbm9kZS4gIFRoZSBuZXh0CiYjNDM7ICogZ2V0eGF0dHIgcG9wdWxhdGVzIHRoZSBjYWNoZS4gIEJlY2F1c2UgZnVzZV9zZXRfYWNsKCkgc2tpcHMKJiM0MzsgKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgZm9yICFmYy0mZ3Q7cG9zaXhfYWNsIG1vdW50cywgYW55IHN1YnNlcXVlbnQgY2hhbmdlIHRvCiYjNDM7ICogdGhlIEFDTCBsZWF2ZXMgdGhlIHN0YWxlIGtlcm5lbCBlbnRyeSBpbiBwbGFjZSwgYW5kIHRoZSBuZXh0IGdldHhhdHRyIHJldHVybnMKJiM0MzsgKiB3cm9uZyBkYXRhIHdpdGhvdXQgZXZlciByZWFjaGluZyB0aGUgRlVTRSBkYWVtb24uCiYjNDM7ICoKJiM0MzsgKiBGaXggKGZzL3Bvc2l4X2FjbC5jKTogX19mb3JnZXRfY2FjaGVkX2FjbCgpIHJldHVybnMgZWFybHkgd2hlbiAqcCBpcwomIzQzOyAqIEFDTF9ET05UX0NBQ0hFLCBwcmVzZXJ2aW5nIHRoZSAmIzM0O25ldmVyIGNhY2hlJiMzNDsgaW52YXJpYW50IGZvciB0aGUgaW5vZGUmIzM5O3MKJiM0MzsgKiBsaWZldGltZS4KJiM0MzsgKgomIzQzOyAqIFRlc3Qgb3V0bGluZToKJiM0MzsgKiAgMS4gTW91bnQgYSBtaW5pbWFsIEZVU0UgZnMgKG5vIEZVU0VfUE9TSVhfQUNMIG5lZ290aWF0ZWQpLgomIzQzOyAqICAyLiBsZ2V0eGF0dHIgLSZndDsgZGFlbW9uIGNhbGxlZCwgQUNMX0EgcmV0dXJuZWQsIE5PVCBjYWNoZWQgKEFDTF9ET05UX0NBQ0hFKS4KJiM0MzsgKiAgMy4gc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgLSZndDsgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGNhbGxlZC4KJiM0MzsgKiAgICAgQnVnZ3k6ICBBQ0xfRE9OVF9DQUNIRSAtJmd0OyBBQ0xfTk9UX0NBQ0hFRCAoY2FjaGUgZW5hYmxlZCkuCiYjNDM7ICogICAgIEZpeGVkOiAgQUNMX0RPTlRfQ0FDSEUgcHJlc2VydmVkLgomIzQzOyAqICA0LiBsZ2V0eGF0dHIgLSZndDsgZGFlbW9uIGNhbGxlZCwgQUNMX0EgcmV0dXJuZWQuCiYjNDM7ICogICAgIEJ1Z2d5OiAgcmVzdWx0IG5vdyBjYWNoZWQgKEFDTF9OT1RfQ0FDSEVEIC0mZ3Q7IGNhY2hlZCkuCiYjNDM7ICogICAgIEZpeGVkOiAgcmVzdWx0IHN0aWxsIG5vdCBjYWNoZWQuCiYjNDM7ICogIDUuIERhZW1vbiBzd2l0Y2hlcyB0byBBQ0xfQiBpbnRlcm5hbGx5IChkaWZmZXJlbnQgc2l6ZSkuCiYjNDM7ICogIDYuIGxnZXR4YXR0ciAtJmd0OyBzaG91bGQgcmV0dXJuIEFDTF9CICg0NCBieXRlcykuCiYjNDM7ICogICAgIEJ1Z2d5OiAgY2FjaGUgaGl0LCByZXR1cm5zIHN0YWxlIEFDTF9BICgyOCBieXRlcykuIEZBSUwuCiYjNDM7ICogICAgIEZpeGVkOiAgbm8gY2FjaGUsIGRhZW1vbiBjYWxsZWQsIHJldHVybnMgQUNMX0IgKDQ0IGJ5dGVzKS4gUEFTUy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zeXNjYWxsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy94YXR0ci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEZVU0VfVVNFX1ZFUlNJT04gMzEKJiM0MzsjaW5jbHVkZSAmbHQ7ZnVzZV9sb3dsZXZlbC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiYjNDM7CiYjNDM7LyogLS0tLSBBQ0wgYmluYXJ5IGVuY29kaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwomIzQzOy8qCiYjNDM7ICogUE9TSVggQUNMIHYyIHhhdHRyIGZvcm1hdCAobGl0dGxlLWVuZGlhbik6CiYjNDM7ICogICBoZWFkZXI6IHUzMiB2ZXJzaW9uICg9IDB4MDAwMDAwMDIpCiYjNDM7ICogICBlbnRyeTogIHUxNiB0YWcgfCB1MTYgcGVybSB8IHUzMiBpZAomIzQzOyAqCiYjNDM7ICogRW50cmllcyBtdXN0IGFwcGVhciBpbiB0YWctYXNjZW5kaW5nIG9yZGVyOyBuYW1lZCBVU0VSL0dST1VQIGVudHJpZXMKJiM0MzsgKiByZXF1aXJlIGEgTUFTSyBlbnRyeS4gIEJvdGggQUNMcyBwYXNzIHBvc2l4X2FjbF9mcm9tX3hhdHRyKCkgdmFsaWRhdGlvbi4KJiM0MzsgKi8KJiM0MzsKJiM0MzsvKiBBQ0xfQTogMyBlbnRyaWVzIChVU0VSX09CSjpyd3gsIEdST1VQX09CSjpyLXgsIE9USEVSOnIteCkgPSAyOCBieXRlcyAqLwomIzQzO3N0YXRpYyBjb25zdCB1aW50OF90IGFjbF9hW10gPSB7CiYjNDM7CTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHYyIGhlYWRlciAgICAgICovCiYjNDM7CTB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIFVTRVJfT0JKICByd3ggICovCiYjNDM7CTB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIEdST1VQX09CSiByLXggICovCiYjNDM7CTB4MjAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIE9USEVSICAgICByLXggICovCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFDTF9COiA1IGVudHJpZXMg4oCUIGFkZHMgVVNFUiB1aWQ9MSBhbmQgTUFTSyA9IDQ0IGJ5dGVzLgomIzQzOyAqIEEgbmFtZWQgVVNFUiBlbnRyeSByZXF1aXJlcyBhIE1BU0s7IGFsbCB0YWdzIGluIGFzY2VuZGluZyBvcmRlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdWludDhfdCBhY2xfYltdID0gewomIzQzOwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2MiBoZWFkZXIgICAgICAgKi8KJiM0MzsJMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogVVNFUl9PQkogICByd3ggICovCiYjNDM7CTB4MDIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIFVTRVIgdWlkPTEgcnd4ICAqLwomIzQzOwkweDA0LCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBHUk9VUF9PQkogIHIteCAgKi8KJiM0MzsJMHgxMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogTUFTSyAgICAgICByd3ggICovCiYjNDM7CTB4MjAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIE9USEVSICAgICAgci14ICAqLwomIzQzO307CiYjNDM7CiYjNDM7LyogLS0tLSBTaGFyZWQgc3RhdGUgKGRhZW1vbiB0aHJlYWQgJmx0Oy0mZ3Q7IHRlc3QgdGhyZWFkKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwomIzQzOwomIzQzOyNkZWZpbmUgRklMRV9JTk8gIDIKJiM0MzsjZGVmaW5lIEZJTEVfTkFNRSAmIzM0O3Rlc3RmaWxlJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgZGFlbW9uX3N0YXRlIHsKJiM0MzsJcHRocmVhZF9tdXRleF90IGxvY2s7CiYjNDM7CWNvbnN0IHVpbnQ4X3QgICphY2w7CiYjNDM7CXNpemVfdCAgICAgICAgICBhY2xfc2l6ZTsKJiM0MzsJaW50ICAgICAgICAgICAgIGdldHhhdHRyX2NvdW50OwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBHbG9iYWw6IGNhbGxiYWNrcyBhcmUgc3RhdGVsZXNzIGZucyBzbyB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsLgomIzQzOyAqIFNhZmUgYmVjYXVzZSBvbmx5IG9uZSB0ZXN0IGluc3RhbmNlIHJ1bnMgYXQgYSB0aW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGFlbW9uX3N0YXRlIGdfZHMgPSB7CiYjNDM7CS5sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIC0tLS0gRlVTRSBsb3dsZXZlbCBjYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBmc19sb29rdXAoZnVzZV9yZXFfdCByZXEsIGZ1c2VfaW5vX3QgcGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJaWYgKHBhcmVudCAhPSBGVVNFX1JPT1RfSUQgfHwgc3RyY21wKG5hbWUsIEZJTEVfTkFNRSkpIHsKJiM0MzsJCWZ1c2VfcmVwbHlfZXJyKHJlcSwgRU5PRU5UKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlzdHJ1Y3QgZnVzZV9lbnRyeV9wYXJhbSBlID0ge307CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIExvbmcgYXR0ci9lbnRyeSB0aW1lb3V0cyBzbyB0aGF0IG5vcm1hbCBzdGF0KCkgY2FsbHMgZG8gbm90CiYjNDM7CSAqIGV4cGlyZSBhbmQgdHJpZ2dlciBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgb24gdGhlaXIgb3duOwomIzQzOwkgKiBvbmx5IHRoZSBleHBsaWNpdCBBVF9TVEFUWF9GT1JDRV9TWU5DIHNob3VsZCB0cmlnZ2VyIGl0LgomIzQzOwkgKi8KJiM0MzsJZS5pbm8gICAgICAgICAgICAgPSBGSUxFX0lOTzsKJiM0MzsJZS5nZW5lcmF0aW9uICAgICAgPSAxOwomIzQzOwllLmF0dHJfdGltZW91dCAgICA9IDEwLjA7CiYjNDM7CWUuZW50cnlfdGltZW91dCAgID0gMTAuMDsKJiM0MzsJZS5hdHRyLnN0X2lubyAgICAgPSBGSUxFX0lOTzsKJiM0MzsJZS5hdHRyLnN0X21vZGUgICAgPSBTX0lGUkVHIHwgMDY0NDsKJiM0MzsJZS5hdHRyLnN0X25saW5rICAgPSAxOwomIzQzOwlmdXNlX3JlcGx5X2VudHJ5KHJlcSwgJmFtcDtlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZnNfZ2V0YXR0cihmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBpbm8sCiYjNDM7CQkgICAgICAgc3RydWN0IGZ1c2VfZmlsZV9pbmZvICpmaSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdGF0IHN0ID0ge307CiYjNDM7CiYjNDM7CSh2b2lkKWZpOwomIzQzOwlpZiAoaW5vID09IEZVU0VfUk9PVF9JRCkgewomIzQzOwkJc3Quc3RfaW5vICAgPSBGVVNFX1JPT1RfSUQ7CiYjNDM7CQlzdC5zdF9tb2RlICA9IFNfSUZESVIgfCAwNzU1OwomIzQzOwkJc3Quc3RfbmxpbmsgPSAyOwomIzQzOwl9IGVsc2UgaWYgKGlubyA9PSBGSUxFX0lOTykgewomIzQzOwkJc3Quc3RfaW5vICAgPSBGSUxFX0lOTzsKJiM0MzsJCXN0LnN0X21vZGUgID0gU19JRlJFRyB8IDA2NDQ7CiYjNDM7CQlzdC5zdF9ubGluayA9IDE7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmdXNlX3JlcGx5X2VycihyZXEsIEVOT0VOVCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJZnVzZV9yZXBseV9hdHRyKHJlcSwgJmFtcDtzdCwgMTApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBmc19nZXR4YXR0cihmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBpbm8sIGNvbnN0IGNoYXIgKm5hbWUsCiYjNDM7CQkJc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlpZiAoaW5vICE9IEZJTEVfSU5PIHx8CiYjNDM7CSAgICBzdHJjbXAobmFtZSwgJiMzNDtzeXN0ZW0ucG9zaXhfYWNsX2FjY2VzcyYjMzQ7KSAhPSAwKSB7CiYjNDM7CQlmdXNlX3JlcGx5X2VycihyZXEsIEVOT0RBVEEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO2dfZHMubG9jayk7CiYjNDM7CWNvbnN0IHVpbnQ4X3QgKmFjbCAgICAgID0gZ19kcy5hY2w7CiYjNDM7CXNpemVfdCAgICAgICAgIGFjbF9zaXplID0gZ19kcy5hY2xfc2l6ZTsKJiM0MzsJZ19kcy5nZXR4YXR0cl9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7Z19kcy5sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMCkKJiM0MzsJCWZ1c2VfcmVwbHlfeGF0dHIocmVxLCBhY2xfc2l6ZSk7CiYjNDM7CWVsc2UgaWYgKHNpemUgJmx0OyBhY2xfc2l6ZSkKJiM0MzsJCWZ1c2VfcmVwbHlfZXJyKHJlcSwgRVJBTkdFKTsKJiM0MzsJZWxzZQomIzQzOwkJZnVzZV9yZXBseV9idWYocmVxLCAoY29uc3QgY2hhciAqKWFjbCwgYWNsX3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZ1c2VfbG93bGV2ZWxfb3BzIGZzX29wcyA9IHsKJiM0MzsJLmxvb2t1cCAgID0gZnNfbG9va3VwLAomIzQzOwkuZ2V0YXR0ciAgPSBmc19nZXRhdHRyLAomIzQzOwkuZ2V0eGF0dHIgPSBmc19nZXR4YXR0ciwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIC0tLS0gRGFlbW9uIHRocmVhZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnJ1bl9kYWVtb24odm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJZnVzZV9zZXNzaW9uX2xvb3AoKHN0cnVjdCBmdXNlX3Nlc3Npb24gKilhcmcpOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogLS0tLSBrc2VsZnRlc3QgaGFybmVzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztGSVhUVVJFKGFjbF9jYWNoZSkgewomIzQzOwlzdHJ1Y3QgZnVzZV9zZXNzaW9uICpzZTsKJiM0MzsJY2hhciAgICAgICAgICAgICAgICAgbW91bnRwb2ludFtQQVRIX01BWF07CiYjNDM7CWNoYXIgICAgICAgICAgICAgICAgIGZpbGVfcGF0aFtQQVRIX01BWF07CiYjNDM7CXB0aHJlYWRfdCAgICAgICAgICAgIHRocmVhZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoYWNsX2NhY2hlKQomIzQzO3sKJiM0MzsJY2hhciAqZnVzZV9hcmd2W10gPSB7ICYjMzQ7ZnVzZV9hY2xfY2FjaGVfdGVzdCYjMzQ7LCBOVUxMIH07CiYjNDM7CXN0cnVjdCBmdXNlX2FyZ3MgYXJncyA9IEZVU0VfQVJHU19JTklUKDEsIGZ1c2VfYXJndik7CiYjNDM7CiYjNDM7CWdfZHMuYWNsICAgICAgICAgICAgPSBhY2xfYTsKJiM0MzsJZ19kcy5hY2xfc2l6ZSAgICAgICA9IHNpemVvZihhY2xfYSk7CiYjNDM7CWdfZHMuZ2V0eGF0dHJfY291bnQgPSAwOwomIzQzOwomIzQzOwlzdHJjcHkoc2VsZi0mZ3Q7bW91bnRwb2ludCwgJiMzNDsvdG1wL2FjbF9jYWNoZV90ZXN0X1hYWFhYWCYjMzQ7KTsKJiM0MzsJaWYgKCFta2R0ZW1wKHNlbGYtJmd0O21vdW50cG9pbnQpKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bWtkdGVtcDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsKJiM0MzsJc25wcmludGYoc2VsZi0mZ3Q7ZmlsZV9wYXRoLCBzaXplb2Yoc2VsZi0mZ3Q7ZmlsZV9wYXRoKSwKJiM0MzsJCSAmIzM0OyVzLyYjMzQ7IEZJTEVfTkFNRSwgc2VsZi0mZ3Q7bW91bnRwb2ludCk7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O3NlID0gZnVzZV9zZXNzaW9uX25ldygmYW1wO2FyZ3MsICZhbXA7ZnNfb3BzLCBzaXplb2YoZnNfb3BzKSwgTlVMTCk7CiYjNDM7CWlmICghc2VsZi0mZ3Q7c2UpIHsKJiM0MzsJCXJtZGlyKHNlbGYtJmd0O21vdW50cG9pbnQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7ZnVzZV9zZXNzaW9uX25ldyBmYWlsZWQmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZ1c2Vfc2Vzc2lvbl9tb3VudChzZWxmLSZndDtzZSwgc2VsZi0mZ3Q7bW91bnRwb2ludCkpIHsKJiM0MzsJCWZ1c2Vfc2Vzc2lvbl9kZXN0cm95KHNlbGYtJmd0O3NlKTsKJiM0MzsJCXJtZGlyKHNlbGYtJmd0O21vdW50cG9pbnQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7ZnVzZV9zZXNzaW9uX21vdW50IGZhaWxlZCAmIzM0OwomIzQzOwkJCSAgICAgJiMzNDsobWlzc2luZyBmdXNlcm1vdW50MyBvciBpbnN1ZmZpY2llbnQgcHJpdmlsZWdlcykmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHB0aHJlYWRfY3JlYXRlKCZhbXA7c2VsZi0mZ3Q7dGhyZWFkLCBOVUxMLCBydW5fZGFlbW9uLCBzZWxmLSZndDtzZSkpIHsKJiM0MzsJCWZ1c2Vfc2Vzc2lvbl91bm1vdW50KHNlbGYtJmd0O3NlKTsKJiM0MzsJCWZ1c2Vfc2Vzc2lvbl9kZXN0cm95KHNlbGYtJmd0O3NlKTsKJiM0MzsJCXJtZGlyKHNlbGYtJmd0O21vdW50cG9pbnQpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7cHRocmVhZF9jcmVhdGU6ICVzJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZnVzZV9vcHRfZnJlZV9hcmdzKCZhbXA7YXJncyk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04oYWNsX2NhY2hlKQomIzQzO3sKJiM0MzsJZnVzZV9zZXNzaW9uX2V4aXQoc2VsZi0mZ3Q7c2UpOwomIzQzOwlmdXNlX3Nlc3Npb25fdW5tb3VudChzZWxmLSZndDtzZSk7CiYjNDM7CXB0aHJlYWRfam9pbihzZWxmLSZndDt0aHJlYWQsIE5VTEwpOwomIzQzOwlmdXNlX3Nlc3Npb25fZGVzdHJveShzZWxmLSZndDtzZSk7CiYjNDM7CXJtZGlyKHNlbGYtJmd0O21vdW50cG9pbnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRvX2ZvcmNlX3N0YXR4KGNvbnN0IGNoYXIgKnBhdGgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3RhdHggc3R4OwomIzQzOwomIzQzOwlyZXR1cm4gc3lzY2FsbChTWVNfc3RhdHgsIEFUX0ZEQ1dELCBwYXRoLAomIzQzOwkJICAgICAgIEFUX1NUQVRYX0ZPUkNFX1NZTkMsIFNUQVRYX0JBU0lDX1NUQVRTLCAmYW1wO3N0eCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihhY2xfY2FjaGUsIHN0YWxlX2FmdGVyX2ZvcmNlX3N5bmMpCiYjNDM7ewomIzQzOwljaGFyICAgIGJ1Zls1MTJdOwomIzQzOwlzc2l6ZV90IHN6OwomIzQzOwlpbnQgICAgIGNvdW50OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTdGVwIDE6IHR3byBnZXR4YXR0ciBjYWxscyBiZWZvcmUgYW55IHN0YXR4KEZPUkNFX1NZTkMpLgomIzQzOwkgKiBpX2FjbCA9PSBBQ0xfRE9OVF9DQUNIRS4gIF9fZ2V0X2FjbCYjMzk7cyBjbXB4Y2hnKHAsIEFDTF9OT1RfQ0FDSEVELAomIzQzOwkgKiBzZW50aW5lbCkgZmluZHMgKnAgIT0gQUNMX05PVF9DQUNIRUQgb24gZXZlcnkgY2FsbCwgc28gdGhlIHNlbnRpbmVsCiYjNDM7CSAqIGlzIG5ldmVyIHBsYWNlZCBhbmQgdGhlIHJlc3VsdCBpcyBuZXZlciBjYWNoZWQuICBCb3RoIGNhbGxzIG11c3QKJiM0MzsJICogcmVhY2ggdGhlIGRhZW1vbiwgcHJvdmluZyBBQ0xfRE9OVF9DQUNIRSBzdXBwcmVzc2VzIGNhY2hpbmcuCiYjNDM7CSAqLwomIzQzOwlzeiA9IGxnZXR4YXR0cihzZWxmLSZndDtmaWxlX3BhdGgsICYjMzQ7c3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3MmIzM0OywKJiM0MzsJCSAgICAgICBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJQVNTRVJUX0VRKHN6LCAoc3NpemVfdClzaXplb2YoYWNsX2EpKTsKJiM0MzsKJiM0MzsJc3ogPSBsZ2V0eGF0dHIoc2VsZi0mZ3Q7ZmlsZV9wYXRoLCAmIzM0O3N5c3RlbS5wb3NpeF9hY2xfYWNjZXNzJiMzNDssCiYjNDM7CQkgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CUFTU0VSVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9hKSk7CiYjNDM7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO2dfZHMubG9jayk7CiYjNDM7CWNvdW50ID0gZ19kcy5nZXR4YXR0cl9jb3VudDsKJiM0MzsJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtnX2RzLmxvY2spOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoY291bnQsIDIpOwomIzQzOwlUSF9MT0coJiMzNDtzdGVwIDEgT0s6IGJvdGggcHJlLXRyaWdnZXIgZ2V0eGF0dHJzIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksICYjMzQ7CiYjNDM7CSAgICAgICAmIzM0O0FDTF9ET05UX0NBQ0hFIGlzIHdvcmtpbmcmIzM0OywgY291bnQpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTdGVwIDI6IHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpLgomIzQzOwkgKiBmdXNlX3VwZGF0ZV9nZXRfYXR0cigpIGNhbGxzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSBiZWZvcmUgc2VuZGluZwomIzQzOwkgKiBGVVNFX0dFVEFUVFIuCiYjNDM7CSAqICAgQnVnZ3kga2VybmVsOiAgQUNMX0RPTlRfQ0FDSEUgLSZndDsgQUNMX05PVF9DQUNIRUQgIChjYWNoZSBlbmFibGVkKQomIzQzOwkgKiAgIEZpeGVkIGtlcm5lbDogIEFDTF9ET05UX0NBQ0hFIHByZXNlcnZlZCAgICAgICAgICAgKG5vIGVmZmVjdCkKJiM0MzsJICovCiYjNDM7CUFTU0VSVF9FUShkb19mb3JjZV9zdGF0eChzZWxmLSZndDtmaWxlX3BhdGgpLCAwKTsKJiM0MzsJVEhfTE9HKCYjMzQ7c3RlcCAyIE9LOiBzdGF0eChBVF9TVEFUWF9GT1JDRV9TWU5DKSBzdWNjZWVkZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN0ZXAgMzogZ2V0eGF0dHIg4oCUIGNhY2hlIHBvcHVsYXRpb24gYXR0ZW1wdCBhZnRlciB0aGUgdHJpZ2dlci4KJiM0MzsJICogICBCdWdneTogICpwID09IEFDTF9OT1RfQ0FDSEVEIC0mZ3Q7IHNlbnRpbmVsIHBsYWNlZCAtJmd0OyBmdXNlX2dldF9pbm9kZV9hY2wKJiM0MzsJICogICAgICAgICAgIGNhbGxlZCAtJmd0OyBBQ0xfQSBwYXJzZWQgYW5kIHN0b3JlZCBpbiB0aGUga2VybmVsIGNhY2hlLgomIzQzOwkgKiAgIEZpeGVkOiAgKnAgPT0gQUNMX0RPTlRfQ0FDSEUgLSZndDsgc2VudGluZWwgcGxhY2VtZW50IHNraXBwZWQgLSZndDsKJiM0MzsJICogICAgICAgICAgIGZ1c2VfZ2V0X2lub2RlX2FjbCBjYWxsZWQgYnV0IHJlc3VsdCBub3QgY2FjaGVkLgomIzQzOwkgKiBFaXRoZXIgd2F5IHRoZSBjb3JyZWN0IEFDTF9BIGlzIHJldHVybmVkIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlzeiA9IGxnZXR4YXR0cihzZWxmLSZndDtmaWxlX3BhdGgsICYjMzQ7c3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3MmIzM0OywKJiM0MzsJCSAgICAgICBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJQVNTRVJUX0VRKHN6LCAoc3NpemVfdClzaXplb2YoYWNsX2EpKTsKJiM0MzsKJiM0MzsJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7Z19kcy5sb2NrKTsKJiM0MzsJY291bnQgPSBnX2RzLmdldHhhdHRyX2NvdW50OwomIzQzOwlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO2dfZHMubG9jayk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShjb3VudCwgMyk7CiYjNDM7CVRIX0xPRygmIzM0O3N0ZXAgMyBPSzogcG9zdC10cmlnZ2VyIGdldHhhdHRyIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksICYjMzQ7CiYjNDM7CSAgICAgICAmIzM0O3JldHVybmVkIGNvcnJlY3QgQUNMX0EgKCV6ZCBieXRlcykmIzM0OywgY291bnQsIHN6KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU3RlcCA0OiBzd2l0Y2ggZGFlbW9uIHRvIEFDTF9CIChkaWZmZXJlbnQgc2l6ZTogNDQgdnMgMjggYnl0ZXMpLgomIzQzOwkgKiBTaW11bGF0ZXMgYW4gQUNMIGNoYW5nZSB0aGF0IGZ1c2Vfc2V0X2FjbCgpIHdvdWxkIE5PVCBpbnZhbGlkYXRlIGZvcgomIzQzOwkgKiAhZmMtJmd0O3Bvc2l4X2FjbCBtb3VudHMgKGl0IHNraXBzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMgaW4gdGhhdCBjYXNlKS4KJiM0MzsJICogT24gYSBmaXhlZCBrZXJuZWwgdGhlIEFDTCB3YXMgbmV2ZXIgY2FjaGVkLCBzbyB0aGlzIGlzIG1vb3QuCiYjNDM7CSAqLwomIzQzOwlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtnX2RzLmxvY2spOwomIzQzOwlnX2RzLmFjbCAgICAgID0gYWNsX2I7CiYjNDM7CWdfZHMuYWNsX3NpemUgPSBzaXplb2YoYWNsX2IpOwomIzQzOwlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO2dfZHMubG9jayk7CiYjNDM7CVRIX0xPRygmIzM0O3N0ZXAgNDogZGFlbW9uIHN3aXRjaGVkIHRvIEFDTF9CICglenUgYnl0ZXMpJiMzNDssIHNpemVvZihhY2xfYikpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTdGVwIDU6IGdldHhhdHRyIOKAlCB0aGUgZGVjaXNpdmUgY2hlY2suCiYjNDM7CSAqICAgQnVnZ3kga2VybmVsOiAgY2FjaGUgaGl0IC0mZ3Q7IHN0YWxlIEFDTF9BICgyOCBieXRlcyksIGNvdW50IHN0YXlzIDMuCiYjNDM7CSAqICAgRml4ZWQga2VybmVsOiAgbm8gY2FjaGUgLSZndDsgZGFlbW9uIGNhbGxlZCAtJmd0OyBBQ0xfQiAoNDQgYnl0ZXMpLCBjb3VudCA0LgomIzQzOwkgKi8KJiM0MzsJc3ogPSBsZ2V0eGF0dHIoc2VsZi0mZ3Q7ZmlsZV9wYXRoLCAmIzM0O3N5c3RlbS5wb3NpeF9hY2xfYWNjZXNzJiMzNDssCiYjNDM7CQkgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO2dfZHMubG9jayk7CiYjNDM7CWNvdW50ID0gZ19kcy5nZXR4YXR0cl9jb3VudDsKJiM0MzsJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtnX2RzLmxvY2spOwomIzQzOwomIzQzOwlpZiAoc3ogPT0gKHNzaXplX3Qpc2l6ZW9mKGFjbF9hKSkKJiM0MzsJCVRIX0xPRygmIzM0O3N0ZXAgNSBCVUc6IHN0YWxlIEFDTF9BICglemQgYnl0ZXMpIGZyb20ga2VybmVsIGNhY2hlICYjMzQ7CiYjNDM7CQkgICAgICAgJiMzNDsoY291bnQ9JWQpOyBBQ0xfRE9OVF9DQUNIRSBjb3JydXB0ZWQgYnkgJiMzNDsKJiM0MzsJCSAgICAgICAmIzM0O2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSYjMzQ7LCBzeiwgY291bnQpOwomIzQzOwllbHNlCiYjNDM7CQlUSF9MT0coJiMzNDtzdGVwIDUgT0s6IGRhZW1vbiByZWFjaGVkIChjb3VudD0lZCksICYjMzQ7CiYjNDM7CQkgICAgICAgJiMzNDtmcmVzaCBBQ0xfQiAoJXpkIGJ5dGVzKSYjMzQ7LCBjb3VudCwgc3opOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc3osIChzc2l6ZV90KXNpemVvZihhY2xfYikpOwomIzQzOwlFWFBFQ1RfRVEoY291bnQsIDQpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDE5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZnMvcG9zaXhfYWNsLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvcG9zaXhfYWNsLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCBmdW5jdGlvbi4gVGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIFZGUyBhbmQgQUNMIGhhbmRsaW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHkuCgpCYXNpY2FsbHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGlmIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IGBwYCAod2hpY2gsIGFzIEkgcmVjYWxsLCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgY2FjaGVkIEFDTCBzdGF0dXMpIGlzIGFscmVhZHkgYEFDTF9ET05UX0NBQ0hFYCwgaXQgaW1tZWRpYXRlbHkgcmV0dXJucy4gVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhlIHJhdGlvbmFsZSwgd2hpY2ggaXMgY3J1Y2lhbCBoZXJlLiBUaGV5IGFyZSBjb25jZXJuZWQgdGhhdCBgeGNoZ2BpbmcgYEFDTF9ET05UX0NBQ0hFYCAod2hpY2ggaXMsIGJ5IGRlZmluaXRpb24sIGludGVuZGVkIHRvIGJlIGEgKmNvbnN0YW50KiBtZWFuaW5nIHRoYXQgdGhlIEFDTCAqc2hvdWxkbiYjMzk7dCogYmUgY2FjaGVkKSB3aXRoIGBBQ0xfTk9UX0NBQ0hFRGAgKG1lYW5pbmcgdGhlIEFDTCAqaXNuJiMzOTt0KiBjYWNoZWQpIHdvdWxkIGluYWR2ZXJ0ZW50bHkgKmVuYWJsZSogY2FjaGluZyB3aGVuIHRoZSBpbnRlbnRpb24gaXMgdGhlIG9wcG9zaXRlLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGB4Y2hnYCBjYW4gYmUgYSBibHVudCB0b29sLCBhbmQgd2Ugd291bGRuJiMzOTt0IHdhbnQgdG8gYWNjaWRlbnRhbGx5IGZsaXAgYSBjcnVjaWFsIGZsYWcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgcHJpbWFyaWx5IGltcGFjdHMgZmlsZXN5c3RlbXMgdGhhdCBkZWxpYmVyYXRlbHkgKmF2b2lkKiBjYWNoaW5nIEFDTHMsIHdoaWNoLCBhcyB0aGUgdGV4dCBub3Rlcywgd2lsbCBkZWZpbml0ZWx5IGluY2x1ZGUgRlVTRSB3aXRob3V0IGBGVVNFX1BPU0lYX0FDTGAuIEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUsIGJ1dCBuYXN0eSwgYnVncyBpZiB3ZSB3ZXJlIHRvIGluYWR2ZXJ0ZW50bHkgZW5hYmxlIGNhY2hpbmcgd2hlbiBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZGlzYWJsZWQuIFNvLCB0aGUgZml4IG1ha2VzIHNlbnNlLgoKTm93LCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgX19mb3JnZXRfY2FjaGVkX2FjbGAgaW4gYGZzL3Bvc2l4X2FjbC5jYCB0byBzZWUgaWYgbXkgbWVudGFsIG1vZGVsIGlzIGNvcnJlY3QuIEkgd2FudCB0byB0cmFjZSB0aGUgY29kZSB0byBiZSAxMDAlIHN1cmUgdGhpcyBsb2dpYyBhcHBsaWVzIHdoZXJlIEkgdGhpbmsgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvcmdldF9jYWNoZWRfYWNsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Bvc2l4X2FjbC5jPTkwPUVYUE9SVF9TWU1CT0woc2V0X2NhY2hlZF9hY2wpO1xuZnMvcG9zaXhfYWNsLmMtOTEtXG5mcy9wb3NpeF9hY2wuYzo5MjpzdGF0aWMgdm9pZCBfX2ZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKipwKVxuZnMvcG9zaXhfYWNsLmMtOTMte1xuLS1cbmZzL3Bvc2l4X2FjbC5jPTEwOD12b2lkIGZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKVxuZnMvcG9zaXhfYWNsLmMtMTA5LXtcbmZzL3Bvc2l4X2FjbC5jOjExMDpcdF9fZm9yZ2V0X2NhY2hlZF9hY2woYWNsX2J5X3R5cGUoaW5vZGUsIHR5cGUpKTtcbmZzL3Bvc2l4X2FjbC5jLTExMS19XG4tLVxuZnMvcG9zaXhfYWNsLmM9MTE0PXZvaWQgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvcG9zaXhfYWNsLmMtMTE1LXtcbmZzL3Bvc2l4X2FjbC5jOjExNjpcdF9fZm9yZ2V0X2NhY2hlZF9hY2woXHUwMDI2aW5vZGUtXHUwMDNlaV9hY2wpO1xuZnMvcG9zaXhfYWNsLmM6MTE3Olx0X19mb3JnZXRfY2FjaGVkX2FjbChcdTAwMjZpbm9kZS1cdTAwM2VpX2RlZmF1bHRfYWNsKTtcbmZzL3Bvc2l4X2FjbC5jLTExOC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtOC0gKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIGlzc3VpbmcgRlVTRV9HRVRBVFRSLiAgT24gYW4gdW5maXhlZCBrZXJuZWwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzo5OiAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTAtICogaW5hZHZlcnRlbnRseSBlbmFibGluZyB0aGUga2VybmVsIEFDTCBjYWNoZSBmb3IgdGhhdCBpbm9kZS4gIFRoZSBuZXh0XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTUtICpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjE2OiAqIEZpeCAoZnMvcG9zaXhfYWNsLmMpOiBfX2ZvcmdldF9jYWNoZWRfYWNsKCkgcmV0dXJucyBlYXJseSB3aGVuICpwIGlzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0xNy0gKiBBQ0xfRE9OVF9DQUNIRSwgcHJlc2VydmluZyB0aGUgXCYjMzQ7bmV2ZXIgY2FjaGVcJiMzNDsgaW52YXJpYW50IGZvciB0aGUgaW5vZGUmIzM5O3NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjYwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gQUNMIGNhY2hpbmcsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgY2FsbGVkIGJ5IGBmb3JnZXRfY2FjaGVkX2FjbGAgYW5kIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCwgc28gdGhvc2UgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgcGF0aHMuIEdvb2QuIEl0JiMzOTtzIGFsc28gYWRkaW5nIGEgc2VsZnRlc3QgZm9yIEZVU0Ug4oCTIGltcG9ydGFudCBmb3IgZW5zdXJpbmcgZnVuY3Rpb25hbGl0eSBhZnRlciB0aGUgY2hhbmdlLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMb29rcyBsaWtlIGBmcy9wb3NpeF9hY2wuY2AgaXMgdGhlIGtleSBmaWxlIGhlcmUsIGFuZCBpdOKAmXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0ZTX1BPU0lYX0FDTGAgaXMgZW5hYmxlZC4gVGltZSB0byBjb25maXJtIHRoYXQsIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgaW50ZXJhY3Rpb25zIG9yIHVuZXhwZWN0ZWQgY29uZGl0aW9uYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bvc2l4X2FjbC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GU19NQkNBQ0hFKVx0JiM0Mzs9IG1iY2FjaGUub1xuZnMvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0ZTX1BPU0lYX0FDTClcdCYjNDM7PSBwb3NpeF9hY2wub1xuZnMvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX05GU19DT01NT04pXHQmIzQzOz0gbmZzX2NvbW1vbi9cbi0tXG5mcy9wb3NpeF9hY2wuYz03MzU9c3RhdGljIGludCBwb3NpeF9hY2xfZml4X3hhdHRyX2NvbW1vbihjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4tLVxuZnMvcG9zaXhfYWNsLmMtNzc2LSAqXG5mcy9wb3NpeF9hY2wuYzo3Nzc6ICogUmV0dXJuOiBBbGxvY2F0ZWQgc3RydWN0IHBvc2l4X2FjbCBvbiBzdWNjZXNzLCBOVUxMIGZvciBhIHZhbGlkIGhlYWRlciBidXRcbmZzL3Bvc2l4X2FjbC5jLTc3OC0gKiAgICAgICAgIHdpdGhvdXQgYWN0dWFsIFBPU0lYIEFDTCBlbnRyaWVzLCBvciBFUlJfUFRSKCkgZW5jb2RlZCBlcnJvciBjb2RlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3NpeCBBQ0wgQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19GU19QT1NJWF9BQ0xgLCByaWdodD8gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4gVGhlIHRlc3QgZnJhbWV3b3JrIGxldmVyYWdlcyBGVVNFLCB3aGljaCBpbW1lZGlhdGVseSBtYWRlIG1lIHRoaW5rIGFib3V0IGBDT05GSUdfRlVTRV9GU2AgYW5kIHBvdGVudGlhbGx5IGZ1enppbmcgRlVTRSBwYXRocy4gSG93ZXZlciwgdGhlIHJvb3QgY2F1c2UgaXMgZmlybWx5IHdpdGhpbiBgZnMvcG9zaXhfYWNsLmNgLgoKQWhhLCBgQ09ORklHX0ZTX1BPU0lYX0FDTGAgaXMgbW9yZSBmdW5kYW1lbnRhbCB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQ7IGl04oCZcyBhIGNvcmUgY29uZmlnIG9wdGlvbiwgb2Z0ZW4gaW5kaXJlY3RseSBzZWxlY3RlZCBieSBvdGhlciBmaWxlIHN5c3RlbXMuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQuCgpOb3csIG15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2luY2UgYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGlzIHN0YXRpYywgbXkgYXR0ZW50aW9uIG5lZWRzIHRvIGJlIG9uIGBmb3JnZXRfY2FjaGVkX2FjbGAgYW5kIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYC4gSeKAmW0gYWxzbyBnb2luZyB0byBub3RlIHRoYXQgYGZ1c2VfdXBkYXRlX2dldF9hdHRyYCBpcyBwb3RlbnRpYWxseSBhIHRyaWdnZXIgZnVuY3Rpb24sIHNpbmNlIGl04oCZcyByZWxhdGVkLgoKV2FpdCwgdG8gYmUgY2xlYXIsIHRoZSBidWcgaXMgd2l0aGluIHRoZSBzdGF0aWMgZnVuY3Rpb24gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGl0c2VsZiwgYnV0IHRoYXTigJlzIGNhbGxlZCBieSBgZm9yZ2V0X2NhY2hlZF9hY2xgIGFuZCBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AsIHNvIG15IGRpcmVjdCBmb2N1cyBpcyBvbiB0aG9zZS4KCk5vdywgSSYjMzk7bGwgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGNoZWNraW5nIHRoZSBjYWxsZXJzIG9mIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb3JnZXRfYWxsX2NhY2hlZF9hY2xzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NlcGgvY2Fwcy5jPTM0ODg9c3RhdGljIHZvaWQgaGFuZGxlX2NhcF9ncmFudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2NlcGgvY2Fwcy5jLTM2MjAtXHRcdFx0Y2ktXHUwMDNlaV94YXR0cnMudmVyc2lvbiA9IHZlcnNpb247XG5mcy9jZXBoL2NhcHMuYzozNjIxOlx0XHRcdGNlcGhfZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XG5mcy9jZXBoL2NhcHMuYy0zNjIyLVx0XHRcdGNlcGhfc2VjdXJpdHlfaW52YWxpZGF0ZV9zZWNjdHgoaW5vZGUpO1xuLS1cbmZzL2NlcGgvaW5vZGUuYz0xMDEzPWludCBjZXBoX2ZpbGxfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKmxvY2tlZF9wYWdlLFxuLS1cbmZzL2NlcGgvaW5vZGUuYy0xMjM4LVx0XHRjaS1cdTAwM2VpX3hhdHRycy52ZXJzaW9uID0gbGU2NF90b19jcHUoaW5mby1cdTAwM2V4YXR0cl92ZXJzaW9uKTtcbmZzL2NlcGgvaW5vZGUuYzoxMjM5Olx0XHRjZXBoX2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xuZnMvY2VwaC9pbm9kZS5jLTEyNDAtXHRcdGNlcGhfc2VjdXJpdHlfaW52YWxpZGF0ZV9zZWNjdHgoaW5vZGUpO1xuLS1cbmZzL2NlcGgvc3VwZXIuaD0xMjMyPXZvaWQgY2VwaF9pbml0X2lub2RlX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9jZXBoL3N1cGVyLmgtMTIzNC1cbmZzL2NlcGgvc3VwZXIuaDoxMjM1OnN0YXRpYyBpbmxpbmUgdm9pZCBjZXBoX2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2NlcGgvc3VwZXIuaC0xMjM2LXtcbmZzL2NlcGgvc3VwZXIuaDoxMjM3OiAgICAgICBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcbmZzL2NlcGgvc3VwZXIuaC0xMjM4LX1cbi0tXG5mcy9jZXBoL3N1cGVyLmg9MTI1MD1zdGF0aWMgaW5saW5lIHZvaWQgY2VwaF9pbml0X2lub2RlX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9jZXBoL3N1cGVyLmgtMTI1NC1cbmZzL2NlcGgvc3VwZXIuaDoxMjU1OnN0YXRpYyBpbmxpbmUgdm9pZCBjZXBoX2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2NlcGgvc3VwZXIuaC0xMjU2LXtcbi0tXG5mcy9mdXNlL2FjbC5jPTkzPWludCBmdXNlX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9mdXNlL2FjbC5jLTE1NS1cdFx0ICovXG5mcy9mdXNlL2FjbC5jOjE1NjpcdFx0Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XG5mcy9mdXNlL2FjbC5jLTE1Ny1cdFx0ZnVzZV9pbnZhbGlkYXRlX2F0dHIoaW5vZGUpO1xuLS1cbmZzL2Z1c2UvZGlyLmM9MzgzPXN0YXRpYyBpbnQgZnVzZV9kZW50cnlfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4tLVxuZnMvZnVzZS9kaXIuYy00NDYtXG5mcy9mdXNlL2Rpci5jOjQ0NzpcdFx0Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XG5mcy9mdXNlL2Rpci5jLTQ0OC1cdFx0ZnVzZV9jaGFuZ2VfYXR0cmlidXRlcyhpbm9kZSwgXHUwMDI2b3V0YXJnLmF0dHIsIE5VTEwsXG4tLVxuZnMvZnVzZS9kaXIuYz0xNTIyPXN0YXRpYyBpbnQgZnVzZV91cGRhdGVfZ2V0X2F0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZnVzZS9kaXIuYy0xNTUxLVx0aWYgKHN5bmMpIHtcbmZzL2Z1c2UvZGlyLmM6MTU1MjpcdFx0Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XG5mcy9mdXNlL2Rpci5jLTE1NTMtXHRcdC8qIFRyeSBzdGF0eCBpZiBCVElNRSBpcyByZXF1ZXN0ZWQgKi9cbi0tXG5mcy9mdXNlL2Rpci5jPTE3MjY9c3RhdGljIGludCBmdXNlX3Blcm1fZ2V0YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbi0tXG5mcy9mdXNlL2Rpci5jLTE3MzAtXG5mcy9mdXNlL2Rpci5jOjE3MzE6XHRmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcbmZzL2Z1c2UvZGlyLmMtMTczMi1cdHJldHVybiBmdXNlX2RvX2dldGF0dHIoXHUwMDI2bm9wX21udF9pZG1hcCwgaW5vZGUsIE5VTEwsIE5VTEwpO1xuLS1cbmZzL2Z1c2UvZGlyLmM9MjMwNz1zdGF0aWMgaW50IGZ1c2Vfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZW50cnksXG4tLVxuZnMvZnVzZS9kaXIuYy0yMzYwLVx0XHRpZiAoZmMtXHUwMDNlcG9zaXhfYWNsKVxuZnMvZnVzZS9kaXIuYzoyMzYxOlx0XHRcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xuZnMvZnVzZS9kaXIuYy0yMzYyLVxuLS1cbmZzL2Z1c2UvaW5vZGUuYz01NDU9aW50IGZ1c2VfcmV2ZXJzZV9pbnZhbF9pbm9kZShzdHJ1Y3QgZnVzZV9jb25uICpmYywgdTY0IG5vZGVpZCxcbi0tXG5mcy9mdXNlL2lub2RlLmMtNTYyLVx0ZnVzZV9pbnZhbGlkYXRlX2F0dHIoaW5vZGUpO1xuZnMvZnVzZS9pbm9kZS5jOjU2MzpcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xuZnMvZnVzZS9pbm9kZS5jLTU2NC1cdGlmIChvZmZzZXQgXHUwMDNlPSAwKSB7XG4tLVxuZnMvZnVzZS9yZWFkZGlyLmM9MTUzPXN0YXRpYyBpbnQgZnVzZV9kaXJlbnRwbHVzX2xpbmsoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMjI4LVxuZnMvZnVzZS9yZWFkZGlyLmM6MjI5Olx0XHRmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcbmZzL2Z1c2UvcmVhZGRpci5jLTIzMC1cdFx0ZnVzZV9jaGFuZ2VfYXR0cmlidXRlcyhpbm9kZSwgXHUwMDI2by1cdTAwM2VhdHRyLCBOVUxMLFxuLS1cbmZzL2dmczIvZ2xvcHMuYz0zNTg9c3RhdGljIHZvaWQgaW5vZGVfZ29faW52YWwoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCBpbnQgZmxhZ3MpXG4tLVxuZnMvZ2ZzMi9nbG9wcy5jLTM2OC1cdFx0XHRzZXRfYml0KEdMRl9JTlNUQU5USUFURV9ORUVERUQsIFx1MDAyNmdsLVx1MDAzZWdsX2ZsYWdzKTtcbmZzL2dmczIvZ2xvcHMuYzozNjk6XHRcdFx0Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhcdTAwMjZpcC1cdTAwM2VpX2lub2RlKTtcbmZzL2dmczIvZ2xvcHMuYy0zNzAtXHRcdFx0c2VjdXJpdHlfaW5vZGVfaW52YWxpZGF0ZV9zZWNjdHgoXHUwMDI2aXAtXHUwMDNlaV9pbm9kZSk7XG4tLVxuZnMvbmZzL25mczNwcm9jLmM9MTA3Nj1jb25zdCBzdHJ1Y3QgbmZzX3JwY19vcHMgbmZzX3YzX2NsaWVudG9wcyA9IHtcbi0tXG5mcy9uZnMvbmZzM3Byb2MuYy0xMTE4LVx0LmxvY2tcdFx0PSBuZnMzX3Byb2NfbG9jayxcbmZzL25mcy9uZnMzcHJvYy5jOjExMTk6XHQuY2xlYXJfYWNsX2NhY2hlID0gZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyxcbmZzL25mcy9uZnMzcHJvYy5jLTExMjAtXHQuY2xvc2VfY29udGV4dFx0PSBuZnNfY2xvc2VfY29udGV4dCxcbi0tXG5mcy9vY2ZzMi9kbG1nbHVlLmM9Mzk1OD1zdGF0aWMgaW50IG9jZnMyX2RhdGFfY29udmVydF93b3JrZXIoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLFxuLS1cbmZzL29jZnMyL2RsbWdsdWUuYy00MDAyLW91dF9mb3JnZXQ6XG5mcy9vY2ZzMi9kbG1nbHVlLmM6NDAwMzpcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xuZnMvb2NmczIvZGxtZ2x1ZS5jLTQwMDQtXG4tLVxuZnMvcG9zaXhfYWNsLmM9MTEyPUVYUE9SVF9TWU1CT0woZm9yZ2V0X2NhY2hlZF9hY2wpO1xuZnMvcG9zaXhfYWNsLmMtMTEzLVxuZnMvcG9zaXhfYWNsLmM6MTE0OnZvaWQgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvcG9zaXhfYWNsLmMtMTE1LXtcbi0tXG5mcy9wb3NpeF9hY2wuYy0xMTgtfVxuZnMvcG9zaXhfYWNsLmM6MTE5OkVYUE9SVF9TWU1CT0woZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyk7XG5mcy9wb3NpeF9hY2wuYy0xMjAtXG4tLVxuaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaD05Nj12b2lkIGZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTtcbmluY2x1ZGUvbGludXgvcG9zaXhfYWNsLmg6OTc6dm9pZCBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaC05OC1pbnQgcG9zaXhfYWNsX3ZhbGlkKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqLCBjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICopO1xuLS1cbmluY2x1ZGUvbGludXgvcG9zaXhfYWNsLmg9MTMzPXN0YXRpYyBpbmxpbmUgaW50IHBvc2l4X2FjbF9jcmVhdGUoc3RydWN0IGlub2RlICppbm9kZSwgdW1vZGVfdCAqbW9kZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oLTEzOS1cbmluY2x1ZGUvbGludXgvcG9zaXhfYWNsLmg6MTQwOnN0YXRpYyBpbmxpbmUgdm9pZCBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oLTE0MS17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtNy0gKiAoZS5nLiBBVF9TVEFUWF9GT1JDRV9TWU5DKSwgZnVzZV91cGRhdGVfZ2V0X2F0dHIoKSBjYWxsc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmM6ODogKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIGlzc3VpbmcgRlVTRV9HRVRBVFRSLiAgT24gYW4gdW5maXhlZCBrZXJuZWwsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy05LSAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTExLSAqIGdldHhhdHRyIHBvcHVsYXRlcyB0aGUgY2FjaGUuICBCZWNhdXNlIGZ1c2Vfc2V0X2FjbCgpIHNraXBzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzoxMjogKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgZm9yICFmYy1cdTAwM2Vwb3NpeF9hY2wgbW91bnRzLCBhbnkgc3Vic2VxdWVudCBjaGFuZ2UgdG9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTEzLSAqIHRoZSBBQ0wgbGVhdmVzIHRoZSBzdGFsZSBrZXJuZWwgZW50cnkgaW4gcGxhY2UsIGFuZCB0aGUgbmV4dCBnZXR4YXR0ciByZXR1cm5zXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMjItICogIDIuIGxnZXR4YXR0ciAtXHUwMDNlIGRhZW1vbiBjYWxsZWQsIEFDTF9BIHJldHVybmVkLCBOT1QgY2FjaGVkIChBQ0xfRE9OVF9DQUNIRSkuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzoyMzogKiAgMy4gc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgLVx1MDAzZSBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgY2FsbGVkLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMjQtICogICAgIEJ1Z2d5OiAgQUNMX0RPTlRfQ0FDSEUgLVx1MDAzZSBBQ0xfTk9UX0NBQ0hFRCAoY2FjaGUgZW5hYmxlZCkuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmM9MTA3PXN0YXRpYyB2b2lkIGZzX2xvb2t1cChmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTE2LVx0ICogTG9uZyBhdHRyL2VudHJ5IHRpbWVvdXRzIHNvIHRoYXQgbm9ybWFsIHN0YXQoKSBjYWxscyBkbyBub3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjExNzpcdCAqIGV4cGlyZSBhbmQgdHJpZ2dlciBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgb24gdGhlaXIgb3duO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTE4LVx0ICogb25seSB0aGUgZXhwbGljaXQgQVRfU1RBVFhfRk9SQ0VfU1lOQyBzaG91bGQgdHJpZ2dlciBpdC5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYz0yNTM9VEVTVF9GKGFjbF9jYWNoZSwgc3RhbGVfYWZ0ZXJfZm9yY2Vfc3luYylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0yODMtXHQgKiBTdGVwIDI6IHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmM6Mjg0Olx0ICogZnVzZV91cGRhdGVfZ2V0X2F0dHIoKSBjYWxscyBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIHNlbmRpbmdcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTI4NS1cdCAqIEZVU0VfR0VUQVRUUi5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0zMTQtXHQgKiBTaW11bGF0ZXMgYW4gQUNMIGNoYW5nZSB0aGF0IGZ1c2Vfc2V0X2FjbCgpIHdvdWxkIE5PVCBpbnZhbGlkYXRlIGZvclxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmM6MzE1Olx0ICogIWZjLVx1MDAzZXBvc2l4X2FjbCBtb3VudHMgKGl0IHNraXBzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMgaW4gdGhhdCBjYXNlKS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTMxNi1cdCAqIE9uIGEgZml4ZWQga2VybmVsIHRoZSBBQ0wgd2FzIG5ldmVyIGNhY2hlZCwgc28gdGhpcyBpcyBtb290LlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTMzOC1cdFx0ICAgICAgIFwmIzM0Oyhjb3VudD0lZCk7IEFDTF9ET05UX0NBQ0hFIGNvcnJ1cHRlZCBieSBcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjMzOTpcdFx0ICAgICAgIFwmIzM0O2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKVwmIzM0Oywgc3osIGNvdW50KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTM0MC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM3MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBBQ0wgQ2FjaGluZyBhbmQgRlVTRSBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGZvcmdldF9hbGxfY2FjaGVkX2FjbHNgIGlzICpldmVyeXdoZXJlKiDigJMgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGJ5IGEgc2xldyBvZiBuZXR3b3JrIGFuZCBkaXN0cmlidXRlZCBmaWxlc3lzdGVtczogRlVTRSwgTkZTLCBPQ0ZTMiwgQ2VwaCwgYW5kIEdGUzIuIFRoYXQgcmVhbGx5IGhpZ2hsaWdodHMgdGhlIHNjb3BlIG9mIHRoaXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYXJlYSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgYnVnIGlzIGxpbmtlZCB0byBgQUNMX0RPTlRfQ0FDSEVgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZpbGVzeXN0ZW1zIHRoYXQgKmFyZW4mIzM5O3QqIHN1cHBvc2VkIHRvIGJlIGNhY2hpbmcgQUNMcy4KClNpbmNlIHdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uIHRoaXMgc3BlY2lmaWMgYmVoYXZpb3IsIEkgbmVlZCB0byBmb2N1cyBvbiBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBgZm9yZ2V0X2NhY2hlZF9hY2xgLiBGVVNFIHVzZXMgdGhpcyB3aGVuIGAhZmMtJmd0O3Bvc2l4X2FjbGAgaXMgc2V0LiBXaGlsZSBgZnVzZV91cGRhdGVfZ2V0X2F0dHJgIHNvdW5kcyBsaWtlIGEgdXNlZnVsIHN5bWJvbCBmb3IgdGFyZ2V0ZWQgRlVTRSB0ZXN0aW5nLCBpdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBidWcgbGllcyB3aXRoaW4gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgLiBBbHRob3VnaCBgX19mb3JnZXRfY2FjaGVkX2FjbGAgaXMgc3RhdGljLCBzbyBJIGNhbiYjMzk7dCB1c2UgaXQgZGlyZWN0bHkgYXMgYSBmdXp6ZXIgZm9jdXMgc3ltYm9sLCBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgdXNlZnVsLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlnIGltcGxpY2F0aW9ucy4gSXMgYENPTkZJR19GU19QT1NJWF9BQ0xgIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJdCBzZWVtcyBsaWtlIGl0LCBidXQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gT2theSwgeWVzIGl0IGlzIHRoZSBtYWluIGNvbmZpZywgdGhvdWdoIGBDT05GSUdfRlVTRV9GU2AgaXMgcHJvYmFibHkgYWxzbyB1c2VmdWwgc2luY2Ugb3VyIHRlc3QgZW52aXJvbm1lbnQgdXNlcyBGVVNFLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRob3NlIHR3byBhcmUgZW5hYmxlZC4KCkFuZCB5ZXMsIGBDT05GSUdfRlNfUE9TSVhfQUNMYCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgb3B0aW9uIOKAkyBpdCYjMzk7cyByaWdodCB0aGVyZSBpbiBgZnMvS2NvbmZpZ2AuIEV4Y2VsbGVudC4gV2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX1BPU0lYX0FDTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTkwPWNvbmZpZyBGU19EQVhfUE1EXG4tLVxuZnMvS2NvbmZpZy0xMDEtI1xuZnMvS2NvbmZpZzoxMDI6Y29uZmlnIEZTX1BPU0lYX0FDTFxuZnMvS2NvbmZpZy0xMDMtXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjg0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipWYWxpZGF0aW5nIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gWWVwLCBgRlNfUE9TSVhfQUNMYCBpcyBkZWZpbml0ZWx5IGEgbGVnaXRpbWF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm8gcmVkIGZsYWdzIHRoZXJlLiBUaGF04oCZcyBzdGFuZGFyZCBwcmFjdGljZSBmb3IgYWNjZXNzIGNvbnRyb2wgYW5kIGlzIHVzdWFsbHkgc3RyYWlnaHRmb3J3YXJkLiBUaGVuLCBsZXQmIzM5O3Mgc2VlLi4uIGFoLCBhbmQgb2YgY291cnNlLCBgRlVTRV9GU2AgaXMgYSBnbyBhcyB3ZWxsLiBObyBzdXJwcmlzZXMuIFdlJiMzOTt2ZSBnb3QgdGhlIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZTsgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IHNvIGZhci4gVGhhdCBjb25maXJtcyBhIGJhc2UgbGV2ZWwgb2Ygb3BlcmF0aW9uYWwgY29tcGV0ZW5jZTsgbm8gaW1tZWRpYXRlIGlzc3VlcyB0byBhZGRyZXNzIG9uIHRoaXMgZnJvbnQuIFRpbWUgdG8gbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVU0VfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU1NAoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBQ0wgQ2FjaGluZyBCdWcgRml4KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gQUNMcywgc3BlY2lmaWNhbGx5IGBGU19QT1NJWF9BQ0xgIGFuZCBgRlVTRV9GU2AuIFRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAuIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogaXMgYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGRlZmluZWQgaW4gYGZzL3Bvc2l4X2FjbC5jYD8gWWVwLCBpdCYjMzk7cyB0aGVyZS4KClRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgdGhpczogdGhlcmUmIzM5O3MgYSBidWcgaW4gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIHRoYXQgbWlzaGFuZGxlcyB0aGUgYEFDTF9ET05UX0NBQ0hFYCBmbGFnLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIEFDTCBjYWNoaW5nIGJlaW5nIGVuYWJsZWQgd2hlbiBpdCBzaG91bGRuJiMzOTt0IGJlLiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgVkZTL0FDTCBsb2dpYywgbWVhbmluZyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBleGFtaW5hdGlvbi4gVGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgdGhpcyB0byBjb25maXJtIGNvcnJlY3QgYmVoYXZpb3Igd2lsbCBiZSB0byBmb2N1cyBvbiB0aG9zZSBjYWxscyB0byBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgYW5kIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHRyYW5zaXRpb25zIG9mIHRoZSBBQ0wgY2FjaGluZyBzdGF0ZS4gSSYjMzk7bSBnb2luZyB0byBnZXQgdGhlIHJlc3VsdHMgcmVhZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMmIzM0OywKICAgICYjMzQ7Zm9yZ2V0X2NhY2hlZF9hY2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCB3aGVyZSBgQUNMX0RPTlRfQ0FDSEVgIGNvdWxkIGJlIGluY29ycmVjdGx5IHJlcGxhY2VkIHdpdGggYEFDTF9OT1RfQ0FDSEVEYCwgaW5hZHZlcnRlbnRseSBlbmFibGluZyBBQ0wgY2FjaGluZyBmb3IgaW5vZGVzIHRoYXQgc2hvdWxkbiYjMzk7dCBoYXZlIGl0IChlLmcuLCBGVVNFIG1vdW50cyB3aXRob3V0IGBGVVNFX1BPU0lYX0FDTGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMvQUNMIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgdG8gZW5zdXJlIEFDTCBjYWNoaW5nIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfUE9TSVhfQUNMJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb3JnZXRfYWxsX2NhY2hlZF9hY2xzJiMzNDssCiAgICAmIzM0O2ZvcmdldF9jYWNoZWRfYWNsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgX19mb3JnZXRfY2FjaGVkX2FjbGAgd2hlcmUgYEFDTF9ET05UX0NBQ0hFYCBjb3VsZCBiZSBpbmNvcnJlY3RseSByZXBsYWNlZCB3aXRoIGBBQ0xfTk9UX0NBQ0hFRGAsIGluYWR2ZXJ0ZW50bHkgZW5hYmxpbmcgQUNMIGNhY2hpbmcgZm9yIGlub2RlcyB0aGF0IHNob3VsZG4mIzM5O3QgaGF2ZSBpdCAoZS5nLiwgRlVTRSBtb3VudHMgd2l0aG91dCBgRlVTRV9QT1NJWF9BQ0xgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTL0FDTCBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYGZvcmdldF9hbGxfY2FjaGVkX2FjbHNgIGFuZCBgZm9yZ2V0X2NhY2hlZF9hY2xgIHRvIGVuc3VyZSBBQ0wgY2FjaGluZyBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwMzoxMzozMC43NTk0MzQ1MzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDQwODUxMTA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19QT1NJWF9BQ0xcIixcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb3JnZXRfYWxsX2NhY2hlZF9hY2xzXCIsXG4gICAgXCJmb3JnZXRfY2FjaGVkX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgX19mb3JnZXRfY2FjaGVkX2FjbGAgd2hlcmUgYEFDTF9ET05UX0NBQ0hFYCBjb3VsZCBiZSBpbmNvcnJlY3RseSByZXBsYWNlZCB3aXRoIGBBQ0xfTk9UX0NBQ0hFRGAsIGluYWR2ZXJ0ZW50bHkgZW5hYmxpbmcgQUNMIGNhY2hpbmcgZm9yIGlub2RlcyB0aGF0IHNob3VsZG4ndCBoYXZlIGl0IChlLmcuLCBGVVNFIG1vdW50cyB3aXRob3V0IGBGVVNFX1BPU0lYX0FDTGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBWRlMvQUNMIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgdG8gZW5zdXJlIEFDTCBjYWNoaW5nIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6MzAuNzU5NDM5MDU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTExMjQzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NTc2MWNkNTVkODI3NjBlZDhhOGY3ZjU4OGU5NzI2Y2ZhYmY1YTBjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDAzOjEzOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Bvc2l4X2FjbC5jIGIvZnMvcG9zaXhfYWNsLmNcXG5pbmRleCBiNGJmZTRkZGY2NGVhNS4uM2RjNjJjMWMyNzA4N2EgMTAwNjQ0XFxuLS0tIGEvZnMvcG9zaXhfYWNsLmNcXG4rKysgYi9mcy9wb3NpeF9hY2wuY1xcbkBAIC05Myw2ICs5MywxMyBAQCBzdGF0aWMgdm9pZCBfX2ZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBwb3NpeF9hY2wgKipwKVxcbiB7XFxuIFxcdHN0cnVjdCBwb3NpeF9hY2wgKm9sZDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEFDTF9ET05UX0NBQ0hFIGlzIGV4cGVjdGVkIHRvIGJlIGEgXFxcImNvbnN0XFxcIiB2YWx1ZSBhbmQgeGNoZyBpdCB3aXRoXFxuK1xcdCAqIEFDTF9OT1RfQ0FDSEVEIHdvdWxkIGVuYWJsZSBhY2wgY2FjaGluZyBmb3IgdGhlIGlub2RlIC1cXG4rXFx0ICogY2xlYXJseSBub3Qgd2hhdCB0aGUgY2FsbGVyIGhhcyBpbnRlbmRlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChSRUFEX09OQ0UoKnApID09IEFDTF9ET05UX0NBQ0hFKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcdG9sZCA9IHhjaGcocCwgQUNMX05PVF9DQUNIRUQpO1xcbiBcXHRpZiAoIWlzX3VuY2FjaGVkX2FjbChvbGQpKVxcbiBcXHRcXHRwb3NpeF9hY2xfcmVsZWFzZShvbGQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxcbmluZGV4IDYxMmFhZDY5YTkzYWE0Li5mNDcxNDE0ODQyNzUwYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxcbkBAIC01LDYgKzUsMTMgQEAgQ0ZMQUdTICs9IC1XYWxsIC1PMiAtZyAkKEtIRFJfSU5DTFVERVMpXFxuIFRFU1RfR0VOX1BST0dTIDo9IGZ1c2VjdGxfdGVzdFxcbiBURVNUX0dFTl9GSUxFUyA6PSBmdXNlX21udFxcbiBcXG4rIyBmdXNlX2FjbF9jYWNoZV90ZXN0IHJlcXVpcmVzIGxpYmZ1c2UzOyBhZGQgaXQgb25seSB3aGVuIHRoZSBsaWJyYXJ5IGlzIHByZXNlbnQuXFxuK0FDTF9DRkxBR1MgOj0gJChzaGVsbCBwa2ctY29uZmlnIGZ1c2UzIC0tY2ZsYWdzIDJcXHUwMDNlL2Rldi9udWxsKVxcbitBQ0xfTERMSUJTIDo9ICQoc2hlbGwgcGtnLWNvbmZpZyBmdXNlMyAtLWxpYnMgMlxcdTAwM2UvZGV2L251bGwpXFxuK2lmbmVxICgkKEFDTF9DRkxBR1MpLClcXG4rVEVTVF9HRU5fUFJPR1MgKz0gZnVzZV9hY2xfY2FjaGVfdGVzdFxcbitlbmRpZlxcbitcXG4gaW5jbHVkZSAuLi8uLi9saWIubWtcXG4gXFxuIFZBUl9DRkxBR1MgOj0gJChzaGVsbCBwa2ctY29uZmlnIGZ1c2UgLS1jZmxhZ3MgMlxcdTAwM2UvZGV2L251bGwpXFxuQEAgLTE5LDMgKzI2LDYgQEAgZW5kaWZcXG4gXFxuICQoT1VUUFVUKS9mdXNlX21udDogQ0ZMQUdTICs9ICQoVkFSX0NGTEFHUylcXG4gJChPVVRQVVQpL2Z1c2VfbW50OiBMRExJQlMgKz0gJChWQVJfTERMSUJTKVxcbitcXG4rJChPVVRQVVQpL2Z1c2VfYWNsX2NhY2hlX3Rlc3Q6IENGTEFHUyArPSAkKEFDTF9DRkxBR1MpXFxuKyQoT1VUUFVUKS9mdXNlX2FjbF9jYWNoZV90ZXN0OiBMRExJQlMgKz0gJChBQ0xfTERMSUJTKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjJlNWRiODU1NTA0MDlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmNcXG5AQCAtMCwwICsxLDM0OCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBUZXN0OiBGVVNFIEFDTCBjYWNoaW5nIGJ1ZyB0cmlnZ2VyZWQgYnkgQVRfU1RBVFhfRk9SQ0VfU1lOQ1xcbisgKlxcbisgKiBBIEZVU0UgbW91bnQgdGhhdCBkb2VzIG5vdCBuZWdvdGlhdGUgRlVTRV9QT1NJWF9BQ0wgaW5pdGlhbGlzZXMgZXZlcnkgaW5vZGVcXG4rICogd2l0aCBpX2FjbCA9IGlfZGVmYXVsdF9hY2wgPSBBQ0xfRE9OVF9DQUNIRS4gIFdoZW4gYSBmcmVzaCBzdGF0IGlzIG5lZWRlZFxcbisgKiAoZS5nLiBBVF9TVEFUWF9GT1JDRV9TWU5DKSwgZnVzZV91cGRhdGVfZ2V0X2F0dHIoKSBjYWxsc1xcbisgKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIGlzc3VpbmcgRlVTRV9HRVRBVFRSLiAgT24gYW4gdW5maXhlZCBrZXJuZWwsXFxuKyAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxcbisgKiBpbmFkdmVydGVudGx5IGVuYWJsaW5nIHRoZSBrZXJuZWwgQUNMIGNhY2hlIGZvciB0aGF0IGlub2RlLiAgVGhlIG5leHRcXG4rICogZ2V0eGF0dHIgcG9wdWxhdGVzIHRoZSBjYWNoZS4gIEJlY2F1c2UgZnVzZV9zZXRfYWNsKCkgc2tpcHNcXG4rICogZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGZvciAhZmMtXFx1MDAzZXBvc2l4X2FjbCBtb3VudHMsIGFueSBzdWJzZXF1ZW50IGNoYW5nZSB0b1xcbisgKiB0aGUgQUNMIGxlYXZlcyB0aGUgc3RhbGUga2VybmVsIGVudHJ5IGluIHBsYWNlLCBhbmQgdGhlIG5leHQgZ2V0eGF0dHIgcmV0dXJuc1xcbisgKiB3cm9uZyBkYXRhIHdpdGhvdXQgZXZlciByZWFjaGluZyB0aGUgRlVTRSBkYWVtb24uXFxuKyAqXFxuKyAqIEZpeCAoZnMvcG9zaXhfYWNsLmMpOiBfX2ZvcmdldF9jYWNoZWRfYWNsKCkgcmV0dXJucyBlYXJseSB3aGVuICpwIGlzXFxuKyAqIEFDTF9ET05UX0NBQ0hFLCBwcmVzZXJ2aW5nIHRoZSBcXFwibmV2ZXIgY2FjaGVcXFwiIGludmFyaWFudCBmb3IgdGhlIGlub2RlJ3NcXG4rICogbGlmZXRpbWUuXFxuKyAqXFxuKyAqIFRlc3Qgb3V0bGluZTpcXG4rICogIDEuIE1vdW50IGEgbWluaW1hbCBGVVNFIGZzIChubyBGVVNFX1BPU0lYX0FDTCBuZWdvdGlhdGVkKS5cXG4rICogIDIuIGxnZXR4YXR0ciAtXFx1MDAzZSBkYWVtb24gY2FsbGVkLCBBQ0xfQSByZXR1cm5lZCwgTk9UIGNhY2hlZCAoQUNMX0RPTlRfQ0FDSEUpLlxcbisgKiAgMy4gc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgLVxcdTAwM2UgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGNhbGxlZC5cXG4rICogICAgIEJ1Z2d5OiAgQUNMX0RPTlRfQ0FDSEUgLVxcdTAwM2UgQUNMX05PVF9DQUNIRUQgKGNhY2hlIGVuYWJsZWQpLlxcbisgKiAgICAgRml4ZWQ6ICBBQ0xfRE9OVF9DQUNIRSBwcmVzZXJ2ZWQuXFxuKyAqICA0LiBsZ2V0eGF0dHIgLVxcdTAwM2UgZGFlbW9uIGNhbGxlZCwgQUNMX0EgcmV0dXJuZWQuXFxuKyAqICAgICBCdWdneTogIHJlc3VsdCBub3cgY2FjaGVkIChBQ0xfTk9UX0NBQ0hFRCAtXFx1MDAzZSBjYWNoZWQpLlxcbisgKiAgICAgRml4ZWQ6ICByZXN1bHQgc3RpbGwgbm90IGNhY2hlZC5cXG4rICogIDUuIERhZW1vbiBzd2l0Y2hlcyB0byBBQ0xfQiBpbnRlcm5hbGx5IChkaWZmZXJlbnQgc2l6ZSkuXFxuKyAqICA2LiBsZ2V0eGF0dHIgLVxcdTAwM2Ugc2hvdWxkIHJldHVybiBBQ0xfQiAoNDQgYnl0ZXMpLlxcbisgKiAgICAgQnVnZ3k6ICBjYWNoZSBoaXQsIHJldHVybnMgc3RhbGUgQUNMX0EgKDI4IGJ5dGVzKS4gRkFJTC5cXG4rICogICAgIEZpeGVkOiAgbm8gY2FjaGUsIGRhZW1vbiBjYWxsZWQsIHJldHVybnMgQUNMX0IgKDQ0IGJ5dGVzKS4gUEFTUy5cXG4rICovXFxuK1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3hhdHRyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgRlVTRV9VU0VfVkVSU0lPTiAzMVxcbisjaW5jbHVkZSBcXHUwMDNjZnVzZV9sb3dsZXZlbC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisvKiAtLS0tIEFDTCBiaW5hcnkgZW5jb2RpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuKy8qXFxuKyAqIFBPU0lYIEFDTCB2MiB4YXR0ciBmb3JtYXQgKGxpdHRsZS1lbmRpYW4pOlxcbisgKiAgIGhlYWRlcjogdTMyIHZlcnNpb24gKD0gMHgwMDAwMDAwMilcXG4rICogICBlbnRyeTogIHUxNiB0YWcgfCB1MTYgcGVybSB8IHUzMiBpZFxcbisgKlxcbisgKiBFbnRyaWVzIG11c3QgYXBwZWFyIGluIHRhZy1hc2NlbmRpbmcgb3JkZXI7IG5hbWVkIFVTRVIvR1JPVVAgZW50cmllc1xcbisgKiByZXF1aXJlIGEgTUFTSyBlbnRyeS4gIEJvdGggQUNMcyBwYXNzIHBvc2l4X2FjbF9mcm9tX3hhdHRyKCkgdmFsaWRhdGlvbi5cXG4rICovXFxuK1xcbisvKiBBQ0xfQTogMyBlbnRyaWVzIChVU0VSX09CSjpyd3gsIEdST1VQX09CSjpyLXgsIE9USEVSOnIteCkgPSAyOCBieXRlcyAqL1xcbitzdGF0aWMgY29uc3QgdWludDhfdCBhY2xfYVtdID0ge1xcbitcXHQweDAyLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2MiBoZWFkZXIgICAgICAqL1xcbitcXHQweDAxLCAweDAwLCAweDA3LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBVU0VSX09CSiAgcnd4ICAqL1xcbitcXHQweDA0LCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBHUk9VUF9PQkogci14ICAqL1xcbitcXHQweDIwLCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBPVEhFUiAgICAgci14ICAqL1xcbit9O1xcbitcXG4rLypcXG4rICogQUNMX0I6IDUgZW50cmllcyDigJQgYWRkcyBVU0VSIHVpZD0xIGFuZCBNQVNLID0gNDQgYnl0ZXMuXFxuKyAqIEEgbmFtZWQgVVNFUiBlbnRyeSByZXF1aXJlcyBhIE1BU0s7IGFsbCB0YWdzIGluIGFzY2VuZGluZyBvcmRlci5cXG4rICovXFxuK3N0YXRpYyBjb25zdCB1aW50OF90IGFjbF9iW10gPSB7XFxuK1xcdDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHYyIGhlYWRlciAgICAgICAqL1xcbitcXHQweDAxLCAweDAwLCAweDA3LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBVU0VSX09CSiAgIHJ3eCAgKi9cXG4rXFx0MHgwMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgLyogVVNFUiB1aWQ9MSByd3ggICovXFxuK1xcdDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIEdST1VQX09CSiAgci14ICAqL1xcbitcXHQweDEwLCAweDAwLCAweDA3LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBNQVNLICAgICAgIHJ3eCAgKi9cXG4rXFx0MHgyMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogT1RIRVIgICAgICByLXggICovXFxuK307XFxuK1xcbisvKiAtLS0tIFNoYXJlZCBzdGF0ZSAoZGFlbW9uIHRocmVhZCBcXHUwMDNjLVxcdTAwM2UgdGVzdCB0aHJlYWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbisjZGVmaW5lIEZJTEVfSU5PICAyXFxuKyNkZWZpbmUgRklMRV9OQU1FIFxcXCJ0ZXN0ZmlsZVxcXCJcXG4rXFxuK3N0cnVjdCBkYWVtb25fc3RhdGUge1xcbitcXHRwdGhyZWFkX211dGV4X3QgbG9jaztcXG4rXFx0Y29uc3QgdWludDhfdCAgKmFjbDtcXG4rXFx0c2l6ZV90ICAgICAgICAgIGFjbF9zaXplO1xcbitcXHRpbnQgICAgICAgICAgICAgZ2V0eGF0dHJfY291bnQ7XFxuK307XFxuK1xcbisvKlxcbisgKiBHbG9iYWw6IGNhbGxiYWNrcyBhcmUgc3RhdGVsZXNzIGZucyBzbyB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsLlxcbisgKiBTYWZlIGJlY2F1c2Ugb25seSBvbmUgdGVzdCBpbnN0YW5jZSBydW5zIGF0IGEgdGltZS5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZGFlbW9uX3N0YXRlIGdfZHMgPSB7XFxuK1xcdC5sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUixcXG4rfTtcXG4rXFxuKy8qIC0tLS0gRlVTRSBsb3dsZXZlbCBjYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cXG4rXFxuK3N0YXRpYyB2b2lkIGZzX2xvb2t1cChmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0aWYgKHBhcmVudCAhPSBGVVNFX1JPT1RfSUQgfHwgc3RyY21wKG5hbWUsIEZJTEVfTkFNRSkpIHtcXG4rXFx0XFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9FTlQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0c3RydWN0IGZ1c2VfZW50cnlfcGFyYW0gZSA9IHt9O1xcbitcXG4rXFx0LypcXG4rXFx0ICogTG9uZyBhdHRyL2VudHJ5IHRpbWVvdXRzIHNvIHRoYXQgbm9ybWFsIHN0YXQoKSBjYWxscyBkbyBub3RcXG4rXFx0ICogZXhwaXJlIGFuZCB0cmlnZ2VyIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSBvbiB0aGVpciBvd247XFxuK1xcdCAqIG9ubHkgdGhlIGV4cGxpY2l0IEFUX1NUQVRYX0ZPUkNFX1NZTkMgc2hvdWxkIHRyaWdnZXIgaXQuXFxuK1xcdCAqL1xcbitcXHRlLmlubyAgICAgICAgICAgICA9IEZJTEVfSU5PO1xcbitcXHRlLmdlbmVyYXRpb24gICAgICA9IDE7XFxuK1xcdGUuYXR0cl90aW1lb3V0ICAgID0gMTAuMDtcXG4rXFx0ZS5lbnRyeV90aW1lb3V0ICAgPSAxMC4wO1xcbitcXHRlLmF0dHIuc3RfaW5vICAgICA9IEZJTEVfSU5PO1xcbitcXHRlLmF0dHIuc3RfbW9kZSAgICA9IFNfSUZSRUcgfCAwNjQ0O1xcbitcXHRlLmF0dHIuc3RfbmxpbmsgICA9IDE7XFxuK1xcdGZ1c2VfcmVwbHlfZW50cnkocmVxLCBcXHUwMDI2ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGZzX2dldGF0dHIoZnVzZV9yZXFfdCByZXEsIGZ1c2VfaW5vX3QgaW5vLFxcbitcXHRcXHQgICAgICAgc3RydWN0IGZ1c2VfZmlsZV9pbmZvICpmaSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3RhdCBzdCA9IHt9O1xcbitcXG4rXFx0KHZvaWQpZmk7XFxuK1xcdGlmIChpbm8gPT0gRlVTRV9ST09UX0lEKSB7XFxuK1xcdFxcdHN0LnN0X2lubyAgID0gRlVTRV9ST09UX0lEO1xcbitcXHRcXHRzdC5zdF9tb2RlICA9IFNfSUZESVIgfCAwNzU1O1xcbitcXHRcXHRzdC5zdF9ubGluayA9IDI7XFxuK1xcdH0gZWxzZSBpZiAoaW5vID09IEZJTEVfSU5PKSB7XFxuK1xcdFxcdHN0LnN0X2lubyAgID0gRklMRV9JTk87XFxuK1xcdFxcdHN0LnN0X21vZGUgID0gU19JRlJFRyB8IDA2NDQ7XFxuK1xcdFxcdHN0LnN0X25saW5rID0gMTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9FTlQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0ZnVzZV9yZXBseV9hdHRyKHJlcSwgXFx1MDAyNnN0LCAxMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGZzX2dldHhhdHRyKGZ1c2VfcmVxX3QgcmVxLCBmdXNlX2lub190IGlubywgY29uc3QgY2hhciAqbmFtZSxcXG4rXFx0XFx0XFx0c2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0aWYgKGlubyAhPSBGSUxFX0lOTyB8fFxcbitcXHQgICAgc3RyY21wKG5hbWUsIFxcXCJzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1xcXCIpICE9IDApIHtcXG4rXFx0XFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9EQVRBKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNmdfZHMubG9jayk7XFxuK1xcdGNvbnN0IHVpbnQ4X3QgKmFjbCAgICAgID0gZ19kcy5hY2w7XFxuK1xcdHNpemVfdCAgICAgICAgIGFjbF9zaXplID0gZ19kcy5hY2xfc2l6ZTtcXG4rXFx0Z19kcy5nZXR4YXR0cl9jb3VudCsrO1xcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2Z19kcy5sb2NrKTtcXG4rXFxuK1xcdGlmIChzaXplID09IDApXFxuK1xcdFxcdGZ1c2VfcmVwbHlfeGF0dHIocmVxLCBhY2xfc2l6ZSk7XFxuK1xcdGVsc2UgaWYgKHNpemUgXFx1MDAzYyBhY2xfc2l6ZSlcXG4rXFx0XFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFUkFOR0UpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGZ1c2VfcmVwbHlfYnVmKHJlcSwgKGNvbnN0IGNoYXIgKilhY2wsIGFjbF9zaXplKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmdXNlX2xvd2xldmVsX29wcyBmc19vcHMgPSB7XFxuK1xcdC5sb29rdXAgICA9IGZzX2xvb2t1cCxcXG4rXFx0LmdldGF0dHIgID0gZnNfZ2V0YXR0cixcXG4rXFx0LmdldHhhdHRyID0gZnNfZ2V0eGF0dHIsXFxuK307XFxuK1xcbisvKiAtLS0tIERhZW1vbiB0aHJlYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xcbitcXG4rc3RhdGljIHZvaWQgKnJ1bl9kYWVtb24odm9pZCAqYXJnKVxcbit7XFxuK1xcdGZ1c2Vfc2Vzc2lvbl9sb29wKChzdHJ1Y3QgZnVzZV9zZXNzaW9uICopYXJnKTtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuKy8qIC0tLS0ga3NlbGZ0ZXN0IGhhcm5lc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbitGSVhUVVJFKGFjbF9jYWNoZSkge1xcbitcXHRzdHJ1Y3QgZnVzZV9zZXNzaW9uICpzZTtcXG4rXFx0Y2hhciAgICAgICAgICAgICAgICAgbW91bnRwb2ludFtQQVRIX01BWF07XFxuK1xcdGNoYXIgICAgICAgICAgICAgICAgIGZpbGVfcGF0aFtQQVRIX01BWF07XFxuK1xcdHB0aHJlYWRfdCAgICAgICAgICAgIHRocmVhZDtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoYWNsX2NhY2hlKVxcbit7XFxuK1xcdGNoYXIgKmZ1c2VfYXJndltdID0geyBcXFwiZnVzZV9hY2xfY2FjaGVfdGVzdFxcXCIsIE5VTEwgfTtcXG4rXFx0c3RydWN0IGZ1c2VfYXJncyBhcmdzID0gRlVTRV9BUkdTX0lOSVQoMSwgZnVzZV9hcmd2KTtcXG4rXFxuK1xcdGdfZHMuYWNsICAgICAgICAgICAgPSBhY2xfYTtcXG4rXFx0Z19kcy5hY2xfc2l6ZSAgICAgICA9IHNpemVvZihhY2xfYSk7XFxuK1xcdGdfZHMuZ2V0eGF0dHJfY291bnQgPSAwO1xcbitcXG4rXFx0c3RyY3B5KHNlbGYtXFx1MDAzZW1vdW50cG9pbnQsIFxcXCIvdG1wL2FjbF9jYWNoZV90ZXN0X1hYWFhYWFxcXCIpO1xcbitcXHRpZiAoIW1rZHRlbXAoc2VsZi1cXHUwMDNlbW91bnRwb2ludCkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibWtkdGVtcDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXG4rXFx0c25wcmludGYoc2VsZi1cXHUwMDNlZmlsZV9wYXRoLCBzaXplb2Yoc2VsZi1cXHUwMDNlZmlsZV9wYXRoKSxcXG4rXFx0XFx0IFxcXCIlcy9cXFwiIEZJTEVfTkFNRSwgc2VsZi1cXHUwMDNlbW91bnRwb2ludCk7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VzZSA9IGZ1c2Vfc2Vzc2lvbl9uZXcoXFx1MDAyNmFyZ3MsIFxcdTAwMjZmc19vcHMsIHNpemVvZihmc19vcHMpLCBOVUxMKTtcXG4rXFx0aWYgKCFzZWxmLVxcdTAwM2VzZSkge1xcbitcXHRcXHRybWRpcihzZWxmLVxcdTAwM2Vtb3VudHBvaW50KTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJmdXNlX3Nlc3Npb25fbmV3IGZhaWxlZFxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZnVzZV9zZXNzaW9uX21vdW50KHNlbGYtXFx1MDAzZXNlLCBzZWxmLVxcdTAwM2Vtb3VudHBvaW50KSkge1xcbitcXHRcXHRmdXNlX3Nlc3Npb25fZGVzdHJveShzZWxmLVxcdTAwM2VzZSk7XFxuK1xcdFxcdHJtZGlyKHNlbGYtXFx1MDAzZW1vdW50cG9pbnQpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImZ1c2Vfc2Vzc2lvbl9tb3VudCBmYWlsZWQgXFxcIlxcbitcXHRcXHRcXHQgICAgIFxcXCIobWlzc2luZyBmdXNlcm1vdW50MyBvciBpbnN1ZmZpY2llbnQgcHJpdmlsZWdlcylcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZzZWxmLVxcdTAwM2V0aHJlYWQsIE5VTEwsIHJ1bl9kYWVtb24sIHNlbGYtXFx1MDAzZXNlKSkge1xcbitcXHRcXHRmdXNlX3Nlc3Npb25fdW5tb3VudChzZWxmLVxcdTAwM2VzZSk7XFxuK1xcdFxcdGZ1c2Vfc2Vzc2lvbl9kZXN0cm95KHNlbGYtXFx1MDAzZXNlKTtcXG4rXFx0XFx0cm1kaXIoc2VsZi1cXHUwMDNlbW91bnRwb2ludCk7XFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwicHRocmVhZF9jcmVhdGU6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0fVxcbitcXG4rXFx0ZnVzZV9vcHRfZnJlZV9hcmdzKFxcdTAwMjZhcmdzKTtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihhY2xfY2FjaGUpXFxuK3tcXG4rXFx0ZnVzZV9zZXNzaW9uX2V4aXQoc2VsZi1cXHUwMDNlc2UpO1xcbitcXHRmdXNlX3Nlc3Npb25fdW5tb3VudChzZWxmLVxcdTAwM2VzZSk7XFxuK1xcdHB0aHJlYWRfam9pbihzZWxmLVxcdTAwM2V0aHJlYWQsIE5VTEwpO1xcbitcXHRmdXNlX3Nlc3Npb25fZGVzdHJveShzZWxmLVxcdTAwM2VzZSk7XFxuK1xcdHJtZGlyKHNlbGYtXFx1MDAzZW1vdW50cG9pbnQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRvX2ZvcmNlX3N0YXR4KGNvbnN0IGNoYXIgKnBhdGgpXFxuK3tcXG4rXFx0c3RydWN0IHN0YXR4IHN0eDtcXG4rXFxuK1xcdHJldHVybiBzeXNjYWxsKFNZU19zdGF0eCwgQVRfRkRDV0QsIHBhdGgsXFxuK1xcdFxcdCAgICAgICBBVF9TVEFUWF9GT1JDRV9TWU5DLCBTVEFUWF9CQVNJQ19TVEFUUywgXFx1MDAyNnN0eCk7XFxuK31cXG4rXFxuK1RFU1RfRihhY2xfY2FjaGUsIHN0YWxlX2FmdGVyX2ZvcmNlX3N5bmMpXFxuK3tcXG4rXFx0Y2hhciAgICBidWZbNTEyXTtcXG4rXFx0c3NpemVfdCBzejtcXG4rXFx0aW50ICAgICBjb3VudDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN0ZXAgMTogdHdvIGdldHhhdHRyIGNhbGxzIGJlZm9yZSBhbnkgc3RhdHgoRk9SQ0VfU1lOQykuXFxuK1xcdCAqIGlfYWNsID09IEFDTF9ET05UX0NBQ0hFLiAgX19nZXRfYWNsJ3MgY21weGNoZyhwLCBBQ0xfTk9UX0NBQ0hFRCxcXG4rXFx0ICogc2VudGluZWwpIGZpbmRzICpwICE9IEFDTF9OT1RfQ0FDSEVEIG9uIGV2ZXJ5IGNhbGwsIHNvIHRoZSBzZW50aW5lbFxcbitcXHQgKiBpcyBuZXZlciBwbGFjZWQgYW5kIHRoZSByZXN1bHQgaXMgbmV2ZXIgY2FjaGVkLiAgQm90aCBjYWxscyBtdXN0XFxuK1xcdCAqIHJlYWNoIHRoZSBkYWVtb24sIHByb3ZpbmcgQUNMX0RPTlRfQ0FDSEUgc3VwcHJlc3NlcyBjYWNoaW5nLlxcbitcXHQgKi9cXG4rXFx0c3ogPSBsZ2V0eGF0dHIoc2VsZi1cXHUwMDNlZmlsZV9wYXRoLCBcXFwic3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3NcXFwiLFxcbitcXHRcXHQgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7XFxuK1xcdEFTU0VSVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9hKSk7XFxuK1xcbitcXHRzeiA9IGxnZXR4YXR0cihzZWxmLVxcdTAwM2VmaWxlX3BhdGgsIFxcXCJzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1xcXCIsXFxuK1xcdFxcdCAgICAgICBidWYsIHNpemVvZihidWYpKTtcXG4rXFx0QVNTRVJUX0VRKHN6LCAoc3NpemVfdClzaXplb2YoYWNsX2EpKTtcXG4rXFxuK1xcdHB0aHJlYWRfbXV0ZXhfbG9jayhcXHUwMDI2Z19kcy5sb2NrKTtcXG4rXFx0Y291bnQgPSBnX2RzLmdldHhhdHRyX2NvdW50O1xcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2Z19kcy5sb2NrKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShjb3VudCwgMik7XFxuK1xcdFRIX0xPRyhcXFwic3RlcCAxIE9LOiBib3RoIHByZS10cmlnZ2VyIGdldHhhdHRycyByZWFjaGVkIGRhZW1vbiAoY291bnQ9JWQpLCBcXFwiXFxuK1xcdCAgICAgICBcXFwiQUNMX0RPTlRfQ0FDSEUgaXMgd29ya2luZ1xcXCIsIGNvdW50KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN0ZXAgMjogc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykuXFxuK1xcdCAqIGZ1c2VfdXBkYXRlX2dldF9hdHRyKCkgY2FsbHMgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGJlZm9yZSBzZW5kaW5nXFxuK1xcdCAqIEZVU0VfR0VUQVRUUi5cXG4rXFx0ICogICBCdWdneSBrZXJuZWw6ICBBQ0xfRE9OVF9DQUNIRSAtXFx1MDAzZSBBQ0xfTk9UX0NBQ0hFRCAgKGNhY2hlIGVuYWJsZWQpXFxuK1xcdCAqICAgRml4ZWQga2VybmVsOiAgQUNMX0RPTlRfQ0FDSEUgcHJlc2VydmVkICAgICAgICAgICAobm8gZWZmZWN0KVxcbitcXHQgKi9cXG4rXFx0QVNTRVJUX0VRKGRvX2ZvcmNlX3N0YXR4KHNlbGYtXFx1MDAzZWZpbGVfcGF0aCksIDApO1xcbitcXHRUSF9MT0coXFxcInN0ZXAgMiBPSzogc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgc3VjY2VlZGVkXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTdGVwIDM6IGdldHhhdHRyIOKAlCBjYWNoZSBwb3B1bGF0aW9uIGF0dGVtcHQgYWZ0ZXIgdGhlIHRyaWdnZXIuXFxuK1xcdCAqICAgQnVnZ3k6ICAqcCA9PSBBQ0xfTk9UX0NBQ0hFRCAtXFx1MDAzZSBzZW50aW5lbCBwbGFjZWQgLVxcdTAwM2UgZnVzZV9nZXRfaW5vZGVfYWNsXFxuK1xcdCAqICAgICAgICAgICBjYWxsZWQgLVxcdTAwM2UgQUNMX0EgcGFyc2VkIGFuZCBzdG9yZWQgaW4gdGhlIGtlcm5lbCBjYWNoZS5cXG4rXFx0ICogICBGaXhlZDogICpwID09IEFDTF9ET05UX0NBQ0hFIC1cXHUwMDNlIHNlbnRpbmVsIHBsYWNlbWVudCBza2lwcGVkIC1cXHUwMDNlXFxuK1xcdCAqICAgICAgICAgICBmdXNlX2dldF9pbm9kZV9hY2wgY2FsbGVkIGJ1dCByZXN1bHQgbm90IGNhY2hlZC5cXG4rXFx0ICogRWl0aGVyIHdheSB0aGUgY29ycmVjdCBBQ0xfQSBpcyByZXR1cm5lZCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0c3ogPSBsZ2V0eGF0dHIoc2VsZi1cXHUwMDNlZmlsZV9wYXRoLCBcXFwic3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3NcXFwiLFxcbitcXHRcXHQgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7XFxuK1xcdEFTU0VSVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9hKSk7XFxuK1xcbitcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNmdfZHMubG9jayk7XFxuK1xcdGNvdW50ID0gZ19kcy5nZXR4YXR0cl9jb3VudDtcXG4rXFx0cHRocmVhZF9tdXRleF91bmxvY2soXFx1MDAyNmdfZHMubG9jayk7XFxuK1xcbitcXHRBU1NFUlRfRVEoY291bnQsIDMpO1xcbitcXHRUSF9MT0coXFxcInN0ZXAgMyBPSzogcG9zdC10cmlnZ2VyIGdldHhhdHRyIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksIFxcXCJcXG4rXFx0ICAgICAgIFxcXCJyZXR1cm5lZCBjb3JyZWN0IEFDTF9BICglemQgYnl0ZXMpXFxcIiwgY291bnQsIHN6KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFN0ZXAgNDogc3dpdGNoIGRhZW1vbiB0byBBQ0xfQiAoZGlmZmVyZW50IHNpemU6IDQ0IHZzIDI4IGJ5dGVzKS5cXG4rXFx0ICogU2ltdWxhdGVzIGFuIEFDTCBjaGFuZ2UgdGhhdCBmdXNlX3NldF9hY2woKSB3b3VsZCBOT1QgaW52YWxpZGF0ZSBmb3JcXG4rXFx0ICogIWZjLVxcdTAwM2Vwb3NpeF9hY2wgbW91bnRzIChpdCBza2lwcyBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzIGluIHRoYXQgY2FzZSkuXFxuK1xcdCAqIE9uIGEgZml4ZWQga2VybmVsIHRoZSBBQ0wgd2FzIG5ldmVyIGNhY2hlZCwgc28gdGhpcyBpcyBtb290LlxcbitcXHQgKi9cXG4rXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZnX2RzLmxvY2spO1xcbitcXHRnX2RzLmFjbCAgICAgID0gYWNsX2I7XFxuK1xcdGdfZHMuYWNsX3NpemUgPSBzaXplb2YoYWNsX2IpO1xcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2Z19kcy5sb2NrKTtcXG4rXFx0VEhfTE9HKFxcXCJzdGVwIDQ6IGRhZW1vbiBzd2l0Y2hlZCB0byBBQ0xfQiAoJXp1IGJ5dGVzKVxcXCIsIHNpemVvZihhY2xfYikpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU3RlcCA1OiBnZXR4YXR0ciDigJQgdGhlIGRlY2lzaXZlIGNoZWNrLlxcbitcXHQgKiAgIEJ1Z2d5IGtlcm5lbDogIGNhY2hlIGhpdCAtXFx1MDAzZSBzdGFsZSBBQ0xfQSAoMjggYnl0ZXMpLCBjb3VudCBzdGF5cyAzLlxcbitcXHQgKiAgIEZpeGVkIGtlcm5lbDogIG5vIGNhY2hlIC1cXHUwMDNlIGRhZW1vbiBjYWxsZWQgLVxcdTAwM2UgQUNMX0IgKDQ0IGJ5dGVzKSwgY291bnQgNC5cXG4rXFx0ICovXFxuK1xcdHN6ID0gbGdldHhhdHRyKHNlbGYtXFx1MDAzZWZpbGVfcGF0aCwgXFxcInN5c3RlbS5wb3NpeF9hY2xfYWNjZXNzXFxcIixcXG4rXFx0XFx0ICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXG4rXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZnX2RzLmxvY2spO1xcbitcXHRjb3VudCA9IGdfZHMuZ2V0eGF0dHJfY291bnQ7XFxuK1xcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFxcdTAwMjZnX2RzLmxvY2spO1xcbitcXG4rXFx0aWYgKHN6ID09IChzc2l6ZV90KXNpemVvZihhY2xfYSkpXFxuK1xcdFxcdFRIX0xPRyhcXFwic3RlcCA1IEJVRzogc3RhbGUgQUNMX0EgKCV6ZCBieXRlcykgZnJvbSBrZXJuZWwgY2FjaGUgXFxcIlxcbitcXHRcXHQgICAgICAgXFxcIihjb3VudD0lZCk7IEFDTF9ET05UX0NBQ0hFIGNvcnJ1cHRlZCBieSBcXFwiXFxuK1xcdFxcdCAgICAgICBcXFwiZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpXFxcIiwgc3osIGNvdW50KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRUSF9MT0coXFxcInN0ZXAgNSBPSzogZGFlbW9uIHJlYWNoZWQgKGNvdW50PSVkKSwgXFxcIlxcbitcXHRcXHQgICAgICAgXFxcImZyZXNoIEFDTF9CICglemQgYnl0ZXMpXFxcIiwgY291bnQsIHN6KTtcXG4rXFxuK1xcdEVYUEVDVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9iKSk7XFxuK1xcdEVYUEVDVF9FUShjb3VudCwgNCk7XFxuK31cXG4rXFxuK1RFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDAzOjEzOjMxLjI1MTIzNzEwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MTY2OTgyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfUE9TSVhfQUNMXCIsXG4gICAgXCJGVVNFX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc1wiLFxuICAgIFwiZm9yZ2V0X2NhY2hlZF9hY2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIHdoZXJlIGBBQ0xfRE9OVF9DQUNIRWAgY291bGQgYmUgaW5jb3JyZWN0bHkgcmVwbGFjZWQgd2l0aCBgQUNMX05PVF9DQUNIRURgLCBpbmFkdmVydGVudGx5IGVuYWJsaW5nIEFDTCBjYWNoaW5nIGZvciBpbm9kZXMgdGhhdCBzaG91bGRuJ3QgaGF2ZSBpdCAoZS5nLiwgRlVTRSBtb3VudHMgd2l0aG91dCBgRlVTRV9QT1NJWF9BQ0xgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVkZTL0FDTCBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYGZvcmdldF9hbGxfY2FjaGVkX2FjbHNgIGFuZCBgZm9yZ2V0X2NhY2hlZF9hY2xgIHRvIGVuc3VyZSBBQ0wgY2FjaGluZyBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzU3NjFjZDU1ZDgyNzYwZWQ4YThmN2Y1ODhlOTcyNmNmYWJmNWEwY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDAzOjEzOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvcG9zaXhfYWNsLmMgYi9mcy9wb3NpeF9hY2wuY1xuaW5kZXggYjRiZmU0ZGRmNjRlYTUuLjNkYzYyYzFjMjcwODdhIDEwMDY0NFxuLS0tIGEvZnMvcG9zaXhfYWNsLmNcbisrKyBiL2ZzL3Bvc2l4X2FjbC5jXG5AQCAtOTMsNiArOTMsMTMgQEAgc3RhdGljIHZvaWQgX19mb3JnZXRfY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICoqcClcbiB7XG4gXHRzdHJ1Y3QgcG9zaXhfYWNsICpvbGQ7XG4gXG4rXHQvKlxuK1x0ICogQUNMX0RPTlRfQ0FDSEUgaXMgZXhwZWN0ZWQgdG8gYmUgYSBcImNvbnN0XCIgdmFsdWUgYW5kIHhjaGcgaXQgd2l0aFxuK1x0ICogQUNMX05PVF9DQUNIRUQgd291bGQgZW5hYmxlIGFjbCBjYWNoaW5nIGZvciB0aGUgaW5vZGUgLVxuK1x0ICogY2xlYXJseSBub3Qgd2hhdCB0aGUgY2FsbGVyIGhhcyBpbnRlbmRlZC5cbitcdCAqL1xuK1x0aWYgKFJFQURfT05DRSgqcCkgPT0gQUNMX0RPTlRfQ0FDSEUpXG4rXHRcdHJldHVybjtcbiBcdG9sZCA9IHhjaGcocCwgQUNMX05PVF9DQUNIRUQpO1xuIFx0aWYgKCFpc191bmNhY2hlZF9hY2wob2xkKSlcbiBcdFx0cG9zaXhfYWNsX3JlbGVhc2Uob2xkKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuaW5kZXggNjEyYWFkNjlhOTNhYTQuLmY0NzE0MTQ4NDI3NTBhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9NYWtlZmlsZVxuQEAgLTUsNiArNSwxMyBAQCBDRkxBR1MgKz0gLVdhbGwgLU8yIC1nICQoS0hEUl9JTkNMVURFUylcbiBURVNUX0dFTl9QUk9HUyA6PSBmdXNlY3RsX3Rlc3RcbiBURVNUX0dFTl9GSUxFUyA6PSBmdXNlX21udFxuIFxuKyMgZnVzZV9hY2xfY2FjaGVfdGVzdCByZXF1aXJlcyBsaWJmdXNlMzsgYWRkIGl0IG9ubHkgd2hlbiB0aGUgbGlicmFyeSBpcyBwcmVzZW50LlxuK0FDTF9DRkxBR1MgOj0gJChzaGVsbCBwa2ctY29uZmlnIGZ1c2UzIC0tY2ZsYWdzIDJcdTAwM2UvZGV2L251bGwpXG4rQUNMX0xETElCUyA6PSAkKHNoZWxsIHBrZy1jb25maWcgZnVzZTMgLS1saWJzIDJcdTAwM2UvZGV2L251bGwpXG4raWZuZXEgKCQoQUNMX0NGTEFHUyksKVxuK1RFU1RfR0VOX1BST0dTICs9IGZ1c2VfYWNsX2NhY2hlX3Rlc3RcbitlbmRpZlxuK1xuIGluY2x1ZGUgLi4vLi4vbGliLm1rXG4gXG4gVkFSX0NGTEFHUyA6PSAkKHNoZWxsIHBrZy1jb25maWcgZnVzZSAtLWNmbGFncyAyXHUwMDNlL2Rldi9udWxsKVxuQEAgLTE5LDMgKzI2LDYgQEAgZW5kaWZcbiBcbiAkKE9VVFBVVCkvZnVzZV9tbnQ6IENGTEFHUyArPSAkKFZBUl9DRkxBR1MpXG4gJChPVVRQVVQpL2Z1c2VfbW50OiBMRExJQlMgKz0gJChWQVJfTERMSUJTKVxuK1xuKyQoT1VUUFVUKS9mdXNlX2FjbF9jYWNoZV90ZXN0OiBDRkxBR1MgKz0gJChBQ0xfQ0ZMQUdTKVxuKyQoT1VUUFVUKS9mdXNlX2FjbF9jYWNoZV90ZXN0OiBMRExJQlMgKz0gJChBQ0xfTERMSUJTKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjJlNWRiODU1NTA0MDlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jXG5AQCAtMCwwICsxLDM0OCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBUZXN0OiBGVVNFIEFDTCBjYWNoaW5nIGJ1ZyB0cmlnZ2VyZWQgYnkgQVRfU1RBVFhfRk9SQ0VfU1lOQ1xuKyAqXG4rICogQSBGVVNFIG1vdW50IHRoYXQgZG9lcyBub3QgbmVnb3RpYXRlIEZVU0VfUE9TSVhfQUNMIGluaXRpYWxpc2VzIGV2ZXJ5IGlub2RlXG4rICogd2l0aCBpX2FjbCA9IGlfZGVmYXVsdF9hY2wgPSBBQ0xfRE9OVF9DQUNIRS4gIFdoZW4gYSBmcmVzaCBzdGF0IGlzIG5lZWRlZFxuKyAqIChlLmcuIEFUX1NUQVRYX0ZPUkNFX1NZTkMpLCBmdXNlX3VwZGF0ZV9nZXRfYXR0cigpIGNhbGxzXG4rICogZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGJlZm9yZSBpc3N1aW5nIEZVU0VfR0VUQVRUUi4gIE9uIGFuIHVuZml4ZWQga2VybmVsLFxuKyAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxuKyAqIGluYWR2ZXJ0ZW50bHkgZW5hYmxpbmcgdGhlIGtlcm5lbCBBQ0wgY2FjaGUgZm9yIHRoYXQgaW5vZGUuICBUaGUgbmV4dFxuKyAqIGdldHhhdHRyIHBvcHVsYXRlcyB0aGUgY2FjaGUuICBCZWNhdXNlIGZ1c2Vfc2V0X2FjbCgpIHNraXBzXG4rICogZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGZvciAhZmMtXHUwMDNlcG9zaXhfYWNsIG1vdW50cywgYW55IHN1YnNlcXVlbnQgY2hhbmdlIHRvXG4rICogdGhlIEFDTCBsZWF2ZXMgdGhlIHN0YWxlIGtlcm5lbCBlbnRyeSBpbiBwbGFjZSwgYW5kIHRoZSBuZXh0IGdldHhhdHRyIHJldHVybnNcbisgKiB3cm9uZyBkYXRhIHdpdGhvdXQgZXZlciByZWFjaGluZyB0aGUgRlVTRSBkYWVtb24uXG4rICpcbisgKiBGaXggKGZzL3Bvc2l4X2FjbC5jKTogX19mb3JnZXRfY2FjaGVkX2FjbCgpIHJldHVybnMgZWFybHkgd2hlbiAqcCBpc1xuKyAqIEFDTF9ET05UX0NBQ0hFLCBwcmVzZXJ2aW5nIHRoZSBcIm5ldmVyIGNhY2hlXCIgaW52YXJpYW50IGZvciB0aGUgaW5vZGUnc1xuKyAqIGxpZmV0aW1lLlxuKyAqXG4rICogVGVzdCBvdXRsaW5lOlxuKyAqICAxLiBNb3VudCBhIG1pbmltYWwgRlVTRSBmcyAobm8gRlVTRV9QT1NJWF9BQ0wgbmVnb3RpYXRlZCkuXG4rICogIDIuIGxnZXR4YXR0ciAtXHUwMDNlIGRhZW1vbiBjYWxsZWQsIEFDTF9BIHJldHVybmVkLCBOT1QgY2FjaGVkIChBQ0xfRE9OVF9DQUNIRSkuXG4rICogIDMuIHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpIC1cdTAwM2UgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGNhbGxlZC5cbisgKiAgICAgQnVnZ3k6ICBBQ0xfRE9OVF9DQUNIRSAtXHUwMDNlIEFDTF9OT1RfQ0FDSEVEIChjYWNoZSBlbmFibGVkKS5cbisgKiAgICAgRml4ZWQ6ICBBQ0xfRE9OVF9DQUNIRSBwcmVzZXJ2ZWQuXG4rICogIDQuIGxnZXR4YXR0ciAtXHUwMDNlIGRhZW1vbiBjYWxsZWQsIEFDTF9BIHJldHVybmVkLlxuKyAqICAgICBCdWdneTogIHJlc3VsdCBub3cgY2FjaGVkIChBQ0xfTk9UX0NBQ0hFRCAtXHUwMDNlIGNhY2hlZCkuXG4rICogICAgIEZpeGVkOiAgcmVzdWx0IHN0aWxsIG5vdCBjYWNoZWQuXG4rICogIDUuIERhZW1vbiBzd2l0Y2hlcyB0byBBQ0xfQiBpbnRlcm5hbGx5IChkaWZmZXJlbnQgc2l6ZSkuXG4rICogIDYuIGxnZXR4YXR0ciAtXHUwMDNlIHNob3VsZCByZXR1cm4gQUNMX0IgKDQ0IGJ5dGVzKS5cbisgKiAgICAgQnVnZ3k6ICBjYWNoZSBoaXQsIHJldHVybnMgc3RhbGUgQUNMX0EgKDI4IGJ5dGVzKS4gRkFJTC5cbisgKiAgICAgRml4ZWQ6ICBubyBjYWNoZSwgZGFlbW9uIGNhbGxlZCwgcmV0dXJucyBBQ0xfQiAoNDQgYnl0ZXMpLiBQQVNTLlxuKyAqL1xuK1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3hhdHRyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNkZWZpbmUgRlVTRV9VU0VfVkVSU0lPTiAzMVxuKyNpbmNsdWRlIFx1MDAzY2Z1c2VfbG93bGV2ZWwuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4rXG4rLyogLS0tLSBBQ0wgYmluYXJ5IGVuY29kaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuKy8qXG4rICogUE9TSVggQUNMIHYyIHhhdHRyIGZvcm1hdCAobGl0dGxlLWVuZGlhbik6XG4rICogICBoZWFkZXI6IHUzMiB2ZXJzaW9uICg9IDB4MDAwMDAwMDIpXG4rICogICBlbnRyeTogIHUxNiB0YWcgfCB1MTYgcGVybSB8IHUzMiBpZFxuKyAqXG4rICogRW50cmllcyBtdXN0IGFwcGVhciBpbiB0YWctYXNjZW5kaW5nIG9yZGVyOyBuYW1lZCBVU0VSL0dST1VQIGVudHJpZXNcbisgKiByZXF1aXJlIGEgTUFTSyBlbnRyeS4gIEJvdGggQUNMcyBwYXNzIHBvc2l4X2FjbF9mcm9tX3hhdHRyKCkgdmFsaWRhdGlvbi5cbisgKi9cbitcbisvKiBBQ0xfQTogMyBlbnRyaWVzIChVU0VSX09CSjpyd3gsIEdST1VQX09CSjpyLXgsIE9USEVSOnIteCkgPSAyOCBieXRlcyAqL1xuK3N0YXRpYyBjb25zdCB1aW50OF90IGFjbF9hW10gPSB7XG4rXHQweDAyLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2MiBoZWFkZXIgICAgICAqL1xuK1x0MHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogVVNFUl9PQkogIHJ3eCAgKi9cbitcdDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIEdST1VQX09CSiByLXggICovXG4rXHQweDIwLCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBPVEhFUiAgICAgci14ICAqL1xuK307XG4rXG4rLypcbisgKiBBQ0xfQjogNSBlbnRyaWVzIOKAlCBhZGRzIFVTRVIgdWlkPTEgYW5kIE1BU0sgPSA0NCBieXRlcy5cbisgKiBBIG5hbWVkIFVTRVIgZW50cnkgcmVxdWlyZXMgYSBNQVNLOyBhbGwgdGFncyBpbiBhc2NlbmRpbmcgb3JkZXIuXG4rICovXG4rc3RhdGljIGNvbnN0IHVpbnQ4X3QgYWNsX2JbXSA9IHtcbitcdDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHYyIGhlYWRlciAgICAgICAqL1xuK1x0MHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogVVNFUl9PQkogICByd3ggICovXG4rXHQweDAyLCAweDAwLCAweDA3LCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAvKiBVU0VSIHVpZD0xIHJ3eCAgKi9cbitcdDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8qIEdST1VQX09CSiAgci14ICAqL1xuK1x0MHgxMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLyogTUFTSyAgICAgICByd3ggICovXG4rXHQweDIwLCAweDAwLCAweDA1LCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvKiBPVEhFUiAgICAgIHIteCAgKi9cbit9O1xuK1xuKy8qIC0tLS0gU2hhcmVkIHN0YXRlIChkYWVtb24gdGhyZWFkIFx1MDAzYy1cdTAwM2UgdGVzdCB0aHJlYWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4rXG4rI2RlZmluZSBGSUxFX0lOTyAgMlxuKyNkZWZpbmUgRklMRV9OQU1FIFwidGVzdGZpbGVcIlxuK1xuK3N0cnVjdCBkYWVtb25fc3RhdGUge1xuK1x0cHRocmVhZF9tdXRleF90IGxvY2s7XG4rXHRjb25zdCB1aW50OF90ICAqYWNsO1xuK1x0c2l6ZV90ICAgICAgICAgIGFjbF9zaXplO1xuK1x0aW50ICAgICAgICAgICAgIGdldHhhdHRyX2NvdW50O1xuK307XG4rXG4rLypcbisgKiBHbG9iYWw6IGNhbGxiYWNrcyBhcmUgc3RhdGVsZXNzIGZucyBzbyB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsLlxuKyAqIFNhZmUgYmVjYXVzZSBvbmx5IG9uZSB0ZXN0IGluc3RhbmNlIHJ1bnMgYXQgYSB0aW1lLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgZGFlbW9uX3N0YXRlIGdfZHMgPSB7XG4rXHQubG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsXG4rfTtcbitcbisvKiAtLS0tIEZVU0UgbG93bGV2ZWwgY2FsbGJhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4rXG4rc3RhdGljIHZvaWQgZnNfbG9va3VwKGZ1c2VfcmVxX3QgcmVxLCBmdXNlX2lub190IHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRpZiAocGFyZW50ICE9IEZVU0VfUk9PVF9JRCB8fCBzdHJjbXAobmFtZSwgRklMRV9OQU1FKSkge1xuK1x0XHRmdXNlX3JlcGx5X2VycihyZXEsIEVOT0VOVCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHN0cnVjdCBmdXNlX2VudHJ5X3BhcmFtIGUgPSB7fTtcbitcbitcdC8qXG4rXHQgKiBMb25nIGF0dHIvZW50cnkgdGltZW91dHMgc28gdGhhdCBub3JtYWwgc3RhdCgpIGNhbGxzIGRvIG5vdFxuK1x0ICogZXhwaXJlIGFuZCB0cmlnZ2VyIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSBvbiB0aGVpciBvd247XG4rXHQgKiBvbmx5IHRoZSBleHBsaWNpdCBBVF9TVEFUWF9GT1JDRV9TWU5DIHNob3VsZCB0cmlnZ2VyIGl0LlxuK1x0ICovXG4rXHRlLmlubyAgICAgICAgICAgICA9IEZJTEVfSU5PO1xuK1x0ZS5nZW5lcmF0aW9uICAgICAgPSAxO1xuK1x0ZS5hdHRyX3RpbWVvdXQgICAgPSAxMC4wO1xuK1x0ZS5lbnRyeV90aW1lb3V0ICAgPSAxMC4wO1xuK1x0ZS5hdHRyLnN0X2lubyAgICAgPSBGSUxFX0lOTztcbitcdGUuYXR0ci5zdF9tb2RlICAgID0gU19JRlJFRyB8IDA2NDQ7XG4rXHRlLmF0dHIuc3RfbmxpbmsgICA9IDE7XG4rXHRmdXNlX3JlcGx5X2VudHJ5KHJlcSwgXHUwMDI2ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGZzX2dldGF0dHIoZnVzZV9yZXFfdCByZXEsIGZ1c2VfaW5vX3QgaW5vLFxuK1x0XHQgICAgICAgc3RydWN0IGZ1c2VfZmlsZV9pbmZvICpmaSlcbit7XG4rXHRzdHJ1Y3Qgc3RhdCBzdCA9IHt9O1xuK1xuK1x0KHZvaWQpZmk7XG4rXHRpZiAoaW5vID09IEZVU0VfUk9PVF9JRCkge1xuK1x0XHRzdC5zdF9pbm8gICA9IEZVU0VfUk9PVF9JRDtcbitcdFx0c3Quc3RfbW9kZSAgPSBTX0lGRElSIHwgMDc1NTtcbitcdFx0c3Quc3RfbmxpbmsgPSAyO1xuK1x0fSBlbHNlIGlmIChpbm8gPT0gRklMRV9JTk8pIHtcbitcdFx0c3Quc3RfaW5vICAgPSBGSUxFX0lOTztcbitcdFx0c3Quc3RfbW9kZSAgPSBTX0lGUkVHIHwgMDY0NDtcbitcdFx0c3Quc3RfbmxpbmsgPSAxO1xuK1x0fSBlbHNlIHtcbitcdFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9FTlQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRmdXNlX3JlcGx5X2F0dHIocmVxLCBcdTAwMjZzdCwgMTApO1xuK31cbitcbitzdGF0aWMgdm9pZCBmc19nZXR4YXR0cihmdXNlX3JlcV90IHJlcSwgZnVzZV9pbm9fdCBpbm8sIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0c2l6ZV90IHNpemUpXG4re1xuK1x0aWYgKGlubyAhPSBGSUxFX0lOTyB8fFxuK1x0ICAgIHN0cmNtcChuYW1lLCBcInN5c3RlbS5wb3NpeF9hY2xfYWNjZXNzXCIpICE9IDApIHtcbitcdFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFTk9EQVRBKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4rXHRjb25zdCB1aW50OF90ICphY2wgICAgICA9IGdfZHMuYWNsO1xuK1x0c2l6ZV90ICAgICAgICAgYWNsX3NpemUgPSBnX2RzLmFjbF9zaXplO1xuK1x0Z19kcy5nZXR4YXR0cl9jb3VudCsrO1xuK1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2Z19kcy5sb2NrKTtcbitcbitcdGlmIChzaXplID09IDApXG4rXHRcdGZ1c2VfcmVwbHlfeGF0dHIocmVxLCBhY2xfc2l6ZSk7XG4rXHRlbHNlIGlmIChzaXplIFx1MDAzYyBhY2xfc2l6ZSlcbitcdFx0ZnVzZV9yZXBseV9lcnIocmVxLCBFUkFOR0UpO1xuK1x0ZWxzZVxuK1x0XHRmdXNlX3JlcGx5X2J1ZihyZXEsIChjb25zdCBjaGFyICopYWNsLCBhY2xfc2l6ZSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnVzZV9sb3dsZXZlbF9vcHMgZnNfb3BzID0ge1xuK1x0Lmxvb2t1cCAgID0gZnNfbG9va3VwLFxuK1x0LmdldGF0dHIgID0gZnNfZ2V0YXR0cixcbitcdC5nZXR4YXR0ciA9IGZzX2dldHhhdHRyLFxuK307XG4rXG4rLyogLS0tLSBEYWVtb24gdGhyZWFkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbitcbitzdGF0aWMgdm9pZCAqcnVuX2RhZW1vbih2b2lkICphcmcpXG4re1xuK1x0ZnVzZV9zZXNzaW9uX2xvb3AoKHN0cnVjdCBmdXNlX3Nlc3Npb24gKilhcmcpO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuKy8qIC0tLS0ga3NlbGZ0ZXN0IGhhcm5lc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4rXG4rRklYVFVSRShhY2xfY2FjaGUpIHtcbitcdHN0cnVjdCBmdXNlX3Nlc3Npb24gKnNlO1xuK1x0Y2hhciAgICAgICAgICAgICAgICAgbW91bnRwb2ludFtQQVRIX01BWF07XG4rXHRjaGFyICAgICAgICAgICAgICAgICBmaWxlX3BhdGhbUEFUSF9NQVhdO1xuK1x0cHRocmVhZF90ICAgICAgICAgICAgdGhyZWFkO1xuK307XG4rXG4rRklYVFVSRV9TRVRVUChhY2xfY2FjaGUpXG4re1xuK1x0Y2hhciAqZnVzZV9hcmd2W10gPSB7IFwiZnVzZV9hY2xfY2FjaGVfdGVzdFwiLCBOVUxMIH07XG4rXHRzdHJ1Y3QgZnVzZV9hcmdzIGFyZ3MgPSBGVVNFX0FSR1NfSU5JVCgxLCBmdXNlX2FyZ3YpO1xuK1xuK1x0Z19kcy5hY2wgICAgICAgICAgICA9IGFjbF9hO1xuK1x0Z19kcy5hY2xfc2l6ZSAgICAgICA9IHNpemVvZihhY2xfYSk7XG4rXHRnX2RzLmdldHhhdHRyX2NvdW50ID0gMDtcbitcbitcdHN0cmNweShzZWxmLVx1MDAzZW1vdW50cG9pbnQsIFwiL3RtcC9hY2xfY2FjaGVfdGVzdF9YWFhYWFhcIik7XG4rXHRpZiAoIW1rZHRlbXAoc2VsZi1cdTAwM2Vtb3VudHBvaW50KSlcbitcdFx0U0tJUChyZXR1cm4sIFwibWtkdGVtcDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcbitcdHNucHJpbnRmKHNlbGYtXHUwMDNlZmlsZV9wYXRoLCBzaXplb2Yoc2VsZi1cdTAwM2VmaWxlX3BhdGgpLFxuK1x0XHQgXCIlcy9cIiBGSUxFX05BTUUsIHNlbGYtXHUwMDNlbW91bnRwb2ludCk7XG4rXG4rXHRzZWxmLVx1MDAzZXNlID0gZnVzZV9zZXNzaW9uX25ldyhcdTAwMjZhcmdzLCBcdTAwMjZmc19vcHMsIHNpemVvZihmc19vcHMpLCBOVUxMKTtcbitcdGlmICghc2VsZi1cdTAwM2VzZSkge1xuK1x0XHRybWRpcihzZWxmLVx1MDAzZW1vdW50cG9pbnQpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJmdXNlX3Nlc3Npb25fbmV3IGZhaWxlZFwiKTtcbitcdH1cbitcbitcdGlmIChmdXNlX3Nlc3Npb25fbW91bnQoc2VsZi1cdTAwM2VzZSwgc2VsZi1cdTAwM2Vtb3VudHBvaW50KSkge1xuK1x0XHRmdXNlX3Nlc3Npb25fZGVzdHJveShzZWxmLVx1MDAzZXNlKTtcbitcdFx0cm1kaXIoc2VsZi1cdTAwM2Vtb3VudHBvaW50KTtcbitcdFx0U0tJUChyZXR1cm4sIFwiZnVzZV9zZXNzaW9uX21vdW50IGZhaWxlZCBcIlxuK1x0XHRcdCAgICAgXCIobWlzc2luZyBmdXNlcm1vdW50MyBvciBpbnN1ZmZpY2llbnQgcHJpdmlsZWdlcylcIik7XG4rXHR9XG4rXG4rXHRpZiAocHRocmVhZF9jcmVhdGUoXHUwMDI2c2VsZi1cdTAwM2V0aHJlYWQsIE5VTEwsIHJ1bl9kYWVtb24sIHNlbGYtXHUwMDNlc2UpKSB7XG4rXHRcdGZ1c2Vfc2Vzc2lvbl91bm1vdW50KHNlbGYtXHUwMDNlc2UpO1xuK1x0XHRmdXNlX3Nlc3Npb25fZGVzdHJveShzZWxmLVx1MDAzZXNlKTtcbitcdFx0cm1kaXIoc2VsZi1cdTAwM2Vtb3VudHBvaW50KTtcbitcdFx0U0tJUChyZXR1cm4sIFwicHRocmVhZF9jcmVhdGU6ICVzXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHR9XG4rXG4rXHRmdXNlX29wdF9mcmVlX2FyZ3MoXHUwMDI2YXJncyk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oYWNsX2NhY2hlKVxuK3tcbitcdGZ1c2Vfc2Vzc2lvbl9leGl0KHNlbGYtXHUwMDNlc2UpO1xuK1x0ZnVzZV9zZXNzaW9uX3VubW91bnQoc2VsZi1cdTAwM2VzZSk7XG4rXHRwdGhyZWFkX2pvaW4oc2VsZi1cdTAwM2V0aHJlYWQsIE5VTEwpO1xuK1x0ZnVzZV9zZXNzaW9uX2Rlc3Ryb3koc2VsZi1cdTAwM2VzZSk7XG4rXHRybWRpcihzZWxmLVx1MDAzZW1vdW50cG9pbnQpO1xuK31cbitcbitzdGF0aWMgaW50IGRvX2ZvcmNlX3N0YXR4KGNvbnN0IGNoYXIgKnBhdGgpXG4re1xuK1x0c3RydWN0IHN0YXR4IHN0eDtcbitcbitcdHJldHVybiBzeXNjYWxsKFNZU19zdGF0eCwgQVRfRkRDV0QsIHBhdGgsXG4rXHRcdCAgICAgICBBVF9TVEFUWF9GT1JDRV9TWU5DLCBTVEFUWF9CQVNJQ19TVEFUUywgXHUwMDI2c3R4KTtcbit9XG4rXG4rVEVTVF9GKGFjbF9jYWNoZSwgc3RhbGVfYWZ0ZXJfZm9yY2Vfc3luYylcbit7XG4rXHRjaGFyICAgIGJ1Zls1MTJdO1xuK1x0c3NpemVfdCBzejtcbitcdGludCAgICAgY291bnQ7XG4rXG4rXHQvKlxuK1x0ICogU3RlcCAxOiB0d28gZ2V0eGF0dHIgY2FsbHMgYmVmb3JlIGFueSBzdGF0eChGT1JDRV9TWU5DKS5cbitcdCAqIGlfYWNsID09IEFDTF9ET05UX0NBQ0hFLiAgX19nZXRfYWNsJ3MgY21weGNoZyhwLCBBQ0xfTk9UX0NBQ0hFRCxcbitcdCAqIHNlbnRpbmVsKSBmaW5kcyAqcCAhPSBBQ0xfTk9UX0NBQ0hFRCBvbiBldmVyeSBjYWxsLCBzbyB0aGUgc2VudGluZWxcbitcdCAqIGlzIG5ldmVyIHBsYWNlZCBhbmQgdGhlIHJlc3VsdCBpcyBuZXZlciBjYWNoZWQuICBCb3RoIGNhbGxzIG11c3RcbitcdCAqIHJlYWNoIHRoZSBkYWVtb24sIHByb3ZpbmcgQUNMX0RPTlRfQ0FDSEUgc3VwcHJlc3NlcyBjYWNoaW5nLlxuK1x0ICovXG4rXHRzeiA9IGxnZXR4YXR0cihzZWxmLVx1MDAzZWZpbGVfcGF0aCwgXCJzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1wiLFxuK1x0XHQgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRBU1NFUlRfRVEoc3osIChzc2l6ZV90KXNpemVvZihhY2xfYSkpO1xuK1xuK1x0c3ogPSBsZ2V0eGF0dHIoc2VsZi1cdTAwM2VmaWxlX3BhdGgsIFwic3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3NcIixcbitcdFx0ICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0QVNTRVJUX0VRKHN6LCAoc3NpemVfdClzaXplb2YoYWNsX2EpKTtcbitcbitcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZnX2RzLmxvY2spO1xuK1x0Y291bnQgPSBnX2RzLmdldHhhdHRyX2NvdW50O1xuK1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2Z19kcy5sb2NrKTtcbitcbitcdEFTU0VSVF9FUShjb3VudCwgMik7XG4rXHRUSF9MT0coXCJzdGVwIDEgT0s6IGJvdGggcHJlLXRyaWdnZXIgZ2V0eGF0dHJzIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksIFwiXG4rXHQgICAgICAgXCJBQ0xfRE9OVF9DQUNIRSBpcyB3b3JraW5nXCIsIGNvdW50KTtcbitcbitcdC8qXG4rXHQgKiBTdGVwIDI6IHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpLlxuK1x0ICogZnVzZV91cGRhdGVfZ2V0X2F0dHIoKSBjYWxscyBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgYmVmb3JlIHNlbmRpbmdcbitcdCAqIEZVU0VfR0VUQVRUUi5cbitcdCAqICAgQnVnZ3kga2VybmVsOiAgQUNMX0RPTlRfQ0FDSEUgLVx1MDAzZSBBQ0xfTk9UX0NBQ0hFRCAgKGNhY2hlIGVuYWJsZWQpXG4rXHQgKiAgIEZpeGVkIGtlcm5lbDogIEFDTF9ET05UX0NBQ0hFIHByZXNlcnZlZCAgICAgICAgICAgKG5vIGVmZmVjdClcbitcdCAqL1xuK1x0QVNTRVJUX0VRKGRvX2ZvcmNlX3N0YXR4KHNlbGYtXHUwMDNlZmlsZV9wYXRoKSwgMCk7XG4rXHRUSF9MT0coXCJzdGVwIDIgT0s6IHN0YXR4KEFUX1NUQVRYX0ZPUkNFX1NZTkMpIHN1Y2NlZWRlZFwiKTtcbitcbitcdC8qXG4rXHQgKiBTdGVwIDM6IGdldHhhdHRyIOKAlCBjYWNoZSBwb3B1bGF0aW9uIGF0dGVtcHQgYWZ0ZXIgdGhlIHRyaWdnZXIuXG4rXHQgKiAgIEJ1Z2d5OiAgKnAgPT0gQUNMX05PVF9DQUNIRUQgLVx1MDAzZSBzZW50aW5lbCBwbGFjZWQgLVx1MDAzZSBmdXNlX2dldF9pbm9kZV9hY2xcbitcdCAqICAgICAgICAgICBjYWxsZWQgLVx1MDAzZSBBQ0xfQSBwYXJzZWQgYW5kIHN0b3JlZCBpbiB0aGUga2VybmVsIGNhY2hlLlxuK1x0ICogICBGaXhlZDogICpwID09IEFDTF9ET05UX0NBQ0hFIC1cdTAwM2Ugc2VudGluZWwgcGxhY2VtZW50IHNraXBwZWQgLVx1MDAzZVxuK1x0ICogICAgICAgICAgIGZ1c2VfZ2V0X2lub2RlX2FjbCBjYWxsZWQgYnV0IHJlc3VsdCBub3QgY2FjaGVkLlxuK1x0ICogRWl0aGVyIHdheSB0aGUgY29ycmVjdCBBQ0xfQSBpcyByZXR1cm5lZCBoZXJlLlxuK1x0ICovXG4rXHRzeiA9IGxnZXR4YXR0cihzZWxmLVx1MDAzZWZpbGVfcGF0aCwgXCJzeXN0ZW0ucG9zaXhfYWNsX2FjY2Vzc1wiLFxuK1x0XHQgICAgICAgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRBU1NFUlRfRVEoc3osIChzc2l6ZV90KXNpemVvZihhY2xfYSkpO1xuK1xuK1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4rXHRjb3VudCA9IGdfZHMuZ2V0eGF0dHJfY291bnQ7XG4rXHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZnX2RzLmxvY2spO1xuK1xuK1x0QVNTRVJUX0VRKGNvdW50LCAzKTtcbitcdFRIX0xPRyhcInN0ZXAgMyBPSzogcG9zdC10cmlnZ2VyIGdldHhhdHRyIHJlYWNoZWQgZGFlbW9uIChjb3VudD0lZCksIFwiXG4rXHQgICAgICAgXCJyZXR1cm5lZCBjb3JyZWN0IEFDTF9BICglemQgYnl0ZXMpXCIsIGNvdW50LCBzeik7XG4rXG4rXHQvKlxuK1x0ICogU3RlcCA0OiBzd2l0Y2ggZGFlbW9uIHRvIEFDTF9CIChkaWZmZXJlbnQgc2l6ZTogNDQgdnMgMjggYnl0ZXMpLlxuK1x0ICogU2ltdWxhdGVzIGFuIEFDTCBjaGFuZ2UgdGhhdCBmdXNlX3NldF9hY2woKSB3b3VsZCBOT1QgaW52YWxpZGF0ZSBmb3JcbitcdCAqICFmYy1cdTAwM2Vwb3NpeF9hY2wgbW91bnRzIChpdCBza2lwcyBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzIGluIHRoYXQgY2FzZSkuXG4rXHQgKiBPbiBhIGZpeGVkIGtlcm5lbCB0aGUgQUNMIHdhcyBuZXZlciBjYWNoZWQsIHNvIHRoaXMgaXMgbW9vdC5cbitcdCAqL1xuK1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4rXHRnX2RzLmFjbCAgICAgID0gYWNsX2I7XG4rXHRnX2RzLmFjbF9zaXplID0gc2l6ZW9mKGFjbF9iKTtcbitcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNmdfZHMubG9jayk7XG4rXHRUSF9MT0coXCJzdGVwIDQ6IGRhZW1vbiBzd2l0Y2hlZCB0byBBQ0xfQiAoJXp1IGJ5dGVzKVwiLCBzaXplb2YoYWNsX2IpKTtcbitcbitcdC8qXG4rXHQgKiBTdGVwIDU6IGdldHhhdHRyIOKAlCB0aGUgZGVjaXNpdmUgY2hlY2suXG4rXHQgKiAgIEJ1Z2d5IGtlcm5lbDogIGNhY2hlIGhpdCAtXHUwMDNlIHN0YWxlIEFDTF9BICgyOCBieXRlcyksIGNvdW50IHN0YXlzIDMuXG4rXHQgKiAgIEZpeGVkIGtlcm5lbDogIG5vIGNhY2hlIC1cdTAwM2UgZGFlbW9uIGNhbGxlZCAtXHUwMDNlIEFDTF9CICg0NCBieXRlcyksIGNvdW50IDQuXG4rXHQgKi9cbitcdHN6ID0gbGdldHhhdHRyKHNlbGYtXHUwMDNlZmlsZV9wYXRoLCBcInN5c3RlbS5wb3NpeF9hY2xfYWNjZXNzXCIsXG4rXHRcdCAgICAgICBidWYsIHNpemVvZihidWYpKTtcbitcbitcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZnX2RzLmxvY2spO1xuK1x0Y291bnQgPSBnX2RzLmdldHhhdHRyX2NvdW50O1xuK1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2Z19kcy5sb2NrKTtcbitcbitcdGlmIChzeiA9PSAoc3NpemVfdClzaXplb2YoYWNsX2EpKVxuK1x0XHRUSF9MT0coXCJzdGVwIDUgQlVHOiBzdGFsZSBBQ0xfQSAoJXpkIGJ5dGVzKSBmcm9tIGtlcm5lbCBjYWNoZSBcIlxuK1x0XHQgICAgICAgXCIoY291bnQ9JWQpOyBBQ0xfRE9OVF9DQUNIRSBjb3JydXB0ZWQgYnkgXCJcbitcdFx0ICAgICAgIFwiZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpXCIsIHN6LCBjb3VudCk7XG4rXHRlbHNlXG4rXHRcdFRIX0xPRyhcInN0ZXAgNSBPSzogZGFlbW9uIHJlYWNoZWQgKGNvdW50PSVkKSwgXCJcbitcdFx0ICAgICAgIFwiZnJlc2ggQUNMX0IgKCV6ZCBieXRlcylcIiwgY291bnQsIHN6KTtcbitcbitcdEVYUEVDVF9FUShzeiwgKHNzaXplX3Qpc2l6ZW9mKGFjbF9iKSk7XG4rXHRFWFBFQ1RfRVEoY291bnQsIDQpO1xuK31cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6MzEuMjUxMjM4ODQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYyOTkzNjcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGZzL3Bvc2l4X2FjbC5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy9wb3NpeF9hY2wuY2AsIHNwZWNpZmljYWxseSB0aGUgYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGZ1bmN0aW9uLiBUaGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBpdCBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgVkZTIGFuZCBBQ0wgaGFuZGxpbmcsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseS5cblxuQmFzaWNhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBpZiB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBgcGAgKHdoaWNoLCBhcyBJIHJlY2FsbCwgbGlrZWx5IHJlcHJlc2VudHMgdGhlIGNhY2hlZCBBQ0wgc3RhdHVzKSBpcyBhbHJlYWR5IGBBQ0xfRE9OVF9DQUNIRWAsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMuIFRoZSBjb21tZW50IGV4cGxhaW5zIHRoZSByYXRpb25hbGUsIHdoaWNoIGlzIGNydWNpYWwgaGVyZS4gVGhleSBhcmUgY29uY2VybmVkIHRoYXQgYHhjaGdgaW5nIGBBQ0xfRE9OVF9DQUNIRWAgKHdoaWNoIGlzLCBieSBkZWZpbml0aW9uLCBpbnRlbmRlZCB0byBiZSBhICpjb25zdGFudCogbWVhbmluZyB0aGF0IHRoZSBBQ0wgKnNob3VsZG4ndCogYmUgY2FjaGVkKSB3aXRoIGBBQ0xfTk9UX0NBQ0hFRGAgKG1lYW5pbmcgdGhlIEFDTCAqaXNuJ3QqIGNhY2hlZCkgd291bGQgaW5hZHZlcnRlbnRseSAqZW5hYmxlKiBjYWNoaW5nIHdoZW4gdGhlIGludGVudGlvbiBpcyB0aGUgb3Bwb3NpdGUuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYHhjaGdgIGNhbiBiZSBhIGJsdW50IHRvb2wsIGFuZCB3ZSB3b3VsZG4ndCB3YW50IHRvIGFjY2lkZW50YWxseSBmbGlwIGEgY3J1Y2lhbCBmbGFnLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgcHJpbWFyaWx5IGltcGFjdHMgZmlsZXN5c3RlbXMgdGhhdCBkZWxpYmVyYXRlbHkgKmF2b2lkKiBjYWNoaW5nIEFDTHMsIHdoaWNoLCBhcyB0aGUgdGV4dCBub3Rlcywgd2lsbCBkZWZpbml0ZWx5IGluY2x1ZGUgRlVTRSB3aXRob3V0IGBGVVNFX1BPU0lYX0FDTGAuIEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUsIGJ1dCBuYXN0eSwgYnVncyBpZiB3ZSB3ZXJlIHRvIGluYWR2ZXJ0ZW50bHkgZW5hYmxlIGNhY2hpbmcgd2hlbiBpdCdzIHNwZWNpZmljYWxseSBkaXNhYmxlZC4gU28sIHRoZSBmaXggbWFrZXMgc2Vuc2UuXG5cbk5vdywgSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgX19mb3JnZXRfY2FjaGVkX2FjbGAgaW4gYGZzL3Bvc2l4X2FjbC5jYCB0byBzZWUgaWYgbXkgbWVudGFsIG1vZGVsIGlzIGNvcnJlY3QuIEkgd2FudCB0byB0cmFjZSB0aGUgY29kZSB0byBiZSAxMDAlIHN1cmUgdGhpcyBsb2dpYyBhcHBsaWVzIHdoZXJlIEkgdGhpbmsgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDAzOjEzOjM2Ljg4MTE3NzI4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIzNTcyNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9yZ2V0X2NhY2hlZF9hY2xcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcG9zaXhfYWNsLmM9OTA9RVhQT1JUX1NZTUJPTChzZXRfY2FjaGVkX2FjbCk7XFxuZnMvcG9zaXhfYWNsLmMtOTEtXFxuZnMvcG9zaXhfYWNsLmM6OTI6c3RhdGljIHZvaWQgX19mb3JnZXRfY2FjaGVkX2FjbChzdHJ1Y3QgcG9zaXhfYWNsICoqcClcXG5mcy9wb3NpeF9hY2wuYy05My17XFxuLS1cXG5mcy9wb3NpeF9hY2wuYz0xMDg9dm9pZCBmb3JnZXRfY2FjaGVkX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSlcXG5mcy9wb3NpeF9hY2wuYy0xMDkte1xcbmZzL3Bvc2l4X2FjbC5jOjExMDpcXHRfX2ZvcmdldF9jYWNoZWRfYWNsKGFjbF9ieV90eXBlKGlub2RlLCB0eXBlKSk7XFxuZnMvcG9zaXhfYWNsLmMtMTExLX1cXG4tLVxcbmZzL3Bvc2l4X2FjbC5jPTExND12b2lkIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9wb3NpeF9hY2wuYy0xMTUte1xcbmZzL3Bvc2l4X2FjbC5jOjExNjpcXHRfX2ZvcmdldF9jYWNoZWRfYWNsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9hY2wpO1xcbmZzL3Bvc2l4X2FjbC5jOjExNzpcXHRfX2ZvcmdldF9jYWNoZWRfYWNsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kZWZhdWx0X2FjbCk7XFxuZnMvcG9zaXhfYWNsLmMtMTE4LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTgtICogZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGJlZm9yZSBpc3N1aW5nIEZVU0VfR0VUQVRUUi4gIE9uIGFuIHVuZml4ZWQga2VybmVsLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjk6ICogX19mb3JnZXRfY2FjaGVkX2FjbCgpIHJlcGxhY2VzIEFDTF9ET05UX0NBQ0hFIHdpdGggQUNMX05PVF9DQUNIRUQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTAtICogaW5hZHZlcnRlbnRseSBlbmFibGluZyB0aGUga2VybmVsIEFDTCBjYWNoZSBmb3IgdGhhdCBpbm9kZS4gIFRoZSBuZXh0XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0xNS0gKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjE2OiAqIEZpeCAoZnMvcG9zaXhfYWNsLmMpOiBfX2ZvcmdldF9jYWNoZWRfYWNsKCkgcmV0dXJucyBlYXJseSB3aGVuICpwIGlzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTctICogQUNMX0RPTlRfQ0FDSEUsIHByZXNlcnZpbmcgdGhlIFxcXCJuZXZlciBjYWNoZVxcXCIgaW52YXJpYW50IGZvciB0aGUgaW5vZGUnc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwMzoxMzozOS4xMDQ3NTg5MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM4NDMyODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gQUNMIGNhY2hpbmcsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgY2FsbGVkIGJ5IGBmb3JnZXRfY2FjaGVkX2FjbGAgYW5kIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCwgc28gdGhvc2UgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgcGF0aHMuIEdvb2QuIEl0J3MgYWxzbyBhZGRpbmcgYSBzZWxmdGVzdCBmb3IgRlVTRSDigJMgaW1wb3J0YW50IGZvciBlbnN1cmluZyBmdW5jdGlvbmFsaXR5IGFmdGVyIHRoZSBjaGFuZ2UuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMb29rcyBsaWtlIGBmcy9wb3NpeF9hY2wuY2AgaXMgdGhlIGtleSBmaWxlIGhlcmUsIGFuZCBpdOKAmXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0ZTX1BPU0lYX0FDTGAgaXMgZW5hYmxlZC4gVGltZSB0byBjb25maXJtIHRoYXQsIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBpbnRlcmFjdGlvbnMgb3IgdW5leHBlY3RlZCBjb25kaXRpb25hbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwMzoxMzo0Mi42NDMxOTM0ODlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM5NjEwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG9zaXhfYWNsLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GU19NQkNBQ0hFKVxcdCs9IG1iY2FjaGUub1xcbmZzL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19GU19QT1NJWF9BQ0wpXFx0Kz0gcG9zaXhfYWNsLm9cXG5mcy9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfTkZTX0NPTU1PTilcXHQrPSBuZnNfY29tbW9uL1xcbi0tXFxuZnMvcG9zaXhfYWNsLmM9NzM1PXN0YXRpYyBpbnQgcG9zaXhfYWNsX2ZpeF94YXR0cl9jb21tb24oY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKVxcbi0tXFxuZnMvcG9zaXhfYWNsLmMtNzc2LSAqXFxuZnMvcG9zaXhfYWNsLmM6Nzc3OiAqIFJldHVybjogQWxsb2NhdGVkIHN0cnVjdCBwb3NpeF9hY2wgb24gc3VjY2VzcywgTlVMTCBmb3IgYSB2YWxpZCBoZWFkZXIgYnV0XFxuZnMvcG9zaXhfYWNsLmMtNzc4LSAqICAgICAgICAgd2l0aG91dCBhY3R1YWwgUE9TSVggQUNMIGVudHJpZXMsIG9yIEVSUl9QVFIoKSBlbmNvZGVkIGVycm9yIGNvZGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDAzOjEzOjQyLjcyNzE1OTI2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDQ2OTUzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3NpeCBBQ0wgQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gV2UncmUgbG9va2luZyBhdCBgQ09ORklHX0ZTX1BPU0lYX0FDTGAsIHJpZ2h0PyBUaGF0J3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoZSB0ZXN0IGZyYW1ld29yayBsZXZlcmFnZXMgRlVTRSwgd2hpY2ggaW1tZWRpYXRlbHkgbWFkZSBtZSB0aGluayBhYm91dCBgQ09ORklHX0ZVU0VfRlNgIGFuZCBwb3RlbnRpYWxseSBmdXp6aW5nIEZVU0UgcGF0aHMuIEhvd2V2ZXIsIHRoZSByb290IGNhdXNlIGlzIGZpcm1seSB3aXRoaW4gYGZzL3Bvc2l4X2FjbC5jYC5cblxuQWhhLCBgQ09ORklHX0ZTX1BPU0lYX0FDTGAgaXMgbW9yZSBmdW5kYW1lbnRhbCB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQ7IGl04oCZcyBhIGNvcmUgY29uZmlnIG9wdGlvbiwgb2Z0ZW4gaW5kaXJlY3RseSBzZWxlY3RlZCBieSBvdGhlciBmaWxlIHN5c3RlbXMuIFRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiBzcGVjaWZpYyBmdW5jdGlvbnMuIFNpbmNlIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCBpcyBzdGF0aWMsIG15IGF0dGVudGlvbiBuZWVkcyB0byBiZSBvbiBgZm9yZ2V0X2NhY2hlZF9hY2xgIGFuZCBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AuIEnigJltIGFsc28gZ29pbmcgdG8gbm90ZSB0aGF0IGBmdXNlX3VwZGF0ZV9nZXRfYXR0cmAgaXMgcG90ZW50aWFsbHkgYSB0cmlnZ2VyIGZ1bmN0aW9uLCBzaW5jZSBpdOKAmXMgcmVsYXRlZC5cblxuV2FpdCwgdG8gYmUgY2xlYXIsIHRoZSBidWcgaXMgd2l0aGluIHRoZSBzdGF0aWMgZnVuY3Rpb24gYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGl0c2VsZiwgYnV0IHRoYXTigJlzIGNhbGxlZCBieSBgZm9yZ2V0X2NhY2hlZF9hY2xgIGFuZCBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AsIHNvIG15IGRpcmVjdCBmb2N1cyBpcyBvbiB0aG9zZS5cblxuTm93LCBJJ2xsIHNoaWZ0IG15IGF0dGVudGlvbiB0byBjaGVja2luZyB0aGUgY2FsbGVycyBvZiBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6NDcuNTcxODU2MjQ3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTQ2ODUwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jZXBoL2NhcHMuYz0zNDg4PXN0YXRpYyB2b2lkIGhhbmRsZV9jYXBfZ3JhbnQoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2NlcGgvY2Fwcy5jLTM2MjAtXFx0XFx0XFx0Y2ktXFx1MDAzZWlfeGF0dHJzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbmZzL2NlcGgvY2Fwcy5jOjM2MjE6XFx0XFx0XFx0Y2VwaF9mb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcXG5mcy9jZXBoL2NhcHMuYy0zNjIyLVxcdFxcdFxcdGNlcGhfc2VjdXJpdHlfaW52YWxpZGF0ZV9zZWNjdHgoaW5vZGUpO1xcbi0tXFxuZnMvY2VwaC9pbm9kZS5jPTEwMTM9aW50IGNlcGhfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqbG9ja2VkX3BhZ2UsXFxuLS1cXG5mcy9jZXBoL2lub2RlLmMtMTIzOC1cXHRcXHRjaS1cXHUwMDNlaV94YXR0cnMudmVyc2lvbiA9IGxlNjRfdG9fY3B1KGluZm8tXFx1MDAzZXhhdHRyX3ZlcnNpb24pO1xcbmZzL2NlcGgvaW5vZGUuYzoxMjM5OlxcdFxcdGNlcGhfZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XFxuZnMvY2VwaC9pbm9kZS5jLTEyNDAtXFx0XFx0Y2VwaF9zZWN1cml0eV9pbnZhbGlkYXRlX3NlY2N0eChpbm9kZSk7XFxuLS1cXG5mcy9jZXBoL3N1cGVyLmg9MTIzMj12b2lkIGNlcGhfaW5pdF9pbm9kZV9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9jZXBoL3N1cGVyLmgtMTIzNC1cXG5mcy9jZXBoL3N1cGVyLmg6MTIzNTpzdGF0aWMgaW5saW5lIHZvaWQgY2VwaF9mb3JnZXRfYWxsX2NhY2hlZF9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvY2VwaC9zdXBlci5oLTEyMzYte1xcbmZzL2NlcGgvc3VwZXIuaDoxMjM3OiAgICAgICBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcXG5mcy9jZXBoL3N1cGVyLmgtMTIzOC19XFxuLS1cXG5mcy9jZXBoL3N1cGVyLmg9MTI1MD1zdGF0aWMgaW5saW5lIHZvaWQgY2VwaF9pbml0X2lub2RlX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2NlcGgvc3VwZXIuaC0xMjU0LVxcbmZzL2NlcGgvc3VwZXIuaDoxMjU1OnN0YXRpYyBpbmxpbmUgdm9pZCBjZXBoX2ZvcmdldF9hbGxfY2FjaGVkX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9jZXBoL3N1cGVyLmgtMTI1Ni17XFxuLS1cXG5mcy9mdXNlL2FjbC5jPTkzPWludCBmdXNlX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2Z1c2UvYWNsLmMtMTU1LVxcdFxcdCAqL1xcbmZzL2Z1c2UvYWNsLmM6MTU2OlxcdFxcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xcbmZzL2Z1c2UvYWNsLmMtMTU3LVxcdFxcdGZ1c2VfaW52YWxpZGF0ZV9hdHRyKGlub2RlKTtcXG4tLVxcbmZzL2Z1c2UvZGlyLmM9MzgzPXN0YXRpYyBpbnQgZnVzZV9kZW50cnlfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuLS1cXG5mcy9mdXNlL2Rpci5jLTQ0Ni1cXG5mcy9mdXNlL2Rpci5jOjQ0NzpcXHRcXHRmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcXG5mcy9mdXNlL2Rpci5jLTQ0OC1cXHRcXHRmdXNlX2NoYW5nZV9hdHRyaWJ1dGVzKGlub2RlLCBcXHUwMDI2b3V0YXJnLmF0dHIsIE5VTEwsXFxuLS1cXG5mcy9mdXNlL2Rpci5jPTE1MjI9c3RhdGljIGludCBmdXNlX3VwZGF0ZV9nZXRfYXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2Z1c2UvZGlyLmMtMTU1MS1cXHRpZiAoc3luYykge1xcbmZzL2Z1c2UvZGlyLmM6MTU1MjpcXHRcXHRmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcXG5mcy9mdXNlL2Rpci5jLTE1NTMtXFx0XFx0LyogVHJ5IHN0YXR4IGlmIEJUSU1FIGlzIHJlcXVlc3RlZCAqL1xcbi0tXFxuZnMvZnVzZS9kaXIuYz0xNzI2PXN0YXRpYyBpbnQgZnVzZV9wZXJtX2dldGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuLS1cXG5mcy9mdXNlL2Rpci5jLTE3MzAtXFxuZnMvZnVzZS9kaXIuYzoxNzMxOlxcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xcbmZzL2Z1c2UvZGlyLmMtMTczMi1cXHRyZXR1cm4gZnVzZV9kb19nZXRhdHRyKFxcdTAwMjZub3BfbW50X2lkbWFwLCBpbm9kZSwgTlVMTCwgTlVMTCk7XFxuLS1cXG5mcy9mdXNlL2Rpci5jPTIzMDc9c3RhdGljIGludCBmdXNlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmVudHJ5LFxcbi0tXFxuZnMvZnVzZS9kaXIuYy0yMzYwLVxcdFxcdGlmIChmYy1cXHUwMDNlcG9zaXhfYWNsKVxcbmZzL2Z1c2UvZGlyLmM6MjM2MTpcXHRcXHRcXHRmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKGlub2RlKTtcXG5mcy9mdXNlL2Rpci5jLTIzNjItXFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9NTQ1PWludCBmdXNlX3JldmVyc2VfaW52YWxfaW5vZGUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHU2NCBub2RlaWQsXFxuLS1cXG5mcy9mdXNlL2lub2RlLmMtNTYyLVxcdGZ1c2VfaW52YWxpZGF0ZV9hdHRyKGlub2RlKTtcXG5mcy9mdXNlL2lub2RlLmM6NTYzOlxcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xcbmZzL2Z1c2UvaW5vZGUuYy01NjQtXFx0aWYgKG9mZnNldCBcXHUwMDNlPSAwKSB7XFxuLS1cXG5mcy9mdXNlL3JlYWRkaXIuYz0xNTM9c3RhdGljIGludCBmdXNlX2RpcmVudHBsdXNfbGluayhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2Z1c2UvcmVhZGRpci5jLTIyOC1cXG5mcy9mdXNlL3JlYWRkaXIuYzoyMjk6XFx0XFx0Zm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhpbm9kZSk7XFxuZnMvZnVzZS9yZWFkZGlyLmMtMjMwLVxcdFxcdGZ1c2VfY2hhbmdlX2F0dHJpYnV0ZXMoaW5vZGUsIFxcdTAwMjZvLVxcdTAwM2VhdHRyLCBOVUxMLFxcbi0tXFxuZnMvZ2ZzMi9nbG9wcy5jPTM1OD1zdGF0aWMgdm9pZCBpbm9kZV9nb19pbnZhbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCBmbGFncylcXG4tLVxcbmZzL2dmczIvZ2xvcHMuYy0zNjgtXFx0XFx0XFx0c2V0X2JpdChHTEZfSU5TVEFOVElBVEVfTkVFREVELCBcXHUwMDI2Z2wtXFx1MDAzZWdsX2ZsYWdzKTtcXG5mcy9nZnMyL2dsb3BzLmM6MzY5OlxcdFxcdFxcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoXFx1MDAyNmlwLVxcdTAwM2VpX2lub2RlKTtcXG5mcy9nZnMyL2dsb3BzLmMtMzcwLVxcdFxcdFxcdHNlY3VyaXR5X2lub2RlX2ludmFsaWRhdGVfc2VjY3R4KFxcdTAwMjZpcC1cXHUwMDNlaV9pbm9kZSk7XFxuLS1cXG5mcy9uZnMvbmZzM3Byb2MuYz0xMDc2PWNvbnN0IHN0cnVjdCBuZnNfcnBjX29wcyBuZnNfdjNfY2xpZW50b3BzID0ge1xcbi0tXFxuZnMvbmZzL25mczNwcm9jLmMtMTExOC1cXHQubG9ja1xcdFxcdD0gbmZzM19wcm9jX2xvY2ssXFxuZnMvbmZzL25mczNwcm9jLmM6MTExOTpcXHQuY2xlYXJfYWNsX2NhY2hlID0gZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyxcXG5mcy9uZnMvbmZzM3Byb2MuYy0xMTIwLVxcdC5jbG9zZV9jb250ZXh0XFx0PSBuZnNfY2xvc2VfY29udGV4dCxcXG4tLVxcbmZzL29jZnMyL2RsbWdsdWUuYz0zOTU4PXN0YXRpYyBpbnQgb2NmczJfZGF0YV9jb252ZXJ0X3dvcmtlcihzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsXFxuLS1cXG5mcy9vY2ZzMi9kbG1nbHVlLmMtNDAwMi1vdXRfZm9yZ2V0OlxcbmZzL29jZnMyL2RsbWdsdWUuYzo0MDAzOlxcdGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoaW5vZGUpO1xcbmZzL29jZnMyL2RsbWdsdWUuYy00MDA0LVxcbi0tXFxuZnMvcG9zaXhfYWNsLmM9MTEyPUVYUE9SVF9TWU1CT0woZm9yZ2V0X2NhY2hlZF9hY2wpO1xcbmZzL3Bvc2l4X2FjbC5jLTExMy1cXG5mcy9wb3NpeF9hY2wuYzoxMTQ6dm9pZCBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvcG9zaXhfYWNsLmMtMTE1LXtcXG4tLVxcbmZzL3Bvc2l4X2FjbC5jLTExOC19XFxuZnMvcG9zaXhfYWNsLmM6MTE5OkVYUE9SVF9TWU1CT0woZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyk7XFxuZnMvcG9zaXhfYWNsLmMtMTIwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaD05Nj12b2lkIGZvcmdldF9jYWNoZWRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oOjk3OnZvaWQgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oLTk4LWludCBwb3NpeF9hY2xfdmFsaWQoc3RydWN0IHVzZXJfbmFtZXNwYWNlICosIGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oPTEzMz1zdGF0aWMgaW5saW5lIGludCBwb3NpeF9hY2xfY3JlYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVtb2RlX3QgKm1vZGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oLTEzOS1cXG5pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oOjE0MDpzdGF0aWMgaW5saW5lIHZvaWQgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmluY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgtMTQxLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTctICogKGUuZy4gQVRfU1RBVFhfRk9SQ0VfU1lOQyksIGZ1c2VfdXBkYXRlX2dldF9hdHRyKCkgY2FsbHNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzo4OiAqIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKSBiZWZvcmUgaXNzdWluZyBGVVNFX0dFVEFUVFIuICBPbiBhbiB1bmZpeGVkIGtlcm5lbCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy05LSAqIF9fZm9yZ2V0X2NhY2hlZF9hY2woKSByZXBsYWNlcyBBQ0xfRE9OVF9DQUNIRSB3aXRoIEFDTF9OT1RfQ0FDSEVELFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTEtICogZ2V0eGF0dHIgcG9wdWxhdGVzIHRoZSBjYWNoZS4gIEJlY2F1c2UgZnVzZV9zZXRfYWNsKCkgc2tpcHNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzoxMjogKiBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzKCkgZm9yICFmYy1cXHUwMDNlcG9zaXhfYWNsIG1vdW50cywgYW55IHN1YnNlcXVlbnQgY2hhbmdlIHRvXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMTMtICogdGhlIEFDTCBsZWF2ZXMgdGhlIHN0YWxlIGtlcm5lbCBlbnRyeSBpbiBwbGFjZSwgYW5kIHRoZSBuZXh0IGdldHhhdHRyIHJldHVybnNcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTIyLSAqICAyLiBsZ2V0eGF0dHIgLVxcdTAwM2UgZGFlbW9uIGNhbGxlZCwgQUNMX0EgcmV0dXJuZWQsIE5PVCBjYWNoZWQgKEFDTF9ET05UX0NBQ0hFKS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYzoyMzogKiAgMy4gc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykgLVxcdTAwM2UgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGNhbGxlZC5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0yNC0gKiAgICAgQnVnZ3k6ICBBQ0xfRE9OVF9DQUNIRSAtXFx1MDAzZSBBQ0xfTk9UX0NBQ0hFRCAoY2FjaGUgZW5hYmxlZCkuXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYz0xMDc9c3RhdGljIHZvaWQgZnNfbG9va3VwKGZ1c2VfcmVxX3QgcmVxLCBmdXNlX2lub190IHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTExNi1cXHQgKiBMb25nIGF0dHIvZW50cnkgdGltZW91dHMgc28gdGhhdCBub3JtYWwgc3RhdCgpIGNhbGxzIGRvIG5vdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjExNzpcXHQgKiBleHBpcmUgYW5kIHRyaWdnZXIgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIG9uIHRoZWlyIG93bjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0xMTgtXFx0ICogb25seSB0aGUgZXhwbGljaXQgQVRfU1RBVFhfRk9SQ0VfU1lOQyBzaG91bGQgdHJpZ2dlciBpdC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jPTI1Mz1URVNUX0YoYWNsX2NhY2hlLCBzdGFsZV9hZnRlcl9mb3JjZV9zeW5jKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMjgzLVxcdCAqIFN0ZXAgMjogc3RhdHgoQVRfU1RBVFhfRk9SQ0VfU1lOQykuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmM6Mjg0OlxcdCAqIGZ1c2VfdXBkYXRlX2dldF9hdHRyKCkgY2FsbHMgZm9yZ2V0X2FsbF9jYWNoZWRfYWNscygpIGJlZm9yZSBzZW5kaW5nXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMjg1LVxcdCAqIEZVU0VfR0VUQVRUUi5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jLTMxNC1cXHQgKiBTaW11bGF0ZXMgYW4gQUNMIGNoYW5nZSB0aGF0IGZ1c2Vfc2V0X2FjbCgpIHdvdWxkIE5PVCBpbnZhbGlkYXRlIGZvclxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjMxNTpcXHQgKiAhZmMtXFx1MDAzZXBvc2l4X2FjbCBtb3VudHMgKGl0IHNraXBzIGZvcmdldF9hbGxfY2FjaGVkX2FjbHMgaW4gdGhhdCBjYXNlKS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0zMTYtXFx0ICogT24gYSBmaXhlZCBrZXJuZWwgdGhlIEFDTCB3YXMgbmV2ZXIgY2FjaGVkLCBzbyB0aGlzIGlzIG1vb3QuXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9mdXNlL2Z1c2VfYWNsX2NhY2hlX3Rlc3QuYy0zMzgtXFx0XFx0ICAgICAgIFxcXCIoY291bnQ9JWQpOyBBQ0xfRE9OVF9DQUNIRSBjb3JydXB0ZWQgYnkgXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL2Z1c2UvZnVzZV9hY2xfY2FjaGVfdGVzdC5jOjMzOTpcXHRcXHQgICAgICAgXFxcImZvcmdldF9hbGxfY2FjaGVkX2FjbHMoKVxcXCIsIHN6LCBjb3VudCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvZnVzZS9mdXNlX2FjbF9jYWNoZV90ZXN0LmMtMzQwLVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6NDkuNDg2NTQ1NDczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE1MTM5ODI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBBQ0wgQ2FjaGluZyBhbmQgRlVTRSBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBpcyAqZXZlcnl3aGVyZSog4oCTIGl0J3MgYmVpbmcgY2FsbGVkIGJ5IGEgc2xldyBvZiBuZXR3b3JrIGFuZCBkaXN0cmlidXRlZCBmaWxlc3lzdGVtczogRlVTRSwgTkZTLCBPQ0ZTMiwgQ2VwaCwgYW5kIEdGUzIuIFRoYXQgcmVhbGx5IGhpZ2hsaWdodHMgdGhlIHNjb3BlIG9mIHRoaXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYXJlYSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgYnVnIGlzIGxpbmtlZCB0byBgQUNMX0RPTlRfQ0FDSEVgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggZmlsZXN5c3RlbXMgdGhhdCAqYXJlbid0KiBzdXBwb3NlZCB0byBiZSBjYWNoaW5nIEFDTHMuXG5cblNpbmNlIHdlJ3JlIHplcm9pbmcgaW4gb24gdGhpcyBzcGVjaWZpYyBiZWhhdmlvciwgSSBuZWVkIHRvIGZvY3VzIG9uIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGBmb3JnZXRfY2FjaGVkX2FjbGAuIEZVU0UgdXNlcyB0aGlzIHdoZW4gYCFmYy1cdTAwM2Vwb3NpeF9hY2xgIGlzIHNldC4gV2hpbGUgYGZ1c2VfdXBkYXRlX2dldF9hdHRyYCBzb3VuZHMgbGlrZSBhIHVzZWZ1bCBzeW1ib2wgZm9yIHRhcmdldGVkIEZVU0UgdGVzdGluZywgaXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgYnVnIGxpZXMgd2l0aGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYC4gQWx0aG91Z2ggYF9fZm9yZ2V0X2NhY2hlZF9hY2xgIGlzIHN0YXRpYywgc28gSSBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgYXMgYSBmdXp6ZXIgZm9jdXMgc3ltYm9sLCBgZm9yZ2V0X2FsbF9jYWNoZWRfYWNsc2AgYW5kIGBmb3JnZXRfY2FjaGVkX2FjbGAgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgdXNlZnVsLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWcgaW1wbGljYXRpb25zLiBJcyBgQ09ORklHX0ZTX1BPU0lYX0FDTGAgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24/IEl0IHNlZW1zIGxpa2UgaXQsIGJ1dCBsZXQncyBkb3VibGUtY2hlY2suIE9rYXksIHllcyBpdCBpcyB0aGUgbWFpbiBjb25maWcsIHRob3VnaCBgQ09ORklHX0ZVU0VfRlNgIGlzIHByb2JhYmx5IGFsc28gdXNlZnVsIHNpbmNlIG91ciB0ZXN0IGVudmlyb25tZW50IHVzZXMgRlVTRS4gTGV0J3MgbWFrZSBzdXJlIHRob3NlIHR3byBhcmUgZW5hYmxlZC5cblxuQW5kIHllcywgYENPTkZJR19GU19QT1NJWF9BQ0xgIGlzIGRlZmluaXRlbHkgYSB2YWxpZCBvcHRpb24g4oCTIGl0J3MgcmlnaHQgdGhlcmUgaW4gYGZzL0tjb25maWdgLiBFeGNlbGxlbnQuIFdlJ3JlIG9uIHRoZSByaWdodCB0cmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6NTYuNjM3OTQ2NzUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTAyNTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfUE9TSVhfQUNMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTkwPWNvbmZpZyBGU19EQVhfUE1EXFxuLS1cXG5mcy9LY29uZmlnLTEwMS0jXFxuZnMvS2NvbmZpZzoxMDI6Y29uZmlnIEZTX1BPU0lYX0FDTFxcbmZzL0tjb25maWctMTAzLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6NTYuNzIyOTc3MDAyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDI0NzMwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVmFsaWRhdGluZyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBZZXAsIGBGU19QT1NJWF9BQ0xgIGlzIGRlZmluaXRlbHkgYSBsZWdpdGltYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBObyByZWQgZmxhZ3MgdGhlcmUuIFRoYXTigJlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciBhY2Nlc3MgY29udHJvbCBhbmQgaXMgdXN1YWxseSBzdHJhaWdodGZvcndhcmQuIFRoZW4sIGxldCdzIHNlZS4uLiBhaCwgYW5kIG9mIGNvdXJzZSwgYEZVU0VfRlNgIGlzIGEgZ28gYXMgd2VsbC4gTm8gc3VycHJpc2VzLiBXZSd2ZSBnb3QgdGhlIGV4cGVjdGVkIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZTsgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5IHNvIGZhci4gVGhhdCBjb25maXJtcyBhIGJhc2UgbGV2ZWwgb2Ygb3BlcmF0aW9uYWwgY29tcGV0ZW5jZTsgbm8gaW1tZWRpYXRlIGlzc3VlcyB0byBhZGRyZXNzIG9uIHRoaXMgZnJvbnQuIFRpbWUgdG8gbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQwMzoxMzo1OS41MjU0NTE5OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjg4NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVNFX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTM6NTkuNjA5MTQ1OTk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzgwNzExNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBQ0wgQ2FjaGluZyBCdWcgRml4KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIEFDTHMsIHNwZWNpZmljYWxseSBgRlNfUE9TSVhfQUNMYCBhbmQgYEZVU0VfRlNgLiBUaGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYGZvcmdldF9hbGxfY2FjaGVkX2FjbHNgIGFuZCBgZm9yZ2V0X2NhY2hlZF9hY2xgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmc6IGlzIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCBkZWZpbmVkIGluIGBmcy9wb3NpeF9hY2wuY2A/IFllcCwgaXQncyB0aGVyZS5cblxuVGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB0aGlzOiB0aGVyZSdzIGEgYnVnIGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCB0aGF0IG1pc2hhbmRsZXMgdGhlIGBBQ0xfRE9OVF9DQUNIRWAgZmxhZywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBBQ0wgY2FjaGluZyBiZWluZyBlbmFibGVkIHdoZW4gaXQgc2hvdWxkbid0IGJlLiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgVkZTL0FDTCBsb2dpYywgbWVhbmluZyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCByZXF1aXJlcyBjYXJlZnVsIGV4YW1pbmF0aW9uLiBUaGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIHRvIGNvbmZpcm0gY29ycmVjdCBiZWhhdmlvciB3aWxsIGJlIHRvIGZvY3VzIG9uIHRob3NlIGNhbGxzIHRvIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBhbmQgYGZvcmdldF9jYWNoZWRfYWNsYCBhbmQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdHJhbnNpdGlvbnMgb2YgdGhlIEFDTCBjYWNoaW5nIHN0YXRlLiBJJ20gZ29pbmcgdG8gZ2V0IHRoZSByZXN1bHRzIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1NCwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMDM6MTQ6MDUuMDg3MjE5NDc3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3MDkxNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvcmdldF9hbGxfY2FjaGVkX2FjbHNcIixcbiAgICBcImZvcmdldF9jYWNoZWRfYWNsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCB3aGVyZSBgQUNMX0RPTlRfQ0FDSEVgIGNvdWxkIGJlIGluY29ycmVjdGx5IHJlcGxhY2VkIHdpdGggYEFDTF9OT1RfQ0FDSEVEYCwgaW5hZHZlcnRlbnRseSBlbmFibGluZyBBQ0wgY2FjaGluZyBmb3IgaW5vZGVzIHRoYXQgc2hvdWxkbid0IGhhdmUgaXQgKGUuZy4sIEZVU0UgbW91bnRzIHdpdGhvdXQgYEZVU0VfUE9TSVhfQUNMYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFZGUy9BQ0wgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBhbmQgYGZvcmdldF9jYWNoZWRfYWNsYCB0byBlbnN1cmUgQUNMIGNhY2hpbmcgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvcmdldF9hbGxfY2FjaGVkX2FjbHNcIixcbiAgICBcImZvcmdldF9jYWNoZWRfYWNsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBfX2ZvcmdldF9jYWNoZWRfYWNsYCB3aGVyZSBgQUNMX0RPTlRfQ0FDSEVgIGNvdWxkIGJlIGluY29ycmVjdGx5IHJlcGxhY2VkIHdpdGggYEFDTF9OT1RfQ0FDSEVEYCwgaW5hZHZlcnRlbnRseSBlbmFibGluZyBBQ0wgY2FjaGluZyBmb3IgaW5vZGVzIHRoYXQgc2hvdWxkbid0IGhhdmUgaXQgKGUuZy4sIEZVU0UgbW91bnRzIHdpdGhvdXQgYEZVU0VfUE9TSVhfQUNMYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFZGUy9BQ0wgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGBmb3JnZXRfYWxsX2NhY2hlZF9hY2xzYCBhbmQgYGZvcmdldF9jYWNoZWRfYWNsYCB0byBlbnN1cmUgQUNMIGNhY2hpbmcgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxttzr[1] Phase: Succeeded StartedAt: 2026-07-14 03:14:16 +0000 UTC FinishedAt: 2026-07-14 03:14:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-14 03:14:16 +0000 UTC FinishedAt: 2026-07-14 03:14:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2] Phase: Succeeded StartedAt: 2026-07-14 03:14:16 +0000 UTC FinishedAt: 2026-07-14 07:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-14 03:14:16 +0000 UTC FinishedAt: 2026-07-14 07:38:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-14 03:14:16 +0000 UTC FinishedAt: 2026-07-14 03:14:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-14 03:14:16 +0000 UTC FinishedAt: 2026-07-14 03:14:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowxttzr/series-workflowxttzr-convert-artifact-1108059598/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-14 03:14:26 +0000 UTC FinishedAt: 2026-07-14 03:54:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-14 03:14:26 +0000 UTC FinishedAt: 2026-07-14 03:54:06 +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:*5f403ec7-7c52-4a23-adb6-acaa26e53e36,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-workflowxttzr/series-workflowxttzr-convert-artifact-1108059598/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": "0fd510ee-2a1c-46d9-b3f3-6306b602f5a5", "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-workflowxttzr/series-workflowxttzr-build-action-2870087220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-14 03:14:26 +0000 UTC FinishedAt: 2026-07-14 03:53:56 +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:*5f403ec7-7c52-4a23-adb6-acaa26e53e36,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-workflowxttzr/series-workflowxttzr-convert-artifact-1108059598/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": "0fd510ee-2a1c-46d9-b3f3-6306b602f5a5", "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-workflowxttzr/series-workflowxttzr-build-action-2870087220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-14 03:54:06 +0000 UTC FinishedAt: 2026-07-14 03:54:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-14 03:54:06 +0000 UTC FinishedAt: 2026-07-14 03:54:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-14 03:54:06 +0000 UTC FinishedAt: 2026-07-14 03:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-14 03:54:06 +0000 UTC FinishedAt: 2026-07-14 03:54:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowxttzr/series-workflowxttzr-convert-artifact-3035229889/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-14 03:54:16 +0000 UTC FinishedAt: 2026-07-14 03:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-14 03:54:16 +0000 UTC FinishedAt: 2026-07-14 03:56:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0fd510ee-2a1c-46d9-b3f3-6306b602f5a5,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-workflowxttzr/series-workflowxttzr-build-action-2870087220/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-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-14 03:56:18 +0000 UTC FinishedAt: 2026-07-14 03:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-14 03:56:18 +0000 UTC FinishedAt: 2026-07-14 03:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-14 03:56:18 +0000 UTC FinishedAt: 2026-07-14 04:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-14 03:56:18 +0000 UTC FinishedAt: 2026-07-14 04:33:26 +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:*5f403ec7-7c52-4a23-adb6-acaa26e53e36,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-workflowxttzr/series-workflowxttzr-convert-artifact-3035229889/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": "36745941-284a-4d74-8730-b158ad63ecb7", "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-workflowxttzr/series-workflowxttzr-build-action-1523320909/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-14 03:56:18 +0000 UTC FinishedAt: 2026-07-14 04:33:16 +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:*5f403ec7-7c52-4a23-adb6-acaa26e53e36,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-workflowxttzr/series-workflowxttzr-convert-artifact-3035229889/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": "36745941-284a-4d74-8730-b158ad63ecb7", "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-workflowxttzr/series-workflowxttzr-build-action-1523320909/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-14 04:33:26 +0000 UTC FinishedAt: 2026-07-14 04:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-14 04:33:26 +0000 UTC FinishedAt: 2026-07-14 04:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-14 04:33:26 +0000 UTC FinishedAt: 2026-07-14 04:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-14 04:33:26 +0000 UTC FinishedAt: 2026-07-14 04:35:48 +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:*36745941-284a-4d74-8730-b158ad63ecb7,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-workflowxttzr/series-workflowxttzr-build-action-1523320909/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-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-14 04:35:58 +0000 UTC FinishedAt: 2026-07-14 07:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-14 04:35:58 +0000 UTC FinishedAt: 2026-07-14 07:38:38 +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":["forget_all_cached_acls","forget_cached_acl"],"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:*0fd510ee-2a1c-46d9-b3f3-6306b602f5a5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*36745941-284a-4d74-8730-b158ad63ecb7,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-workflowxttzr/series-workflowxttzr-build-action-2870087220/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-workflowxttzr/series-workflowxttzr-build-action-1523320909/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-14 04:35:58 +0000 UTC FinishedAt: 2026-07-14 04:36:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-14 04:35:58 +0000 UTC FinishedAt: 2026-07-14 04:36:03 +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":["forget_all_cached_acls","forget_cached_acl"],"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-workflowxttzr/series-workflowxttzr-convert-artifact-3866670934/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-14 04:35:58 +0000 UTC FinishedAt: 2026-07-14 04:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-14 04:35:58 +0000 UTC FinishedAt: 2026-07-14 04:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-14 04:35:58 +0000 UTC FinishedAt: 2026-07-14 04:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-14 04:36:08 +0000 UTC FinishedAt: 2026-07-14 07:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxttzr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["forget_all_cached_acls","forget_cached_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_POSIX_ACL","FUSE_FS"],"series_id":"7abfdc6b-3365-4e77-89a9-8f8b9beb8469","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-14 04:36:08 +0000 UTC FinishedAt: 2026-07-14 07:38:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0fd510ee-2a1c-46d9-b3f3-6306b602f5a5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*36745941-284a-4d74-8730-b158ad63ecb7,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-workflowxttzr/series-workflowxttzr-build-action-2870087220/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-workflowxttzr/series-workflowxttzr-build-action-1523320909/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-workflowxttzr/series-workflowxttzr-convert-artifact-3866670934/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,}