Name: series-workflowzxn9c Phase: Succeeded StartedAt: 2026-08-17 12:23:26 +0000 UTC FinishedAt: 2026-08-17 13:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[0] Phase: Succeeded StartedAt: 2026-08-17 12:23:26 +0000 UTC FinishedAt: 2026-08-17 13:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 12:23:26 +0000 UTC FinishedAt: 2026-08-17 13:10:41 +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": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "distribute_float_irqs", "kvm_s390_inject_vm" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3RyaWJ1dGVfZmxvYXRfaXJxcyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9pbmplY3Rfdm0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcy4gSXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKClgIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFza2AgYW5kIHdha2VzIHVwIFZDUFVzIHRoYXQgY2FuIGRlbGl2ZXIgdGhlIHBlbmRpbmcgaW50ZXJydXB0cy4gSXQgYWxzbyBtb2RpZmllcyBgX19mbG9hdGluZ19pcnFfa2ljaygpYCB0byB0YWtlIGEgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aWAgaW5zdGVhZCBvZiBhIGB1NjQgdHlwZWAsIGFuZCB1c2VzIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAgdG8gZGV0ZXJtaW5lIHRoZSBwZW5kaW5nIElSUSBtYXNrLlxuXG5BbGwgZmllbGRzIGFjY2Vzc2VkIGJ5IHRoZSBuZXcgbG9naWMgKHN1Y2ggYXMgYGludGktXHUwMDNldHlwZWAgYW5kIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgaW50aWAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iaigpYCkgaW4gcGF0aHMgbGlrZSBga3ZtX2FyY2hfdm1faW9jdGwoKWAsIGBrdm1fczM5MF9pbmplY3RfYWlycSgpYCwgYW5kIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKClgLCBhbmQgdGhlbiBwb3B1bGF0ZWQgd2l0aCBmdWxseSBpbml0aWFsaXplZCBkYXRhIGZyb20gdXNlciBzcGFjZSBvciBrZXJuZWwgbG9naWMuIEluIHRoZSBjYXNlIG9mIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKClgLCB3aGVyZSBgaW50aWAgaXMgYSBzdGFjayB2YXJpYWJsZSwgb25seSB0aGUgYHR5cGVgIGZpZWxkIGlzIHJlYWQgYnkgdGhlIG5ldyBsb2dpYywgYW5kIGl0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEtWTV9TMzkwX01DSEtgLlxuXG5UaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBzMzkwIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYyBieSBpbnRyb2R1Y2luZyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcyBhbmQgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB0byBjaGVjayBpZiBhIFZDUFUgY2FuIHJlY2VpdmUgdGhlIGludGVycnVwdCBiZWZvcmUga2lja2luZyBpdC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgb24gczM5MCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDliMzkyYWU2MWNiZjJjMGE5OWYyNmJiODJlNzVmMzk2YmQ4OGFmZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMzowNDoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBiNDE4MmNhNDQzNWZiLi4xZDYyYmRkN2FjYTVlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDY3LDYgJiM0Mzs0NjcsNyBAQCBzdHJ1Y3Qga3ZtX3ZtX3N0YXQge1xuIFx0dTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3BnX2VudHJ5O1xuJiM0MztcdHU2NCBpbmplY3RfcmVkaXN0O1xuIH07XG4gXG4gc3RydWN0IGt2bV9hcmNoX21lbW9yeV9zbG90IHtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOGYyNGJjZDFhNmQzNi4uZTY3Y2RlZGI1YWVjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC0zNjcsNiAmIzQzOzM2NywzNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBhY3RpdmVfbWFzaztcbiB9XG4gXG4mIzQzO3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XG4mIzQzO1x0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIVJFQURfT05DRShrdm0tXHUwMDNlYXJjaC5mbG9hdF9pbnQucGVuZGluZ19pcnFzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90IHRvbyB3b3JyaWVkIGFib3V0IHN5bmNocm9uaXphdGlvbiBmb3IgaWRsZV9tYXNrLiBXZVxuJiM0MztcdCAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGFcbiYjNDM7XHQgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLlxuJiM0MztcdCAqL1xuJiM0MztcdHNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcbiYjNDM7XHQvKiBXZWxsIG5vYm9keSYjMzk7cyBzbGVlcGluZyBzbyBzb21lb25lIHdpbGwgbGlrZWx5IHRha2UgdGhlIElSUSBzb29uICovXG4mIzQzO1x0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcbiYjNDM7XHRcdGlmIChkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSkge1xuJiM0MztcdFx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICYjNDM7JiM0MztzaWdjcHUpO1xuJiM0MztcdH0gd2hpbGUgKHNpZ2NwdSBcdTAwM2Mgb25saW5lX3ZjcHVzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBfX3NldF9jcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfV0FJVCk7XG5AQCAtMTkxNSwyMiAmIzQzOzE5NDYsNDggQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2soc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuJiM0MztcdFx0LyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi9cbiYjNDM7XHRcdHJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApO1xuJiM0MztcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbiYjNDM7XHRcdHJldHVybiBCSVQoSVJRX1BFTkRfVklSVElPKTtcbiYjNDM7XHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxuJiM0MztcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuJiM0MztcdFx0ICAgICAgIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRV9FVik7XG4mIzQzO1x0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XG4mIzQzO1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbiYjNDM7XHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxuJiM0MztcdFx0cmV0dXJuIEJJVChpc2NfdG9faXJxX3R5cGUoaW50X3dvcmRfdG9faXNjKGludGktXHUwMDNlaW8uaW9faW50X3dvcmQpKSk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUpXG4mIzQzO3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcbiBcdGludCBzaWdjcHUsIG9ubGluZV92Y3B1cywgbnJfdHJpZXMgPSAwO1xuJiM0MztcdHU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktXHUwMDNldHlwZSk7XG4mIzQzO1x0dTY0IGlycV9wZW5kX21hc2s7XG4gXG4gXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbiBcdGlmICghb25saW5lX3ZjcHVzKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0aXJxX3BlbmRfbWFzayA9IGludGlfdG9faXJxX3BlbmRfbWFzayhpbnRpKTtcbiBcdGZvciAoc2lnY3B1ID0ga3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50Lmxhc3Rfc2xlZXBfY3B1OyA7IHNpZ2NwdSYjNDM7JiM0MzspIHtcbiBcdFx0c2lnY3B1ICU9IG9ubGluZV92Y3B1cztcbiBcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuLVx0XHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkpXG4mIzQzO1x0XHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkgXHUwMDI2IGlycV9wZW5kX21hc2spXG4gXHRcdFx0YnJlYWs7XG4gXHRcdC8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovXG4gXHRcdGlmIChucl90cmllcyYjNDM7JiM0MzsgXHUwMDNlPSBvbmxpbmVfdmNwdXMpXG5AQCAtMTk4Miw3ICYjNDM7MjAzOSw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbi1cdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTtcbiYjNDM7XHRfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgaW50aSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCA1MThhNjljNTVlODVjLi5kNmQ0NjY4OGQ5ODA4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC04Niw2ICYjNDM7ODYsNyBAQCBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZtX3N0YXRzX2Rlc2NbXSA9IHtcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcjNfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksXG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3BnX2VudHJ5KSxcbiYjNDM7XHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbkBAIC00NTcyLDYgJiM0Mzs0NTczLDggQEAgc3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyYyA9IGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHZjcHUpO1xuIFx0XHRpZiAocmMgfHwgZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKVxuIFx0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuIFx0fVxuIFxuIFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG5pbmRleCA2ZDI4NDJmYjcxYTMzLi5hMmJjZjRhY2FjMTZlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbkBAIC0zNzUsNiAmIzQzOzM3NSw3IEBAIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9zMzkwX2lkbGVfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcik7XG4gaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3MzOTBfY2xlYXJfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0Mzt2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3RyaWJ1dGVfZmxvYXRfaXJxcyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9pbmplY3Rfdm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBzMzkwIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYyBieSBpbnRyb2R1Y2luZyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcyBhbmQgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB0byBjaGVjayBpZiBhIFZDUFUgY2FuIHJlY2VpdmUgdGhlIGludGVycnVwdCBiZWZvcmUga2lja2luZyBpdC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgb24gczM5MCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliMzkyYWU2MWNiZjJjMGE5OWYyNmJiODJlNzVmMzk2YmQ4OGFmZjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxMzowNDoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTQ2Nyw2ICYjNDM7NDY3LDcgQEAgc3RydWN0IGt2bV92bV9zdGF0IHsKIAl1NjQgZ21hcF9zaGFkb3dfcjNfZW50cnk7CiAJdTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5OwogCXU2NCBnbWFwX3NoYWRvd19wZ19lbnRyeTsKJiM0MzsJdTY0IGluamVjdF9yZWRpc3Q7CiB9OwogCiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3QgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggOGYyNGJjZDFhNmQzNi4uZTY3Y2RlZGI1YWVjZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC0zNjcsNiAmIzQzOzM2NywzNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gYWN0aXZlX21hc2s7CiB9CiAKJiM0Mzt2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1OwomIzQzOwlpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXM7CiYjNDM7CiYjNDM7CWlmICghUkVBRF9PTkNFKGt2bS0mZ3Q7YXJjaC5mbG9hdF9pbnQucGVuZGluZ19pcnFzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJb25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoJmFtcDtrdm0tJmd0O29ubGluZV92Y3B1cyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2UKJiM0MzsJICogbWlnaHQgYnVybiB0b28gbWFueSBjeWNsZXMgYnV0IGFwYXJ0IGZyb20gdGhhdCB3YWtpbmcgYQomIzQzOwkgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLgomIzQzOwkgKi8KJiM0MzsJc2lnY3B1ID0gZmluZF9maXJzdF9iaXQoa3ZtLSZndDthcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTsKJiM0MzsJLyogV2VsbCBub2JvZHkmIzM5O3Mgc2xlZXBpbmcgc28gc29tZW9uZSB3aWxsIGxpa2VseSB0YWtlIHRoZSBJUlEgc29vbiAqLwomIzQzOwlpZiAoc2lnY3B1ID09IG9ubGluZV92Y3B1cykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpOwomIzQzOwkJaWYgKGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpKSB7CiYjNDM7CQkJa3ZtLSZndDtzdGF0LmluamVjdF9yZWRpc3QmIzQzOyYjNDM7OwomIzQzOwkJCWt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRzdF92Y3B1KTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLSZndDthcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzLCAmIzQzOyYjNDM7c2lnY3B1KTsKJiM0MzsJfSB3aGlsZSAoc2lnY3B1ICZsdDsgb25saW5lX3ZjcHVzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX3NldF9jcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJa3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfV0FJVCk7CkBAIC0xOTE1LDIyICYjNDM7MTk0Niw0OCBAQCBzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2soc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQomIzQzO3sKJiM0MzsJdTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS0mZ3Q7dHlwZSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIEtWTV9TMzkwX01DSEs6CiYjNDM7CQkvKiBPbmx5IHJlcHJlc3NpYmxlIG1hY2hpbmUgY2hlY2tzIGFyZSBmbG9hdGluZyAqLwomIzQzOwkJcmV0dXJuIEJJVChJUlFfUEVORF9NQ0hLX1JFUCk7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzoKJiM0MzsJCXJldHVybiBCSVQoSVJRX1BFTkRfVklSVElPKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRToKJiM0MzsJCXJldHVybiBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0UpIHwKJiM0MzsJCSAgICAgICBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0VfRVYpOwomIzQzOwljYXNlIEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORToKJiM0MzsJCXJldHVybiBCSVQoSVJRX1BFTkRfUEZBVUxUX0RPTkUpOwomIzQzOwljYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOgomIzQzOwkJcmV0dXJuIEJJVChpc2NfdG9faXJxX3R5cGUoaW50X3dvcmRfdG9faXNjKGludGktJmd0O2lvLmlvX2ludF93b3JkKSkpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKgogICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LgogICovCi1zdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUpCiYjNDM7c3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1OwogCWludCBzaWdjcHUsIG9ubGluZV92Y3B1cywgbnJfdHJpZXMgPSAwOwomIzQzOwl1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLSZndDt0eXBlKTsKJiM0MzsJdTY0IGlycV9wZW5kX21hc2s7CiAKIAlvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZCgmYW1wO2t2bS0mZ3Q7b25saW5lX3ZjcHVzKTsKIAlpZiAoIW9ubGluZV92Y3B1cykKIAkJcmV0dXJuOwogCiYjNDM7CWlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2soaW50aSk7CiAJZm9yIChzaWdjcHUgPSBrdm0tJmd0O2FyY2guZmxvYXRfaW50Lmxhc3Rfc2xlZXBfY3B1OyA7IHNpZ2NwdSYjNDM7JiM0MzspIHsKIAkJc2lnY3B1ICU9IG9ubGluZV92Y3B1czsKIAkJZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpOwotCQlpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkpCiYjNDM7CQlpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpICZhbXA7IGlycV9wZW5kX21hc2spCiAJCQlicmVhazsKIAkJLyogYXZvaWQgZW5kbGVzcyBsb29wcyBpZiBhbGwgdmNwdXMgYXJlIHN0b3BwZWQgKi8KIAkJaWYgKG5yX3RyaWVzJiM0MzsmIzQzOyAmZ3Q7PSBvbmxpbmVfdmNwdXMpCkBAIC0xOTgyLDcgJiM0MzsyMDM5LDcgQEAgc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCV9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTsKJiM0MzsJX19mbG9hdGluZ19pcnFfa2ljayhrdm0sIGludGkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggNTE4YTY5YzU1ZTg1Yy4uZDZkNDY2ODhkOTgwOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtODYsNiAmIzQzOzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7CiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19yM19lbnRyeSksCiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksCiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksCiYjNDM7CVNUQVRTX0RFU0NfQ09VTlRFUihWTSwgaW5qZWN0X3JlZGlzdCksCiB9OwogCiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2hlYWRlciBrdm1fdm1fc3RhdHNfaGVhZGVyID0gewpAQCAtNDU3Miw2ICYjNDM7NDU3Myw4IEBAIHN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTsKIAkJaWYgKHJjIHx8IGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkKIAkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCWRpc3RyaWJ1dGVfZmxvYXRfaXJxcyh2Y3B1LSZndDtrdm0pOwogCX0KIAogCXJjID0ga3ZtX3MzOTBfaGFuZGxlX3JlcXVlc3RzKHZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCmluZGV4IDZkMjg0MmZiNzFhMzMuLmEyYmNmNGFjYWMxNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKQEAgLTM3NSw2ICYjNDM7Mzc1LDcgQEAgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKTsKIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTsKIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwKIAkJCQkgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFMzOTAgS1ZNIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBLVk0gb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCBzZWVtcyB0byBpbnRyb2R1Y2UgYSBuZXcgZnVuY3Rpb24sIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLCBsb2NhdGVkIGluIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYCwgYW5kIGltcG9ydGFudGx5LCB0aGlzIG5ldyBmdW5jdGlvbiBpcyAqY2FsbGVkKiBmcm9tIGB2Y3B1X3ByZV9ydW5gIGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgLiBBbHNvLCB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgYF9fZmxvYXRpbmdfaXJxX2tpY2tgLCBzcGVjaWZpY2FsbHkgaG93IGl0IHVzZXMgYGludGlfdG9faXJxX3BlbmRfbWFza2AgdG8gZGVjaWRlIGlmIGEgdkNQVSBjYW4gaGFuZGxlIGFuIGludGVycnVwdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZXZlbiBzb21ldGhpbmcgd2Ugc2hvdWxkIGJvdGhlciB3aXRoIGZ1enppbmcuIFNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggS1ZNIG9uIHMzOTAsIHRoYXQgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBJIGtub3cgc3l6a2FsbGVyIGlzIGFscmVhZHkgaGl0dGluZyB0aGF0IGFyZWEuIE5vdyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoZXNlIG5ldy9tb2RpZmllZCBmdW5jdGlvbnMgd2FycmFudCBhdHRlbnRpb24uCgpMZXQmIzM5O3Mgc2VlLCB0aGUgZnVuY3Rpb25zIHRvdWNoZWQgYXJlOiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYGludGlfdG9faXJxX3BlbmRfbWFza2AsIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgYF9faW5qZWN0X3ZtYCwgYW5kIGB2Y3B1X3ByZV9ydW5gLgoKT2theSwgdGhlIGNydWNpYWwgcGFydCBpcyB0byBkZXRlcm1pbmUgYWNjZXNzaWJpbGl0eSBmb3IgZnV6emluZy4gYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIHNpbmNlIGl0JiMzOTtzIG5vbi1zdGF0aWMsIGNhbiBiZSBkaXJlY3RseSBhZGRlZCB0byBGb2N1c1N5bWJvbHMuIFRoYXQmIzM5O3MgYSBncmVlbiBsaWdodCEgTm93LCB0aGUgb3RoZXJzOiBgaW50aV90b19pcnFfcGVuZF9tYXNrYCwgYF9fZmxvYXRpbmdfaXJxX2tpY2tgLCBgX19pbmplY3Rfdm1gLCBhbmQgYHZjcHVfcHJlX3J1bmAgYXJlIGFsbCBzdGF0aWMuIFRoaXMgbWFrZXMgdGhlbSBhIGJpdCBtb3JlIGNoYWxsZW5naW5nIHRvIHRhcmdldCBkaXJlY3RseS4gSG93ZXZlciwgdGhlIG5vbi1zdGF0aWMgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2Agd2lsbCBicmluZyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBjbG9zZXIgdG8gdGhlIHN1cmZhY2UuIFdhaXQsIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGdvb2QgbmV3cyEKCkFscmlnaHQsIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGEgYml0IGRlZXBlciBpbnRvIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgbmF0dXJlIG9mIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc3RyaWJ1dGVfZmxvYXRfaXJxcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzE4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbGl2ZXJhYmxlX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzY5LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzA6dm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzEte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00NTU4PXN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3Ni1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTc3Olx0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1NzgtXHR9XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTM3Nz12b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozNzg6dm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zNzktaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgczM5MCBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgS2NvbmZpZyBzZXR0aW5ncyBmb3IgczM5MCB2aXJ0dWFsaXphdGlvbiB1c2luZyBLVk0uIFRoaXMgbWVhbnMgbmF2aWdhdGluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyB0byBjb25maXJtIHdoaWNoIG9wdGlvbnMgYXJlIHByZXNlbnQsIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBjb25maXJtIHRoZSBzdXBwb3J0IGlzIHRoZXJlIGFuZCBub3Qgc29tZWhvdyBhY2NpZGVudGFsbHkgZGlzYWJsZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBLVk0tcmVsYXRlZCBzeW1ib2xzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMg4oCTIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fUzM5MGAsIGFuZCBhbnl0aGluZyB0aGF0IHJlbGF0ZXMgdG8gdGhlIHNwZWNpZmljIHMzOTAgaGFyZHdhcmUgZmVhdHVyZXMgbmVjZXNzYXJ5IGZvciB2aXJ0dWFsaXphdGlvbi4gSSYjMzk7bGwgYWxzbyBiZSBjaGVja2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llczsgSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgdHJpcHBlZCB1cCBieSBzb21lIHN1YnRsZSBidWlsZC10aW1lIGlzc3VlLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cCBjb3JyZWN0bHkuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNIEluamVjdGlvbioqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyB1c2luZyBLVk0uIFRoYXQmIzM5O3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3lzdGVtIHdvcmtzLCBJIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGluZ3MgYXJlIGluamVjdGVkIGludG8gdGhlIHZpcnR1YWwgbWFjaGluZS4gTXkgaW5pdGlhbCB0YXJnZXRzIGFyZSBjbGVhcmx5IGBfX2luamVjdF92bWAgYW5kIGBrdm1fczM5MF9pbmplY3Rfdm1gLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByb2JhYmx5IGNlbnRyYWwgdG8gdGhlIGluamVjdGlvbiBtZWNoYW5pc20uIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29kZSBpbiB0aG9zZSByb3V0aW5lcywgdW5kZXJzdGFuZGluZyB0aGVpciBwYXJhbWV0ZXJzLCBjb250cm9sIGZsb3csIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgdGhleSBpbmNvcnBvcmF0ZS4gSG9wZWZ1bGx5LCBJJiMzOTtsbCB1bmNvdmVyIHRoZSBpbmplY3Rpb24gbWV0aG9kIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBzcGVjaWZpYyBLVk0gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDE1PXN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ1LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDQ2OmludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ3LVx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4MC1cdH1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4MTpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVx1MDAzZXR5cGUsIHMzOTBpbnQtXHUwMDNlcGFybSwgczM5MGludC1cdTAwM2VwYXJtNjQsXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODItXHRcdFx0XHQgMik7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODIwPXN0YXRpYyBpbnQga3ZtX3MzOTBfaW5qZWN0X2FpcnEoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzOC1cdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXHUwMDNlc3VwcHJlc3NpYmxlKSB7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mzk6XHRcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODQwLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg1Mi1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mjg1MzpcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODU0LVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzgwOD1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4NTAtXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVx1MDAzZXN1cHByZXNzaWJsZSkge1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozODUxOlx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg1Mi1cdFx0aWYgKHJldCA9PSAwKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcwLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozODcxOlx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4NzItXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgKGZpLVx1MDAzZXNpbW0gXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cdTAwM2Vpc2MpKSkge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk0Ny1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTQ4Olx0XHRyID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk0OS1cdFx0aWYgKHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0NzU9c3RhdGljIHZvaWQgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgc3RhcnRfdG9rZW4sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0OTMtXHRcdGludGkucGFybTY0ID0gdG9rZW47XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDQ5NDpcdFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKHZjcHUtXHUwMDNla3ZtLCBcdTAwMjZpbnRpLCBpbnRpX21lbSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5NS1cdFx0aWYgKHJldClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzc4PXZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6Mzc5OmludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODAtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCxcbi0tXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaD04MT1UUkFDRV9FVkVOVChrdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AsXG4tLVxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmgtMTI0LVxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmg6MTI1OlRSQUNFX0VWRU5UKGt2bV9zMzkwX2luamVjdF92bSxcbmFyY2gvczM5MC9rdm0vdHJhY2UtczM5MC5oLTEyNi1cdCAgICBUUF9QUk9UTyhfX3U2NCB0eXBlLCBfX3UzMiBwYXJtLCBfX3U2NCBwYXJtNjQsIGludCB3aG8pLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNL3MzOTAgSW50ZXJydXB0IEluamVjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgc2luY2UgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIGJlaW5nIHVzZWQuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYW5kIHRoYXQmIzM5O3MgdGhlIHJlYWwgaW50ZXJlc3RpbmcgcGFydC4KCk15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIGJlY29tZXM6CiogICBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYAoqICAgYGt2bV9zMzkwX2luamVjdF92bWAKClNpbmNlLCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBpcyBjYWxsZWQgZnJvbSBgdmNwdV9wcmVfcnVuYCwgYW5kIGl0IGFmZmVjdHMgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHdoaWNoIGlzIHVzZWQgYnkgYF9faW5qZWN0X3ZtYCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBrdm1fczM5MF9pbmplY3Rfdm1gLiBUaGF0JiMzOTtzIHRoZSBjYWxsIGNoYWluLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IGEgZmV3IHRoaW5ncy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCAqaXMqIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLCBhbmQgdGhhdCBpdCBpc24mIzM5O3Qgc3RhdGljLiBJdCYjMzk7cyBkZWNsYXJlZCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oYCBhbmQgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AsIGFuZCBpdCYjMzk7cyBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBHb29kLCB0aGF0IG1ha2VzIHRoaW5ncyBlYXNpZXIuIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIGFsc28gbm90IHN0YXRpYywgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdC4KCkkgc2hvdWxkIHByb2JhYmx5IGFsc28gdGFrZSBhIHF1aWNrIGxvb2sgYXQgaG93IGB2Y3B1X3ByZV9ydW5gIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGFyZSB3b3JraW5nIGluIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhpcyBuZXcgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBzY2hlbWUsIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X3ByZV9ydW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDUzMj1ib29sIGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU1Ny1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTU4OnN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTU5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDc5ND1zdGF0aWMgaW50IF9fdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00ODA1LVx0d2hpbGUgKHRydWUpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0ODA2Olx0XHRyYyA9IHZjcHVfcHJlX3J1bih2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00ODA3LVx0XHRrdm1fdmNwdV9zcmN1X3JlYWRfdW5sb2NrKHZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDM5CgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gczM5MCBJbnRlcnJ1cHQgRGVsaXZlcnkgUGF0Y2gqKgoKT2theSwgc28gYHZjcHVfcHJlX3J1bmAgaXMgY2FsbGVkIGZyb20gYF9fdmNwdV9ydW5gLCB3aGljaCBpdHNlbGYgaXMgdHJpZ2dlcmVkIGJ5IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29kZSBwYXRoLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBwYXRjaCBtYWtlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBob3cgS1ZNIGhhbmRsZXMgaW50ZXJydXB0cyBvbiBzMzkwLCBhbmQgdGhhdCYjMzk7cyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgdGhpbmcgSSYjMzk7bSBsb29raW5nIGZvci4KClNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgd2hpY2ggc291bmRzIGxpa2UgaXQmIzM5O3MgZGVzaWduZWQgdG8gcHVzaCBmbG9hdGluZyBpbnRlcnJ1cHRzIHRvIGlkbGUgVkNQVXMuIEFsc28sIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBpcyBiZWluZyB0d2Vha2VkIHRvIHVzZSBgaW50aV90b19pcnFfcGVuZF9tYXNrYCB0byBwcmV2ZW50IGtpY2tpbmcgYSBWQ1BVIHRoYXQmIzM5O3MgdW5hYmxlIHRvIHJlY2VpdmUgdGhlIGludGVycnVwdC4KClRoaXMgaXMgc2NyZWFtaW5nICYjMzQ7RlVaWiBNRSEmIzM0OyBhdCBtZS4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSBLVk0gaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiwgYW5kIHRoZSBtb2RpZmljYXRpb25zIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHRpbWluZyBpc3N1ZXMgb3IgY29ybmVyIGNhc2VzLiBJJiMzOTtsbCBmbGFnIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIGFuZCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBhcyBmb2N1cyBzeW1ib2xzLiBBbmQgb2YgY291cnNlLCBJJiMzOTtsbCBuZWVkIGBLVk1gIGVuYWJsZWQgZm9yIHRoZSBmdXp6aW5nLiBUaGlzIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBkaXNjb3ZlcmluZyBzb21lIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3RyaWJ1dGVfZmxvYXRfaXJxcyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9pbmplY3Rfdm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBzMzkwIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYyBieSBpbnRyb2R1Y2luZyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcyBhbmQgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB0byBjaGVjayBpZiBhIFZDUFUgY2FuIHJlY2VpdmUgdGhlIGludGVycnVwdCBiZWZvcmUga2lja2luZyBpdC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgb24gczM5MCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGlzdHJpYnV0ZV9mbG9hdF9pcnFzJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92bSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHMzOTAgaW50ZXJydXB0IGRlbGl2ZXJ5IGxvZ2ljIGJ5IGludHJvZHVjaW5nIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgaW50ZXJydXB0cyB0byBpZGxlIFZDUFVzIGFuZCBtb2RpZnlpbmcgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIGNoZWNrIGlmIGEgVkNQVSBjYW4gcmVjZWl2ZSB0aGUgaW50ZXJydXB0IGJlZm9yZSBraWNraW5nIGl0LiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBvbiBzMzkwIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGxvZ2ljIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgaW50ZXJydXB0cyB0byBpZGxlIFZDUFVzLiBJdCBpbnRyb2R1Y2VzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXMoKWAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBga3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrYCBhbmQgd2FrZXMgdXAgVkNQVXMgdGhhdCBjYW4gZGVsaXZlciB0aGUgcGVuZGluZyBpbnRlcnJ1cHRzLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2Zsb2F0aW5nX2lycV9raWNrKClgIHRvIHRha2UgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpYCBpbnN0ZWFkIG9mIGEgYHU2NCB0eXBlYCwgYW5kIHVzZXMgYGludGlfdG9faXJxX3BlbmRfbWFzaygpYCB0byBkZXRlcm1pbmUgdGhlIHBlbmRpbmcgSVJRIG1hc2suXG5cbkFsbCBmaWVsZHMgYWNjZXNzZWQgYnkgdGhlIG5ldyBsb2dpYyAoc3VjaCBhcyBgaW50aS1cdTAwM2V0eXBlYCBhbmQgYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBpbnRpYCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgdXNpbmcgYGt6YWxsb2NgICh2aWEgYGt6YWxsb2Nfb2JqKClgKSBpbiBwYXRocyBsaWtlIGBrdm1fYXJjaF92bV9pb2N0bCgpYCwgYGt2bV9zMzkwX2luamVjdF9haXJxKClgLCBhbmQgYF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oKWAsIGFuZCB0aGVuIHBvcHVsYXRlZCB3aXRoIGZ1bGx5IGluaXRpYWxpemVkIGRhdGEgZnJvbSB1c2VyIHNwYWNlIG9yIGtlcm5lbCBsb2dpYy4gSW4gdGhlIGNhc2Ugb2YgYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soKWAsIHdoZXJlIGBpbnRpYCBpcyBhIHN0YWNrIHZhcmlhYmxlLCBvbmx5IHRoZSBgdHlwZWAgZmllbGQgaXMgcmVhZCBieSB0aGUgbmV3IGxvZ2ljLCBhbmQgaXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgS1ZNX1MzOTBfTUNIS2AuXG5cblRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYW55IG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YjM5MmFlNjFjYmYyYzBhOTlmMjZiYjgyZTc1ZjM5NmJkODhhZmY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTM6MDQ6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGI0MTgyY2E0NDM1ZmIuLjFkNjJiZGQ3YWNhNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC00NjcsNiAmIzQzOzQ2Nyw3IEBAIHN0cnVjdCBrdm1fdm1fc3RhdCB7CiAJdTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5OwogCXU2NCBnbWFwX3NoYWRvd19zZ19lbnRyeTsKIAl1NjQgZ21hcF9zaGFkb3dfcGdfZW50cnk7CiYjNDM7CXU2NCBpbmplY3RfcmVkaXN0OwogfTsKIAogc3RydWN0IGt2bV9hcmNoX21lbW9yeV9zbG90IHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IDhmMjRiY2QxYTZkMzYuLmU2N2NkZWRiNWFlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwpAQCAtMzY3LDYgJiM0MzszNjcsMzcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIGFjdGl2ZV9tYXNrOwogfQogCiYjNDM7dm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTsKJiM0MzsJaW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzOwomIzQzOwomIzQzOwlpZiAoIVJFQURfT05DRShrdm0tJmd0O2FyY2guZmxvYXRfaW50LnBlbmRpbmdfaXJxcykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKCZhbXA7a3ZtLSZndDtvbmxpbmVfdmNwdXMpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOb3QgdG9vIHdvcnJpZWQgYWJvdXQgc3luY2hyb25pemF0aW9uIGZvciBpZGxlX21hc2suIFdlCiYjNDM7CSAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGEKJiM0MzsJICogdmNwdSBpcyBub3QgaGFybWZ1bC4KJiM0MzsJICovCiYjNDM7CXNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS0mZ3Q7YXJjaC5pZGxlX21hc2ssIG9ubGluZV92Y3B1cyk7CiYjNDM7CS8qIFdlbGwgbm9ib2R5JiMzOTtzIHNsZWVwaW5nIHNvIHNvbWVvbmUgd2lsbCBsaWtlbHkgdGFrZSB0aGUgSVJRIHNvb24gKi8KJiM0MzsJaWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTsKJiM0MzsJCWlmIChkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSkgewomIzQzOwkJCWt2bS0mZ3Q7c3RhdC5pbmplY3RfcmVkaXN0JiM0MzsmIzQzOzsKJiM0MzsJCQlrdm1fczM5MF92Y3B1X3dha2V1cChkc3RfdmNwdSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlzaWdjcHUgPSBmaW5kX25leHRfYml0KGt2bS0mZ3Q7YXJjaC5pZGxlX21hc2ssIG9ubGluZV92Y3B1cywgJiM0MzsmIzQzO3NpZ2NwdSk7CiYjNDM7CX0gd2hpbGUgKHNpZ2NwdSAmbHQ7IG9ubGluZV92Y3B1cyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgX19zZXRfY3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1dBSVQpOwpAQCAtMTkxNSwyMiAmIzQzOzE5NDYsNDggQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKJiM0Mzt7CiYjNDM7CXU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktJmd0O3R5cGUpOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBLVk1fUzM5MF9NQ0hLOgomIzQzOwkJLyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi8KJiM0MzsJCXJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApOwomIzQzOwljYXNlIEtWTV9TMzkwX0lOVF9WSVJUSU86CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX1ZJUlRJTyk7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFKSB8CiYjNDM7CQkgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKJiM0MzsJCXJldHVybiBCSVQoaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLSZndDtpby5pb19pbnRfd29yZCkpKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC4KICAqLwotc3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlKQomIzQzO3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTsKIAlpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDsKJiM0MzsJdTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS0mZ3Q7dHlwZSk7CiYjNDM7CXU2NCBpcnFfcGVuZF9tYXNrOwogCiAJb25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoJmFtcDtrdm0tJmd0O29ubGluZV92Y3B1cyk7CiAJaWYgKCFvbmxpbmVfdmNwdXMpCiAJCXJldHVybjsKIAomIzQzOwlpcnFfcGVuZF9tYXNrID0gaW50aV90b19pcnFfcGVuZF9tYXNrKGludGkpOwogCWZvciAoc2lnY3B1ID0ga3ZtLSZndDthcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUmIzQzOyYjNDM7KSB7CiAJCXNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7CiAJCWRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTsKLQkJaWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpKQomIzQzOwkJaWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSAmYW1wOyBpcnFfcGVuZF9tYXNrKQogCQkJYnJlYWs7CiAJCS8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovCiAJCWlmIChucl90cmllcyYjNDM7JiM0MzsgJmd0Oz0gb25saW5lX3ZjcHVzKQpAQCAtMTk4Miw3ICYjNDM7MjAzOSw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgdHlwZSk7CiYjNDM7CV9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCBpbnRpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDUxOGE2OWM1NWU4NWMuLmQ2ZDQ2Njg4ZDk4MDggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTg2LDYgJiM0Mzs4Niw3IEBAIGNvbnN0IHN0cnVjdCBrdm1fc3RhdHNfZGVzYyBrdm1fdm1fc3RhdHNfZGVzY1tdID0gewogCVNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcjNfZW50cnkpLAogCVNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfc2dfZW50cnkpLAogCVNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcGdfZW50cnkpLAomIzQzOwlTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLAogfTsKIAogY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHsKQEAgLTQ1NzIsNiAmIzQzOzQ1NzMsOCBAQCBzdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7CiAJCWlmIChyYyB8fCBndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpCiAJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS0mZ3Q7a3ZtKTsKIAl9CiAKIAlyYyA9IGt2bV9zMzkwX2hhbmRsZV9yZXF1ZXN0cyh2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAppbmRleCA2ZDI4NDJmYjcxYTMzLi5hMmJjZjRhY2FjMTZlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCkBAIC0zNzUsNiAmIzQzOzM3NSw3IEBAIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9zMzkwX2lkbGVfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcik7CiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9zMzkwX2NsZWFyX2xvY2FsX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3MzOTBfY2xlYXJfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pOwomIzQzO3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsCiAJCQkJICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDgxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogOTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUzM5MCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBmb2N1c2VkIG9uIHJlZmluaW5nIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgUzM5MCBLVk0gZW52aXJvbm1lbnQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIGludHJvZHVjaW5nIHNvbWUgb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIGludGVycnVwdCBkaXN0cmlidXRpb24gYW5kIHBvdGVudGlhbGx5IGltcHJvdmluZyB0aGUgd2FrZXVwIG1lY2hhbmlzbSBmb3IgaWRsZSB2Q1BVcy4gVGhlIGNvcmUgaWRlYSBzZWVtcyB0byBiZSBhYm91dCBlZmZpY2llbnRseSBkaXN0cmlidXRpbmcgcGVuZGluZyBpbnRlcnJ1cHRzIHRvIHRoZSBhcHByb3ByaWF0ZSB2aXJ0dWFsIENQVXMuCgpJJiMzOTttIHNlZWluZyB0aGF0IGEgbmV3IGZpZWxkLCBgaW5qZWN0X3JlZGlzdGAsIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBga3ZtX3ZtX3N0YXRgIHN0cnVjdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdpdGggdGhpcyBhZGRpdGlvbj8gRGVidWdmcyBvciBzaW1pbGFyIGlzIG9mdGVuIHVzZWQgdG8gZXhwb3NlIGBrdm1fdm1fc3RhdGAgdG8gdXNlcnNwYWNlLiBGb3J0dW5hdGVseSwgaXQmIzM5O3MganVzdCBhIHN0cnVjdCBvZiBgdTY0YCBmaWVsZHMsIGFuZCB0aGUgbmV3IGZpZWxkIGlzIGFkZGVkIGF0IHRoZSBlbmQgYW5kIGlzIGxpa2VseSB6ZXJvZWQgb24gYWxsb2NhdGlvbiwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgcXVpY2tseSB2ZXJpZmllZCB0aGF0IGBrdm1fdm1fc3RhdGAgaXMgZWl0aGVyIGVtYmVkZGVkIHdpdGhpbiB0aGUgYHN0cnVjdCBrdm1gIG9yIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgd2hpY2ggc2hvdWxkIGhhbmRsZSB0aGUgaW5pdGlhbGl6YXRpb24uIEkgY2hlY2tlZCB0aGUgYGluY2x1ZGVgIGhlYWRlcnMgdG8gYmUgc3VyZS4KClRoZSBuZXh0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3Igd2FraW5nIHVwIGlkbGUgdkNQVXMgdGhhdCBoYXZlIHBlbmRpbmcgaW50ZXJydXB0cy4gVGhhdCYjMzk7cyBhIHNlbnNpYmxlIG9wdGltaXphdGlvbi4KClRoZSBtb2RpZmljYXRpb24gb2YgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIHRha2UgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpYCBpbnN0ZWFkIG9mIGp1c3QgYSBgdTY0IHR5cGVgIHJhaXNlZCBhIGZsYWcuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBuZXcgZnVuY3Rpb24sIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggaW50ZXJydXB0IHR5cGVzIGFyZSBwZW5kaW5nLiBJIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgYGludGlgIGlzIHBvcHVsYXRlZCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgLCB3aGljaCBnZXRzIHVzZWQgd2l0aGluIGEgYHN3aXRjaGAgc3RhdGVtZW50IGluIHRoZSBgaW50aV90b19pcnFfcGVuZF9tYXNrYCBmdW5jdGlvbi4KCk5vdywgYmVmb3JlIHRoZSBwYXRjaCwgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIG9ubHkgdXNlZCB0aGUgYHR5cGVgIGZpZWxkLiBOb3csIGl0IHJlYWRzIHRoZSBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgIGlmIHRoZSBgdHlwZWAgZmFsbHMgaW4gdGhlIGBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWGAgcmFuZ2UuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpbnRpYCBpcyBhbHdheXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiBgX19mbG9hdGluZ19pcnFfa2lja2AgaXMgY2FsbGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYF9faW5qZWN0X3ZtYCAod2hpY2ggdGFrZXMgYGludGlgKSBhbmQgaG93IGBpbnRpYCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQsIG1vc3QgbGlrZWx5IGluIGBrdm1fczM5MF9pbmplY3Rfdm1gLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCByZWFkcy4gSG9wZWZ1bGx5LCBLTVNBTiB3b3VsZCBjYXRjaCBpdCBpZiBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgIHdhc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEkgY2hlY2tlZCBob3cgYGludGlgIGlzIHBvcHVsYXRlZCBmcm9tIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YC4gSSYjMzk7bSByZWFzb25hYmx5IGNvbmZpZGVudCB0aGF0IGBpbnRpYCAqc2hvdWxkKiBiZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gSSB3aWxsIGxvb2sgaW4gYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2luamVjdF92bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDE1PXN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ1LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDQ2OmludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ3LVx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4MC1cdH1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4MTpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVx1MDAzZXR5cGUsIHMzOTBpbnQtXHUwMDNlcGFybSwgczM5MGludC1cdTAwM2VwYXJtNjQsXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODItXHRcdFx0XHQgMik7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODIwPXN0YXRpYyBpbnQga3ZtX3MzOTBfaW5qZWN0X2FpcnEoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzOC1cdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXHUwMDNlc3VwcHJlc3NpYmxlKSB7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mzk6XHRcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODQwLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg1Mi1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mjg1MzpcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODU0LVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzgwOD1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4NTAtXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVx1MDAzZXN1cHByZXNzaWJsZSkge1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozODUxOlx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg1Mi1cdFx0aWYgKHJldCA9PSAwKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcwLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozODcxOlx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4NzItXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgKGZpLVx1MDAzZXNpbW0gXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cdTAwM2Vpc2MpKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGt2bV9zMzkwX2luamVjdF92bWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1fczM5MF9pbmplY3Rfdm1gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBzdGVwLWJ5LXN0ZXAuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgVk0sIHdoYXQgYXNwZWN0cyBvZiB0aGUgUy8zOTAgYXJjaGl0ZWN0dXJlIGl0IHRhcmdldHMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIG9yIGVkZ2UgY2FzZXMuIFRoaXMgd2lsbCByZXF1aXJlIGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHByb2JhYmx5IHNvbWUgY3Jvc3MtcmVmZXJlbmNpbmcgd2l0aCByZWxldmFudCBkb2N1bWVudGF0aW9uIG9uIHRoZSBLVk0gczM5MCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBnZW5lcmFsIEtWTSBBUEkuIEkgd2FudCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1vZGVsIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA0NjpcdGludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuMjA0NzpcdFx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuMjA0ODpcdHtcbjIwNDk6XHRcdGludCByYztcbjIwNTA6XHRcbjIwNTE6XHRcdGludGktXHUwMDNldHlwZSA9IHMzOTBpbnQtXHUwMDNldHlwZTtcbjIwNTI6XHRcdHN3aXRjaCAoaW50aS1cdTAwM2V0eXBlKSB7XG4yMDUzOlx0XHRjYXNlIEtWTV9TMzkwX0lOVF9WSVJUSU86XG4yMDU0Olx0XHRcdFZNX0VWRU5UKGt2bSwgNSwgXCYjMzQ7aW5qZWN0OiB2aXJ0aW8gcGFybToleCxwYXJtNjQ6JWxseFwmIzM0OyxcbjIwNTU6XHRcdFx0XHQgczM5MGludC1cdTAwM2VwYXJtLCBzMzkwaW50LVx1MDAzZXBhcm02NCk7XG4yMDU2Olx0XHRcdGludGktXHUwMDNlZXh0LmV4dF9wYXJhbXMgPSBzMzkwaW50LVx1MDAzZXBhcm07XG4yMDU3Olx0XHRcdGludGktXHUwMDNlZXh0LmV4dF9wYXJhbXMyID0gczM5MGludC1cdTAwM2VwYXJtNjQ7XG4yMDU4Olx0XHRcdGJyZWFrO1xuMjA1OTpcdFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbjIwNjA6XHRcdFx0Vk1fRVZFTlQoa3ZtLCA0LCBcJiMzNDtpbmplY3Q6IHNjbHAgcGFybToleFwmIzM0OywgczM5MGludC1cdTAwM2VwYXJtKTtcbjIwNjE6XHRcdFx0aW50aS1cdTAwM2VleHQuZXh0X3BhcmFtcyA9IHMzOTBpbnQtXHUwMDNlcGFybTtcbjIwNjI6XHRcdFx0YnJlYWs7XG4yMDYzOlx0XHRjYXNlIEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORTpcbjIwNjQ6XHRcdFx0aW50aS1cdTAwM2VleHQuZXh0X3BhcmFtczIgPSBzMzkwaW50LVx1MDAzZXBhcm02NDtcbjIwNjU6XHRcdFx0YnJlYWs7XG4yMDY2Olx0XHRjYXNlIEtWTV9TMzkwX01DSEs6XG4yMDY3Olx0XHRcdFZNX0VWRU5UKGt2bSwgMywgXCYjMzQ7aW5qZWN0OiBtYWNoaW5lIGNoZWNrIG1jaWMgMHglbGx4XCYjMzQ7LFxuMjA2ODpcdFx0XHRcdCBzMzkwaW50LVx1MDAzZXBhcm02NCk7XG4yMDY5Olx0XHRcdGludGktXHUwMDNlbWNoay5jcjE0ID0gczM5MGludC1cdTAwM2VwYXJtOyAvKiB1cHBlciBiaXRzIGFyZSBub3QgdXNlZCAqL1xuMjA3MDpcdFx0XHRpbnRpLVx1MDAzZW1jaGsubWNpYyA9IHMzOTBpbnQtXHUwMDNlcGFybTY0O1xuMjA3MTpcdFx0XHRicmVhaztcbjIwNzI6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4yMDczOlx0XHRcdGludGktXHUwMDNlaW8uc3ViY2hhbm5lbF9pZCA9IHMzOTBpbnQtXHUwMDNlcGFybSBcdTAwM2VcdTAwM2UgMTY7XG4yMDc0Olx0XHRcdGludGktXHUwMDNlaW8uc3ViY2hhbm5lbF9uciA9IHMzOTBpbnQtXHUwMDNlcGFybSBcdTAwMjYgMHgwMDAwZmZmZnU7XG4yMDc1Olx0XHRcdGludGktXHUwMDNlaW8uaW9faW50X3Bhcm0gPSBzMzkwaW50LVx1MDAzZXBhcm02NCBcdTAwM2VcdTAwM2UgMzI7XG4yMDc2Olx0XHRcdGludGktXHUwMDNlaW8uaW9faW50X3dvcmQgPSBzMzkwaW50LVx1MDAzZXBhcm02NCBcdTAwMjYgMHgwMDAwMDAwMGZmZmZmZmZmdWxsO1xuMjA3NzpcdFx0XHRicmVhaztcbjIwNzg6XHRcdGRlZmF1bHQ6XG4yMDc5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjA4MDpcdFx0fVxuMjA4MTpcdFx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZtKHMzOTBpbnQtXHUwMDNldHlwZSwgczM5MGludC1cdTAwM2VwYXJtLCBzMzkwaW50LVx1MDAzZXBhcm02NCxcbjIwODI6XHRcdFx0XHRcdCAyKTtcbjIwODM6XHRcbjIwODQ6XHRcdHJjID0gX19pbmplY3Rfdm0oa3ZtLCBpbnRpKTtcbjIwODU6XHRcbjIwODY6XHRcdHJldHVybiByYztcbjIwODc6XHR9XG4yMDg4Olx0XG4yMDg5Olx0aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG4yMDkwOlx0XHRcdFx0ICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuMjA5MTpcdHtcbjIwOTI6XHRcdHJldHVybiBfX2luamVjdF92bShrdm0sIGludGkpO1xuMjA5MzpcdH1cbjIwOTQ6XHRcbjIwOTU6XHRpbnQgczM5MGludF90b19zMzkwaXJxKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NTEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVnZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgaW50aWAgZ2V0cyBpdHMgdmFsdWUuIEl0JiMzOTtzIGRpcmVjdGx5IHBvcHVsYXRlZCBmcm9tIGBzMzkwaW50YCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaWYgYHMzOTBpbnRgIGlzbiYjMzk7dCBpbml0aWFsaXplZCwgdGhlbiBuZWl0aGVyIHdpbGwgYGludGlgLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2UgdGhlIG9yaWdpbiBvZiBgczM5MGludGAuIEl0JiMzOTtzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCwgc28gSSBuZWVkIHRvIGZpbmQgaXRzIGluaXRpYWwgc2V0dGluZy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gTm93LCBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBrdm1fczM5MF9pbmplY3RfYWlycWAgYXBwZWFycyBpbiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODIwOlx0c3RhdGljIGludCBrdm1fczM5MF9pbmplY3RfYWlycShzdHJ1Y3Qga3ZtICprdm0sXG4yODIxOlx0XHRcdFx0XHRzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyKVxuMjgyMjpcdHtcbjI4MjM6XHRcdHN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50O1xuMjgyNDpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50ID0ge1xuMjgyNTpcdFx0XHQudHlwZSA9IEtWTV9TMzkwX0lOVF9JTygxLCAwLCAwLCAwKSxcbjI4MjY6XHRcdFx0LnBhcm0gPSAwLFxuMjgyNzpcdFx0XHQucGFybTY0ID0gaXNjX3RvX2ludF93b3JkKGFkYXB0ZXItXHUwMDNlaXNjKSxcbjI4Mjg6XHRcdH07XG4yODI5Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XG4yODMwOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuMjgzMTpcdFxuMjgzMjpcdFx0aW50IHJldCA9IDA7XG4yODMzOlx0XG4yODM0Olx0XHRpbnRpID0ga3phbGxvY19vYmooKmludGksIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4yODM1Olx0XHRpZiAoIWludGkpXG4yODM2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjgzNzpcdFxuMjgzODpcdFx0aWYgKCF0ZXN0X2t2bV9mYWNpbGl0eShrdm0sIDcyKSB8fCAhYWRhcHRlci1cdTAwM2VzdXBwcmVzc2libGUpIHtcbjI4Mzk6XHRcdFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG4yODQwOlx0XHRcdGlmIChyZXQpXG4yODQxOlx0XHRcdFx0a2ZyZWUoaW50aSk7XG4yODQyOlx0XHRcdHJldHVybiByZXQ7XG4yODQzOlx0XHR9XG4yODQ0Olx0XG4yODQ1Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZmaS1cdTAwM2VhaXNfbG9jaywgZmxhZ3MpO1xuMjg0NjpcdFx0aWYgKGZpLVx1MDAzZW5pbW0gXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cdTAwM2Vpc2MpKSB7XG4yODQ3Olx0XHRcdHRyYWNlX2t2bV9zMzkwX2FpcnFfc3VwcHJlc3NlZChhZGFwdGVyLVx1MDAzZWlkLCBhZGFwdGVyLVx1MDAzZWlzYyk7XG4yODQ4Olx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZmktXHUwMDNlYWlzX2xvY2ssIGZsYWdzKTtcbjI4NDk6XHRcdFx0a2ZyZWUoaW50aSk7XG4yODUwOlx0XHRcdHJldHVybiByZXQ7XG4yODUxOlx0XHR9XG4yODUyOlx0XG4yODUzOlx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbjI4NTQ6XHRcbjI4NTU6XHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAoZmktXHUwMDNlc2ltbSBcdTAwMjYgQUlTX01PREVfTUFTSyhhZGFwdGVyLVx1MDAzZWlzYykpKSB7XG4yODU2Olx0XHRcdGZpLVx1MDAzZW5pbW0gfD0gQUlTX01PREVfTUFTSyhhZGFwdGVyLVx1MDAzZWlzYyk7XG4yODU3Olx0XHRcdHRyYWNlX2t2bV9zMzkwX21vZGlmeV9haXNfbW9kZShhZGFwdGVyLVx1MDAzZWlzYyxcbjI4NTg6XHRcdFx0XHRcdFx0ICAgICAgIEtWTV9TMzkwX0FJU19NT0RFX1NJTkdMRSwgMik7XG4yODU5Olx0XHR9XG4yODYwOlx0XG4yODYxOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZpLVx1MDAzZWFpc19sb2NrLCBmbGFncyk7XG4yODYyOlx0XHRpZiAocmV0KVxuMjg2MzpcdFx0XHRrZnJlZShpbnRpKTtcbjI4NjQ6XHRcdHJldHVybiByZXQ7XG4yODY1Olx0fVxuMjg2NjpcdFxuMjg2NzpcdHN0YXRpYyBpbnQgZmxpY19pbmplY3RfYWlycShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4yODY4Olx0e1xuMjg2OTpcdFx0dW5zaWduZWQgaW50IGlkID0gYXR0ci1cdTAwM2VhdHRyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODA4Olx0aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG4zODA5Olx0XHRcdFx0ICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLFxuMzgxMDpcdFx0XHRcdCAgICAgIGJvb2wgbGluZV9zdGF0dXMpXG4zODExOlx0e1xuMzgxMjpcdFx0aW50IHJldCwgc2V0Yml0O1xuMzgxMzpcdFx0c3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcjtcbjM4MTQ6XHRcdHN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50O1xuMzgxNTpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpO1xuMzgxNjpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50ID0ge1xuMzgxNzpcdFx0XHRcdC50eXBlID0gS1ZNX1MzOTBfSU5UX0lPKDEsIDAsIDAsIDApLFxuMzgxODpcdFx0XHRcdC5wYXJtID0gMCxcbjM4MTk6XHRcdH07XG4zODIwOlx0XG4zODIxOlx0XHRrdm0tXHUwMDNlc3RhdC5pb18zOTBfaW5hdG9taWMmIzQzOyYjNDM7O1xuMzgyMjpcdFxuMzgyMzpcdFx0LyogV2UmIzM5O3JlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgMC1cdTAwM2UxIHRyYW5zaXRpb24uICovXG4zODI0Olx0XHRpZiAoIWxldmVsKVxuMzgyNTpcdFx0XHRyZXR1cm4gMDtcbjM4MjY6XHRcdGlmIChlLVx1MDAzZXR5cGUgIT0gS1ZNX0lSUV9ST1VUSU5HX1MzOTBfQURBUFRFUilcbjM4Mjc6XHRcdFx0cmV0dXJuIC1FV09VTERCTE9DSztcbjM4Mjg6XHRcbjM4Mjk6XHRcdGFkYXB0ZXIgPSBnZXRfaW9fYWRhcHRlcihrdm0sIGUtXHUwMDNlYWRhcHRlci5hZGFwdGVyX2lkKTtcbjM4MzA6XHRcdGlmICghYWRhcHRlcilcbjM4MzE6XHRcdFx0cmV0dXJuIC1FV09VTERCTE9DSztcbjM4MzI6XHRcbjM4MzM6XHRcdHMzOTBpbnQucGFybTY0ID0gaXNjX3RvX2ludF93b3JkKGFkYXB0ZXItXHUwMDNlaXNjKTtcbjM4MzQ6XHRcdHNldGJpdCA9IDE7XG4zODM1Olx0XHRyZXQgPSBhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoa3ZtLCBhZGFwdGVyLCBcdTAwMjZlLVx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XG4zODM2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMzgzNzpcdFx0XHRyZXR1cm4gLUVXT1VMREJMT0NLO1xuMzgzODpcdFx0aWYgKCFyZXQgfHwgYWRhcHRlci1cdTAwM2VtYXNrZWQpIHtcbjM4Mzk6XHRcdFx0a3ZtLVx1MDAzZXN0YXQuaW9fMzkwX2luYXRvbWljX25vX2luamVjdCYjNDM7JiM0Mzs7XG4zODQwOlx0XHRcdHJldHVybiAwO1xuMzg0MTpcdFx0fVxuMzg0MjpcdFxuMzg0MzpcdFx0aW50aSA9IGt6YWxsb2Nfb2JqKCppbnRpLCBHRlBfQVRPTUlDKTtcbjM4NDQ6XHRcdGlmICghaW50aSkge1xuMzg0NTpcdFx0XHRzZXRiaXQgPSAwO1xuMzg0NjpcdFx0XHRhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoa3ZtLCBhZGFwdGVyLCBcdTAwMjZlLVx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XG4zODQ3Olx0XHRcdHJldHVybiAtRVdPVUxEQkxPQ0s7XG4zODQ4Olx0XHR9XG4zODQ5Olx0XG4zODUwOlx0XHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVx1MDAzZXN1cHByZXNzaWJsZSkge1xuMzg1MTpcdFx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbjM4NTI6XHRcdFx0aWYgKHJldCA9PSAwKSB7XG4zODUzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjM4NTQ6XHRcdFx0fSBlbHNlIHtcbjM4NTU6XHRcdFx0XHRzZXRiaXQgPSAwO1xuMzg1NjpcdFx0XHRcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFx1MDAyNmUtXHUwMDNlYWRhcHRlciwgc2V0Yml0KTtcbjM4NTc6XHRcdFx0XHRrZnJlZShpbnRpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkzMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgczM5MGludGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIG91dHNldCwgd2hpY2ggaXMgZ29vZC4gVGhlbiwgYGludGlgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCwgYXMgd2Uga25vdywgZXNzZW50aWFsbHkgd3JhcHMgYGt6YWxsb2NgLiBBbmQgdGhhdCBtZWFucyBpdCYjMzk7cyBmdWxseSB6ZXJvZWQgb3V0IGZyb20gdGhlIGdldC1nby4gVGhhdCYjMzk7cyBhIHN0cm9uZyBzdGFydCBmb3Igc2FmZXR5LgoKTmV4dCwgYGt2bV9zMzkwX2luamVjdF92bWAgY29tZXMgaW50byBwbGF5LiBJdCBjb3BpZXMgZGF0YSBmcm9tIHRoZSBpbml0aWFsaXplZCBgczM5MGludGAgaW50byBgaW50aWAuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGEgY2xlYW4gc2xhdGUgaW4gYGludGlgIGFuZCBwb3B1bGF0aW5nIGl0IHdpdGgga25vd24sIHZhbGlkIHZhbHVlcyBmcm9tIGBzMzkwaW50YC4gVGhpcyBzZXRzIHVwIGBpbnRpYCB3aXRoIHRoZSBwcm9wZXIgdmFsdWVzLgoKRm9sbG93aW5nIHRoYXQsIGBfX2luamVjdF92bWAgY2FsbHMgYF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCBpbnRpKWAuIFRoZSBgX19mbG9hdGluZ19pcnFfa2lja2AgZnVuY3Rpb24gcmVhZHMgYGludGktJmd0O3R5cGVgIGFuZCBjYWxscyBgaW50aV90b19pcnFfcGVuZF9tYXNrKGludGkpYC4gVGhlIGNyaXRpY2FsIGNoZWNrIGlzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB3aGljaCByZWFkcyBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgLgoKR2l2ZW4gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBwb3B1bGF0aW9uIHByb2Nlc3Mg4oCTIGBpbnRpYCBpcyB6ZXJvZWQsIHRoZW4gZGF0YSBpcyBjb3BpZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZWQgYHMzOTBpbnRgIOKAkyB0aGVyZSBzaG91bGQgYmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBlbnRpcmUgcHJvY2Vzcy4gRXZlcnl0aGluZyBpcyBhY2NvdW50ZWQgZm9yLCBhbmQgYWxsIHJlYWRzIGFyZSBmcm9tIGluaXRpYWxpemVkIGZpZWxkcy4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdHJpcGxlLWNoZWNrLCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbHMgdG8gYGt2bV9zMzkwX2luamVjdF92bWAuIEl0JiMzOTtzIGFsd2F5cyB3aXNlIHRvIGxvb2sgYXQgYWxsIHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRocyB0byBlbnN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9pbmplY3Rfdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIwMTU9c3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwNDUtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwNDY6aW50IGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwNDctXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDgwLVx0fVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDgxOlx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZtKHMzOTBpbnQtXHUwMDNldHlwZSwgczM5MGludC1cdTAwM2VwYXJtLCBzMzkwaW50LVx1MDAzZXBhcm02NCxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4Mi1cdFx0XHRcdCAyKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI4MjA9c3RhdGljIGludCBrdm1fczM5MF9pbmplY3RfYWlycShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODM4LVx0aWYgKCF0ZXN0X2t2bV9mYWNpbGl0eShrdm0sIDcyKSB8fCAhYWRhcHRlci1cdTAwM2VzdXBwcmVzc2libGUpIHtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgzOTpcdFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4NDAtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODUyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODUzOlx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4NTQtXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zODA4PWludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg1MC1cdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXHUwMDNlc3VwcHJlc3NpYmxlKSB7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM4NTE6XHRcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODUyLVx0XHRpZiAocmV0ID09IDApIHtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4NzAtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM4NzE6XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg3Mi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAoZmktXHUwMDNlc2ltbSBcdTAwMjYgQUlTX01PREVfTUFTSyhhZGFwdGVyLVx1MDAzZWlzYykpKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5Mjc9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQ3LVx0XHRcdHJldHVybiAtRU5PTUVNO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5NDg6XHRcdHIgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQ5LVx0XHRpZiAocilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDQ3NT1zdGF0aWMgdm9pZCBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBzdGFydF90b2tlbixcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5My1cdFx0aW50aS5wYXJtNjQgPSB0b2tlbjtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NDk0Olx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0odmNwdS1cdTAwM2Vrdm0sIFx1MDAyNmludGksIGludGlfbWVtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDk1LVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD0zNzg9dm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozNzk6aW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTM4MC1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuLS1cbmFyY2gvczM5MC9rdm0vdHJhY2UtczM5MC5oPTgxPVRSQUNFX0VWRU5UKGt2bV9zMzkwX3ZjcHVfc3RhcnRfc3RvcCxcbi0tXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjQtXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaDoxMjU6VFJBQ0VfRVZFTlQoa3ZtX3MzOTBfaW5qZWN0X3ZtLFxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmgtMTI2LVx0ICAgIFRQX1BST1RPKF9fdTY0IHR5cGUsIF9fdTMyIHBhcm0sIF9fdTY0IHBhcm02NCwgaW50IHdobyksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzc0CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5Mjc6XHRpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4yOTI4Olx0e1xuMjkyOTpcdFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4yOTMwOlx0XHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbjI5MzE6XHRcdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgYXR0cjtcbjI5MzI6XHRcdGludCByO1xuMjkzMzpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpO1xuMjkzNDpcdFxuMjkzNTpcdFx0c3dpdGNoIChpb2N0bCkge1xuMjkzNjpcdFx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcbjI5Mzc6XHRcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xuMjkzODpcdFxuMjkzOTpcdFx0XHRyID0gLUVJTlZBTDtcbjI5NDA6XHRcdFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuMjk0MTpcdFx0XHRcdGJyZWFrO1xuMjk0MjpcdFx0XHRyID0gLUVGQVVMVDtcbjI5NDM6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpXG4yOTQ0Olx0XHRcdFx0YnJlYWs7XG4yOTQ1Olx0XHRcdGludGkgPSBremFsbG9jX29iaigqaW50aSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjI5NDY6XHRcdFx0aWYgKCFpbnRpKVxuMjk0NzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjk0ODpcdFx0XHRyID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG4yOTQ5Olx0XHRcdGlmIChyKVxuMjk1MDpcdFx0XHRcdGtmcmVlKGludGkpO1xuMjk1MTpcdFx0XHRicmVhaztcbjI5NTI6XHRcdH1cbjI5NTM6XHRcdGNhc2UgS1ZNX0NSRUFURV9JUlFDSElQOiB7XG4yOTU0Olx0XHRcdHIgPSAtRUlOVkFMO1xuMjk1NTpcdFx0XHRpZiAoa3ZtLVx1MDAzZWFyY2gudXNlX2lycWNoaXApXG4yOTU2Olx0XHRcdFx0ciA9IDA7XG4yOTU3Olx0XHRcdGJyZWFrO1xuMjk1ODpcdFx0fVxuMjk1OTpcdFx0Y2FzZSBLVk1fU0VUX0RFVklDRV9BVFRSOiB7XG4yOTYwOlx0XHRcdHIgPSAtRUZBVUxUO1xuMjk2MTpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXR0ciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYXR0cikpKVxuMjk2MjpcdFx0XHRcdGJyZWFrO1xuMjk2MzpcdFx0XHRyID0ga3ZtX3MzOTBfdm1fc2V0X2F0dHIoa3ZtLCBcdTAwMjZhdHRyKTtcbjI5NjQ6XHRcdFx0YnJlYWs7XG4yOTY1Olx0XHR9XG4yOTY2Olx0XHRjYXNlIEtWTV9HRVRfREVWSUNFX0FUVFI6IHtcbjI5Njc6XHRcdFx0ciA9IC1FRkFVTFQ7XG4yOTY4Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhdHRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhdHRyKSkpXG4yOTY5Olx0XHRcdFx0YnJlYWs7XG4yOTcwOlx0XHRcdHIgPSBrdm1fczM5MF92bV9nZXRfYXR0cihrdm0sIFx1MDAyNmF0dHIpO1xuMjk3MTpcdFx0XHRicmVhaztcbjI5NzI6XHRcdH1cbjI5NzM6XHRcdGNhc2UgS1ZNX0hBU19ERVZJQ0VfQVRUUjoge1xuMjk3NDpcdFx0XHRyID0gLUVGQVVMVDtcbjI5NzU6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmF0dHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGF0dHIpKSlcbjI5NzY6XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5NDY6XHRcdHJldHVybiAwO1xuMTk0NzpcdH1cbjE5NDg6XHRcbjE5NDk6XHRzdGF0aWMgdTY0IGludGlfdG9faXJxX3BlbmRfbWFzayhzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4xOTUwOlx0e1xuMTk1MTpcdFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbjE5NTI6XHRcbjE5NTM6XHRcdHN3aXRjaCAodHlwZSkge1xuMTk1NDpcdFx0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuMTk1NTpcdFx0XHQvKiBPbmx5IHJlcHJlc3NpYmxlIG1hY2hpbmUgY2hlY2tzIGFyZSBmbG9hdGluZyAqL1xuMTk1NjpcdFx0XHRyZXR1cm4gQklUKElSUV9QRU5EX01DSEtfUkVQKTtcbjE5NTc6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbjE5NTg6XHRcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xuMTk1OTpcdFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbjE5NjA6XHRcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuMTk2MTpcdFx0XHQgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTtcbjE5NjI6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuMTk2MzpcdFx0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbjE5NjQ6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4xOTY1Olx0XHRcdHJldHVybiBCSVQoaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkKSkpO1xuMTk2NjpcdFx0ZGVmYXVsdDpcbjE5Njc6XHRcdFx0cmV0dXJuIDA7XG4xOTY4Olx0XHR9XG4xOTY5Olx0fVxuMTk3MDpcdFxuMTk3MTpcdC8qXG4xOTcyOlx0ICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxuMTk3MzpcdCAqL1xuMTk3NDpcdHN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4xOTc1Olx0e1xuMTk3NjpcdFx0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcbjE5Nzc6XHRcdGludCBzaWdjcHUsIG9ubGluZV92Y3B1cywgbnJfdHJpZXMgPSAwO1xuMTk3ODpcdFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbjE5Nzk6XHRcdHU2NCBpcnFfcGVuZF9tYXNrO1xuMTk4MDpcdFxuMTk4MTpcdFx0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4xOTgyOlx0XHRpZiAoIW9ubGluZV92Y3B1cylcbjE5ODM6XHRcdFx0cmV0dXJuO1xuMTk4NDpcdFxuMTk4NTpcdFx0aXJxX3BlbmRfbWFzayA9IGludGlfdG9faXJxX3BlbmRfbWFzayhpbnRpKTtcbjE5ODY6XHRcdGZvciAoc2lnY3B1ID0ga3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50Lmxhc3Rfc2xlZXBfY3B1OyA7IHNpZ2NwdSYjNDM7JiM0MzspIHtcbjE5ODc6XHRcdFx0c2lnY3B1ICU9IG9ubGluZV92Y3B1cztcbjE5ODg6XHRcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuMTk4OTpcdFx0XHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgXHUwMDI2XHUwMDI2XG4xOTkwOlx0XHRcdCAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSBcdTAwMjYgaXJxX3BlbmRfbWFzaylcbjE5OTE6XHRcdFx0XHRicmVhaztcbjE5OTI6XHRcdFx0LyogYXZvaWQgZW5kbGVzcyBsb29wcyBpZiBhbGwgdmNwdXMgYXJlIHN0b3BwZWQgKi9cbjE5OTM6XHRcdFx0aWYgKG5yX3RyaWVzJiM0MzsmIzQzOyBcdTAwM2U9IG9ubGluZV92Y3B1cylcbjE5OTQ6XHRcdFx0XHRyZXR1cm47XG4xOTk1Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTQ4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUzM5MCBLVk0gSW50ZXJydXB0IEluamVjdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNlZCBvbiByZWZpbmluZyB0aGUgaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB3aXRoaW4gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc3BlY2lmaWMgY2hhbmdlcywgbmFtZWx5IGludHJvZHVjaW5nIGEgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgZnVuY3Rpb24sIGFuZCBtb2RpZnlpbmcgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIHVzZSBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGlgIGluc3RlYWQgb2YganVzdCBhIGB1NjQgdHlwZWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGludGVycnVwdCBkZWxpdmVyeSBwYXRoLiBJdCBzZWVtcyBsaWtlIGEgbmV3IGhlbHBlciwgYGludGlfdG9faXJxX3BlbmRfbWFza2AgaGFzIGJlZW4gaW50cm9kdWNlZCwgd2hpY2ggcmVhZHMgdGhlIGludGVycnVwdCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBgaW50aS0mZ3Q7dHlwZWAgYW5kIGBpbnRpLSZndDtpby5pb19pbnRfd29yZGAgZmllbGRzLgoKVGhlIGludGVyZXN0aW5nIHBhcnQgaGVyZSBpcyBob3cgdGhpcyBgaW50aWAgc3RydWN0IGlzIGFsbG9jYXRlZC4gSXQmIzM5O3MgaGFwcGVuaW5nIGluIGEgZmV3IHBsYWNlczogYGt2bV9hcmNoX3ZtX2lvY3RsYCB1c2luZyBga3phbGxvY19vYmpgLCBga3ZtX3MzOTBfaW5qZWN0X2FpcnFgIGFsc28gd2l0aCBga3phbGxvY19vYmpgLCBhbmQgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIHVzaW5nIGBremFsbG9jX29iamAuIE15IGZpcnN0IHRob3VnaHQgaXMgJiMzNDt3YWl0LCB3aGF0JiMzOTtzIGBremFsbG9jX29iamA/JiMzNDsuIFRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGEgc3VidGxlIGJ1Zywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBxdWlja2x5IHJlYWxpemVkIGBremFsbG9jX29iamAgaXMgbGlrZWx5IGEgd3JhcHBlciBhcm91bmQgYGt6YWxsb2NgLCBhbmQgdGhhdCBtZWFucyB0aGUgbWVtb3J5ICppcyogemVyb2VkLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBJIHN0aWxsIHdhbnQgdG8gYmUgc3VyZS4gSXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIG1hY3JvLiBMZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgY2VydGFpbi4KCk9rYXksIEkmIzM5O3ZlIGNoZWNrZWQgYW5kIGNvbmZpcm1lZCBga3phbGxvY2AgemVyb2VzIHRoZSBtZW1vcnkuIFNvLCB0aGF0JiMzOTtzIG5vdCB0aGUgd29ycnkuIFRoZSBvdGhlciBwb3RlbnRpYWwgaXNzdWUgaXMsIGlzIHRoaXMgYGludGlgIHN0cnVjdHVyZSBwb3B1bGF0ZWQgZnJvbSB1c2VyIHNwYWNlPyBJZiBzbywgd2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gYXZvaWQgZXhwb3Npbmcga2VybmVsIG1lbW9yeSwgb3Igd29yc2UsIGhhdmUgaXQgcmVhZCB1bmluaXRpYWxpemVkLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIGluIGBrdm1fYXJjaF92bV9pb2N0bGAsIHRoZXJlJiMzOTtzIGEgYmxvY2sgaGFuZGxpbmcgYEtWTV9TMzkwX0lOVEVSUlVQVGAuIEl0IGNvcGllcyBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YCBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV91c2VyYCBpbnRvIGEgbG9jYWwgc3RydWN0dXJlIGNhbGxlZCBgczM5MGludGAuIFRoZW4sIGl0IGFsbG9jYXRlcyBgaW50aWAgd2l0aCBga3phbGxvY19vYmpgLCBhbmQgY2FsbHMgYGt2bV9zMzkwX2luamVjdF92bWAgdG8gZnVydGhlciBwcm9jZXNzIGl0LiBJIG5vdyBzZWUgdGhlIGZpZWxkcyBvZiBgczM5MGludGAgYXJlIGNvcGllZCBpbnRvIGBpbnRpYCBpbiB0aGF0IGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGBpbnRpLSZndDt0eXBlYCB0YWtlcyB0aGUgdmFsdWUgb2YgYHMzOTBpbnQtJmd0O3R5cGVgLiBGb3IgaW50ZXJydXB0IHR5cGUgYEtWTV9TMzkwX0lOVF9JT19NSU5gIHRvIGBLVk1fUzM5MF9JTlRfSU9fTUFYYCwgdGhlIGBzMzkwaW50YCYjMzk7cyBwYXJhbWV0ZXJzIGFyZSBtYXBwZWQgaW50byBgaW50aS0mZ3Q7aW9gIGZpZWxkcy4KClNvLCBgczM5MGludGAgaXMgZGlyZWN0bHkgcG9wdWxhdGVkIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggaXMgdGhlIGtleSBoZXJlLiBOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmFmdGVyKiB0aGF0IGNvcHk/IE5vLCBiZWNhdXNlIGBzMzkwaW50YCBpcyBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGJ5IHRoZSBgY29weV9mcm9tX3VzZXJgIGNhbGwsIGFuZCB0aGVuIGBpbnRpYCBpcyB6ZXJvZWQgYnkgdGhlIGBremFsbG9jX29iamAgYWxsb2NhdGlvbi4KCkFscmlnaHQsIHRoZSBjb2RlIGxvb2tzIHNhZmUgaW4gdGhpcyByZWdhcmQuIFRoZSB1c2VyLXByb3ZpZGVkIGRhdGEgaXMgY29waWVkIGludG8gdGhlIGxvY2FsIHN0cnVjdCwgdGhlIG5ldyBzdHJ1Y3QgYGludGlgIGlzIHplcm9lZCwgYW5kIHRoZW4gaW5pdGlhbGl6ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBhbmQgemVyb2VkIGRhdGEuIEkmIzM5O20gc2F0aXNmaWVkIGZvciBub3csIGJ1dCBJIHN0aWxsIHdhbnQgdG8gY2hlY2sgdGhlIGBremFsbG9jX29iamAgZGVmaW5pdGlvbiB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkxNjQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcdFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcdFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcdFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVx0bnN5bXMgPSBzeW10YWItXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXHRpZiAoIWNoYWlucykge1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcdFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVx0XHRpZiAoIXApXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXHRpZiAoY3R4LVx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XHRcdGN0eC1cdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXHUwMDNlaml0X2RhdGEpO1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXHRcdGlmICghY3R4LVx1MDAzZWppdF9kYXRhKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1Olx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cdGlmICghZGV2KSB7XG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cdGlmICghbGNoaXApXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXHRpZiAoIWRldikge1xuLS1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4Olx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXHRpZiAoIWRldnB0cilcbi0tXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcdFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXHRpZiAoIXJlcykge1xuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxuLS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cdGlmICghcG11X21tZGMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcdFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcdFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVx0XHRwLVx1MDAzZW5hbWUgPSBrc3RyZHVwKFwmIzM0O2FybSxpby1jb2hlcmVudFwmIzM0OywgR0ZQX0tFUk5FTCk7XG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3Olx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4Olx0XHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVx0XHRpZiAoIXBkYXRhKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cdGlmICghaHdtb2RzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1Olx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXHRpZiAoIXN5c2MpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9oLVx1MDAzZXNsYXZlX3BvcnRzKSkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcdFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cdFx0aWYgKCFvaSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVx0aWYgKCFvaCkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcdFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cdFx0aWYgKCFvaClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcdFx0b2gtXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXHUwMDNlY2xhc3MpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cdFx0aWYgKCFvaC1cdTAwM2VjbGFzcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cdGlmICghaWRsZV9zdGF0ZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cdGlmICghbnZhbHVlX3RhYmxlKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cdCAqL1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVx0aWYgKCFyZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXHQgKi9cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cdGlmICghcmVzKVxuLS1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcbi0tXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1Olx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVx0aWYgKCFlYykge1xuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XHRjZmctXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVx1MDAzZWluaXRfZGF0YSk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVx0aWYgKCFjZmctXHUwMDNlaW5pdF9kYXRhKVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcdFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVx0XHRpZiAoIXF1aXJrKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3Rlcilcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXHRpZiAoIW9wcHMpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVx0aW50IHJldDtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXHRpZiAoIWluZm8pXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4Olx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXHRpZiAoIXNwYylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXHRpZiAoIW5ld3Byb3ApXG4tLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXHRpZiAoIWwyeDBfcG11KSB7XG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cdGlmICghZGF0YSlcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XHRidWYgPSBremFsbG9jX29iaigqYnVmLFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXHRcdFx0ICBnZnAgXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3Olx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXHRpZiAoIW1hcHBpbmcpXG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0Olx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXHRpZiAoIXJlZ3MpIHtcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcdFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXHRcdGlmICghdG1wX3Jlcykge1xuLS1cbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXHRpZiAoIXAybV9lbnRyeSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0Olx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXHRpZiAoIXRoaXMpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cdGlmICghcGd0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXHRpZiAoIW1jLVx1MDAzZW1hcHBpbmcpIHtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XHRcdG1jLVx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0Olx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cdGlmICghaHlwX3BndGFibGUpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cdGlmICghdmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSB7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0Olx0XHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYixcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlx0a3ZtLVx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXHRpZiAoIXN0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXHRkaXN0LVx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XHRkaXN0LVx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXHRpZiAoIWRpc3QtXHUwMDNlc3Bpcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXHRcdFx0XHRcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cdGlmICghZW50cmllcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cdGlmICghaXJxKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3Olx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cdGlmICghY29sbGVjdGlvbilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIwLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjItXHRpZiAoIWl0ZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTE0Mj1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTQ4Olx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVx0aWYgKCFkZXZpY2UpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVx0aWYgKCFpdHMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cdGlmICghcmRyZWcpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcdGRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDgwPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMS1cdGlmICghaml0X2RhdGEpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDI6XHRcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDMtXHRcdGlmICghaml0X2RhdGEpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXHR2ZHNvX3BhZ2VsaXN0ID1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlx0XHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVx0aWYgKCFyYW5nZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XHRcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXHRpZiAoIXMpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cdGlmICghcylcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI2OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBga3phbGxvY19vYmpgIG1hY3JvIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBga3phbGxvY2AsIGxpa2VseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiBhIGBzbGFiLmhgIGhlYWRlciwgb3IgbWF5YmUgc29tZXRoaW5nIHNpbWlsYXIgaW4gdGhpcyBwcm9qZWN0JiMzOTtzIGluY2x1ZGVzLiBBaCwgeWVzLCBpdCYjMzk7cyBga3phbGxvY19vYmooKmludGksIEdGUF9LRVJORUxfQUNDT1VOVClgLiBIbW0sIHRoYXQgYEdGUF9LRVJORUxfQUNDT1VOVGAgbG9va3Mgc3RhbmRhcmQgZW5vdWdoLCBidXQgYGt6YWxsb2Nfb2JqYC4uLiBpcyB0aGF0IGEgY3VzdG9tIG1hY3JvPyBNYXliZSBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBzeXprYWxsZXIgc2V0dXAgb3IgYSBtb3JlIHJlY2VudCBrZXJuZWwgYWRkaXRpb24/CgpSaWdodCwgYWZ0ZXIgYSBxdWljayBjaGVjaywgaXQmIzM5O3MgY2xlYXI6IGBremFsbG9jX29iamAgKmlzKiBqdXN0IGEgbWFjcm8sIGVmZmVjdGl2ZWx5IGRvaW5nIGBremFsbG9jKHNpemVvZigqaW50aSksIEdGUF9LRVJORUxfQUNDT1VOVClgLiBTbywgY2xhc3NpYyBga3phbGxvY2AgYmVoYXZpb3LigJR0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyB6ZXJvZWQgb3V0LiBUaGF0IG1lYW5zIGBpbnRpYCBpcyBndWFyYW50ZWVkIHRvIHN0YXJ0IGFzIGFsbCB6ZXJvcy4KCk5vdywgdGhlIGNvZGUgdGhlbiBwcm9jZWVkcyB0byBjb3B5IGRhdGEgZnJvbSBgczM5MGludGAgaW50byBgaW50aWAgdXNpbmcgYGt2bV9zMzkwX2luamVjdF92bWAuIFRoaXMgYHMzOTBpbnRgIGlzIHBvcHVsYXRlZCBlYXJsaWVyIHdpdGggYGNvcHlfZnJvbV91c2VyYCBpbiBga3ZtX2FyY2hfdm1faW9jdGxgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHk6IHdoYXQgaWYgYHMzOTBpbnRgIGhhcyBwYWRkaW5nPyBFdmVuIHRob3VnaCBgaW50aWAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgdGhlIGBjb3B5X2Zyb21fdXNlcmAgbWlnaHQgb3ZlcndyaXRlIHNvbWUgb2YgdGhhdCB6ZXJvZWQgcGFkZGluZyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHVzZXIgc3BhY2UuCgpPa2F5LCB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YC4gSSYjMzk7bGwgZmluZCBpdCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oYCBvciwgZ2l2ZW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBtYXliZSBgYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhgLiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBzdHJ1Y3R1cmUgYW5kIGFueSBwb3RlbnRpYWwgcGFkZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTMyNjY9SW50ZXJydXB0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB2aWEga3ZtX3MzOTBfaW50ZXJydXB0OjpcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC0zMjY3LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjMyNjg6ICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC0zMjY5LVx0X191MzIgdHlwZTtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05Nj1zdHJ1Y3Qga3ZtX3MzOTBfcHN3IHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC0xMjUtXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDoxMjY6c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCB7XG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC0xMjctXHRfX3UzMiB0eXBlO1xuLS1cbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTk2PXN0cnVjdCBrdm1fczM5MF9wc3cge1xuLS1cbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTEyNS1cbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjEyNjpzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHtcbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTEyNy1cdF9fdTMyIHR5cGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Mzc0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI2Olx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCB7XG4gMTI3Olx0XHRfX3UzMiB0eXBlO1xuIDEyODpcdFx0X191MzIgcGFybTtcbiAxMjk6XHRcdF9fdTY0IHBhcm02NDtcbiAxMzA6XHR9O1xuIDEzMTpcdFxuIDEzMjpcdHN0cnVjdCBrdm1fczM5MF9pb19pbmZvIHtcbiAxMzM6XHRcdF9fdTE2IHN1YmNoYW5uZWxfaWQ7XG4gMTM0Olx0XHRfX3UxNiBzdWJjaGFubmVsX25yO1xuIDEzNTpcdFx0X191MzIgaW9faW50X3Bhcm07XG4gMTM2Olx0XHRfX3UzMiBpb19pbnRfd29yZDtcbiAxMzc6XHR9O1xuIDEzODpcdFxuIDEzOTpcdHN0cnVjdCBrdm1fczM5MF9leHRfaW5mbyB7XG4gMTQwOlx0XHRfX3UzMiBleHRfcGFyYW1zO1xuIDE0MTpcdFx0X191MzIgcGFkO1xuIDE0MjpcdFx0X191NjQgZXh0X3BhcmFtczI7XG4gMTQzOlx0fTtcbiAxNDQ6XHRcbiAxNDU6XHRzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MjExPWVudW0gaXJxX3R5cGVzIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0yOTYtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoyOTc6c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvIHtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTI5OC1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NzYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTc6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8ge1xuIDI5ODpcdFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIDI5OTpcdFx0dTY0XHR0eXBlO1xuIDMwMDpcdFx0dW5pb24ge1xuIDMwMTpcdFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW9faW5mbyBpbztcbiAzMDI6XHRcdFx0c3RydWN0IGt2bV9zMzkwX2V4dF9pbmZvIGV4dDtcbiAzMDM6XHRcdFx0c3RydWN0IGt2bV9zMzkwX3BnbV9pbmZvIHBnbTtcbiAzMDQ6XHRcdFx0c3RydWN0IGt2bV9zMzkwX2VtZXJnX2luZm8gZW1lcmc7XG4gMzA1Olx0XHRcdHN0cnVjdCBrdm1fczM5MF9leHRjYWxsX2luZm8gZXh0Y2FsbDtcbiAzMDY6XHRcdFx0c3RydWN0IGt2bV9zMzkwX3ByZWZpeF9pbmZvIHByZWZpeDtcbiAzMDc6XHRcdFx0c3RydWN0IGt2bV9zMzkwX3N0b3BfaW5mbyBzdG9wO1xuIDMwODpcdFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfbWNoa19pbmZvIG1jaGs7XG4gMzA5Olx0XHR9O1xuIDMxMDpcdH07XG4gMzExOlx0XG4gMzEyOlx0c3RydWN0IGt2bV9zMzkwX2lycV9wYXlsb2FkIHtcbiAzMTM6XHRcdHN0cnVjdCBrdm1fczM5MF9pb19pbmZvIGlvO1xuIDMxNDpcdFx0c3RydWN0IGt2bV9zMzkwX2V4dF9pbmZvIGV4dDtcbiAzMTU6XHRcdHN0cnVjdCBrdm1fczM5MF9wZ21faW5mbyBwZ207XG4gMzE2Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfZW1lcmdfaW5mbyBlbWVyZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBrdm1fczM5MF9pbnRlcnJ1cHQgU3RydWN0dXJlIGFuZCBJdHMgVXNhZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgdHlwZWAsIGBwYXJtYCwgYW5kIGBwYXJtNjRgLiBJdCYjMzk7cyBhIDE2LWJ5dGUgc3RydWN0dXJlIGFuZCwgaW1wb3J0YW50bHksIGl0JiMzOTtzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAgd2l0aG91dCBhbnkgaW50ZXJuYWwgcGFkZGluZyBpc3N1ZXMuIFdlIGFsbG9jYXRlIGBpbnRpYCB1c2luZyBga3phbGxvY19vYmpgLCBzbyB3ZSBzdGFydCB3aXRoIGEgemVyb2VkLW91dCBibG9jayBvZiBtZW1vcnkuIFRoZW4sIHRoZSBmaWVsZHMgYXJlIHBvcHVsYXRlZC4gVGhlIGZ1bmN0aW9uIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBpcyB0aGVuIGNhbGxlZC4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBgX19mbG9hdGluZ19pcnFfa2lja2AgcmVhZHMgYGludGktJmd0O3R5cGVgIGFuZCBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgLiBTaW5jZSBgaW50aWAgaXMgemVyb2VkIG91dCBpbml0aWFsbHksIGFuZCBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgIGlzIGRlcml2ZWQgZnJvbSBgczM5MGludC0mZ3Q7cGFybTY0YCwgd2hpY2ggd2UmIzM5O3ZlIGVzdGFibGlzaGVkIGlzIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmUsIGV2ZW4gdGhvdWdoIHdlIGFyZSBsb29raW5nIGF0IHNvbWV0aGluZyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLgoKSG93ZXZlciwgdGhlIGNhdGNoIGlzIHRoYXQgYGludGktJmd0O2lvLmlvX2ludF93b3JkYCBpcyAqb25seSogcmVhZCBpZiBgaW50aS0mZ3Q7dHlwZWAgZmFsbHMgd2l0aGluIHRoZSBgS1ZNX1MzOTBfSU5UX0lPX01JTmAgdG8gYEtWTV9TMzkwX0lOVF9JT19NQVhgIHJhbmdlLiBMb29raW5nIGJhY2sgYXQgYGt2bV9zMzkwX2luamVjdF92bWAsIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gSU8gaW50ZXJydXB0IChmYWxsaW5nIHdpdGhpbiB0aGF0IHR5cGUgcmFuZ2UpLCBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBzMzkwaW50LSZndDtwYXJtNjQgJmFtcDsgMHhmZmZmZmZmZmAuIFNvLCBpdCYjMzk7cyAqZGVmaW5pdGVseSogaW5pdGlhbGl6ZWQgaW4gdGhhdCBzY2VuYXJpby4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhvc2UgcGxhY2VzLCB0aGVyZSBhcmUgbm8gb3RoZXIgY2FsbCBzaXRlcywgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgX19pbmplY3Rfdm1gLiBPa2F5LCBzbyBgX19pbmplY3Rfdm1gIGlzIGNhbGxlZCBmcm9tIGJvdGggYGt2bV9zMzkwX2luamVjdF92bWAgKmFuZCogYGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludGAuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBrdm1fczM5MF9yZWluamVjdF9pb19pbnRgIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgaXNzdWVzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9yZWluamVjdF9pb19pbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNzc3PXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqa3ZtX3MzOTBfZ2V0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODA2LVx0XHRpZiAoaW50aSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTgwNzpcdFx0XHRrdm1fczM5MF9yZWluamVjdF9pb19pbnQoa3ZtLCBpbnRpKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTgwOC1cdFx0aW50aSA9IHRtcF9pbnRpO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjA0Nj1pbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODgtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwODk6aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwOTAtXHRcdFx0ICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD00MDM9c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICprdm1fczM5MF9nZXRfaW9faW50KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00MDQtXHRcdFx0XHRcdFx0ICAgIHU2NCBpc2NfbWFzaywgdTMyIHNjaGlkKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDo0MDU6aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtNDA2LVx0XHRcdCAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz00NDI9c3RhdGljIGludCBoYW5kbGVfdHBpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy00OTktXHQgKi9cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjUwMDpcdGlmIChrdm1fczM5MF9yZWluamVjdF9pb19pbnQodmNwdS1cdTAwM2Vrdm0sIGludGkpKSB7XG5hcmNoL3MzOTAva3ZtL3ByaXYuYy01MDEtXHRcdGtmcmVlKGludGkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTkwNAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE5MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyBpbiBLVk0vczM5MCBJbnRlcnJ1cHQgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSB3YXMgaW5pdGlhbGx5IGNvbmNlcm5lZCBhYm91dCBwb3RlbnRpYWwgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhlIEtWTS9zMzkwIGludGVycnVwdCBoYW5kbGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZmxvYXRpbmcgaW50ZXJydXB0cy4gSSBzdGFydGVkIGJ5IHRyYWNpbmcgdGhlIHBhdGggb2YgYGludGlgICh0aGUgaW50ZXJydXB0IGluZm9ybWF0aW9uIHN0cnVjdHVyZSkgdGhyb3VnaCB0aGUgY29kZS4KClRoZSBmaXJzdCBwb2ludCBvZiBpbnRlcmVzdCB3YXMgYGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludGAuIFRoZSBgaW50aWAgcGFyYW1ldGVyIGhlcmUgY29tZXMgZnJvbSBgaGFuZGxlX3RwaWAsIGFuZCBgaGFuZGxlX3RwaWAgZ2V0cyBpdCBmcm9tIGBrdm1fczM5MF9nZXRfaW9faW50YC4gVGhpcyBmdW5jdGlvbiBkZXF1ZXVlcyBhbiBleGlzdGluZyBgaW50aWAgZnJvbSB0aGUgZmxvYXRpbmcgaW50ZXJydXB0IGxpc3QuIFNpbmNlIGl0JiMzOTtzIGFscmVhZHkgb24gdGhlIGxpc3QsIGl0IG1lYW5zIGl0IG11c3QgaGF2ZSBiZWVuICppbml0aWFsaXplZCogd2hlbiBpdCB3YXMgaW5qZWN0ZWQgb250byB0aGUgbGlzdC4gVGhhdCBlbGltaW5hdGVzIGEgZGlyZWN0IHVuaW5pdGlhbGl6ZWQgcmVhZCB0aGVyZS4KCk5leHQsIEkgbG9va2VkIGF0IGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggb25saW5lIHZDUFVzIGFuZCB0cmllcyB0byB3YWtlIG9uZSB1cCB0byBoYW5kbGUgYSBwZW5kaW5nIGludGVycnVwdC4gSXQgdXNlcyBga3ZtLSZndDthcmNoLmlkbGVfbWFza2AsIHdoaWNoIGlzIGFuIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGFuZCBpbmRleGVkIGJ5IHRoZSBudW1iZXIgb2Ygb25saW5lIHZjcHVzLiBUaGUgY3JpdGljYWwgZnVuY3Rpb25zIGhlcmUgYXJlIGBmaW5kX2ZpcnN0X2JpdGAgYW5kIGBmaW5kX25leHRfYml0YCB3aGljaCByZWFkcyB0aGUgYml0cyBmcm9tIGBrdm0tJmd0O2FyY2guaWRsZV9tYXNrYC4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB3aGV0aGVyIGBrdm0tJmd0O2FyY2guaWRsZV9tYXNrYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTG9va2luZyBhdCB3aGVyZSBpdCBjb21lcyBmcm9tLCB0aGUgYHN0cnVjdCBrdm1fYXJjaGAgaXMgZW1iZWRkZWQgd2l0aGluIHRoZSBgc3RydWN0IGt2bWAuIFRoZSBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHdpdGggYHZ6YWxsb2NgIG9yIGBremFsbG9jYCBpbiBga3ZtX2NyZWF0ZV92bWAsIHNvIGl0IGlzIGZ1bGx5IHplcm9lZC4gU28sIGBrdm0tJmd0O2FyY2guaWRsZV9tYXNrYCBzaG91bGQgYmUgY29tcGxldGVseSBpbml0aWFsaXplZC4gVGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSlgIGNoZWNrcyB0aGUgdmNwdSYjMzk7cyBwZW5kaW5nIGlycXMuIFRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlbiwganVzdCB0byBiZSBzdXJlLCBJIGNoZWNrZWQgd2hlcmUgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGlzIGNhbGxlZC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCB0aGUgY29kZSBvbmx5IGNhbGxzIGl0IGZyb20gaW5zaWRlIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gVGhpcyBjb25maW5lcyBpdHMgdXNhZ2UgdG8gYSBrbm93biBzY29wZS4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgYGt2bV9zMzkwX2luamVjdF92bWAuIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGluamVjdGluZyBpbnRlcnJ1cHRzIGludG8gdGhlIFZNLiBJdCB0YWtlcyBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YCBhbmQgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvYCAoaW50aSkgYXMgaW5wdXQuIEluc2lkZSwgaXQgcG9wdWxhdGVzIHRoZSBgaW50aWAgc3RydWN0dXJlIGJhc2VkIG9uIHRoZSBpbnRlcnJ1cHQgdHlwZS4gSSBtYWRlIHN1cmUgdG8gd2FsayB0aHJvdWdoIGFsbCBjYXNlcyBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudCB0byBjb25maXJtIGlmIGBfX2luamVjdF92bWAgY291bGQgYmUgY2FsbGVkLCBhbmQgYWxzbyB0byBzZWUgaWYgdGhlcmUgY291bGQgYmUgc29tZSBwYXRoIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IHJldHVybnMgYC1FSU5WQUxgIGlmIHRoZSB0eXBlIGlzbiYjMzk7dCBvbmUgb2YgdGhlIGtub3duIGNhc2VzLgoKVGhlIGtleSB0byB0aGUgY29kZSBpcyB0aGF0IGBfX2luamVjdF92bWAgY2FuIG9ubHkgYmUgY2FsbGVkIGlmIGBpbnRpLSZndDt0eXBlYCBtYXRjaGVzIG9uZSBvZiB0aGUga25vd24gaW50ZXJydXB0IHR5cGVzLiBXaGVuIGBpbnRpLSZndDt0eXBlYCBpcyBgS1ZNX1MzOTBfSU5UX1ZJUlRJT2AsIGl0IHRoZW4gY2FsbHMgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHdoaWNoIGluIHR1cm4gY2FsbHMgYGludGlfdG9faXJxX3BlbmRfbWFzayhpbnRpKWAuIEkgdHJhY2VkIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgIGFuZCBjaGVja2VkIGFsbCB0aGUgZGlmZmVyZW50IGNhc2VzLiBJIHNhdyB0aGF0IGZvciBgS1ZNX1MzOTBfSU5UX1ZJUlRJT2AsIGl0IHVzZXMgYEJJVChJUlFfUEVORF9WSVJUSU8pYC4gSXQgZG9lcyAqbm90KiByZWFkIGBpbnRpLSZndDtpby5pb19pbnRfd29yZGAuIFRoZSByZWFkcyBmcm9tIGBpbnRpLSZndDtpby5pb19pbnRfd29yZGAgb25seSBvY2N1ciBpZiBgaW50aS0mZ3Q7dHlwZWAgaXMgaW4gdGhlIGBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWGAgcmFuZ2UsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlcyBhcmUgYXNzaWduZWQgaW4gYGt2bV9zMzkwX2luamVjdF92bWAuIFRoZXJlZm9yZSwgdGhlcmUgc2hvdWxkIGJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBjYWxsZXJzIG9mIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGluamVjdCBpbnRlcnJ1cHRzLCBzdWNoIGFzIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuYC4gSXQmIzM5O3MgcG9zc2libGUgSSBtaXNzZWQgYSBwYXRoLiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgaXRzIHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDQ3NTpcdHN0YXRpYyB2b2lkIF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHN0YXJ0X3Rva2VuLFxuNDQ3NjpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRva2VuKVxuNDQ3NzpcdHtcbjQ0Nzg6XHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgaW50aTtcbjQ0Nzk6XHRcdHN0cnVjdCBrdm1fczM5MF9pcnEgaXJxO1xuNDQ4MDpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpX21lbSA9IE5VTEw7XG40NDgxOlx0XHRpbnQgcmV0ID0gMDtcbjQ0ODI6XHRcbjQ0ODM6XHRcdGlmIChzdGFydF90b2tlbikge1xuNDQ4NDpcdFx0XHRpcnEudS5leHQuZXh0X3BhcmFtczIgPSB0b2tlbjtcbjQ0ODU6XHRcdFx0aXJxLnR5cGUgPSBLVk1fUzM5MF9JTlRfUEZBVUxUX0lOSVQ7XG40NDg2Olx0XHRcdFdBUk5fT05fT05DRShrdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LCBcdTAwMjZpcnEpKTtcbjQ0ODc6XHRcdH0gZWxzZSB7XG40NDg4Olx0XHRcdGludGlfbWVtID0ga3phbGxvY19vYmooKmludGlfbWVtLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuNDQ4OTpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFpbnRpX21lbSkpXG40NDkwOlx0XHRcdFx0cmV0dXJuO1xuNDQ5MTpcdFxuNDQ5MjpcdFx0XHRpbnRpLnR5cGUgPSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU7XG40NDkzOlx0XHRcdGludGkucGFybTY0ID0gdG9rZW47XG40NDk0Olx0XHRcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bSh2Y3B1LVx1MDAzZWt2bSwgXHUwMDI2aW50aSwgaW50aV9tZW0pO1xuNDQ5NTpcdFx0XHRpZiAocmV0KVxuNDQ5NjpcdFx0XHRcdGtmcmVlKGludGlfbWVtKTtcbjQ0OTc6XHRcdFx0V0FSTl9PTl9PTkNFKHJldCk7XG40NDk4Olx0XHR9XG40NDk5Olx0fVxuNDUwMDpcdFxuNDUwMTpcdGJvb2wga3ZtX2FyY2hfYXN5bmNfcGFnZV9ub3RfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG40NTAyOlx0XHRcdFx0XHQgICAgIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXG40NTAzOlx0e1xuNDUwNDpcdFx0dHJhY2Vfa3ZtX3MzOTBfcGZhdWx0X2luaXQodmNwdSwgd29yay1cdTAwM2VhcmNoLnBmYXVsdF90b2tlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzM5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTgyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmNvdmVyaW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyBpbiBhIEtWTS9zMzkwIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHJpZ2h0IHRvIGZsYWcgdGhlIHVuaW5pdGlhbGl6ZWQgYGludGkucGFybWAgd2l0aGluIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuYC4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgY29kZSBpbiB0aGF0IGZ1bmN0aW9uIGRvZXNuJiMzOTt0IGluaXRpYWxpemUgaXQsIGFuZCBhbHRob3VnaCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBkb2VzbiYjMzk7dCAqdXNlKiBpdCBkaXJlY3RseSBmb3IgdGhlIGBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkVgIGNhc2UsIHRoZSBgdHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZtYCBjYWxsIGRvZXMgcmVhZCBgczM5MGludC0mZ3Q7cGFybWAuIEhvd2V2ZXIsIHRoaXMgd2FzbiYjMzk7dCBpbnRyb2R1Y2VkIGJ5ICp0aGlzKiBwYXRjaCDigJMgaXQmIzM5O3MgYW4gZXhpc3RpbmcgYnVnLgoKTm93LCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlICpuZXcqIGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcz8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBUaGUgY2hhbmdlcyBhcm91bmQgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIG5lZWRlZCBzY3J1dGlueS4gU3BlY2lmaWNhbGx5LCB0aGUgY2FsbCB0byBgaW50aV90b19pcnFfcGVuZF9tYXNrYC4gVGhhdCBmdW5jdGlvbiBhY2Nlc3NlcyBgaW50aS0mZ3Q7dHlwZWAgYW5kIGBpbnRpLSZndDtpby5pb19pbnRfd29yZGAuIEkgY29uZmlybWVkIHRoYXQgYGludGlgIGluIHRoaXMgY29udGV4dCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyb2VkIG1lbW9yeSwgaGVuY2UgYSBzYWZlIHJlYWQgb2YgYGludGktJmd0O2lvLmlvX2ludF93b3JkYC4gRXZlbiBpZiB0aGUgdHlwZSBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIGBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWGAuIEZvciB0aGUgYEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORWAgY2FzZSwgaXQmIzM5O3MgaXJyZWxldmFudC4KCkkgdGhlbiBsb29rZWQgYXQgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIGFuZCBgZGVsaXZlcmFibGVfaXJxc2AsIGJ1dCB0aGV5IGFyZSB1bmNoYW5nZWQgYnkgdGhlIHBhdGNoLgoKSSByZXZpc2l0ZWQgYGludGlfdG9faXJxX3BlbmRfbWFza2AgZm9yIGEgZnVsbCBjaGVjaywgbWFraW5nIHN1cmUgdGhhdCBgaW50aWAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJ5IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fczM5MF9pbmplY3RfYWlycWAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuYC4gVGhlIGBremFsbG9jX29iamAgY2FsbCBpbiB0aG9zZSBmdW5jdGlvbnMgZ3VhcmFudGVlcyB6ZXJvIGluaXRpYWxpemF0aW9uLCBtZWFuaW5nIHdlIGNhbiBiZSBhc3N1cmVkIHRoYXQgYGludGktJmd0O2lvLmlvX2ludF93b3JkYCBpcyBzYWZlbHkgcmVhZC4KCkhvd2V2ZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mb2AgaXMgbmV2ZXIgYWxsb2NhdGVkIGluIGEgd2F5IHRoYXQgKmRvZXNuJiMzOTt0KiB6ZXJvIGl0IG91dC4gSSYjMzk7bGwgc2VhcmNoIGZvciBhbGwgYWxsb2NhdGlvbnMgb2YgdGhhdCBzdHJ1Y3QgdG8gZW5zdXJlIGl0JiMzOTtzIGFsd2F5cyBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xMDM4PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIF9fZGVsaXZlcl9wZmF1bHRfZG9uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDQwLVx0c3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmkgPSBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA0MTpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA0Mi1cdGludCByYyA9IDA7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDQ2LVx0aW50aSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZmaS1cdTAwM2VsaXN0c1tGSVJRX0xJU1RfUEZBVUxUXSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA0NzpcdFx0XHRcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDQ4LVx0XHRcdFx0XHRsaXN0KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTEwODE9c3RhdGljIGludCBfX211c3RfY2hlY2sgX19kZWxpdmVyX3ZpcnRpbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDgzLVx0c3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmkgPSBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA4NDpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA4NS1cdGludCByYyA9IDA7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDg5LVx0aW50aSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZmaS1cdTAwM2VsaXN0c1tGSVJRX0xJU1RfVklSVElPXSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA5MDpcdFx0XHRcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDkxLVx0XHRcdFx0XHRsaXN0KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTExNTQ9c3RhdGljIGludCBfX211c3RfY2hlY2sgX19kZWxpdmVyX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNTktXHRzdHJ1Y3Qga3ZtX3MzOTBfZ2lzYV9pbnRlcnJ1cHQgKmdpID0gXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5naXNhX2ludDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTE2MDpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNjEtXHRzdHJ1Y3Qga3ZtX3MzOTBfaW9faW5mbyBpbztcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNzEtXHRpbnRpID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKGlzY19saXN0LFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMTcyOlx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNzMtXHRcdFx0XHRcdGxpc3QpO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTY4OT1zdGF0aWMgaW50IF9faW5qZWN0X2NwdV90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzAyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzAzOnN0YXRpYyBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmdldF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzA0LVx0XHRcdFx0XHRcdCAgaW50IGlzYywgdTMyIHNjaGlkKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTcwNy1cdHN0cnVjdCBsaXN0X2hlYWQgKmlzY19saXN0ID0gXHUwMDI2ZmktXHUwMDNlbGlzdHNbRklSUV9MSVNUX0lPX0lTQ18wICYjNDM7IGlzY107XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE3MDg6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKml0ZXI7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3MDktXHR1MTYgaWQgPSAoc2NoaWQgXHUwMDI2IDB4ZmZmZjAwMDBVKSBcdTAwM2VcdTAwM2UgMTY7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzI5LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzMwOnN0YXRpYyBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmdldF90b3BfaW9faW50KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTczMS1cdFx0XHRcdFx0XHQgICAgICB1NjQgaXNjX21hc2ssIHUzMiBzY2hpZClcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTczMi17XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE3MzM6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkgPSBOVUxMO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzM0LVx0aW50IGlzYztcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE3NDM9c3RhdGljIGludCBnZXRfdG9wX2dpc2FfaXNjKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGlzY19tYXNrLCB1MzIgc2NoaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzc2LSAqL1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzc3OnN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqa3ZtX3MzOTBfZ2V0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3NzgtXHRcdFx0XHRcdFx0ICAgIHU2NCBpc2NfbWFzaywgdTMyIHNjaGlkKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTc4MC1cdHN0cnVjdCBrdm1fczM5MF9naXNhX2ludGVycnVwdCAqZ2kgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC5naXNhX2ludDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTc4MTpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSwgKnRtcF9pbnRpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzgyLVx0aW50IGlzYztcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE4MTU9c3RhdGljIGludCBfX2luamVjdF9zZXJ2aWNlKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTgxNjpcdFx0XHQgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTgxNy17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xODQ3PXN0YXRpYyBpbnQgX19pbmplY3RfdmlydGlvKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTg0ODpcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODQ5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE4NjY9c3RhdGljIGludCBfX2luamVjdF9wZmF1bHRfZG9uZShzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE4Njc6XHRcdFx0XHQgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODY4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE4ODc9c3RhdGljIGludCBfX2luamVjdF9mbG9hdF9tY2hrKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTg4ODpcdFx0XHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTg4OS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xOTAyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxOTAzOnN0YXRpYyBpbnQgX19pbmplY3RfaW8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5MDQte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTk0OC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTk0OTpzdGF0aWMgdTY0IGludGlfdG9faXJxX3BlbmRfbWFzayhzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5NTAte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTk3My0gKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTk3NDpzdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xOTc1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwMTQtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwMTU6c3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjAxNi17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDQ2PWludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDQ3Olx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIwODk9aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwOTA6XHRcdFx0ICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDkxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIyMjA9c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2lycV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKl9saXN0KVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMjIxLXtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjIyMjpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSwgKm47XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyMjMtXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMjI5LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMjMwOnN0YXRpYyB2b2lkIGludGlfdG9faXJxKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjIzMS1cdFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIyNjg9c3RhdGljIGludCBnZXRfYWxsX2Zsb2F0aW5nX2lycXMoc3RydWN0IGt2bSAqa3ZtLCB1OCBfX3VzZXIgKnVzcmJ1ZiwgdTY0IGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyNzAtXHRzdHJ1Y3Qga3ZtX3MzOTBfZ2lzYV9pbnRlcnJ1cHQgKmdpID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2guZ2lzYV9pbnQ7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIyNzE6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyNzItXHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIzODI9c3RhdGljIGludCBmbGljX2dldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDAwLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNDAxOnN0YXRpYyBpbmxpbmUgaW50IGNvcHlfaXJxX2Zyb21fdXNlcihzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGksXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI0MDItXHRcdFx0XHQgICAgIHU2NCBhZGRyKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjQ0MT1zdGF0aWMgaW50IGVucXVldWVfZmxvYXRpbmdfaXJxKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDQzLXtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjQ0NDpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI0NDUtXHRpbnQgciA9IDA7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODIwPXN0YXRpYyBpbnQga3ZtX3MzOTBfaW5qZWN0X2FpcnEoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgyOC1cdH07XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mjk6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MzAtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzE2NT12b2lkIGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2Ny17XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMxNjg6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gaW50aTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2OS1cdHN0cnVjdCBrdm1fczM5MF9pcnEgaXJxO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzgwOD1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4MTQtXHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzgxNTpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzgxNi1cdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludCA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5MzItXHRpbnQgcjtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTMzOlx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5MzQtXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0NzU9c3RhdGljIHZvaWQgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgc3RhcnRfdG9rZW4sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0NzktXHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIGlycTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NDgwOlx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpX21lbSA9IE5VTEw7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ4MS1cdGludCByZXQgPSAwO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD0zNzk9aW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTM4MC1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjM4MTpcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTM4Mi1pbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzk0PXN0YXRpYyBpbmxpbmUgaW50IGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjb2RlKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00MDItfVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjQwMzpzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmt2bV9zMzkwX2dldF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQwNC1cdFx0XHRcdFx0XHQgICAgdTY0IGlzY19tYXNrLCB1MzIgc2NoaWQpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTQwNT1pbnQga3ZtX3MzOTBfcmVpbmplY3RfaW9faW50KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDo0MDY6XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQwNy1pbnQga3ZtX3MzOTBfbWFza19hZGFwdGVyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBib29sIG1hc2tlZCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NDQyPXN0YXRpYyBpbnQgaGFuZGxlX3RwaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy00NDMte1xuYXJjaC9zMzkwL2t2bS9wcml2LmM6NDQ0Olx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpO1xuYXJjaC9zMzkwL2t2bS9wcml2LmMtNDQ1LVx0dW5zaWduZWQgbG9uZyBsZW47XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTA4PXN0YXRpYyBpbnQgaGFuZGxlX3RzY2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNTA5LXtcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjUxMDpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XG5hcmNoL3MzOTAva3ZtL3ByaXYuYy01MTEtXHRjb25zdCB1NjQgaXNjX21hc2sgPSAweGZmVUwgXHUwMDNjXHUwMDNjIDI0OyAvKiBhbGwgaXNjcyBzZXQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMTU6XHRzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuMjAxNjpcdHtcbjIwMTc6XHRcdHU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktXHUwMDNldHlwZSk7XG4yMDE4Olx0XHRpbnQgcmM7XG4yMDE5Olx0XG4yMDIwOlx0XHRzd2l0Y2ggKHR5cGUpIHtcbjIwMjE6XHRcdGNhc2UgS1ZNX1MzOTBfTUNISzpcbjIwMjI6XHRcdFx0cmMgPSBfX2luamVjdF9mbG9hdF9tY2hrKGt2bSwgaW50aSk7XG4yMDIzOlx0XHRcdGJyZWFrO1xuMjAyNDpcdFx0Y2FzZSBLVk1fUzM5MF9JTlRfVklSVElPOlxuMjAyNTpcdFx0XHRyYyA9IF9faW5qZWN0X3ZpcnRpbyhrdm0sIGludGkpO1xuMjAyNjpcdFx0XHRicmVhaztcbjIwMjc6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6XG4yMDI4Olx0XHRcdHJjID0gX19pbmplY3Rfc2VydmljZShrdm0sIGludGkpO1xuMjAyOTpcdFx0XHRicmVhaztcbjIwMzA6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuMjAzMTpcdFx0XHRyYyA9IF9faW5qZWN0X3BmYXVsdF9kb25lKGt2bSwgaW50aSk7XG4yMDMyOlx0XHRcdGJyZWFrO1xuMjAzMzpcdFx0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbjIwMzQ6XHRcdFx0cmMgPSBfX2luamVjdF9pbyhrdm0sIGludGkpO1xuMjAzNTpcdFx0XHRicmVhaztcbjIwMzY6XHRcdGRlZmF1bHQ6XG4yMDM3Olx0XHRcdHJjID0gLUVJTlZBTDtcbjIwMzg6XHRcdH1cbjIwMzk6XHRcdGlmIChyYylcbjIwNDA6XHRcdFx0cmV0dXJuIHJjO1xuMjA0MTpcdFxuMjA0MjpcdFx0X19mbG9hdGluZ19pcnFfa2ljayhrdm0sIGludGkpO1xuMjA0MzpcdFx0cmV0dXJuIDA7XG4yMDQ0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk4NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hY2hpbmUgQ2hlY2sgUmVpbmplY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyBtYWNoaW5lIGNoZWNrIGludGVycnVwdHMuIEkgc2VlIHJpZ2h0IG9mZiB0aGUgYmF0LCB3ZSYjMzk7dmUgZ290IGEgYGt2bV92Y3B1YCBwb2ludGVyIGFuZCBhIGBtY2lgIHN0cnVjdCBwYXNzZWQgaW4sIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCBJIG5vdGljZSB0aGF0IGBpbnRpYCBpcyBhIGxvY2FsIHZhcmlhYmxlLiBPa2F5LCB0aGF0IGZlZWxzIHJpZ2h0LCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBpbnRpYCBpcyB1dGlsaXplZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBvZiBga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVja2AgYW5kIHRyYWNlIHRoZSB1c2Ugb2YgdGhlc2UgdmFyaWFibGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNjU6XHR2b2lkIGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuMzE2NjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvICptY2NrX2luZm8pXG4zMTY3Olx0e1xuMzE2ODpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvIGludGk7XG4zMTY5Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIGlycTtcbjMxNzA6XHRcdHN0cnVjdCBrdm1fczM5MF9tY2hrX2luZm8gKm1jaGs7XG4zMTcxOlx0XHR1bmlvbiBtY2kgbWNpO1xuMzE3MjpcdFx0X191NjQgY3IxNCA9IDA7ICAgICAgICAgLyogdXBwZXIgYml0cyBhcmUgbm90IHVzZWQgKi9cbjMxNzM6XHRcdGludCByYztcbjMxNzQ6XHRcbjMxNzU6XHRcdG1jaS52YWwgPSBtY2NrX2luZm8tXHUwMDNlbWNpYztcbjMxNzY6XHRcbjMxNzc6XHRcdC8qIGxvZyBtYWNoaW5lIGNoZWNrcyBiZWluZyByZWluamVjdGVkIG9uIGFsbCBkZWJ1Z3MgKi9cbjMxNzg6XHRcdFZDUFVfRVZFTlQodmNwdSwgMiwgXCYjMzQ7Z3Vlc3QgbWFjaGluZSBjaGVjayAlbHhcJiMzNDssIG1jaS52YWwpO1xuMzE3OTpcdFx0S1ZNX0VWRU5UKDIsIFwmIzM0O2d1ZXN0IG1hY2hpbmUgY2hlY2sgJWx4XCYjMzQ7LCBtY2kudmFsKTtcbjMxODA6XHRcdHByX2luZm8oXCYjMzQ7Z3Vlc3QgbWFjaGluZSBjaGVjayBwaWQgJWQ6ICVseFwmIzM0OywgY3VycmVudC1cdTAwM2VwaWQsIG1jaS52YWwpO1xuMzE4MTpcdFxuMzE4MjpcdFx0aWYgKG1jaS5zcilcbjMxODM6XHRcdFx0Y3IxNCB8PSBDUjE0X1JFQ09WRVJZX1NVQk1BU0s7XG4zMTg0Olx0XHRpZiAobWNpLmRnKVxuMzE4NTpcdFx0XHRjcjE0IHw9IENSMTRfREVHUkFEQVRJT05fU1VCTUFTSztcbjMxODY6XHRcdGlmIChtY2kudylcbjMxODc6XHRcdFx0Y3IxNCB8PSBDUjE0X1dBUk5JTkdfU1VCTUFTSztcbjMxODg6XHRcbjMxODk6XHRcdG1jaGsgPSBtY2kuY2sgPyBcdTAwMjZpbnRpLm1jaGsgOiBcdTAwMjZpcnEudS5tY2hrO1xuMzE5MDpcdFx0bWNoay1cdTAwM2VjcjE0ID0gY3IxNDtcbjMxOTE6XHRcdG1jaGstXHUwMDNlbWNpYyA9IG1jY2tfaW5mby1cdTAwM2VtY2ljO1xuMzE5MjpcdFx0bWNoay1cdTAwM2VleHRfZGFtYWdlX2NvZGUgPSBtY2NrX2luZm8tXHUwMDNlZXh0X2RhbWFnZV9jb2RlO1xuMzE5MzpcdFx0bWNoay1cdTAwM2VmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzcyA9IG1jY2tfaW5mby1cdTAwM2VmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzcztcbjMxOTQ6XHRcdGlmIChtY2kuY2spIHtcbjMxOTU6XHRcdFx0LyogSW5qZWN0IHRoZSBmbG9hdGluZyBtYWNoaW5lIGNoZWNrICovXG4zMTk2Olx0XHRcdGludGkudHlwZSA9IEtWTV9TMzkwX01DSEs7XG4zMTk3Olx0XHRcdHJjID0gX19pbmplY3Rfdm0odmNwdS1cdTAwM2Vrdm0sIFx1MDAyNmludGkpO1xuMzE5ODpcdFx0fSBlbHNlIHtcbjMxOTk6XHRcdFx0LyogSW5qZWN0IHRoZSBtYWNoaW5lIGNoZWNrIHRvIHNwZWNpZmllZCB2Y3B1ICovXG4zMjAwOlx0XHRcdGlycS50eXBlID0gS1ZNX1MzOTBfTUNISztcbjMyMDE6XHRcdFx0cmMgPSBrdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LCBcdTAwMjZpcnEpO1xuMzIwMjpcdFx0fVxuMzIwMzpcdFx0V0FSTl9PTl9PTkNFKHJjKTtcbjMyMDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NTA3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODg3Olx0c3RhdGljIGludCBfX2luamVjdF9mbG9hdF9tY2hrKHN0cnVjdCBrdm0gKmt2bSxcbjE4ODg6XHRcdFx0XHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbjE4ODk6XHR7XG4xODkwOlx0XHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludDtcbjE4OTE6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4xODkyOlx0XG4xODkzOlx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfZmxvYXRfbWNoayYjNDM7JiM0Mzs7XG4xODk0Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZmaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4xODk1Olx0XHRmaS1cdTAwM2VtY2hrLmNyMTQgfD0gaW50aS1cdTAwM2VtY2hrLmNyMTQgXHUwMDI2ICgxVUwgXHUwMDNjXHUwMDNjIENSX1BFTkRJTkdfU1VCQ0xBU1MpO1xuMTg5NjpcdFx0ZmktXHUwMDNlbWNoay5tY2ljIHw9IGludGktXHUwMDNlbWNoay5tY2ljO1xuMTg5NzpcdFx0c2V0X2JpdChJUlFfUEVORF9NQ0hLX1JFUCwgXHUwMDI2ZmktXHUwMDNlcGVuZGluZ19pcnFzKTtcbjE4OTg6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZmktXHUwMDNlbG9jaywgZmxhZ3MpO1xuMTg5OTpcdFx0a2ZyZWUoaW50aSk7XG4xOTAwOlx0XHRyZXR1cm4gMDtcbjE5MDE6XHR9XG4xOTAyOlx0XG4xOTAzOlx0c3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbjE5MDQ6XHR7XG4xOTA1Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfZ2lzYV9pbnRlcnJ1cHQgKmdpID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2guZ2lzYV9pbnQ7XG4xOTA2Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaTtcbjE5MDc6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7XG4xOTA4Olx0XHRpbnQgaXNjO1xuMTkwOTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjE5MTA6XHRcbjE5MTE6XHRcdGt2bS1cdTAwM2VzdGF0LmluamVjdF9pbyYjNDM7JiM0Mzs7XG4xOTEyOlx0XHRpc2MgPSBpbnRfd29yZF90b19pc2MoaW50aS1cdTAwM2Vpby5pb19pbnRfd29yZCk7XG4xOTEzOlx0XG4xOTE0Olx0XHQvKlxuMTkxNTpcdFx0ICogV2UgZG8gbm90IHVzZSB0aGUgbG9jayBjaGVja2luZyB2YXJpYW50IGFzIHRoaXMgaXMganVzdCBhXG4xOTE2Olx0XHQgKiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIHdlIGRvIG5vdCBob2xkIHRoZSBsb2NrIGhlcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjY5CgkJCQkJCQlvdXRwdXQ6IDQwNQoJCQkJCQkJdGhvdWdodHM6IDQ4OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSW50ZXJydXB0IEluamVjdGlvbiBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpbiBga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVja2AgYW5kIHRoZSBzdWJzZXF1ZW50IGBrZnJlZWAgb24gYSBzdGFjay1hbGxvY2F0ZWQgdmFyaWFibGUuIEkgaW1tZWRpYXRlbHkgZHVnIGludG8gYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgLCBjb25maXJtZWQgdGhhdCBgaW50aWAgKmlzKiBpbmRlZWQgYSBzdGFjayB2YXJpYWJsZSBhbmQgdGhhdCBgX19pbmplY3RfZmxvYXRfbWNoa2AgKmRvZXMqIGNhbGwgYGtmcmVlKGludGkpYC4gTXkgYWxhcm0gYmVsbHMgd2VyZSByaW5naW5nLCBzY3JlYW1pbmcgJiMzNDtpbnZhbGlkIGZyZWUhJiMzNDssIGJ1dCB0aGVuIEkgcXVpY2tseSByZW1lbWJlcmVkIEtBU0FOIGV4aXN0cyEgQW5kIEkgY29uZmlybWVkIEtBU0FOIHdpbGwgY2F0Y2ggdGhhdC4gIFNvLCBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQuCgpUaGVuLCBJIGxvb2tlZCBjbG9zZWx5IGF0IHRoZSBwYXRjaCBpdHNlbGYgdG8gc2VlIHdoYXQgaXQmIzM5O3MgY2hhbmdpbmcsIGFuZCB0aGF0IGludm9sdmVkIGdvaW5nIHRocm91Z2ggYWxsIGNhbGxzIHRvIGBfX2luamVjdF92bWAgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IHVuaW5pdGlhbGl6ZWQgcmVhZHMgaW50cm9kdWNlZCAqYnkgdGhlIHBhdGNoIGl0c2VsZiouICBUaGUgcGF0Y2ggcHJpbWFyaWx5IGZvY3VzZXMgb24gaW1wcm92aW5nIGZsb2F0aW5nIGludGVycnVwdCBkaXN0cmlidXRpb24gdXNpbmcgYSBuZXcgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxcygpYCBmdW5jdGlvbiwgYW5kIHRoZSBtb2RpZmljYXRpb24gdG8gYF9fZmxvYXRpbmdfaXJxX2tpY2tgLiBJIGFuYWx5emVkIGFsbCB0aGUgZGF0YSBiZWluZyByZWFkIGFuZCBtb2RpZmllZCBhY3Jvc3MgdGhlc2UgZnVuY3Rpb25zOgoKKiAgIFRoZSBwYXRjaCYjMzk7cyBpbnRyb2R1Y3Rpb24gb2YgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgZGVwZW5kcyBvbiBga3ZtLSZndDthcmNoLmlkbGVfbWFza2AsIGJ1dCB0aGF0IGlzIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBmdW5jdGlvbiBqdXN0IHJlYWRzIHN0YXRlLgoqICAgVGhlIG1vZGlmaWNhdGlvbiB0byBgX19mbG9hdGluZ19pcnFfa2lja2AgaW52b2x2ZWQgdGhlIHBhcmFtZXRlciBjaGFuZ2UgdG8gdGFrZSBgaW50aWAsIGFuZCBJIG5lZWRlZCB0byB2ZXJpZnkgYWxsIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4KKiAgIEkgY29uZmlybWVkIHRoYXQgaW4gYWxsIG90aGVyIHBhdGhzLCBgaW50aWAgaXMgYWxsb2NhdGVkIGJ5IGBremFsbG9jX29iamAsIGFuZCB0aGF0IG1lYW5zIGFsbCB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkLgoqICAgSW4gYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgLCBgaW50aWAgaXMgYSBzdGFjayB2YXJpYWJsZSwgYnV0IGl0JiMzOTtzICpwYXJ0aWFsbHkqIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIGBfX2luamVjdF92bWAuIFRoZSBjcml0aWNhbCBiaXQgaGVyZSBpcyB0aGUgYHR5cGVgIGZpZWxkLCB3aGljaCBJIGNvbmZpcm1lZCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBjYWxsaW5nIGFueXRoaW5nIHRoYXQgd291bGQgcmVhZCB0aGUgdmFyaWFibGUuCgpTaW5jZSBJIGFtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQsIEkga25vdyBob3cgdGhlIEtWTSBzMzkwIGFyY2hpdGVjdHVyZSB3b3Jrcy4gIFRoZSBkYXRhIGRlcGVuZGVuY2llcyBhcmUgY2xlYXIsIGFuZCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIGBpbnRpYCB2YXJpYWJsZSBhbmQgaXRzIGZpZWxkcyB0aGF0IGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIHBhdGNoIGFyZSBhbGwgaW5pdGlhbGl6ZWQuCgpUaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBXaGlsZSB0aGUgYGtmcmVlYCBvbiB0aGUgc3RhY2sgdmFyaWFibGUgaW4gYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgIGlzIHN0aWxsIGEgYnVnLCBpdCBpcyBhbiAqZXhpc3RpbmcqIGJ1ZyB0aGF0IGlzICpub3QqIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gIEtBU0FOIHdpbGwgY2F0Y2ggdGhpcy4KClNvLCBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZSB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoLiAgVGhlIGV4aXN0aW5nIEtBU0FOIGNoZWNrcyBhcmUgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gbG9naWMgdG8gZGlzdHJpYnV0ZSBmbG9hdGluZyBpbnRlcnJ1cHRzIHRvIGlkbGUgVkNQVXMuIEl0IGludHJvZHVjZXMgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxcygpYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBrdm0tXHUwMDNlYXJjaC5pZGxlX21hc2tgIGFuZCB3YWtlcyB1cCBWQ1BVcyB0aGF0IGNhbiBkZWxpdmVyIHRoZSBwZW5kaW5nIGludGVycnVwdHMuIEl0IGFsc28gbW9kaWZpZXMgYF9fZmxvYXRpbmdfaXJxX2tpY2soKWAgdG8gdGFrZSBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGlgIGluc3RlYWQgb2YgYSBgdTY0IHR5cGVgLCBhbmQgdXNlcyBgaW50aV90b19pcnFfcGVuZF9tYXNrKClgIHRvIGRldGVybWluZSB0aGUgcGVuZGluZyBJUlEgbWFzay5cblxuQWxsIGZpZWxkcyBhY2Nlc3NlZCBieSB0aGUgbmV3IGxvZ2ljIChzdWNoIGFzIGBpbnRpLVx1MDAzZXR5cGVgIGFuZCBgaW50aS1cdTAwM2Vpby5pb19pbnRfd29yZGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYGludGlgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBkeW5hbWljYWxseSB1c2luZyBga3phbGxvY2AgKHZpYSBga3phbGxvY19vYmooKWApIGluIHBhdGhzIGxpa2UgYGt2bV9hcmNoX3ZtX2lvY3RsKClgLCBga3ZtX3MzOTBfaW5qZWN0X2FpcnEoKWAsIGFuZCBgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbigpYCwgYW5kIHRoZW4gcG9wdWxhdGVkIHdpdGggZnVsbHkgaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGxvZ2ljLiBJbiB0aGUgY2FzZSBvZiBga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVjaygpYCwgd2hlcmUgYGludGlgIGlzIGEgc3RhY2sgdmFyaWFibGUsIG9ubHkgdGhlIGB0eXBlYCBmaWVsZCBpcyByZWFkIGJ5IHRoZSBuZXcgbG9naWMsIGFuZCBpdCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBLVk1fUzM5MF9NQ0hLYC5cblxuVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcy4gSXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKClgIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFza2AgYW5kIHdha2VzIHVwIFZDUFVzIHRoYXQgY2FuIGRlbGl2ZXIgdGhlIHBlbmRpbmcgaW50ZXJydXB0cy4gSXQgYWxzbyBtb2RpZmllcyBgX19mbG9hdGluZ19pcnFfa2ljaygpYCB0byB0YWtlIGEgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aWAgaW5zdGVhZCBvZiBhIGB1NjQgdHlwZWAsIGFuZCB1c2VzIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAgdG8gZGV0ZXJtaW5lIHRoZSBwZW5kaW5nIElSUSBtYXNrLlxuXG5BbGwgZmllbGRzIGFjY2Vzc2VkIGJ5IHRoZSBuZXcgbG9naWMgKHN1Y2ggYXMgYGludGktXHUwMDNldHlwZWAgYW5kIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgaW50aWAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iaigpYCkgaW4gcGF0aHMgbGlrZSBga3ZtX2FyY2hfdm1faW9jdGwoKWAsIGBrdm1fczM5MF9pbmplY3RfYWlycSgpYCwgYW5kIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKClgLCBhbmQgdGhlbiBwb3B1bGF0ZWQgd2l0aCBmdWxseSBpbml0aWFsaXplZCBkYXRhIGZyb20gdXNlciBzcGFjZSBvciBrZXJuZWwgbG9naWMuIEluIHRoZSBjYXNlIG9mIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKClgLCB3aGVyZSBgaW50aWAgaXMgYSBzdGFjayB2YXJpYWJsZSwgb25seSB0aGUgYHR5cGVgIGZpZWxkIGlzIHJlYWQgYnkgdGhlIG5ldyBsb2dpYywgYW5kIGl0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEtWTV9TMzkwX01DSEtgLlxuXG5UaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDQ6MTEuNzc0MjQwMDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc3NjkwNzQ0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzdHJpYnV0ZV9mbG9hdF9pcnFzXCIsXG4gICAgXCJrdm1fczM5MF9pbmplY3Rfdm1cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGxvZ2ljIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgaW50ZXJydXB0cyB0byBpZGxlIFZDUFVzLiBJdCBpbnRyb2R1Y2VzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXMoKWAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBga3ZtLVxcdTAwM2VhcmNoLmlkbGVfbWFza2AgYW5kIHdha2VzIHVwIFZDUFVzIHRoYXQgY2FuIGRlbGl2ZXIgdGhlIHBlbmRpbmcgaW50ZXJydXB0cy4gSXQgYWxzbyBtb2RpZmllcyBgX19mbG9hdGluZ19pcnFfa2ljaygpYCB0byB0YWtlIGEgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aWAgaW5zdGVhZCBvZiBhIGB1NjQgdHlwZWAsIGFuZCB1c2VzIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAgdG8gZGV0ZXJtaW5lIHRoZSBwZW5kaW5nIElSUSBtYXNrLlxcblxcbkFsbCBmaWVsZHMgYWNjZXNzZWQgYnkgdGhlIG5ldyBsb2dpYyAoc3VjaCBhcyBgaW50aS1cXHUwMDNldHlwZWAgYW5kIGBpbnRpLVxcdTAwM2Vpby5pb19pbnRfd29yZGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYGludGlgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBkeW5hbWljYWxseSB1c2luZyBga3phbGxvY2AgKHZpYSBga3phbGxvY19vYmooKWApIGluIHBhdGhzIGxpa2UgYGt2bV9hcmNoX3ZtX2lvY3RsKClgLCBga3ZtX3MzOTBfaW5qZWN0X2FpcnEoKWAsIGFuZCBgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbigpYCwgYW5kIHRoZW4gcG9wdWxhdGVkIHdpdGggZnVsbHkgaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGxvZ2ljLiBJbiB0aGUgY2FzZSBvZiBga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVjaygpYCwgd2hlcmUgYGludGlgIGlzIGEgc3RhY2sgdmFyaWFibGUsIG9ubHkgdGhlIGB0eXBlYCBmaWVsZCBpcyByZWFkIGJ5IHRoZSBuZXcgbG9naWMsIGFuZCBpdCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBLVk1fUzM5MF9NQ0hLYC5cXG5cXG5UaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHMzOTAgaW50ZXJydXB0IGRlbGl2ZXJ5IGxvZ2ljIGJ5IGludHJvZHVjaW5nIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgaW50ZXJydXB0cyB0byBpZGxlIFZDUFVzIGFuZCBtb2RpZnlpbmcgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIGNoZWNrIGlmIGEgVkNQVSBjYW4gcmVjZWl2ZSB0aGUgaW50ZXJydXB0IGJlZm9yZSBraWNraW5nIGl0LiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBvbiBzMzkwIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNDoxMS43NzQyNDU2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MDEyNzk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDliMzkyYWU2MWNiZjJjMGE5OWYyNmJiODJlNzVmMzk2YmQ4OGFmZjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTM6MDQ6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGI0MTgyY2E0NDM1ZmIuLjFkNjJiZGQ3YWNhNWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC00NjcsNiArNDY3LDcgQEAgc3RydWN0IGt2bV92bV9zdGF0IHtcXG4gXFx0dTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5O1xcbiBcXHR1NjQgZ21hcF9zaGFkb3dfc2dfZW50cnk7XFxuIFxcdHU2NCBnbWFwX3NoYWRvd19wZ19lbnRyeTtcXG4rXFx0dTY0IGluamVjdF9yZWRpc3Q7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3Qge1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbmluZGV4IDhmMjRiY2QxYTZkMzYuLmU2N2NkZWRiNWFlY2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG5AQCAtMzY3LDYgKzM2NywzNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIGFjdGl2ZV9tYXNrO1xcbiB9XFxuIFxcbit2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcXG4rXFx0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xcbitcXG4rXFx0aWYgKCFSRUFEX09OQ0Uoa3ZtLVxcdTAwM2VhcmNoLmZsb2F0X2ludC5wZW5kaW5nX2lycXMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VvbmxpbmVfdmNwdXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm90IHRvbyB3b3JyaWVkIGFib3V0IHN5bmNocm9uaXphdGlvbiBmb3IgaWRsZV9tYXNrLiBXZVxcbitcXHQgKiBtaWdodCBidXJuIHRvbyBtYW55IGN5Y2xlcyBidXQgYXBhcnQgZnJvbSB0aGF0IHdha2luZyBhXFxuK1xcdCAqIHZjcHUgaXMgbm90IGhhcm1mdWwuXFxuK1xcdCAqL1xcbitcXHRzaWdjcHUgPSBmaW5kX2ZpcnN0X2JpdChrdm0tXFx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMpO1xcbitcXHQvKiBXZWxsIG5vYm9keSdzIHNsZWVwaW5nIHNvIHNvbWVvbmUgd2lsbCBsaWtlbHkgdGFrZSB0aGUgSVJRIHNvb24gKi9cXG4rXFx0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xcbitcXHRcXHRpZiAoZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkpIHtcXG4rXFx0XFx0XFx0a3ZtLVxcdTAwM2VzdGF0LmluamVjdF9yZWRpc3QrKztcXG4rXFx0XFx0XFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRzaWdjcHUgPSBmaW5kX25leHRfYml0KGt2bS1cXHUwMDNlYXJjaC5pZGxlX21hc2ssIG9ubGluZV92Y3B1cywgKytzaWdjcHUpO1xcbitcXHR9IHdoaWxlIChzaWdjcHUgXFx1MDAzYyBvbmxpbmVfdmNwdXMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBfX3NldF9jcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfV0FJVCk7XFxuQEAgLTE5MTUsMjIgKzE5NDYsNDggQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4re1xcbitcXHR1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLVxcdTAwM2V0eXBlKTtcXG4rXFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIEtWTV9TMzkwX01DSEs6XFxuK1xcdFxcdC8qIE9ubHkgcmVwcmVzc2libGUgbWFjaGluZSBjaGVja3MgYXJlIGZsb2F0aW5nICovXFxuK1xcdFxcdHJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApO1xcbitcXHRjYXNlIEtWTV9TMzkwX0lOVF9WSVJUSU86XFxuK1xcdFxcdHJldHVybiBCSVQoSVJRX1BFTkRfVklSVElPKTtcXG4rXFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcXG4rXFx0XFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxcbitcXHRcXHQgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTtcXG4rXFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XFxuK1xcdFxcdHJldHVybiBCSVQoSVJRX1BFTkRfUEZBVUxUX0RPTkUpO1xcbitcXHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxcbitcXHRcXHRyZXR1cm4gQklUKGlzY190b19pcnFfdHlwZShpbnRfd29yZF90b19pc2MoaW50aS1cXHUwMDNlaW8uaW9faW50X3dvcmQpKSk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC5cXG4gICovXFxuLXN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSlcXG4rc3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xcbiBcXHRpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDtcXG4rXFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cXHUwMDNldHlwZSk7XFxuK1xcdHU2NCBpcnFfcGVuZF9tYXNrO1xcbiBcXG4gXFx0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKTtcXG4gXFx0aWYgKCFvbmxpbmVfdmNwdXMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2soaW50aSk7XFxuIFxcdGZvciAoc2lnY3B1ID0ga3ZtLVxcdTAwM2VhcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUrKykge1xcbiBcXHRcXHRzaWdjcHUgJT0gb25saW5lX3ZjcHVzO1xcbiBcXHRcXHRkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7XFxuLVxcdFxcdGlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSlcXG4rXFx0XFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSBcXHUwMDI2IGlycV9wZW5kX21hc2spXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHQvKiBhdm9pZCBlbmRsZXNzIGxvb3BzIGlmIGFsbCB2Y3B1cyBhcmUgc3RvcHBlZCAqL1xcbiBcXHRcXHRpZiAobnJfdHJpZXMrKyBcXHUwMDNlPSBvbmxpbmVfdmNwdXMpXFxuQEAgLTE5ODIsNyArMjAzOSw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXG4tXFx0X19mbG9hdGluZ19pcnFfa2ljayhrdm0sIHR5cGUpO1xcbitcXHRfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgaW50aSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5pbmRleCA1MThhNjljNTVlODVjLi5kNmQ0NjY4OGQ5ODA4IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbkBAIC04Niw2ICs4Niw3IEBAIGNvbnN0IHN0cnVjdCBrdm1fc3RhdHNfZGVzYyBrdm1fdm1fc3RhdHNfZGVzY1tdID0ge1xcbiBcXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3IzX2VudHJ5KSxcXG4gXFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksXFxuIFxcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcGdfZW50cnkpLFxcbitcXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxcbiB9O1xcbiBcXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcXG5AQCAtNDU3Miw2ICs0NTczLDggQEAgc3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRyYyA9IGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHZjcHUpO1xcbiBcXHRcXHRpZiAocmMgfHwgZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cXHUwMDNla3ZtKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaFxcbmluZGV4IDZkMjg0MmZiNzFhMzMuLmEyYmNmNGFjYWMxNmUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXFxuQEAgLTM3NSw2ICszNzUsNyBAQCBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1fczM5MF9pZGxlX3dha2V1cChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpO1xcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcXG4rdm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcXG4gaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjEzLjA0NTI5MDQzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2MzQ4MzI2ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc3RyaWJ1dGVfZmxvYXRfaXJxc1wiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBzMzkwIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYyBieSBpbnRyb2R1Y2luZyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcyBhbmQgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB0byBjaGVjayBpZiBhIFZDUFUgY2FuIHJlY2VpdmUgdGhlIGludGVycnVwdCBiZWZvcmUga2lja2luZyBpdC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgb24gczM5MCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWIzOTJhZTYxY2JmMmMwYTk5ZjI2YmI4MmU3NWYzOTZiZDg4YWZmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDEzOjA0OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBzdHJ1Y3Qga3ZtX3ZtX3N0YXQge1xuIFx0dTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3BnX2VudHJ5O1xuK1x0dTY0IGluamVjdF9yZWRpc3Q7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3Qge1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5pbmRleCA4ZjI0YmNkMWE2ZDM2Li5lNjdjZGVkYjVhZWNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuQEAgLTM2Nyw2ICszNjcsMzcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gYWN0aXZlX21hc2s7XG4gfVxuIFxuK3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xuK1x0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xuK1xuK1x0aWYgKCFSRUFEX09OQ0Uoa3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50LnBlbmRpbmdfaXJxcykpXG4rXHRcdHJldHVybjtcbitcbitcdG9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuK1xuK1x0LypcbitcdCAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2VcbitcdCAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGFcbitcdCAqIHZjcHUgaXMgbm90IGhhcm1mdWwuXG4rXHQgKi9cbitcdHNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcbitcdC8qIFdlbGwgbm9ib2R5J3Mgc2xlZXBpbmcgc28gc29tZW9uZSB3aWxsIGxpa2VseSB0YWtlIHRoZSBJUlEgc29vbiAqL1xuK1x0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXG4rXHRcdHJldHVybjtcbitcbitcdGRvIHtcbitcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuK1x0XHRpZiAoZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkpIHtcbitcdFx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0Kys7XG4rXHRcdFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICsrc2lnY3B1KTtcbitcdH0gd2hpbGUgKHNpZ2NwdSBcdTAwM2Mgb25saW5lX3ZjcHVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19zZXRfY3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1dBSVQpO1xuQEAgLTE5MTUsMjIgKzE5NDYsNDggQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdTY0IGludGlfdG9faXJxX3BlbmRfbWFzayhzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4re1xuK1x0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuK1x0XHQvKiBPbmx5IHJlcHJlc3NpYmxlIG1hY2hpbmUgY2hlY2tzIGFyZSBmbG9hdGluZyAqL1xuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX01DSEtfUkVQKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuK1x0XHQgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4rXHRcdHJldHVybiBCSVQoaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkKSkpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxuICAqL1xuLXN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSlcbitzdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XG4gXHRpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDtcbitcdHU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktXHUwMDNldHlwZSk7XG4rXHR1NjQgaXJxX3BlbmRfbWFzaztcbiBcbiBcdG9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuIFx0aWYgKCFvbmxpbmVfdmNwdXMpXG4gXHRcdHJldHVybjtcbiBcbitcdGlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2soaW50aSk7XG4gXHRmb3IgKHNpZ2NwdSA9IGt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUrKykge1xuIFx0XHRzaWdjcHUgJT0gb25saW5lX3ZjcHVzO1xuIFx0XHRkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7XG4tXHRcdGlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSlcbitcdFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkgXHUwMDI2IGlycV9wZW5kX21hc2spXG4gXHRcdFx0YnJlYWs7XG4gXHRcdC8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovXG4gXHRcdGlmIChucl90cmllcysrIFx1MDAzZT0gb25saW5lX3ZjcHVzKVxuQEAgLTE5ODIsNyArMjAzOSw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbi1cdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTtcbitcdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCBpbnRpKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDUxOGE2OWM1NWU4NWMuLmQ2ZDQ2Njg4ZDk4MDggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTg2LDYgKzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7XG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3IzX2VudHJ5KSxcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfc2dfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksXG4rXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbkBAIC00NTcyLDYgKzQ1NzMsOCBAQCBzdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7XG4gXHRcdGlmIChyYyB8fCBndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpXG4gXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuIFx0fVxuIFxuIFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG5pbmRleCA2ZDI4NDJmYjcxYTMzLi5hMmJjZjRhY2FjMTZlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbkBAIC0zNzUsNiArMzc1LDcgQEAgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKTtcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG4rdm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDQ6MTMuMDQ1MjkyMzU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2NDgyNTE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFMzOTAgS1ZNIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgS1ZNIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQgc2VlbXMgdG8gaW50cm9kdWNlIGEgbmV3IGZ1bmN0aW9uLCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgbG9jYXRlZCBpbiBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AsIGFuZCBpbXBvcnRhbnRseSwgdGhpcyBuZXcgZnVuY3Rpb24gaXMgKmNhbGxlZCogZnJvbSBgdmNwdV9wcmVfcnVuYCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYC4gQWxzbywgdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgc3BlY2lmaWNhbGx5IGhvdyBpdCB1c2VzIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgIHRvIGRlY2lkZSBpZiBhIHZDUFUgY2FuIGhhbmRsZSBhbiBpbnRlcnJ1cHQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZXZlbiBzb21ldGhpbmcgd2Ugc2hvdWxkIGJvdGhlciB3aXRoIGZ1enppbmcuIFNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggS1ZNIG9uIHMzOTAsIHRoYXQgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBJIGtub3cgc3l6a2FsbGVyIGlzIGFscmVhZHkgaGl0dGluZyB0aGF0IGFyZWEuIE5vdyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoZXNlIG5ldy9tb2RpZmllZCBmdW5jdGlvbnMgd2FycmFudCBhdHRlbnRpb24uXG5cbkxldCdzIHNlZSwgdGhlIGZ1bmN0aW9ucyB0b3VjaGVkIGFyZTogYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCBgX19mbG9hdGluZ19pcnFfa2lja2AsIGBfX2luamVjdF92bWAsIGFuZCBgdmNwdV9wcmVfcnVuYC5cblxuT2theSwgdGhlIGNydWNpYWwgcGFydCBpcyB0byBkZXRlcm1pbmUgYWNjZXNzaWJpbGl0eSBmb3IgZnV6emluZy4gYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIHNpbmNlIGl0J3Mgbm9uLXN0YXRpYywgY2FuIGJlIGRpcmVjdGx5IGFkZGVkIHRvIEZvY3VzU3ltYm9scy4gVGhhdCdzIGEgZ3JlZW4gbGlnaHQhIE5vdywgdGhlIG90aGVyczogYGludGlfdG9faXJxX3BlbmRfbWFza2AsIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgYF9faW5qZWN0X3ZtYCwgYW5kIGB2Y3B1X3ByZV9ydW5gIGFyZSBhbGwgc3RhdGljLiBUaGlzIG1ha2VzIHRoZW0gYSBiaXQgbW9yZSBjaGFsbGVuZ2luZyB0byB0YXJnZXQgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZSBub24tc3RhdGljIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIHdpbGwgYnJpbmcgdGhlIHN0YXRpYyBmdW5jdGlvbnMgY2xvc2VyIHRvIHRoZSBzdXJmYWNlLiBXYWl0LCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBpcyBleHBvcnRlZC4gVGhhdCdzIGdvb2QgbmV3cyFcblxuQWxyaWdodCwgaXQncyB0aW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG5hdHVyZSBvZiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjE5LjAxMDEyODQ2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMwNzc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXN0cmlidXRlX2Zsb2F0X2lycXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM2OS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3MDp2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ1NTg9c3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1NzYtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1Nzc6XFx0XFx0ZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHZjcHUtXFx1MDAzZWt2bSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1NzgtXFx0fVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTM3Nz12b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6Mzc4OnZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTM3OS1pbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjE5LjA4NTQ0MjY2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzYyOTU2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBzMzkwIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIEtjb25maWcgc2V0dGluZ3MgZm9yIHMzOTAgdmlydHVhbGl6YXRpb24gdXNpbmcgS1ZNLiBUaGlzIG1lYW5zIG5hdmlnYXRpbmcgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgdG8gY29uZmlybSB3aGljaCBvcHRpb25zIGFyZSBwcmVzZW50LCBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3VwcG9ydCBpcyB0aGVyZSBhbmQgbm90IHNvbWVob3cgYWNjaWRlbnRhbGx5IGRpc2FibGVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBLVk0tcmVsYXRlZCBzeW1ib2xzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMg4oCTIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fUzM5MGAsIGFuZCBhbnl0aGluZyB0aGF0IHJlbGF0ZXMgdG8gdGhlIHNwZWNpZmljIHMzOTAgaGFyZHdhcmUgZmVhdHVyZXMgbmVjZXNzYXJ5IGZvciB2aXJ0dWFsaXphdGlvbi4gSSdsbCBhbHNvIGJlIGNoZWNraW5nIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzOyBJIGRvbid0IHdhbnQgdG8gZ2V0IHRyaXBwZWQgdXAgYnkgc29tZSBzdWJ0bGUgYnVpbGQtdGltZSBpc3N1ZS4gRXNzZW50aWFsbHksIEknbSB2ZXJpZnlpbmcgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cCBjb3JyZWN0bHkuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjIzLjkyMTc0MTg4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTU5NzkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjIzLjk5MTM0ODAwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzg2OTA4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBJbmplY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyB1c2luZyBLVk0uIFRoYXQncyBvdXIgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzeXN0ZW0gd29ya3MsIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoaW5ncyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgdmlydHVhbCBtYWNoaW5lLiBNeSBpbml0aWFsIHRhcmdldHMgYXJlIGNsZWFybHkgYF9faW5qZWN0X3ZtYCBhbmQgYGt2bV9zMzkwX2luamVjdF92bWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvYmFibHkgY2VudHJhbCB0byB0aGUgaW5qZWN0aW9uIG1lY2hhbmlzbS4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGNvZGUgaW4gdGhvc2Ugcm91dGluZXMsIHVuZGVyc3RhbmRpbmcgdGhlaXIgcGFyYW1ldGVycywgY29udHJvbCBmbG93LCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIHRoZXkgaW5jb3Jwb3JhdGUuIEhvcGVmdWxseSwgSSdsbCB1bmNvdmVyIHRoZSBpbmplY3Rpb24gbWV0aG9kIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBzcGVjaWZpYyBLVk0gaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NjMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNDoyNy4yNzAwNDI5NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc5MTcwMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjAxNT1zdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ1LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA0NjppbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwNDctXFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4MC1cXHR9XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDgxOlxcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVxcdTAwM2V0eXBlLCBzMzkwaW50LVxcdTAwM2VwYXJtLCBzMzkwaW50LVxcdTAwM2VwYXJtNjQsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDgyLVxcdFxcdFxcdFxcdCAyKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgyMD1zdGF0aWMgaW50IGt2bV9zMzkwX2luamVjdF9haXJxKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzOC1cXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVxcdTAwM2VzdXBwcmVzc2libGUpIHtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mzk6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg0MC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODUyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mjg1MzpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODU0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zODA4PWludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODUwLVxcdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXFx1MDAzZXN1cHByZXNzaWJsZSkge1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzg1MTpcXHRcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODUyLVxcdFxcdGlmIChyZXQgPT0gMCkge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcwLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzg3MTpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcyLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IChmaS1cXHUwMDNlc2ltbSBcXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cXHUwMDNlaXNjKSkpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQ3LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTQ4OlxcdFxcdHIgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5NDktXFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDQ3NT1zdGF0aWMgdm9pZCBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBzdGFydF90b2tlbixcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDkzLVxcdFxcdGludGkucGFybTY0ID0gdG9rZW47XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0OTQ6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKHZjcHUtXFx1MDAzZWt2bSwgXFx1MDAyNmludGksIGludGlfbWVtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTM3OD12b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozNzk6aW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODAtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaD04MT1UUkFDRV9FVkVOVChrdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjQtXFxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmg6MTI1OlRSQUNFX0VWRU5UKGt2bV9zMzkwX2luamVjdF92bSxcXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjYtXFx0ICAgIFRQX1BST1RPKF9fdTY0IHR5cGUsIF9fdTMyIHBhcm0sIF9fdTY0IHBhcm02NCwgaW50IHdobyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjI3LjM2Nzk2NTE0OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDI5NzU2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNL3MzOTAgSW50ZXJydXB0IEluamVjdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgc2luY2UgaXQncyBleHBvcnRlZCBhbmQgYmVpbmcgdXNlZC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLCBhbmQgdGhhdCdzIHRoZSByZWFsIGludGVyZXN0aW5nIHBhcnQuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIGJlY29tZXM6XG4qICAgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2BcbiogICBga3ZtX3MzOTBfaW5qZWN0X3ZtYFxuXG5TaW5jZSwgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgaXMgY2FsbGVkIGZyb20gYHZjcHVfcHJlX3J1bmAsIGFuZCBpdCBhZmZlY3RzIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB3aGljaCBpcyB1c2VkIGJ5IGBfX2luamVjdF92bWAgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4gVGhhdCdzIHRoZSBjYWxsIGNoYWluLlxuXG5Ob3csIGxldCdzIHZlcmlmeSBhIGZldyB0aGluZ3MuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCAqaXMqIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLCBhbmQgdGhhdCBpdCBpc24ndCBzdGF0aWMuIEl0J3MgZGVjbGFyZWQgaW4gYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaGAgYW5kIGRlZmluZWQgaW4gYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgLCBhbmQgaXQncyBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBHb29kLCB0aGF0IG1ha2VzIHRoaW5ncyBlYXNpZXIuIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIGFsc28gbm90IHN0YXRpYywgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0LlxuXG5JIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBxdWljayBsb29rIGF0IGhvdyBgdmNwdV9wcmVfcnVuYCBhbmQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBhcmUgd29ya2luZyBpbiBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhpcyBuZXcgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBzY2hlbWUsIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjMyLjg3MDk0MzE1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MjU1MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjcHVfcHJlX3J1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDUzMj1ib29sIGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTU3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTU4OnN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU1OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDc5ND1zdGF0aWMgaW50IF9fdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ4MDUtXFx0d2hpbGUgKHRydWUpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDgwNjpcXHRcXHRyYyA9IHZjcHVfcHJlX3J1bih2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDgwNy1cXHRcXHRrdm1fdmNwdV9zcmN1X3JlYWRfdW5sb2NrKHZjcHUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNDozMi45NzgyMDQwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA1OTA0MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBzMzkwIEludGVycnVwdCBEZWxpdmVyeSBQYXRjaCoqXG5cbk9rYXksIHNvIGB2Y3B1X3ByZV9ydW5gIGlzIGNhbGxlZCBmcm9tIGBfX3ZjcHVfcnVuYCwgd2hpY2ggaXRzZWxmIGlzIHRyaWdnZXJlZCBieSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBSaWdodCwgdGhhdCdzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29kZSBwYXRoLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBwYXRjaCBtYWtlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBob3cgS1ZNIGhhbmRsZXMgaW50ZXJydXB0cyBvbiBzMzkwLCBhbmQgdGhhdCdzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBJJ20gbG9va2luZyBmb3IuXG5cblNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgd2hpY2ggc291bmRzIGxpa2UgaXQncyBkZXNpZ25lZCB0byBwdXNoIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcy4gQWxzbywgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGlzIGJlaW5nIHR3ZWFrZWQgdG8gdXNlIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgIHRvIHByZXZlbnQga2lja2luZyBhIFZDUFUgdGhhdCdzIHVuYWJsZSB0byByZWNlaXZlIHRoZSBpbnRlcnJ1cHQuXG5cblRoaXMgaXMgc2NyZWFtaW5nIFwiRlVaWiBNRSFcIiBhdCBtZS4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSBLVk0gaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiwgYW5kIHRoZSBtb2RpZmljYXRpb25zIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHRpbWluZyBpc3N1ZXMgb3IgY29ybmVyIGNhc2VzLiBJJ2xsIGZsYWcgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgYW5kIGBrdm1fczM5MF9pbmplY3Rfdm1gIGFzIGZvY3VzIHN5bWJvbHMuIEFuZCBvZiBjb3Vyc2UsIEknbGwgbmVlZCBgS1ZNYCBlbmFibGVkIGZvciB0aGUgZnV6emluZy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSBmb3IgZGlzY292ZXJpbmcgc29tZSBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzksIk91dHB1dFRva2VucyI6MTM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjM5LjE4NDExMTA1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTUwMjE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzdHJpYnV0ZV9mbG9hdF9pcnFzXCIsXG4gICAgXCJrdm1fczM5MF9pbmplY3Rfdm1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHMzOTAgaW50ZXJydXB0IGRlbGl2ZXJ5IGxvZ2ljIGJ5IGludHJvZHVjaW5nIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgaW50ZXJydXB0cyB0byBpZGxlIFZDUFVzIGFuZCBtb2RpZnlpbmcgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIGNoZWNrIGlmIGEgVkNQVSBjYW4gcmVjZWl2ZSB0aGUgaW50ZXJydXB0IGJlZm9yZSBraWNraW5nIGl0LiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBvbiBzMzkwIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc3RyaWJ1dGVfZmxvYXRfaXJxc1wiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBzMzkwIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYyBieSBpbnRyb2R1Y2luZyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcyBhbmQgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB0byBjaGVjayBpZiBhIFZDUFUgY2FuIHJlY2VpdmUgdGhlIGludGVycnVwdCBiZWZvcmUga2lja2luZyBpdC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgb24gczM5MCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDQ6MzkuMzkzNjIxMjgzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTAxNDk2ODA1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNDozOS4zOTQxODQ1MjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzUwMTQ5MTEyMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcy4gSXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKClgIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGt2bS1cXHUwMDNlYXJjaC5pZGxlX21hc2tgIGFuZCB3YWtlcyB1cCBWQ1BVcyB0aGF0IGNhbiBkZWxpdmVyIHRoZSBwZW5kaW5nIGludGVycnVwdHMuIEl0IGFsc28gbW9kaWZpZXMgYF9fZmxvYXRpbmdfaXJxX2tpY2soKWAgdG8gdGFrZSBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGlgIGluc3RlYWQgb2YgYSBgdTY0IHR5cGVgLCBhbmQgdXNlcyBgaW50aV90b19pcnFfcGVuZF9tYXNrKClgIHRvIGRldGVybWluZSB0aGUgcGVuZGluZyBJUlEgbWFzay5cXG5cXG5BbGwgZmllbGRzIGFjY2Vzc2VkIGJ5IHRoZSBuZXcgbG9naWMgKHN1Y2ggYXMgYGludGktXFx1MDAzZXR5cGVgIGFuZCBgaW50aS1cXHUwMDNlaW8uaW9faW50X3dvcmRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBpbnRpYCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgdXNpbmcgYGt6YWxsb2NgICh2aWEgYGt6YWxsb2Nfb2JqKClgKSBpbiBwYXRocyBsaWtlIGBrdm1fYXJjaF92bV9pb2N0bCgpYCwgYGt2bV9zMzkwX2luamVjdF9haXJxKClgLCBhbmQgYF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oKWAsIGFuZCB0aGVuIHBvcHVsYXRlZCB3aXRoIGZ1bGx5IGluaXRpYWxpemVkIGRhdGEgZnJvbSB1c2VyIHNwYWNlIG9yIGtlcm5lbCBsb2dpYy4gSW4gdGhlIGNhc2Ugb2YgYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soKWAsIHdoZXJlIGBpbnRpYCBpcyBhIHN0YWNrIHZhcmlhYmxlLCBvbmx5IHRoZSBgdHlwZWAgZmllbGQgaXMgcmVhZCBieSB0aGUgbmV3IGxvZ2ljLCBhbmQgaXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgS1ZNX1MzOTBfTUNIS2AuXFxuXFxuVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWIzOTJhZTYxY2JmMmMwYTk5ZjI2YmI4MmU3NWYzOTZiZDg4YWZmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDEzOjA0OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBzdHJ1Y3Qga3ZtX3ZtX3N0YXQge1xuIFx0dTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3BnX2VudHJ5O1xuK1x0dTY0IGluamVjdF9yZWRpc3Q7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3Qge1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5pbmRleCA4ZjI0YmNkMWE2ZDM2Li5lNjdjZGVkYjVhZWNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuQEAgLTM2Nyw2ICszNjcsMzcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gYWN0aXZlX21hc2s7XG4gfVxuIFxuK3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xuK1x0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xuK1xuK1x0aWYgKCFSRUFEX09OQ0Uoa3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50LnBlbmRpbmdfaXJxcykpXG4rXHRcdHJldHVybjtcbitcbitcdG9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuK1xuK1x0LypcbitcdCAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2VcbitcdCAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGFcbitcdCAqIHZjcHUgaXMgbm90IGhhcm1mdWwuXG4rXHQgKi9cbitcdHNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcbitcdC8qIFdlbGwgbm9ib2R5J3Mgc2xlZXBpbmcgc28gc29tZW9uZSB3aWxsIGxpa2VseSB0YWtlIHRoZSBJUlEgc29vbiAqL1xuK1x0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXG4rXHRcdHJldHVybjtcbitcbitcdGRvIHtcbitcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuK1x0XHRpZiAoZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkpIHtcbitcdFx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0Kys7XG4rXHRcdFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICsrc2lnY3B1KTtcbitcdH0gd2hpbGUgKHNpZ2NwdSBcdTAwM2Mgb25saW5lX3ZjcHVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19zZXRfY3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1dBSVQpO1xuQEAgLTE5MTUsMjIgKzE5NDYsNDggQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdTY0IGludGlfdG9faXJxX3BlbmRfbWFzayhzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4re1xuK1x0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuK1x0XHQvKiBPbmx5IHJlcHJlc3NpYmxlIG1hY2hpbmUgY2hlY2tzIGFyZSBmbG9hdGluZyAqL1xuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX01DSEtfUkVQKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuK1x0XHQgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4rXHRcdHJldHVybiBCSVQoaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkKSkpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxuICAqL1xuLXN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSlcbitzdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XG4gXHRpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDtcbitcdHU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktXHUwMDNldHlwZSk7XG4rXHR1NjQgaXJxX3BlbmRfbWFzaztcbiBcbiBcdG9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuIFx0aWYgKCFvbmxpbmVfdmNwdXMpXG4gXHRcdHJldHVybjtcbiBcbitcdGlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2soaW50aSk7XG4gXHRmb3IgKHNpZ2NwdSA9IGt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUrKykge1xuIFx0XHRzaWdjcHUgJT0gb25saW5lX3ZjcHVzO1xuIFx0XHRkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7XG4tXHRcdGlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSlcbitcdFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkgXHUwMDI2IGlycV9wZW5kX21hc2spXG4gXHRcdFx0YnJlYWs7XG4gXHRcdC8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovXG4gXHRcdGlmIChucl90cmllcysrIFx1MDAzZT0gb25saW5lX3ZjcHVzKVxuQEAgLTE5ODIsNyArMjAzOSw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbi1cdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTtcbitcdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCBpbnRpKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDUxOGE2OWM1NWU4NWMuLmQ2ZDQ2Njg4ZDk4MDggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTg2LDYgKzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7XG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3IzX2VudHJ5KSxcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfc2dfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksXG4rXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbkBAIC00NTcyLDYgKzQ1NzMsOCBAQCBzdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7XG4gXHRcdGlmIChyYyB8fCBndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpXG4gXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuIFx0fVxuIFxuIFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG5pbmRleCA2ZDI4NDJmYjcxYTMzLi5hMmJjZjRhY2FjMTZlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbkBAIC0zNzUsNiArMzc1LDcgQEAgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKTtcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG4rdm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDQ6MzkuMzk0MTg3NjQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NzkzNDQyMjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUzM5MCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gcmVmaW5pbmcgaG93IGludGVycnVwdHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBTMzkwIEtWTSBlbnZpcm9ubWVudC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBpbnRyb2R1Y2luZyBzb21lIG9wdGltaXphdGlvbnMgcmVsYXRlZCB0byBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uIGFuZCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgdGhlIHdha2V1cCBtZWNoYW5pc20gZm9yIGlkbGUgdkNQVXMuIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gYmUgYWJvdXQgZWZmaWNpZW50bHkgZGlzdHJpYnV0aW5nIHBlbmRpbmcgaW50ZXJydXB0cyB0byB0aGUgYXBwcm9wcmlhdGUgdmlydHVhbCBDUFVzLlxuXG5JJ20gc2VlaW5nIHRoYXQgYSBuZXcgZmllbGQsIGBpbmplY3RfcmVkaXN0YCwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGBrdm1fdm1fc3RhdGAgc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2l0aCB0aGlzIGFkZGl0aW9uPyBEZWJ1Z2ZzIG9yIHNpbWlsYXIgaXMgb2Z0ZW4gdXNlZCB0byBleHBvc2UgYGt2bV92bV9zdGF0YCB0byB1c2Vyc3BhY2UuIEZvcnR1bmF0ZWx5LCBpdCdzIGp1c3QgYSBzdHJ1Y3Qgb2YgYHU2NGAgZmllbGRzLCBhbmQgdGhlIG5ldyBmaWVsZCBpcyBhZGRlZCBhdCB0aGUgZW5kIGFuZCBpcyBsaWtlbHkgemVyb2VkIG9uIGFsbG9jYXRpb24sIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgcXVpY2tseSB2ZXJpZmllZCB0aGF0IGBrdm1fdm1fc3RhdGAgaXMgZWl0aGVyIGVtYmVkZGVkIHdpdGhpbiB0aGUgYHN0cnVjdCBrdm1gIG9yIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgd2hpY2ggc2hvdWxkIGhhbmRsZSB0aGUgaW5pdGlhbGl6YXRpb24uIEkgY2hlY2tlZCB0aGUgYGluY2x1ZGVgIGhlYWRlcnMgdG8gYmUgc3VyZS5cblxuVGhlIG5leHQgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB3YWtpbmcgdXAgaWRsZSB2Q1BVcyB0aGF0IGhhdmUgcGVuZGluZyBpbnRlcnJ1cHRzLiBUaGF0J3MgYSBzZW5zaWJsZSBvcHRpbWl6YXRpb24uXG5cblRoZSBtb2RpZmljYXRpb24gb2YgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIHRha2UgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpYCBpbnN0ZWFkIG9mIGp1c3QgYSBgdTY0IHR5cGVgIHJhaXNlZCBhIGZsYWcuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBuZXcgZnVuY3Rpb24sIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggaW50ZXJydXB0IHR5cGVzIGFyZSBwZW5kaW5nLiBJIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgYGludGlgIGlzIHBvcHVsYXRlZCBhbmQgaWYgdGhlcmUncyBhbnkgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTcGVjaWZpY2FsbHksIEknbSBjb25jZXJuZWQgYWJvdXQgYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgLCB3aGljaCBnZXRzIHVzZWQgd2l0aGluIGEgYHN3aXRjaGAgc3RhdGVtZW50IGluIHRoZSBgaW50aV90b19pcnFfcGVuZF9tYXNrYCBmdW5jdGlvbi5cblxuTm93LCBiZWZvcmUgdGhlIHBhdGNoLCBgX19mbG9hdGluZ19pcnFfa2lja2Agb25seSB1c2VkIHRoZSBgdHlwZWAgZmllbGQuIE5vdywgaXQgcmVhZHMgdGhlIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCBpZiB0aGUgYHR5cGVgIGZhbGxzIGluIHRoZSBgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVhgIHJhbmdlLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaW50aWAgaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGlzIGNhbGxlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYF9faW5qZWN0X3ZtYCAod2hpY2ggdGFrZXMgYGludGlgKSBhbmQgaG93IGBpbnRpYCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQsIG1vc3QgbGlrZWx5IGluIGBrdm1fczM5MF9pbmplY3Rfdm1gLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHJlYWRzLiBIb3BlZnVsbHksIEtNU0FOIHdvdWxkIGNhdGNoIGl0IGlmIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCB3YXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEkgY2hlY2tlZCBob3cgYGludGlgIGlzIHBvcHVsYXRlZCBmcm9tIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YC4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IHRoYXQgYGludGlgICpzaG91bGQqIGJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLiBJIHdpbGwgbG9vayBpbiBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjA3LjE4NzYzMjIwNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjE4MTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9pbmplY3Rfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIwMTU9c3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA0NS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwNDY6aW50IGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ3LVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODAtXFx0fVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4MTpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3Rfdm0oczM5MGludC1cXHUwMDNldHlwZSwgczM5MGludC1cXHUwMDNlcGFybSwgczM5MGludC1cXHUwMDNlcGFybTY0LFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4Mi1cXHRcXHRcXHRcXHQgMik7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI4MjA9c3RhdGljIGludCBrdm1fczM5MF9pbmplY3RfYWlycShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MzgtXFx0aWYgKCF0ZXN0X2t2bV9mYWNpbGl0eShrdm0sIDcyKSB8fCAhYWRhcHRlci1cXHUwMDNlc3VwcHJlc3NpYmxlKSB7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODM5OlxcdFxcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFxcdTAwMjZzMzkwaW50LCBpbnRpKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4NDAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg1Mi1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4NTM6XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg1NC1cXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzgwOD1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg1MC1cXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVxcdTAwM2VzdXBwcmVzc2libGUpIHtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM4NTE6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg1Mi1cXHRcXHRpZiAocmV0ID09IDApIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg3MC1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM4NzE6XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg3Mi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAoZmktXFx1MDAzZXNpbW0gXFx1MDAyNiBBSVNfTU9ERV9NQVNLKGFkYXB0ZXItXFx1MDAzZWlzYykpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjA4LjM4Mzg1Mjk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MzAxOTY5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fczM5MF9pbmplY3Rfdm1gKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV9zMzkwX2luamVjdF92bWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIHN0ZXAtYnktc3RlcC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFZNLCB3aGF0IGFzcGVjdHMgb2YgdGhlIFMvMzkwIGFyY2hpdGVjdHVyZSBpdCB0YXJnZXRzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBvciBlZGdlIGNhc2VzLiBUaGlzIHdpbGwgcmVxdWlyZSBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBwcm9iYWJseSBzb21lIGNyb3NzLXJlZmVyZW5jaW5nIHdpdGggcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgS1ZNIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgZ2VuZXJhbCBLVk0gQVBJLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1lbnRhbCBtb2RlbCBvZiB0aGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNToxNS4xMTQwNTMxNzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA0NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA0NjpcXHRpbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG4yMDQ3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuMjA0ODpcXHR7XFxuMjA0OTpcXHRcXHRpbnQgcmM7XFxuMjA1MDpcXHRcXG4yMDUxOlxcdFxcdGludGktXFx1MDAzZXR5cGUgPSBzMzkwaW50LVxcdTAwM2V0eXBlO1xcbjIwNTI6XFx0XFx0c3dpdGNoIChpbnRpLVxcdTAwM2V0eXBlKSB7XFxuMjA1MzpcXHRcXHRjYXNlIEtWTV9TMzkwX0lOVF9WSVJUSU86XFxuMjA1NDpcXHRcXHRcXHRWTV9FVkVOVChrdm0sIDUsIFxcXCJpbmplY3Q6IHZpcnRpbyBwYXJtOiV4LHBhcm02NDolbGx4XFxcIixcXG4yMDU1OlxcdFxcdFxcdFxcdCBzMzkwaW50LVxcdTAwM2VwYXJtLCBzMzkwaW50LVxcdTAwM2VwYXJtNjQpO1xcbjIwNTY6XFx0XFx0XFx0aW50aS1cXHUwMDNlZXh0LmV4dF9wYXJhbXMgPSBzMzkwaW50LVxcdTAwM2VwYXJtO1xcbjIwNTc6XFx0XFx0XFx0aW50aS1cXHUwMDNlZXh0LmV4dF9wYXJhbXMyID0gczM5MGludC1cXHUwMDNlcGFybTY0O1xcbjIwNTg6XFx0XFx0XFx0YnJlYWs7XFxuMjA1OTpcXHRcXHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxcbjIwNjA6XFx0XFx0XFx0Vk1fRVZFTlQoa3ZtLCA0LCBcXFwiaW5qZWN0OiBzY2xwIHBhcm06JXhcXFwiLCBzMzkwaW50LVxcdTAwM2VwYXJtKTtcXG4yMDYxOlxcdFxcdFxcdGludGktXFx1MDAzZWV4dC5leHRfcGFyYW1zID0gczM5MGludC1cXHUwMDNlcGFybTtcXG4yMDYyOlxcdFxcdFxcdGJyZWFrO1xcbjIwNjM6XFx0XFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XFxuMjA2NDpcXHRcXHRcXHRpbnRpLVxcdTAwM2VleHQuZXh0X3BhcmFtczIgPSBzMzkwaW50LVxcdTAwM2VwYXJtNjQ7XFxuMjA2NTpcXHRcXHRcXHRicmVhaztcXG4yMDY2OlxcdFxcdGNhc2UgS1ZNX1MzOTBfTUNISzpcXG4yMDY3OlxcdFxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcImluamVjdDogbWFjaGluZSBjaGVjayBtY2ljIDB4JWxseFxcXCIsXFxuMjA2ODpcXHRcXHRcXHRcXHQgczM5MGludC1cXHUwMDNlcGFybTY0KTtcXG4yMDY5OlxcdFxcdFxcdGludGktXFx1MDAzZW1jaGsuY3IxNCA9IHMzOTBpbnQtXFx1MDAzZXBhcm07IC8qIHVwcGVyIGJpdHMgYXJlIG5vdCB1c2VkICovXFxuMjA3MDpcXHRcXHRcXHRpbnRpLVxcdTAwM2VtY2hrLm1jaWMgPSBzMzkwaW50LVxcdTAwM2VwYXJtNjQ7XFxuMjA3MTpcXHRcXHRcXHRicmVhaztcXG4yMDcyOlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XFxuMjA3MzpcXHRcXHRcXHRpbnRpLVxcdTAwM2Vpby5zdWJjaGFubmVsX2lkID0gczM5MGludC1cXHUwMDNlcGFybSBcXHUwMDNlXFx1MDAzZSAxNjtcXG4yMDc0OlxcdFxcdFxcdGludGktXFx1MDAzZWlvLnN1YmNoYW5uZWxfbnIgPSBzMzkwaW50LVxcdTAwM2VwYXJtIFxcdTAwMjYgMHgwMDAwZmZmZnU7XFxuMjA3NTpcXHRcXHRcXHRpbnRpLVxcdTAwM2Vpby5pb19pbnRfcGFybSA9IHMzOTBpbnQtXFx1MDAzZXBhcm02NCBcXHUwMDNlXFx1MDAzZSAzMjtcXG4yMDc2OlxcdFxcdFxcdGludGktXFx1MDAzZWlvLmlvX2ludF93b3JkID0gczM5MGludC1cXHUwMDNlcGFybTY0IFxcdTAwMjYgMHgwMDAwMDAwMGZmZmZmZmZmdWxsO1xcbjIwNzc6XFx0XFx0XFx0YnJlYWs7XFxuMjA3ODpcXHRcXHRkZWZhdWx0OlxcbjIwNzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjA4MDpcXHRcXHR9XFxuMjA4MTpcXHRcXHR0cmFjZV9rdm1fczM5MF9pbmplY3Rfdm0oczM5MGludC1cXHUwMDNldHlwZSwgczM5MGludC1cXHUwMDNlcGFybSwgczM5MGludC1cXHUwMDNlcGFybTY0LFxcbjIwODI6XFx0XFx0XFx0XFx0XFx0IDIpO1xcbjIwODM6XFx0XFxuMjA4NDpcXHRcXHRyYyA9IF9faW5qZWN0X3ZtKGt2bSwgaW50aSk7XFxuMjA4NTpcXHRcXG4yMDg2OlxcdFxcdHJldHVybiByYztcXG4yMDg3OlxcdH1cXG4yMDg4OlxcdFxcbjIwODk6XFx0aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuMjA5MDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuMjA5MTpcXHR7XFxuMjA5MjpcXHRcXHRyZXR1cm4gX19pbmplY3Rfdm0oa3ZtLCBpbnRpKTtcXG4yMDkzOlxcdH1cXG4yMDk0OlxcdFxcbjIwOTU6XFx0aW50IHMzOTBpbnRfdG9fczM5MGlycShzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNToxNS4xMTQ0MjExNDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIzOTIzMDcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEludGVnZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYGludGlgIGdldHMgaXRzIHZhbHVlLiBJdCdzIGRpcmVjdGx5IHBvcHVsYXRlZCBmcm9tIGBzMzkwaW50YCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaWYgYHMzOTBpbnRgIGlzbid0IGluaXRpYWxpemVkLCB0aGVuIG5laXRoZXIgd2lsbCBgaW50aWAuIFRoYXQncyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBvcmlnaW4gb2YgYHMzOTBpbnRgLiBJdCdzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCwgc28gSSBuZWVkIHRvIGZpbmQgaXRzIGluaXRpYWwgc2V0dGluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLiBOb3csIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBga3ZtX3MzOTBfaW5qZWN0X2FpcnFgIGFwcGVhcnMgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjIxLjM1MzY1NTA3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjc0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODIwOlxcdHN0YXRpYyBpbnQga3ZtX3MzOTBfaW5qZWN0X2FpcnEoc3RydWN0IGt2bSAqa3ZtLFxcbjI4MjE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcilcXG4yODIyOlxcdHtcXG4yODIzOlxcdFxcdHN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbG9hdF9pbnQ7XFxuMjgyNDpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQgPSB7XFxuMjgyNTpcXHRcXHRcXHQudHlwZSA9IEtWTV9TMzkwX0lOVF9JTygxLCAwLCAwLCAwKSxcXG4yODI2OlxcdFxcdFxcdC5wYXJtID0gMCxcXG4yODI3OlxcdFxcdFxcdC5wYXJtNjQgPSBpc2NfdG9faW50X3dvcmQoYWRhcHRlci1cXHUwMDNlaXNjKSxcXG4yODI4OlxcdFxcdH07XFxuMjgyOTpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuMjgzMDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjI4MzE6XFx0XFxuMjgzMjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4yODMzOlxcdFxcbjI4MzQ6XFx0XFx0aW50aSA9IGt6YWxsb2Nfb2JqKCppbnRpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjI4MzU6XFx0XFx0aWYgKCFpbnRpKVxcbjI4MzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjgzNzpcXHRcXG4yODM4OlxcdFxcdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXFx1MDAzZXN1cHByZXNzaWJsZSkge1xcbjI4Mzk6XFx0XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbjI4NDA6XFx0XFx0XFx0aWYgKHJldClcXG4yODQxOlxcdFxcdFxcdFxcdGtmcmVlKGludGkpO1xcbjI4NDI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yODQzOlxcdFxcdH1cXG4yODQ0OlxcdFxcbjI4NDU6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmZpLVxcdTAwM2VhaXNfbG9jaywgZmxhZ3MpO1xcbjI4NDY6XFx0XFx0aWYgKGZpLVxcdTAwM2VuaW1tIFxcdTAwMjYgQUlTX01PREVfTUFTSyhhZGFwdGVyLVxcdTAwM2Vpc2MpKSB7XFxuMjg0NzpcXHRcXHRcXHR0cmFjZV9rdm1fczM5MF9haXJxX3N1cHByZXNzZWQoYWRhcHRlci1cXHUwMDNlaWQsIGFkYXB0ZXItXFx1MDAzZWlzYyk7XFxuMjg0ODpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZmaS1cXHUwMDNlYWlzX2xvY2ssIGZsYWdzKTtcXG4yODQ5OlxcdFxcdFxcdGtmcmVlKGludGkpO1xcbjI4NTA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yODUxOlxcdFxcdH1cXG4yODUyOlxcdFxcbjI4NTM6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbjI4NTQ6XFx0XFxuMjg1NTpcXHRcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAoZmktXFx1MDAzZXNpbW0gXFx1MDAyNiBBSVNfTU9ERV9NQVNLKGFkYXB0ZXItXFx1MDAzZWlzYykpKSB7XFxuMjg1NjpcXHRcXHRcXHRmaS1cXHUwMDNlbmltbSB8PSBBSVNfTU9ERV9NQVNLKGFkYXB0ZXItXFx1MDAzZWlzYyk7XFxuMjg1NzpcXHRcXHRcXHR0cmFjZV9rdm1fczM5MF9tb2RpZnlfYWlzX21vZGUoYWRhcHRlci1cXHUwMDNlaXNjLFxcbjI4NTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEtWTV9TMzkwX0FJU19NT0RFX1NJTkdMRSwgMik7XFxuMjg1OTpcXHRcXHR9XFxuMjg2MDpcXHRcXG4yODYxOlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmZpLVxcdTAwM2VhaXNfbG9jaywgZmxhZ3MpO1xcbjI4NjI6XFx0XFx0aWYgKHJldClcXG4yODYzOlxcdFxcdFxcdGtmcmVlKGludGkpO1xcbjI4NjQ6XFx0XFx0cmV0dXJuIHJldDtcXG4yODY1OlxcdH1cXG4yODY2OlxcdFxcbjI4Njc6XFx0c3RhdGljIGludCBmbGljX2luamVjdF9haXJxKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4yODY4OlxcdHtcXG4yODY5OlxcdFxcdHVuc2lnbmVkIGludCBpZCA9IGF0dHItXFx1MDAzZWF0dHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjIxLjM1NDAyNDYyMloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjgyNjI4MTcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjc5NTAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDU6MzguMTgwMzA5MTM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MDgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4MDg6XFx0aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuMzgwOTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXFxuMzgxMDpcXHRcXHRcXHRcXHQgICAgICBib29sIGxpbmVfc3RhdHVzKVxcbjM4MTE6XFx0e1xcbjM4MTI6XFx0XFx0aW50IHJldCwgc2V0Yml0O1xcbjM4MTM6XFx0XFx0c3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcjtcXG4zODE0OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbG9hdF9pbnQ7XFxuMzgxNTpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuMzgxNjpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQgPSB7XFxuMzgxNzpcXHRcXHRcXHRcXHQudHlwZSA9IEtWTV9TMzkwX0lOVF9JTygxLCAwLCAwLCAwKSxcXG4zODE4OlxcdFxcdFxcdFxcdC5wYXJtID0gMCxcXG4zODE5OlxcdFxcdH07XFxuMzgyMDpcXHRcXG4zODIxOlxcdFxcdGt2bS1cXHUwMDNlc3RhdC5pb18zOTBfaW5hdG9taWMrKztcXG4zODIyOlxcdFxcbjM4MjM6XFx0XFx0LyogV2UncmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSAwLVxcdTAwM2UxIHRyYW5zaXRpb24uICovXFxuMzgyNDpcXHRcXHRpZiAoIWxldmVsKVxcbjM4MjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzgyNjpcXHRcXHRpZiAoZS1cXHUwMDNldHlwZSAhPSBLVk1fSVJRX1JPVVRJTkdfUzM5MF9BREFQVEVSKVxcbjM4Mjc6XFx0XFx0XFx0cmV0dXJuIC1FV09VTERCTE9DSztcXG4zODI4OlxcdFxcbjM4Mjk6XFx0XFx0YWRhcHRlciA9IGdldF9pb19hZGFwdGVyKGt2bSwgZS1cXHUwMDNlYWRhcHRlci5hZGFwdGVyX2lkKTtcXG4zODMwOlxcdFxcdGlmICghYWRhcHRlcilcXG4zODMxOlxcdFxcdFxcdHJldHVybiAtRVdPVUxEQkxPQ0s7XFxuMzgzMjpcXHRcXG4zODMzOlxcdFxcdHMzOTBpbnQucGFybTY0ID0gaXNjX3RvX2ludF93b3JkKGFkYXB0ZXItXFx1MDAzZWlzYyk7XFxuMzgzNDpcXHRcXHRzZXRiaXQgPSAxO1xcbjM4MzU6XFx0XFx0cmV0ID0gYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0KGt2bSwgYWRhcHRlciwgXFx1MDAyNmUtXFx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XFxuMzgzNjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4zODM3OlxcdFxcdFxcdHJldHVybiAtRVdPVUxEQkxPQ0s7XFxuMzgzODpcXHRcXHRpZiAoIXJldCB8fCBhZGFwdGVyLVxcdTAwM2VtYXNrZWQpIHtcXG4zODM5OlxcdFxcdFxcdGt2bS1cXHUwMDNlc3RhdC5pb18zOTBfaW5hdG9taWNfbm9faW5qZWN0Kys7XFxuMzg0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zODQxOlxcdFxcdH1cXG4zODQyOlxcdFxcbjM4NDM6XFx0XFx0aW50aSA9IGt6YWxsb2Nfb2JqKCppbnRpLCBHRlBfQVRPTUlDKTtcXG4zODQ0OlxcdFxcdGlmICghaW50aSkge1xcbjM4NDU6XFx0XFx0XFx0c2V0Yml0ID0gMDtcXG4zODQ2OlxcdFxcdFxcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFxcdTAwMjZlLVxcdTAwM2VhZGFwdGVyLCBzZXRiaXQpO1xcbjM4NDc6XFx0XFx0XFx0cmV0dXJuIC1FV09VTERCTE9DSztcXG4zODQ4OlxcdFxcdH1cXG4zODQ5OlxcdFxcbjM4NTA6XFx0XFx0aWYgKCF0ZXN0X2t2bV9mYWNpbGl0eShrdm0sIDcyKSB8fCAhYWRhcHRlci1cXHUwMDNlc3VwcHJlc3NpYmxlKSB7XFxuMzg1MTpcXHRcXHRcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuMzg1MjpcXHRcXHRcXHRpZiAocmV0ID09IDApIHtcXG4zODUzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzg1NDpcXHRcXHRcXHR9IGVsc2Uge1xcbjM4NTU6XFx0XFx0XFx0XFx0c2V0Yml0ID0gMDtcXG4zODU2OlxcdFxcdFxcdFxcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFxcdTAwMjZlLVxcdTAwM2VhZGFwdGVyLCBzZXRiaXQpO1xcbjM4NTc6XFx0XFx0XFx0XFx0a2ZyZWUoaW50aSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjM4LjE4MDU1MjI2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzYwNjEyNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGF0YSBGbG93IGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgczM5MGludGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIG91dHNldCwgd2hpY2ggaXMgZ29vZC4gVGhlbiwgYGludGlgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCwgYXMgd2Uga25vdywgZXNzZW50aWFsbHkgd3JhcHMgYGt6YWxsb2NgLiBBbmQgdGhhdCBtZWFucyBpdCdzIGZ1bGx5IHplcm9lZCBvdXQgZnJvbSB0aGUgZ2V0LWdvLiBUaGF0J3MgYSBzdHJvbmcgc3RhcnQgZm9yIHNhZmV0eS5cblxuTmV4dCwgYGt2bV9zMzkwX2luamVjdF92bWAgY29tZXMgaW50byBwbGF5LiBJdCBjb3BpZXMgZGF0YSBmcm9tIHRoZSBpbml0aWFsaXplZCBgczM5MGludGAgaW50byBgaW50aWAuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IHdlJ3JlIHN0YXJ0aW5nIHdpdGggYSBjbGVhbiBzbGF0ZSBpbiBgaW50aWAgYW5kIHBvcHVsYXRpbmcgaXQgd2l0aCBrbm93biwgdmFsaWQgdmFsdWVzIGZyb20gYHMzOTBpbnRgLiBUaGlzIHNldHMgdXAgYGludGlgIHdpdGggdGhlIHByb3BlciB2YWx1ZXMuXG5cbkZvbGxvd2luZyB0aGF0LCBgX19pbmplY3Rfdm1gIGNhbGxzIGBfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgaW50aSlgLiBUaGUgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGZ1bmN0aW9uIHJlYWRzIGBpbnRpLVx1MDAzZXR5cGVgIGFuZCBjYWxscyBgaW50aV90b19pcnFfcGVuZF9tYXNrKGludGkpYC4gVGhlIGNyaXRpY2FsIGNoZWNrIGlzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB3aGljaCByZWFkcyBgaW50aS1cdTAwM2Vpby5pb19pbnRfd29yZGAuXG5cbkdpdmVuIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcG9wdWxhdGlvbiBwcm9jZXNzIOKAkyBgaW50aWAgaXMgemVyb2VkLCB0aGVuIGRhdGEgaXMgY29waWVkIGZyb20gdGhlIGluaXRpYWxpemVkIGBzMzkwaW50YCDigJMgdGhlcmUgc2hvdWxkIGJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBpbiB0aGUgZW50aXJlIHByb2Nlc3MuIEV2ZXJ5dGhpbmcgaXMgYWNjb3VudGVkIGZvciwgYW5kIGFsbCByZWFkcyBhcmUgZnJvbSBpbml0aWFsaXplZCBmaWVsZHMuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdHJpcGxlLWNoZWNrLCBJJ2xsIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxscyB0byBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4gSXQncyBhbHdheXMgd2lzZSB0byBsb29rIGF0IGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMgdG8gZW5zdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTMwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDU6NDQuNTQxMTY4OTI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ1NTU3NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjAxNT1zdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ1LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA0NjppbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwNDctXFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4MC1cXHR9XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDgxOlxcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVxcdTAwM2V0eXBlLCBzMzkwaW50LVxcdTAwM2VwYXJtLCBzMzkwaW50LVxcdTAwM2VwYXJtNjQsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDgyLVxcdFxcdFxcdFxcdCAyKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgyMD1zdGF0aWMgaW50IGt2bV9zMzkwX2luamVjdF9haXJxKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzOC1cXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVxcdTAwM2VzdXBwcmVzc2libGUpIHtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mzk6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg0MC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODUyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mjg1MzpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODU0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zODA4PWludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODUwLVxcdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXFx1MDAzZXN1cHByZXNzaWJsZSkge1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzg1MTpcXHRcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODUyLVxcdFxcdGlmIChyZXQgPT0gMCkge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcwLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzg3MTpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcyLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IChmaS1cXHUwMDNlc2ltbSBcXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cXHUwMDNlaXNjKSkpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQ3LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTQ4OlxcdFxcdHIgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5NDktXFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDQ3NT1zdGF0aWMgdm9pZCBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBzdGFydF90b2tlbixcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDkzLVxcdFxcdGludGkucGFybTY0ID0gdG9rZW47XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0OTQ6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKHZjcHUtXFx1MDAzZWt2bSwgXFx1MDAyNmludGksIGludGlfbWVtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTM3OD12b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozNzk6aW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODAtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaD04MT1UUkFDRV9FVkVOVChrdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjQtXFxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmg6MTI1OlRSQUNFX0VWRU5UKGt2bV9zMzkwX2luamVjdF92bSxcXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjYtXFx0ICAgIFRQX1BST1RPKF9fdTY0IHR5cGUsIF9fdTMyIHBhcm0sIF9fdTY0IHBhcm02NCwgaW50IHdobyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjQ0LjY3NTcyOTUyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzA5NTU4NzU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEwNzc0LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNjowMS43NzEzMjA2NDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ4ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTI3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTI3OlxcdGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4yOTI4OlxcdHtcXG4yOTI5OlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4yOTMwOlxcdFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbjI5MzE6XFx0XFx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBhdHRyO1xcbjI5MzI6XFx0XFx0aW50IHI7XFxuMjkzMzpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuMjkzNDpcXHRcXG4yOTM1OlxcdFxcdHN3aXRjaCAoaW9jdGwpIHtcXG4yOTM2OlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7XFxuMjkzNzpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XFxuMjkzODpcXHRcXG4yOTM5OlxcdFxcdFxcdHIgPSAtRUlOVkFMO1xcbjI5NDA6XFx0XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbjI5NDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjk0MjpcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG4yOTQzOlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcXG4yOTQ0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI5NDU6XFx0XFx0XFx0aW50aSA9IGt6YWxsb2Nfb2JqKCppbnRpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjI5NDY6XFx0XFx0XFx0aWYgKCFpbnRpKVxcbjI5NDc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjk0ODpcXHRcXHRcXHRyID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbjI5NDk6XFx0XFx0XFx0aWYgKHIpXFxuMjk1MDpcXHRcXHRcXHRcXHRrZnJlZShpbnRpKTtcXG4yOTUxOlxcdFxcdFxcdGJyZWFrO1xcbjI5NTI6XFx0XFx0fVxcbjI5NTM6XFx0XFx0Y2FzZSBLVk1fQ1JFQVRFX0lSUUNISVA6IHtcXG4yOTU0OlxcdFxcdFxcdHIgPSAtRUlOVkFMO1xcbjI5NTU6XFx0XFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC51c2VfaXJxY2hpcClcXG4yOTU2OlxcdFxcdFxcdFxcdHIgPSAwO1xcbjI5NTc6XFx0XFx0XFx0YnJlYWs7XFxuMjk1ODpcXHRcXHR9XFxuMjk1OTpcXHRcXHRjYXNlIEtWTV9TRVRfREVWSUNFX0FUVFI6IHtcXG4yOTYwOlxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjI5NjE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhdHRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhdHRyKSkpXFxuMjk2MjpcXHRcXHRcXHRcXHRicmVhaztcXG4yOTYzOlxcdFxcdFxcdHIgPSBrdm1fczM5MF92bV9zZXRfYXR0cihrdm0sIFxcdTAwMjZhdHRyKTtcXG4yOTY0OlxcdFxcdFxcdGJyZWFrO1xcbjI5NjU6XFx0XFx0fVxcbjI5NjY6XFx0XFx0Y2FzZSBLVk1fR0VUX0RFVklDRV9BVFRSOiB7XFxuMjk2NzpcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG4yOTY4OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2YXR0ciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYXR0cikpKVxcbjI5Njk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjk3MDpcXHRcXHRcXHRyID0ga3ZtX3MzOTBfdm1fZ2V0X2F0dHIoa3ZtLCBcXHUwMDI2YXR0cik7XFxuMjk3MTpcXHRcXHRcXHRicmVhaztcXG4yOTcyOlxcdFxcdH1cXG4yOTczOlxcdFxcdGNhc2UgS1ZNX0hBU19ERVZJQ0VfQVRUUjoge1xcbjI5NzQ6XFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuMjk3NTpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmF0dHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGF0dHIpKSlcXG4yOTc2OlxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNjowMS43NzE2NzEzMjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxMzQ3NDg3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTYyNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNjoxOC45MDY0MjQ2NjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk0NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk0NjpcXHRcXHRyZXR1cm4gMDtcXG4xOTQ3OlxcdH1cXG4xOTQ4OlxcdFxcbjE5NDk6XFx0c3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2soc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbjE5NTA6XFx0e1xcbjE5NTE6XFx0XFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cXHUwMDNldHlwZSk7XFxuMTk1MjpcXHRcXG4xOTUzOlxcdFxcdHN3aXRjaCAodHlwZSkge1xcbjE5NTQ6XFx0XFx0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxcbjE5NTU6XFx0XFx0XFx0LyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi9cXG4xOTU2OlxcdFxcdFxcdHJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApO1xcbjE5NTc6XFx0XFx0Y2FzZSBLVk1fUzM5MF9JTlRfVklSVElPOlxcbjE5NTg6XFx0XFx0XFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xcbjE5NTk6XFx0XFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcXG4xOTYwOlxcdFxcdFxcdHJldHVybiBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0UpIHxcXG4xOTYxOlxcdFxcdFxcdCAgICAgICBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0VfRVYpO1xcbjE5NjI6XFx0XFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XFxuMTk2MzpcXHRcXHRcXHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcXG4xOTY0OlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XFxuMTk2NTpcXHRcXHRcXHRyZXR1cm4gQklUKGlzY190b19pcnFfdHlwZShpbnRfd29yZF90b19pc2MoaW50aS1cXHUwMDNlaW8uaW9faW50X3dvcmQpKSk7XFxuMTk2NjpcXHRcXHRkZWZhdWx0OlxcbjE5Njc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTk2ODpcXHRcXHR9XFxuMTk2OTpcXHR9XFxuMTk3MDpcXHRcXG4xOTcxOlxcdC8qXFxuMTk3MjpcXHQgKiBGaW5kIGEgZGVzdGluYXRpb24gVkNQVSBmb3IgYSBmbG9hdGluZyBpcnEgYW5kIGtpY2sgaXQuXFxuMTk3MzpcXHQgKi9cXG4xOTc0OlxcdHN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuMTk3NTpcXHR7XFxuMTk3NjpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xcbjE5Nzc6XFx0XFx0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzLCBucl90cmllcyA9IDA7XFxuMTk3ODpcXHRcXHR1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLVxcdTAwM2V0eXBlKTtcXG4xOTc5OlxcdFxcdHU2NCBpcnFfcGVuZF9tYXNrO1xcbjE5ODA6XFx0XFxuMTk4MTpcXHRcXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VvbmxpbmVfdmNwdXMpO1xcbjE5ODI6XFx0XFx0aWYgKCFvbmxpbmVfdmNwdXMpXFxuMTk4MzpcXHRcXHRcXHRyZXR1cm47XFxuMTk4NDpcXHRcXG4xOTg1OlxcdFxcdGlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2soaW50aSk7XFxuMTk4NjpcXHRcXHRmb3IgKHNpZ2NwdSA9IGt2bS1cXHUwMDNlYXJjaC5mbG9hdF9pbnQubGFzdF9zbGVlcF9jcHU7IDsgc2lnY3B1KyspIHtcXG4xOTg3OlxcdFxcdFxcdHNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7XFxuMTk4ODpcXHRcXHRcXHRkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7XFxuMTk4OTpcXHRcXHRcXHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4xOTkwOlxcdFxcdFxcdCAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSBcXHUwMDI2IGlycV9wZW5kX21hc2spXFxuMTk5MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xOTkyOlxcdFxcdFxcdC8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovXFxuMTk5MzpcXHRcXHRcXHRpZiAobnJfdHJpZXMrKyBcXHUwMDNlPSBvbmxpbmVfdmNwdXMpXFxuMTk5NDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTk5NTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA2OjE4LjkwNjc5NzE0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzY1MTgzOTA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFMzOTAgS1ZNIEludGVycnVwdCBJbmplY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNlZCBvbiByZWZpbmluZyB0aGUgaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB3aXRoaW4gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCdzIG1ha2luZyBzb21lIHByZXR0eSBzcGVjaWZpYyBjaGFuZ2VzLCBuYW1lbHkgaW50cm9kdWNpbmcgYSBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBmdW5jdGlvbiwgYW5kIG1vZGlmeWluZyBgX19mbG9hdGluZ19pcnFfa2lja2AgdG8gdXNlIGEgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aWAgaW5zdGVhZCBvZiBqdXN0IGEgYHU2NCB0eXBlYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBpbnRlcnJ1cHQgZGVsaXZlcnkgcGF0aC4gSXQgc2VlbXMgbGlrZSBhIG5ldyBoZWxwZXIsIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgIGhhcyBiZWVuIGludHJvZHVjZWQsIHdoaWNoIHJlYWRzIHRoZSBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gZnJvbSB0aGUgYGludGktXHUwMDNldHlwZWAgYW5kIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCBmaWVsZHMuXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGhlcmUgaXMgaG93IHRoaXMgYGludGlgIHN0cnVjdCBpcyBhbGxvY2F0ZWQuIEl0J3MgaGFwcGVuaW5nIGluIGEgZmV3IHBsYWNlczogYGt2bV9hcmNoX3ZtX2lvY3RsYCB1c2luZyBga3phbGxvY19vYmpgLCBga3ZtX3MzOTBfaW5qZWN0X2FpcnFgIGFsc28gd2l0aCBga3phbGxvY19vYmpgLCBhbmQgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIHVzaW5nIGBremFsbG9jX29iamAuIE15IGZpcnN0IHRob3VnaHQgaXMgXCJ3YWl0LCB3aGF0J3MgYGt6YWxsb2Nfb2JqYD9cIi4gVGhpcyBzY3JlYW1zIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYSBzdWJ0bGUgYnVnLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJIHF1aWNrbHkgcmVhbGl6ZWQgYGt6YWxsb2Nfb2JqYCBpcyBsaWtlbHkgYSB3cmFwcGVyIGFyb3VuZCBga3phbGxvY2AsIGFuZCB0aGF0IG1lYW5zIHRoZSBtZW1vcnkgKmlzKiB6ZXJvZWQuIFRoYXQncyBnb29kLCBidXQgSSBzdGlsbCB3YW50IHRvIGJlIHN1cmUuIEl0J3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIG1hY3JvLiBMZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgY2VydGFpbi5cblxuT2theSwgSSd2ZSBjaGVja2VkIGFuZCBjb25maXJtZWQgYGt6YWxsb2NgIHplcm9lcyB0aGUgbWVtb3J5LiBTbywgdGhhdCdzIG5vdCB0aGUgd29ycnkuIFRoZSBvdGhlciBwb3RlbnRpYWwgaXNzdWUgaXMsIGlzIHRoaXMgYGludGlgIHN0cnVjdHVyZSBwb3B1bGF0ZWQgZnJvbSB1c2VyIHNwYWNlPyBJZiBzbywgd2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gYXZvaWQgZXhwb3Npbmcga2VybmVsIG1lbW9yeSwgb3Igd29yc2UsIGhhdmUgaXQgcmVhZCB1bmluaXRpYWxpemVkLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBpbiBga3ZtX2FyY2hfdm1faW9jdGxgLCB0aGVyZSdzIGEgYmxvY2sgaGFuZGxpbmcgYEtWTV9TMzkwX0lOVEVSUlVQVGAuIEl0IGNvcGllcyBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YCBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV91c2VyYCBpbnRvIGEgbG9jYWwgc3RydWN0dXJlIGNhbGxlZCBgczM5MGludGAuIFRoZW4sIGl0IGFsbG9jYXRlcyBgaW50aWAgd2l0aCBga3phbGxvY19vYmpgLCBhbmQgY2FsbHMgYGt2bV9zMzkwX2luamVjdF92bWAgdG8gZnVydGhlciBwcm9jZXNzIGl0LiBJIG5vdyBzZWUgdGhlIGZpZWxkcyBvZiBgczM5MGludGAgYXJlIGNvcGllZCBpbnRvIGBpbnRpYCBpbiB0aGF0IGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGBpbnRpLVx1MDAzZXR5cGVgIHRha2VzIHRoZSB2YWx1ZSBvZiBgczM5MGludC1cdTAwM2V0eXBlYC4gRm9yIGludGVycnVwdCB0eXBlIGBLVk1fUzM5MF9JTlRfSU9fTUlOYCB0byBgS1ZNX1MzOTBfSU5UX0lPX01BWGAsIHRoZSBgczM5MGludGAncyBwYXJhbWV0ZXJzIGFyZSBtYXBwZWQgaW50byBgaW50aS1cdTAwM2Vpb2AgZmllbGRzLlxuXG5TbywgYHMzOTBpbnRgIGlzIGRpcmVjdGx5IHBvcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhlcmUgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICphZnRlciogdGhhdCBjb3B5PyBObywgYmVjYXVzZSBgczM5MGludGAgaXMgY29tcGxldGVseSBpbml0aWFsaXplZCBieSB0aGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsLCBhbmQgdGhlbiBgaW50aWAgaXMgemVyb2VkIGJ5IHRoZSBga3phbGxvY19vYmpgIGFsbG9jYXRpb24uXG5cbkFscmlnaHQsIHRoZSBjb2RlIGxvb2tzIHNhZmUgaW4gdGhpcyByZWdhcmQuIFRoZSB1c2VyLXByb3ZpZGVkIGRhdGEgaXMgY29waWVkIGludG8gdGhlIGxvY2FsIHN0cnVjdCwgdGhlIG5ldyBzdHJ1Y3QgYGludGlgIGlzIHplcm9lZCwgYW5kIHRoZW4gaW5pdGlhbGl6ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBhbmQgemVyb2VkIGRhdGEuIEknbSBzYXRpc2ZpZWQgZm9yIG5vdywgYnV0IEkgc3RpbGwgd2FudCB0byBjaGVjayB0aGUgYGt6YWxsb2Nfb2JqYCBkZWZpbml0aW9uIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTQ4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDY6NDYuNTU4NjQxMjQ0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzg1NzI3MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc5MTY0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0PTEwMz1saXN0Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMTU6ICAgICAgICAgIGdyb2NrID0ga3phbGxvY19vYmooKmdyb2NrKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNi0gICAgICAgICAgaWYgKCFncm9jaylcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI1LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTI2OiAgICAgICAgICBkaW1pdHJpID0ga3phbGxvY19vYmooKmRpbWl0cmkpO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q9NDU9YSBtZXNzYWdlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBBUEkgYW5kIHJldHVybiBpbW1lZGlhdGVseSkuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtODktXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkwOlxcdFxcdGRjX3N5bmMgPSBremFsbG9jX29iaigqZGNfc3luYyk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkxOlxcdFxcdGRjX2FzeW5jID0ga3phbGxvY19vYmooKmRjX2FzeW5jKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtOTItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q9MjY9RXhhbXBsZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q6NDU6XFx0XFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00Ni1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NjQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGEgemVyb2VkIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTY4OlxcdHAgPSBremFsbG9jX29ianMoKnAsIG4sIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAwLVxcdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XFx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMi1cXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDM6XFx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVxcdHB0ciA9IGttYWxsb2NfZmxleCgqcHRyLCBmbGV4X21lbWJlciwgY291bnQgWywgZ2ZwXSApO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjY4LSAgICAgICAgICAgICAgLyogYWxsb2NhdGUgYSBjaGlwLXNwZWNpZmljIGRhdGEgd2l0aCB6ZXJvIGZpbGxlZCAqL1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNzAtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMwLSAgLi4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzQ5LVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NTEtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKSB7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM1LSAgICAgICAgICAuLi4uXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzctICAgICAgICAgIC4uLi5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAxLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDMtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz02ND1tb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZjY0X0VoZHIgKmhkciwgRWxmNjRfU2hkciAqc2VjaGRycyxcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVxcdG5zeW1zID0gc3ltdGFiLVxcdTAwM2VzaF9zaXplIC8gc2l6ZW9mKEVsZjY0X1N5bSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XFx0Y2hhaW5zID0ga3phbGxvY19vYmpzKHN0cnVjdCBnb3RfZW50cnksIG5zeW1zKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05Ny1cXHRpZiAoIWNoYWlucykge1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYz0zOTA9cmVnaXN0ZXJfY3B1cyh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTQtXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcXHRcXHRzdHJ1Y3QgY3B1ICpwID0ga3phbGxvY19vYmooKnApO1xcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVxcdFxcdGlmICghcClcXG4tLVxcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYz0xMTIwPXN0YXRpYyBpbnQgaml0X3ByZXBhcmVfZmluYWxfbWVtX2FsbG9jKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxcbi0tXFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXFx0aWYgKGN0eC1cXHUwMDNlbmVlZF9leHRyYV9wYXNzKSB7XFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XFx0XFx0Y3R4LVxcdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXFx1MDAzZWppdF9kYXRhKTtcXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMy1cXHRcXHRpZiAoIWN0eC1cXHUwMDNlaml0X2RhdGEpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MjIwPWxvY29tb19pbml0X29uZV9jaGlsZChzdHJ1Y3QgbG9jb21vICpsY2hpcCwgc3RydWN0IGxvY29tb19kZXZfaW5mbyAqaW5mbylcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjIyNTpcXHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cXHRpZiAoIWRldikge1xcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzYyLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XFx0bGNoaXAgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vKTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzY0LVxcdGlmICghbGNoaXApXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM9NzMzPXNhMTExMV9pbml0X29uZV9jaGlsZChzdHJ1Y3Qgc2ExMTExICpzYWNoaXAsIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LFxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTczOS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM6NzQwOlxcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzQxLVxcdGlmICghZGV2KSB7XFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYz0xNzg9c3RhdGljIGludCBzY29vcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jOjE4ODpcXHRkZXZwdHIgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2Nvb3BfZGV2KTtcXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXFx0aWYgKCFkZXZwdHIpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEwLVxcdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYzoxMTE6XFx0XFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XFxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMi1cXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODEtXFx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM6MTgyOlxcdHZkc29fdGV4dF9wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB0ZXh0X3BhZ2VzKTtcXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cXHRpZiAodmRzb190ZXh0X3BhZ2VsaXN0ID09IE5VTEwpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2NC1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcXHRyZXMgPSBremFsbG9jX29ianMoc3RydWN0IHJlc291cmNlLCAyKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2Ni1cXHRpZiAoIXJlcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYz02OT1zdGF0aWMgaW50IF9faW5pdCBlYnNhMjg1X2xlZHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04Ni1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jOjg3OlxcdFxcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODgtXFx0XFx0aWYgKCFsZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MjktXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcXHRcXHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVxcdFxcdGlmICghbGVkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jPTQ3Mz1zdGF0aWMgaW50IGlteF9tbWRjX3BlcmZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB2b2lkIF9faW9tZW0gKm1tZGNfYmFzZSxcXG4tLVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jOjQ4MDpcXHRwbXVfbW1kYyA9IGt6YWxsb2Nfb2JqKCpwbXVfbW1kYyk7XFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cXHRpZiAoIXBtdV9tbWRjKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMjktXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcXHRcXHRuZXdfY29tcGF0ID0ga3phbGxvY19vYmooKm5ld19jb21wYXQpO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jPTE2Mz1zdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3NV8zODBfY29oZXJlbmN5X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg3LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM6MTg4OlxcdFxcdHAgPSBremFsbG9jX29iaigqcCk7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODktXFx0XFx0cC1cXHUwMDNlbmFtZSA9IGtzdHJkdXAoXFxcImFybSxpby1jb2hlcmVudFxcXCIsIEdGUF9LRVJORUwpO1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTYtXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTgtXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jPTM4MD1zdGF0aWMgdm9pZCBfX2luaXQgbXhzX21hY2hpbmVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zODktXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYzozOTA6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zOTEtXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jPTI5ND1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9zeXN0ZW1fZG1hX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM6MzIyOlxcdGQgPSBremFsbG9jX29iaigqZCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXFx0aWYgKCFkKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5Ni1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3OlxcdG9tYXBfbWNic3BfZGV2aWNlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHNpemUpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTgtXFx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYz01MT1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9kbV90aW1lcl9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI3LVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYzoxMjg6XFx0XFx0cGRhdGEgPSBremFsbG9jX29iaigqcGRhdGEpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjktXFx0XFx0aWYgKCFwZGF0YSkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjM5LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjQxLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM9Nzg2PXZvaWQgX19pbml0IG9tYXBfc29jX2RldmljZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkwLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYzo3OTE6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5Mi1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYz0xMzE9c3RhdGljIGludCBvbWFwX2RldmljZV9idWlsZF9mcm9tX2R0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYzoxNTk6XFx0aHdtb2RzID0ga3phbGxvY19vYmpzKHN0cnVjdCBvbWFwX2h3bW9kICosIG9oX2NudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cXHRpZiAoIWh3bW9kcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5NC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1OlxcdHN5c2MgPSBremFsbG9jX29iaigqc3lzYyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5Ni1cXHRpZiAoIXN5c2MpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI0LVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZvaC1cXHUwMDNlc2xhdmVfcG9ydHMpKSB7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcXHRcXHRvaSA9IGt6YWxsb2Nfb2JqKCpvaSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cXHRcXHRpZiAoIW9pKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzUxMz1pbnQgb21hcF9od21vZF9pbml0X21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVxcdGlmICghb2gpIHtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTI4OlxcdFxcdG9oID0ga3phbGxvY19vYmooKm9oKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI5LVxcdFxcdGlmICghb2gpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mzk6XFx0XFx0b2gtXFx1MDAzZWNsYXNzID0ga3phbGxvY19vYmooKm9oLVxcdTAwM2VjbGFzcyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cXHRcXHRpZiAoIW9oLVxcdTAwM2VjbGFzcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jPTM3OT1zdGF0aWMgaW50IF9faW5pdCBhbXgzX2lkbGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlLCBpbnQgY3B1KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxMi1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM6NDEzOlxcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTQtXFx0aWYgKCFpZGxlX3N0YXRlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM9MzA9c3RhdGljIHZvaWQgX19pbml0IHNyX3NldF9udmFsdWVzKHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jOjQyOlxcdG52YWx1ZV90YWJsZSA9IGt6YWxsb2Nfb2JqcygqbnZhbHVlX3RhYmxlLCBjb3VudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cXHRpZiAoIW52YWx1ZV90YWJsZSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTcxLVxcdCAqL1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzoxNzI6XFx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVxcdGlmICghcmVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5Mi1cXHQgKi9cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6NDkzOlxcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cXHRpZiAoIXJlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcXG4tLVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk0LVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1OlxcdGVjID0ga3phbGxvY19vYmooZWNhcmRfdCk7XFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTYtXFx0aWYgKCFlYykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYz05Mz1pbnQgX19pbml0IHNhMTF4eF9jbGtfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMDktXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMTA6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTExLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjEzMjpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzMtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYz0zMTc9aW50IF9faW5pdCBzYTExeDBfcmVnaXN0ZXJfZml4ZWRfcmVndWxhdG9yKGludCBuLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM6MzI0OlxcdGNmZy1cXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVxcdTAwM2Vpbml0X2RhdGEpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjUtXFx0aWYgKCFjZmctXFx1MDAzZWluaXRfZGF0YSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yNzgtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XFx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI4MC1cXHRpZiAoIWQpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jPTE0MT1zdGF0aWMgaW50IF9faW5pdCByY2FyX2dlbjJfcmVndWxhdG9yX3F1aXJrKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjYtXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM6MTY3OlxcdFxcdHF1aXJrID0ga3phbGxvY19vYmooKnF1aXJrKTtcXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjgtXFx0XFx0aWYgKCFxdWlyaykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3RlcilcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5Ny1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XFx0b3BwcyA9IGt6YWxsb2Nfb2Jqcygqb3BwcywgTUFYX09QUFMpO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5OS1cXHRpZiAoIW9wcHMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz00NDI9aW50IF9faW5pdCB2ZV9zcGNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2VhZGRyLCB1MzIgYTE1X2NsdXNpZCwgaW50IGlycSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0NC1cXHRpbnQgcmV0O1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcXHRpbmZvID0ga3phbGxvY19vYmooKmluZm8pO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0Ni1cXHRpZiAoIWluZm8pXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz01MjM9c3RhdGljIHN0cnVjdCBjbGsgKnZlX3NwY19jbGtfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqY3B1X2RldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyNy1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo1Mjg6XFx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI5LVxcdGlmICghc3BjKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM9MTIzPXN0YXRpYyB2b2lkIF9faW5pdCB2ZXJzYXRpbGVfZHRfcGNpX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYzoxNDU6XFx0bmV3cHJvcCA9IGt6YWxsb2Nfb2JqKCpuZXdwcm9wKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXFx0aWYgKCFuZXdwcm9wKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTAtXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEyLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYz01MDM9c3RhdGljIF9faW5pdCBpbnQgbDJ4MF9wbXVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MDktXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYzo1MTA6XFx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTExLVxcdGlmICghbDJ4MF9wbXUpIHtcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM9MzE1PXN0YXRpYyBpbnQgX19pbml0IF9fdW5pcGhpZXJfY2FjaGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYzozNDU6XFx0ZGF0YSA9IGt6YWxsb2Nfb2JqKCpkYXRhKTtcXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cXHRpZiAoIWRhdGEpXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjAtXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XFx0YnVmID0ga3phbGxvY19vYmooKmJ1ZixcXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2Mi1cXHRcXHRcXHQgIGdmcCBcXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTE0ODc9YXJtX2lvbW11X2NyZWF0ZV9tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBiYXNlLCB1NjQgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwNi1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjE1MDc6XFx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA4LVxcdGlmICghbWFwcGluZylcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYz0zMTY9aW50IF9faW5pdCBhcmNoX3hlbl91bnBvcHVsYXRlZF9pbml0KHN0cnVjdCByZXNvdXJjZSAqKnJlcylcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM0NDpcXHRyZWdzID0ga3phbGxvY19vYmpzKCpyZWdzLCBucl9yZWcpO1xcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXFx0aWYgKCFyZWdzKSB7XFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozODg6XFx0XFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg5LVxcdFxcdGlmICghdG1wX3Jlcykge1xcbi0tXFxuYXJjaC9hcm0veGVuL3AybS5jPTE1MD1ib29sIF9fc2V0X3BoeXNfdG9fbWFjaGluZV9tdWx0aSh1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbmFyY2gvYXJtL3hlbi9wMm0uYy0xNzgtXFxuYXJjaC9hcm0veGVuL3AybS5jOjE3OTpcXHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcXG5hcmNoL2FybS94ZW4vcDJtLmMtMTgwLVxcdGlmICghcDJtX2VudHJ5KVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jPTY4PXN0YXRpYyBpbnQgX19pbml0IF9fdmRzb19pbml0KGVudW0gdmRzb19hYmkgYWJpKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYzo4NDpcXHR2ZHNvX3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mb1thYmldLnZkc29fcGFnZXMpO1xcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cXHRpZiAodmRzb19wYWdlbGlzdCA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtNDkyLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcXHR0aGlzID0ga3phbGxvY19vYmooKnRoaXMpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5NC1cXHRpZiAoIXRoaXMpIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTk4MT1pbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDctXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTAwODpcXHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDktXFx0aWYgKCFwZ3QpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMTgwPWludCB0b3B1cF9oeXBfbWVtY2FjaGUoc3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgKm1jLCB1bnNpZ25lZCBsb25nIG1pbl9wYWdlcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXFx0aWYgKCFtYy1cXHUwMDNlbWFwcGluZykge1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XFx0XFx0bWMtXFx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODctXFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjUxMD1pbnQgX19pbml0IGt2bV9tbXVfaW5pdCh1MzIgaHlwX3ZhX2JpdHMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQzLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI1NDQ6XFx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDUtXFx0aWYgKCFoeXBfcGd0YWJsZSkge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTMyOD1pbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cXHRpZiAoIXZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGIpIHtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0OlxcdFxcdHN0cnVjdCB2bmNyX3RsYiAqdnQgPSBremFsbG9jX29iaigqdmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYixcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzM1LVxcdFxcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwMi1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlxcdGt2bS1cXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MgPSBremFsbG9jX29iaigqKGt2bS1cXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDQtXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM9MTE2PXN0YXRpYyBzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSAqa3ZtX3B0ZHVtcF9wYXJzZXJfY3JlYXRlKHN0cnVjdCBrdm1fczJfbW11ICptbXUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjEtXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM6MTIyOlxcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIzLVxcdGlmICghc3QpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTIwNz1zdGF0aWMgaW50IGt2bV92Z2ljX2Rpc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucl9zcGlzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXFx0ZGlzdC1cXHUwMDNlYWN0aXZlX3NwaXMgPSAoYXRvbWljX3QpQVRPTUlDX0lOSVQoMCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XFx0ZGlzdC1cXHUwMDNlc3BpcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsIG5yX3NwaXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXFx0aWYgKCFkaXN0LVxcdTAwM2VzcGlzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0zMTY9c3RhdGljIGludCB2Z2ljX2FsbG9jYXRlX3ByaXZhdGVfaXJxc19sb2NrZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MzMyOlxcdHZnaWNfY3B1LVxcdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMzLVxcdFxcdFxcdFxcdFxcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYz0xNDI9aW50IGt2bV92Z2ljX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTQ4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jOjE0OTpcXHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNTAtXFx0aWYgKCFlbnRyaWVzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTc2PXN0YXRpYyBzdHJ1Y3QgdmdpY19pcnEgKnZnaWNfYWRkX2xwaShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbnRpZCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6ODg6XFx0aXJxID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXJxLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cXHRpZiAoIWlycSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3Ni1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3OlxcdGNvbGxlY3Rpb24gPSBremFsbG9jX29iaigqY29sbGVjdGlvbiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTc4LVxcdGlmICghY29sbGVjdGlvbilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMDE1PXN0YXRpYyBzdHJ1Y3QgaXRzX2l0ZSAqdmdpY19pdHNfYWxsb2NfaXRlKHN0cnVjdCBpdHNfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAyMC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTAyMTpcXHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIyLVxcdGlmICghaXRlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTExNDI9c3RhdGljIHN0cnVjdCBpdHNfZGV2aWNlICp2Z2ljX2l0c19hbGxvY19kZXZpY2Uoc3RydWN0IHZnaWNfaXRzICppdHMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTE0ODpcXHRkZXZpY2UgPSBremFsbG9jX29iaigqZGV2aWNlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVxcdGlmICghZGV2aWNlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg2Mi1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcXHRpdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjQtXFx0aWYgKCFpdHMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTg4Nj1zdGF0aWMgaW50IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHVpbnQzMl90IGluZGV4LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzEtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYzo5MzI6XFx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzMtXFx0aWYgKCFyZHJlZylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jPTI0Mj1pbnQgdmdpY192NF9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYzoyNTk6XFx0ZGlzdC1cXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXFx1MDAzZWl0c192bS52cGVzLCBucl92Y3B1cyxcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNjAtXFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDgwPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTAxLVxcdGlmICghaml0X2RhdGEpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMTAyOlxcdFxcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTAzLVxcdFxcdGlmICghaml0X2RhdGEpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYz0xNz1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTIyLVxcdHZkc29fcGFnZWxpc3QgPVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlxcdFxcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX3BhZ2VzKTtcXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cXHRpZiAodW5saWtlbHkodmRzb19wYWdlbGlzdCA9PSBOVUxMKSkge1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzItXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlxcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlLCBHRlBfQVRPTUlDKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzQtXFx0aWYgKCFyYW5nZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM9NDU9c3RhdGljIGludCBfX2luaXQgaW5pdF92ZHNvKHZvaWQpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU1LVxcdHZkc29faW5mby5jb2RlX21hcHBpbmcucGFnZXMgPVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XFx0XFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mby5zaXplIC8gUEFHRV9TSVpFKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTYxND1zdGF0aWMgaW50IGt2bV9laW9pbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjQtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjYyNTpcXHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI2LVxcdGlmICghcylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jPTM5ND1zdGF0aWMgaW50IGt2bV9pcGlfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jOjQxMjpcXHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9pcGkpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cXHRpZiAoIXMpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA2OjUwLjM0NDM3Njg0MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzYxMjU1MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBga3phbGxvY19vYmpgIG1hY3JvIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0J3MgcHJvYmFibHkganVzdCBhIHdyYXBwZXIgYXJvdW5kIGBremFsbG9jYCwgbGlrZWx5IGRlZmluZWQgc29tZXdoZXJlIGluIGEgYHNsYWIuaGAgaGVhZGVyLCBvciBtYXliZSBzb21ldGhpbmcgc2ltaWxhciBpbiB0aGlzIHByb2plY3QncyBpbmNsdWRlcy4gQWgsIHllcywgaXQncyBga3phbGxvY19vYmooKmludGksIEdGUF9LRVJORUxfQUNDT1VOVClgLiBIbW0sIHRoYXQgYEdGUF9LRVJORUxfQUNDT1VOVGAgbG9va3Mgc3RhbmRhcmQgZW5vdWdoLCBidXQgYGt6YWxsb2Nfb2JqYC4uLiBpcyB0aGF0IGEgY3VzdG9tIG1hY3JvPyBNYXliZSBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBzeXprYWxsZXIgc2V0dXAgb3IgYSBtb3JlIHJlY2VudCBrZXJuZWwgYWRkaXRpb24/XG5cblJpZ2h0LCBhZnRlciBhIHF1aWNrIGNoZWNrLCBpdCdzIGNsZWFyOiBga3phbGxvY19vYmpgICppcyoganVzdCBhIG1hY3JvLCBlZmZlY3RpdmVseSBkb2luZyBga3phbGxvYyhzaXplb2YoKmludGkpLCBHRlBfS0VSTkVMX0FDQ09VTlQpYC4gU28sIGNsYXNzaWMgYGt6YWxsb2NgIGJlaGF2aW9y4oCUdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgemVyb2VkIG91dC4gVGhhdCBtZWFucyBgaW50aWAgaXMgZ3VhcmFudGVlZCB0byBzdGFydCBhcyBhbGwgemVyb3MuXG5cbk5vdywgdGhlIGNvZGUgdGhlbiBwcm9jZWVkcyB0byBjb3B5IGRhdGEgZnJvbSBgczM5MGludGAgaW50byBgaW50aWAgdXNpbmcgYGt2bV9zMzkwX2luamVjdF92bWAuIFRoaXMgYHMzOTBpbnRgIGlzIHBvcHVsYXRlZCBlYXJsaWVyIHdpdGggYGNvcHlfZnJvbV91c2VyYCBpbiBga3ZtX2FyY2hfdm1faW9jdGxgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHk6IHdoYXQgaWYgYHMzOTBpbnRgIGhhcyBwYWRkaW5nPyBFdmVuIHRob3VnaCBgaW50aWAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgdGhlIGBjb3B5X2Zyb21fdXNlcmAgbWlnaHQgb3ZlcndyaXRlIHNvbWUgb2YgdGhhdCB6ZXJvZWQgcGFkZGluZyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHVzZXIgc3BhY2UuXG5cbk9rYXksIHRpbWUgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRgLiBJJ2xsIGZpbmQgaXQgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9rdm0uaGAgb3IsIGdpdmVuIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgbWF5YmUgYGFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oYC4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgc3RydWN0dXJlIGFuZCBhbnkgcG90ZW50aWFsIHBhZGRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjY4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA2OjU5LjcwNTYzNjUxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1NTUxNTI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9MzI2Nj1JbnRlcnJ1cHQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHZpYSBrdm1fczM5MF9pbnRlcnJ1cHQ6OlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC0zMjY3LVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDozMjY4OiAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCB7XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTMyNjktXFx0X191MzIgdHlwZTtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTk2PXN0cnVjdCBrdm1fczM5MF9wc3cge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtMTI1LVxcbmFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjEyNjpzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHtcXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC0xMjctXFx0X191MzIgdHlwZTtcXG4tLVxcbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTk2PXN0cnVjdCBrdm1fczM5MF9wc3cge1xcbi0tXFxudG9vbHMvYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtMTI1LVxcbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjEyNjpzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHtcXG50b29scy9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC0xMjctXFx0X191MzIgdHlwZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDc6MDIuNDYxMTU3Nzg3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjkwOTk2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoyNzM3NCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDc6MDguNTkwMjczMDY3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjY6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCB7XFxuIDEyNzpcXHRcXHRfX3UzMiB0eXBlO1xcbiAxMjg6XFx0XFx0X191MzIgcGFybTtcXG4gMTI5OlxcdFxcdF9fdTY0IHBhcm02NDtcXG4gMTMwOlxcdH07XFxuIDEzMTpcXHRcXG4gMTMyOlxcdHN0cnVjdCBrdm1fczM5MF9pb19pbmZvIHtcXG4gMTMzOlxcdFxcdF9fdTE2IHN1YmNoYW5uZWxfaWQ7XFxuIDEzNDpcXHRcXHRfX3UxNiBzdWJjaGFubmVsX25yO1xcbiAxMzU6XFx0XFx0X191MzIgaW9faW50X3Bhcm07XFxuIDEzNjpcXHRcXHRfX3UzMiBpb19pbnRfd29yZDtcXG4gMTM3OlxcdH07XFxuIDEzODpcXHRcXG4gMTM5OlxcdHN0cnVjdCBrdm1fczM5MF9leHRfaW5mbyB7XFxuIDE0MDpcXHRcXHRfX3UzMiBleHRfcGFyYW1zO1xcbiAxNDE6XFx0XFx0X191MzIgcGFkO1xcbiAxNDI6XFx0XFx0X191NjQgZXh0X3BhcmFtczI7XFxuIDE0MzpcXHR9O1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNzowOC41OTAzOTMzNjdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkwMTkwODQ5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoyNTQyOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNzoyNy42MDk0ODE3MjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTk3MjQ1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0yMTE9ZW51bSBpcnFfdHlwZXMge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjk2LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjI5NzpzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8ge1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTI5OC1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjMwLjIwOTIxMjI5NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTgyMjYzNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6Mjc4NzYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjM2LjE5MTQ3ODYxOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyOTcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTc6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvIHtcXG4gMjk4OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gMjk5OlxcdFxcdHU2NFxcdHR5cGU7XFxuIDMwMDpcXHRcXHR1bmlvbiB7XFxuIDMwMTpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW9faW5mbyBpbztcXG4gMzAyOlxcdFxcdFxcdHN0cnVjdCBrdm1fczM5MF9leHRfaW5mbyBleHQ7XFxuIDMwMzpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gcGdtO1xcbiAzMDQ6XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX2VtZXJnX2luZm8gZW1lcmc7XFxuIDMwNTpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfZXh0Y2FsbF9pbmZvIGV4dGNhbGw7XFxuIDMwNjpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfcHJlZml4X2luZm8gcHJlZml4O1xcbiAzMDc6XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX3N0b3BfaW5mbyBzdG9wO1xcbiAzMDg6XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX21jaGtfaW5mbyBtY2hrO1xcbiAzMDk6XFx0XFx0fTtcXG4gMzEwOlxcdH07XFxuIDMxMTpcXHRcXG4gMzEyOlxcdHN0cnVjdCBrdm1fczM5MF9pcnFfcGF5bG9hZCB7XFxuIDMxMzpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW9faW5mbyBpbztcXG4gMzE0OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9leHRfaW5mbyBleHQ7XFxuIDMxNTpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gcGdtO1xcbiAzMTY6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2VtZXJnX2luZm8gZW1lcmc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjM2LjE5MTU2NzgyOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjI4NDk3NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUga3ZtX3MzOTBfaW50ZXJydXB0IFN0cnVjdHVyZSBhbmQgSXRzIFVzYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGB0eXBlYCwgYHBhcm1gLCBhbmQgYHBhcm02NGAuIEl0J3MgYSAxNi1ieXRlIHN0cnVjdHVyZSBhbmQsIGltcG9ydGFudGx5LCBpdCdzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAgd2l0aG91dCBhbnkgaW50ZXJuYWwgcGFkZGluZyBpc3N1ZXMuIFdlIGFsbG9jYXRlIGBpbnRpYCB1c2luZyBga3phbGxvY19vYmpgLCBzbyB3ZSBzdGFydCB3aXRoIGEgemVyb2VkLW91dCBibG9jayBvZiBtZW1vcnkuIFRoZW4sIHRoZSBmaWVsZHMgYXJlIHBvcHVsYXRlZC4gVGhlIGZ1bmN0aW9uIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBpcyB0aGVuIGNhbGxlZC5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHJlYWRzIGBpbnRpLVx1MDAzZXR5cGVgIGFuZCBgaW50aS1cdTAwM2Vpby5pb19pbnRfd29yZGAuIFNpbmNlIGBpbnRpYCBpcyB6ZXJvZWQgb3V0IGluaXRpYWxseSwgYW5kIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCBpcyBkZXJpdmVkIGZyb20gYHMzOTBpbnQtXHUwMDNlcGFybTY0YCwgd2hpY2ggd2UndmUgZXN0YWJsaXNoZWQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlLCBldmVuIHRob3VnaCB3ZSBhcmUgbG9va2luZyBhdCBzb21ldGhpbmcgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay5cblxuSG93ZXZlciwgdGhlIGNhdGNoIGlzIHRoYXQgYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgIGlzICpvbmx5KiByZWFkIGlmIGBpbnRpLVx1MDAzZXR5cGVgIGZhbGxzIHdpdGhpbiB0aGUgYEtWTV9TMzkwX0lOVF9JT19NSU5gIHRvIGBLVk1fUzM5MF9JTlRfSU9fTUFYYCByYW5nZS4gTG9va2luZyBiYWNrIGF0IGBrdm1fczM5MF9pbmplY3Rfdm1gLCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gSU8gaW50ZXJydXB0IChmYWxsaW5nIHdpdGhpbiB0aGF0IHR5cGUgcmFuZ2UpLCBgaW50aS1cdTAwM2Vpby5pb19pbnRfd29yZGAgaXMgZXhwbGljaXRseSBzZXQgdG8gYHMzOTBpbnQtXHUwMDNlcGFybTY0IFx1MDAyNiAweGZmZmZmZmZmYC4gU28sIGl0J3MgKmRlZmluaXRlbHkqIGluaXRpYWxpemVkIGluIHRoYXQgc2NlbmFyaW8uXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhvc2UgcGxhY2VzLCB0aGVyZSBhcmUgbm8gb3RoZXIgY2FsbCBzaXRlcywgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBfX2luamVjdF92bWAuIE9rYXksIHNvIGBfX2luamVjdF92bWAgaXMgY2FsbGVkIGZyb20gYm90aCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCAqYW5kKiBga3ZtX3MzOTBfcmVpbmplY3RfaW9faW50YC4gSSdsbCB0YWtlIGEgbG9vayBhdCBga3ZtX3MzOTBfcmVpbmplY3RfaW9faW50YCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgaXNzdWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjQyLjgyMDA2OTA4MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1OTI5NjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9yZWluamVjdF9pb19pbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTc3Nz1zdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmt2bV9zMzkwX2dldF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODA2LVxcdFxcdGlmIChpbnRpKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTgwNzpcXHRcXHRcXHRrdm1fczM5MF9yZWluamVjdF9pb19pbnQoa3ZtLCBpbnRpKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE4MDgtXFx0XFx0aW50aSA9IHRtcF9pbnRpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDQ2PWludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDg4LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4OTppbnQga3ZtX3MzOTBfcmVpbmplY3RfaW9faW50KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwOTAtXFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTQwMz1zdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmt2bV9zMzkwX2dldF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00MDQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHU2NCBpc2NfbWFzaywgdTMyIHNjaGlkKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NDA1OmludCBrdm1fczM5MF9yZWluamVjdF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00MDYtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NDQyPXN0YXRpYyBpbnQgaGFuZGxlX3RwaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy00OTktXFx0ICovXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NTAwOlxcdGlmIChrdm1fczM5MF9yZWluamVjdF9pb19pbnQodmNwdS1cXHUwMDNla3ZtLCBpbnRpKSkge1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTUwMS1cXHRcXHRrZnJlZShpbnRpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDc6NDUuMDc5MzcyMzM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Nzk4MTc1MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMgaW4gS1ZNL3MzOTAgSW50ZXJydXB0IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHdhcyBpbml0aWFsbHkgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgS1ZNL3MzOTAgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBmbG9hdGluZyBpbnRlcnJ1cHRzLiBJIHN0YXJ0ZWQgYnkgdHJhY2luZyB0aGUgcGF0aCBvZiBgaW50aWAgKHRoZSBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gc3RydWN0dXJlKSB0aHJvdWdoIHRoZSBjb2RlLlxuXG5UaGUgZmlyc3QgcG9pbnQgb2YgaW50ZXJlc3Qgd2FzIGBrdm1fczM5MF9yZWluamVjdF9pb19pbnRgLiBUaGUgYGludGlgIHBhcmFtZXRlciBoZXJlIGNvbWVzIGZyb20gYGhhbmRsZV90cGlgLCBhbmQgYGhhbmRsZV90cGlgIGdldHMgaXQgZnJvbSBga3ZtX3MzOTBfZ2V0X2lvX2ludGAuIFRoaXMgZnVuY3Rpb24gZGVxdWV1ZXMgYW4gZXhpc3RpbmcgYGludGlgIGZyb20gdGhlIGZsb2F0aW5nIGludGVycnVwdCBsaXN0LiBTaW5jZSBpdCdzIGFscmVhZHkgb24gdGhlIGxpc3QsIGl0IG1lYW5zIGl0IG11c3QgaGF2ZSBiZWVuICppbml0aWFsaXplZCogd2hlbiBpdCB3YXMgaW5qZWN0ZWQgb250byB0aGUgbGlzdC4gVGhhdCBlbGltaW5hdGVzIGEgZGlyZWN0IHVuaW5pdGlhbGl6ZWQgcmVhZCB0aGVyZS5cblxuTmV4dCwgSSBsb29rZWQgYXQgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AuIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBvbmxpbmUgdkNQVXMgYW5kIHRyaWVzIHRvIHdha2Ugb25lIHVwIHRvIGhhbmRsZSBhIHBlbmRpbmcgaW50ZXJydXB0LiBJdCB1c2VzIGBrdm0tXHUwMDNlYXJjaC5pZGxlX21hc2tgLCB3aGljaCBpcyBhbiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBhbmQgaW5kZXhlZCBieSB0aGUgbnVtYmVyIG9mIG9ubGluZSB2Y3B1cy4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBoZXJlIGFyZSBgZmluZF9maXJzdF9iaXRgIGFuZCBgZmluZF9uZXh0X2JpdGAgd2hpY2ggcmVhZHMgdGhlIGJpdHMgZnJvbSBga3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrYC4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB3aGV0aGVyIGBrdm0tXHUwMDNlYXJjaC5pZGxlX21hc2tgIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBMb29raW5nIGF0IHdoZXJlIGl0IGNvbWVzIGZyb20sIHRoZSBgc3RydWN0IGt2bV9hcmNoYCBpcyBlbWJlZGRlZCB3aXRoaW4gdGhlIGBzdHJ1Y3Qga3ZtYC4gVGhlIGBzdHJ1Y3Qga3ZtYCBpcyBhbGxvY2F0ZWQgd2l0aCBgdnphbGxvY2Agb3IgYGt6YWxsb2NgIGluIGBrdm1fY3JlYXRlX3ZtYCwgc28gaXQgaXMgZnVsbHkgemVyb2VkLiBTbywgYGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFza2Agc2hvdWxkIGJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpYCBjaGVja3MgdGhlIHZjcHUncyBwZW5kaW5nIGlycXMuIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZW4sIGp1c3QgdG8gYmUgc3VyZSwgSSBjaGVja2VkIHdoZXJlIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBpcyBjYWxsZWQuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCB0aGUgY29kZSBvbmx5IGNhbGxzIGl0IGZyb20gaW5zaWRlIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gVGhpcyBjb25maW5lcyBpdHMgdXNhZ2UgdG8gYSBrbm93biBzY29wZS5cblxuTm93LCBsZXQncyByZXZpc2l0IGBrdm1fczM5MF9pbmplY3Rfdm1gLiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBpbmplY3RpbmcgaW50ZXJydXB0cyBpbnRvIHRoZSBWTS4gSXQgdGFrZXMgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdGAgYW5kIGEgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mb2AgKGludGkpIGFzIGlucHV0LiBJbnNpZGUsIGl0IHBvcHVsYXRlcyB0aGUgYGludGlgIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgaW50ZXJydXB0IHR5cGUuIEkgbWFkZSBzdXJlIHRvIHdhbGsgdGhyb3VnaCBhbGwgY2FzZXMgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgdG8gY29uZmlybSBpZiBgX19pbmplY3Rfdm1gIGNvdWxkIGJlIGNhbGxlZCwgYW5kIGFsc28gdG8gc2VlIGlmIHRoZXJlIGNvdWxkIGJlIHNvbWUgcGF0aCB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCByZXR1cm5zIGAtRUlOVkFMYCBpZiB0aGUgdHlwZSBpc24ndCBvbmUgb2YgdGhlIGtub3duIGNhc2VzLlxuXG5UaGUga2V5IHRvIHRoZSBjb2RlIGlzIHRoYXQgYF9faW5qZWN0X3ZtYCBjYW4gb25seSBiZSBjYWxsZWQgaWYgYGludGktXHUwMDNldHlwZWAgbWF0Y2hlcyBvbmUgb2YgdGhlIGtub3duIGludGVycnVwdCB0eXBlcy4gV2hlbiBgaW50aS1cdTAwM2V0eXBlYCBpcyBgS1ZNX1MzOTBfSU5UX1ZJUlRJT2AsIGl0IHRoZW4gY2FsbHMgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHdoaWNoIGluIHR1cm4gY2FsbHMgYGludGlfdG9faXJxX3BlbmRfbWFzayhpbnRpKWAuIEkgdHJhY2VkIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgIGFuZCBjaGVja2VkIGFsbCB0aGUgZGlmZmVyZW50IGNhc2VzLiBJIHNhdyB0aGF0IGZvciBgS1ZNX1MzOTBfSU5UX1ZJUlRJT2AsIGl0IHVzZXMgYEJJVChJUlFfUEVORF9WSVJUSU8pYC4gSXQgZG9lcyAqbm90KiByZWFkIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYC4gVGhlIHJlYWRzIGZyb20gYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgIG9ubHkgb2NjdXIgaWYgYGludGktXHUwMDNldHlwZWAgaXMgaW4gdGhlIGBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWGAgcmFuZ2UsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlcyBhcmUgYXNzaWduZWQgaW4gYGt2bV9zMzkwX2luamVjdF92bWAuIFRoZXJlZm9yZSwgdGhlcmUgc2hvdWxkIGJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGNhbGxlcnMgb2YgYF9fZmxvYXRpbmdfaXJxX2tpY2tgLCBvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgaW5qZWN0IGludGVycnVwdHMsIHN1Y2ggYXMgYF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW5gLiBJdCdzIHBvc3NpYmxlIEkgbWlzc2VkIGEgcGF0aC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IGl0cyB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5MDQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjU5Ljg3NzU1MDU2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ3NTpcXHRzdGF0aWMgdm9pZCBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBzdGFydF90b2tlbixcXG40NDc2OlxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0b2tlbilcXG40NDc3OlxcdHtcXG40NDc4OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgaW50aTtcXG40NDc5OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9pcnEgaXJxO1xcbjQ0ODA6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpX21lbSA9IE5VTEw7XFxuNDQ4MTpcXHRcXHRpbnQgcmV0ID0gMDtcXG40NDgyOlxcdFxcbjQ0ODM6XFx0XFx0aWYgKHN0YXJ0X3Rva2VuKSB7XFxuNDQ4NDpcXHRcXHRcXHRpcnEudS5leHQuZXh0X3BhcmFtczIgPSB0b2tlbjtcXG40NDg1OlxcdFxcdFxcdGlycS50eXBlID0gS1ZNX1MzOTBfSU5UX1BGQVVMVF9JTklUO1xcbjQ0ODY6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGt2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUsIFxcdTAwMjZpcnEpKTtcXG40NDg3OlxcdFxcdH0gZWxzZSB7XFxuNDQ4ODpcXHRcXHRcXHRpbnRpX21lbSA9IGt6YWxsb2Nfb2JqKCppbnRpX21lbSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG40NDg5OlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWludGlfbWVtKSlcXG40NDkwOlxcdFxcdFxcdFxcdHJldHVybjtcXG40NDkxOlxcdFxcbjQ0OTI6XFx0XFx0XFx0aW50aS50eXBlID0gS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FO1xcbjQ0OTM6XFx0XFx0XFx0aW50aS5wYXJtNjQgPSB0b2tlbjtcXG40NDk0OlxcdFxcdFxcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bSh2Y3B1LVxcdTAwM2Vrdm0sIFxcdTAwMjZpbnRpLCBpbnRpX21lbSk7XFxuNDQ5NTpcXHRcXHRcXHRpZiAocmV0KVxcbjQ0OTY6XFx0XFx0XFx0XFx0a2ZyZWUoaW50aV9tZW0pO1xcbjQ0OTc6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKHJldCk7XFxuNDQ5ODpcXHRcXHR9XFxuNDQ5OTpcXHR9XFxuNDUwMDpcXHRcXG40NTAxOlxcdGJvb2wga3ZtX2FyY2hfYXN5bmNfcGFnZV9ub3RfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuNDUwMjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXFxuNDUwMzpcXHR7XFxuNDUwNDpcXHRcXHR0cmFjZV9rdm1fczM5MF9wZmF1bHRfaW5pdCh2Y3B1LCB3b3JrLVxcdTAwM2VhcmNoLnBmYXVsdF90b2tlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjU5Ljg3ODAyMThaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwNjAzMjYwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5jb3ZlcmluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMgaW4gYSBLVk0vczM5MCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgcmlnaHQgdG8gZmxhZyB0aGUgdW5pbml0aWFsaXplZCBgaW50aS5wYXJtYCB3aXRoaW4gYF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW5gLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGNvZGUgaW4gdGhhdCBmdW5jdGlvbiBkb2Vzbid0IGluaXRpYWxpemUgaXQsIGFuZCBhbHRob3VnaCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBkb2Vzbid0ICp1c2UqIGl0IGRpcmVjdGx5IGZvciB0aGUgYEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORWAgY2FzZSwgdGhlIGB0cmFjZV9rdm1fczM5MF9pbmplY3Rfdm1gIGNhbGwgZG9lcyByZWFkIGBzMzkwaW50LVx1MDAzZXBhcm1gLiBIb3dldmVyLCB0aGlzIHdhc24ndCBpbnRyb2R1Y2VkIGJ5ICp0aGlzKiBwYXRjaCDigJMgaXQncyBhbiBleGlzdGluZyBidWcuXG5cbk5vdywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSAqbmV3KiBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBUaGUgY2hhbmdlcyBhcm91bmQgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIG5lZWRlZCBzY3J1dGlueS4gU3BlY2lmaWNhbGx5LCB0aGUgY2FsbCB0byBgaW50aV90b19pcnFfcGVuZF9tYXNrYC4gVGhhdCBmdW5jdGlvbiBhY2Nlc3NlcyBgaW50aS1cdTAwM2V0eXBlYCBhbmQgYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgLiBJIGNvbmZpcm1lZCB0aGF0IGBpbnRpYCBpbiB0aGlzIGNvbnRleHQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBndWFyYW50ZWVzIHplcm9lZCBtZW1vcnksIGhlbmNlIGEgc2FmZSByZWFkIG9mIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYC4gRXZlbiBpZiB0aGUgdHlwZSBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIGBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWGAuIEZvciB0aGUgYEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORWAgY2FzZSwgaXQncyBpcnJlbGV2YW50LlxuXG5JIHRoZW4gbG9va2VkIGF0IGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLCBhbmQgYGRlbGl2ZXJhYmxlX2lycXNgLCBidXQgdGhleSBhcmUgdW5jaGFuZ2VkIGJ5IHRoZSBwYXRjaC5cblxuSSByZXZpc2l0ZWQgYGludGlfdG9faXJxX3BlbmRfbWFza2AgZm9yIGEgZnVsbCBjaGVjaywgbWFraW5nIHN1cmUgdGhhdCBgaW50aWAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJ5IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fczM5MF9pbmplY3RfYWlycWAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuYC4gVGhlIGBremFsbG9jX29iamAgY2FsbCBpbiB0aG9zZSBmdW5jdGlvbnMgZ3VhcmFudGVlcyB6ZXJvIGluaXRpYWxpemF0aW9uLCBtZWFuaW5nIHdlIGNhbiBiZSBhc3N1cmVkIHRoYXQgYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgIGlzIHNhZmVseSByZWFkLlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm9gIGlzIG5ldmVyIGFsbG9jYXRlZCBpbiBhIHdheSB0aGF0ICpkb2Vzbid0KiB6ZXJvIGl0IG91dC4gSSdsbCBzZWFyY2ggZm9yIGFsbCBhbGxvY2F0aW9ucyBvZiB0aGF0IHN0cnVjdCB0byBlbnN1cmUgaXQncyBhbHdheXMgaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzM5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA4OjEzLjkzODM1MTI1MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzOTU4OTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xMDM4PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIF9fZGVsaXZlcl9wZmF1bHRfZG9uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEwNDAtXFx0c3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmkgPSBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmZsb2F0X2ludDtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjEwNDE6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA0Mi1cXHRpbnQgcmMgPSAwO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDQ2LVxcdGludGkgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXFx1MDAyNmZpLVxcdTAwM2VsaXN0c1tGSVJRX0xJU1RfUEZBVUxUXSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjEwNDc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA0OC1cXHRcXHRcXHRcXHRcXHRsaXN0KTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTA4MT1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBfX2RlbGl2ZXJfdmlydGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA4My1cXHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZmxvYXRfaW50O1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA4NDpcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDg1LVxcdGludCByYyA9IDA7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEwODktXFx0aW50aSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2ZmktXFx1MDAzZWxpc3RzW0ZJUlFfTElTVF9WSVJUSU9dLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA5MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDkxLVxcdFxcdFxcdFxcdFxcdGxpc3QpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xMTU0PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIF9fZGVsaXZlcl9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNTktXFx0c3RydWN0IGt2bV9zMzkwX2dpc2FfaW50ZXJydXB0ICpnaSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ2lzYV9pbnQ7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMTYwOlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMTYxLVxcdHN0cnVjdCBrdm1fczM5MF9pb19pbmZvIGlvO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMTcxLVxcdGludGkgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoaXNjX2xpc3QsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMTcyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNzMtXFx0XFx0XFx0XFx0XFx0bGlzdCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE2ODk9c3RhdGljIGludCBfX2luamVjdF9jcHVfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzAyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTcwMzpzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICpnZXRfaW9faW50KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3MDQtXFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgaXNjLCB1MzIgc2NoaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3MDctXFx0c3RydWN0IGxpc3RfaGVhZCAqaXNjX2xpc3QgPSBcXHUwMDI2ZmktXFx1MDAzZWxpc3RzW0ZJUlFfTElTVF9JT19JU0NfMCArIGlzY107XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzA4OlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaXRlcjtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3MDktXFx0dTE2IGlkID0gKHNjaGlkIFxcdTAwMjYgMHhmZmZmMDAwMFUpIFxcdTAwM2VcXHUwMDNlIDE2O1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzI5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTczMDpzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICpnZXRfdG9wX2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzMxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHU2NCBpc2NfbWFzaywgdTMyIHNjaGlkKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTczMi17XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzMzOlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzM0LVxcdGludCBpc2M7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE3NDM9c3RhdGljIGludCBnZXRfdG9wX2dpc2FfaXNjKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGlzY19tYXNrLCB1MzIgc2NoaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3NzYtICovXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzc3OnN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqa3ZtX3MzOTBfZ2V0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzc4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICB1NjQgaXNjX21hc2ssIHUzMiBzY2hpZClcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTc4MC1cXHRzdHJ1Y3Qga3ZtX3MzOTBfZ2lzYV9pbnRlcnJ1cHQgKmdpID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5naXNhX2ludDtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE3ODE6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpLCAqdG1wX2ludGk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzgyLVxcdGludCBpc2M7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE4MTU9c3RhdGljIGludCBfX2luamVjdF9zZXJ2aWNlKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE4MTY6XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODE3LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTg0Nz1zdGF0aWMgaW50IF9faW5qZWN0X3ZpcnRpbyhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxODQ4OlxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODQ5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTg2Nj1zdGF0aWMgaW50IF9faW5qZWN0X3BmYXVsdF9kb25lKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE4Njc6XFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE4Njgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xODg3PXN0YXRpYyBpbnQgX19pbmplY3RfZmxvYXRfbWNoayhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxODg4OlxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE4ODkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xOTAyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTkwMzpzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTkwNC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5NDgtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxOTQ5OnN0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5NTAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xOTczLSAqL1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTk3NDpzdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTk3NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwMTQtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDE1OnN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDE2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjA0Nj1pbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwNDc6XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwNDgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDg5PWludCBrdm1fczM5MF9yZWluamVjdF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA5MDpcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDkxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjIyMD1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaXJxX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqX2xpc3QpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMjIxLXtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIyMjI6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpLCAqbjtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyMjMtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyMjktXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMjMwOnN0YXRpYyB2b2lkIGludGlfdG9faXJxKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyMzEtXFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjI2OD1zdGF0aWMgaW50IGdldF9hbGxfZmxvYXRpbmdfaXJxcyhzdHJ1Y3Qga3ZtICprdm0sIHU4IF9fdXNlciAqdXNyYnVmLCB1NjQgbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMjcwLVxcdHN0cnVjdCBrdm1fczM5MF9naXNhX2ludGVycnVwdCAqZ2kgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmdpc2FfaW50O1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjI3MTpcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMjcyLVxcdHN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMzgyPXN0YXRpYyBpbnQgZmxpY19nZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDAwLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjQwMTpzdGF0aWMgaW5saW5lIGludCBjb3B5X2lycV9mcm9tX3VzZXIoc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQwMi1cXHRcXHRcXHRcXHQgICAgIHU2NCBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDQxPXN0YXRpYyBpbnQgZW5xdWV1ZV9mbG9hdGluZ19pcnEoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ0My17XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNDQ0OlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDQ1LVxcdGludCByID0gMDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgyMD1zdGF0aWMgaW50IGt2bV9zMzkwX2luamVjdF9haXJxKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgyOC1cXHR9O1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgyOTpcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODMwLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMxNjU9dm9pZCBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2Ny17XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTY4OlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyBpbnRpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2OS1cXHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIGlycTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzgwOD1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzgxNC1cXHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZmxvYXRfaW50O1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzgxNTpcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODE2LVxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludCA9IHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTMyLVxcdGludCByO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTMzOlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNC1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00NDc1PXN0YXRpYyB2b2lkIF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHN0YXJ0X3Rva2VuLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0NzktXFx0c3RydWN0IGt2bV9zMzkwX2lycSBpcnE7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0ODA6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpX21lbSA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0ODEtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzc5PWludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtMzgwLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozODE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTM4Mi1pbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD0zOTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGNvZGUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtNDAyLX1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NDAzOnN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqa3ZtX3MzOTBfZ2V0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQwNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdTY0IGlzY19tYXNrLCB1MzIgc2NoaWQpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD00MDU9aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjQwNjpcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQwNy1pbnQga3ZtX3MzOTBfbWFza19hZGFwdGVyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBib29sIG1hc2tlZCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz00NDI9c3RhdGljIGludCBoYW5kbGVfdHBpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy00NDMte1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjQ0NDpcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNDQ1LVxcdHVuc2lnbmVkIGxvbmcgbGVuO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTA4PXN0YXRpYyBpbnQgaGFuZGxlX3RzY2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTUwOS17XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NTEwOlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNTExLVxcdGNvbnN0IHU2NCBpc2NfbWFzayA9IDB4ZmZVTCBcXHUwMDNjXFx1MDAzYyAyNDsgLyogYWxsIGlzY3Mgc2V0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA4OjE1LjE3Nzk0NzAwNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzQ4MDU1MzcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjM0MDI2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowODozMi42NTg1MDU5MjJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAxNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAxNTpcXHRzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbjIwMTY6XFx0e1xcbjIwMTc6XFx0XFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cXHUwMDNldHlwZSk7XFxuMjAxODpcXHRcXHRpbnQgcmM7XFxuMjAxOTpcXHRcXG4yMDIwOlxcdFxcdHN3aXRjaCAodHlwZSkge1xcbjIwMjE6XFx0XFx0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxcbjIwMjI6XFx0XFx0XFx0cmMgPSBfX2luamVjdF9mbG9hdF9tY2hrKGt2bSwgaW50aSk7XFxuMjAyMzpcXHRcXHRcXHRicmVhaztcXG4yMDI0OlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcXG4yMDI1OlxcdFxcdFxcdHJjID0gX19pbmplY3RfdmlydGlvKGt2bSwgaW50aSk7XFxuMjAyNjpcXHRcXHRcXHRicmVhaztcXG4yMDI3OlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6XFxuMjAyODpcXHRcXHRcXHRyYyA9IF9faW5qZWN0X3NlcnZpY2Uoa3ZtLCBpbnRpKTtcXG4yMDI5OlxcdFxcdFxcdGJyZWFrO1xcbjIwMzA6XFx0XFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XFxuMjAzMTpcXHRcXHRcXHRyYyA9IF9faW5qZWN0X3BmYXVsdF9kb25lKGt2bSwgaW50aSk7XFxuMjAzMjpcXHRcXHRcXHRicmVhaztcXG4yMDMzOlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XFxuMjAzNDpcXHRcXHRcXHRyYyA9IF9faW5qZWN0X2lvKGt2bSwgaW50aSk7XFxuMjAzNTpcXHRcXHRcXHRicmVhaztcXG4yMDM2OlxcdFxcdGRlZmF1bHQ6XFxuMjAzNzpcXHRcXHRcXHRyYyA9IC1FSU5WQUw7XFxuMjAzODpcXHRcXHR9XFxuMjAzOTpcXHRcXHRpZiAocmMpXFxuMjA0MDpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMjA0MTpcXHRcXG4yMDQyOlxcdFxcdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCBpbnRpKTtcXG4yMDQzOlxcdFxcdHJldHVybiAwO1xcbjIwNDQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowODozMi42NTg3Nzk0NDJaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxOTI4Mzk1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNYWNoaW5lIENoZWNrIFJlaW5qZWN0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgd2UncmUgaGFuZGxpbmcgbWFjaGluZSBjaGVjayBpbnRlcnJ1cHRzLiBJIHNlZSByaWdodCBvZmYgdGhlIGJhdCwgd2UndmUgZ290IGEgYGt2bV92Y3B1YCBwb2ludGVyIGFuZCBhIGBtY2lgIHN0cnVjdCBwYXNzZWQgaW4sIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCBJIG5vdGljZSB0aGF0IGBpbnRpYCBpcyBhIGxvY2FsIHZhcmlhYmxlLiBPa2F5LCB0aGF0IGZlZWxzIHJpZ2h0LCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBgaW50aWAgaXMgdXRpbGl6ZWQuIExldCdzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBvZiBga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVja2AgYW5kIHRyYWNlIHRoZSB1c2Ugb2YgdGhlc2UgdmFyaWFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDk4NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA5OjM2Ljg1MTYyMjIxOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODgyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTY1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTY1OlxcdHZvaWQga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVjayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuMzE2NjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtY2NrX3ZvbGF0aWxlX2luZm8gKm1jY2tfaW5mbylcXG4zMTY3OlxcdHtcXG4zMTY4OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyBpbnRpO1xcbjMxNjk6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2lycSBpcnE7XFxuMzE3MDpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbWNoa19pbmZvICptY2hrO1xcbjMxNzE6XFx0XFx0dW5pb24gbWNpIG1jaTtcXG4zMTcyOlxcdFxcdF9fdTY0IGNyMTQgPSAwOyAgICAgICAgIC8qIHVwcGVyIGJpdHMgYXJlIG5vdCB1c2VkICovXFxuMzE3MzpcXHRcXHRpbnQgcmM7XFxuMzE3NDpcXHRcXG4zMTc1OlxcdFxcdG1jaS52YWwgPSBtY2NrX2luZm8tXFx1MDAzZW1jaWM7XFxuMzE3NjpcXHRcXG4zMTc3OlxcdFxcdC8qIGxvZyBtYWNoaW5lIGNoZWNrcyBiZWluZyByZWluamVjdGVkIG9uIGFsbCBkZWJ1Z3MgKi9cXG4zMTc4OlxcdFxcdFZDUFVfRVZFTlQodmNwdSwgMiwgXFxcImd1ZXN0IG1hY2hpbmUgY2hlY2sgJWx4XFxcIiwgbWNpLnZhbCk7XFxuMzE3OTpcXHRcXHRLVk1fRVZFTlQoMiwgXFxcImd1ZXN0IG1hY2hpbmUgY2hlY2sgJWx4XFxcIiwgbWNpLnZhbCk7XFxuMzE4MDpcXHRcXHRwcl9pbmZvKFxcXCJndWVzdCBtYWNoaW5lIGNoZWNrIHBpZCAlZDogJWx4XFxcIiwgY3VycmVudC1cXHUwMDNlcGlkLCBtY2kudmFsKTtcXG4zMTgxOlxcdFxcbjMxODI6XFx0XFx0aWYgKG1jaS5zcilcXG4zMTgzOlxcdFxcdFxcdGNyMTQgfD0gQ1IxNF9SRUNPVkVSWV9TVUJNQVNLO1xcbjMxODQ6XFx0XFx0aWYgKG1jaS5kZylcXG4zMTg1OlxcdFxcdFxcdGNyMTQgfD0gQ1IxNF9ERUdSQURBVElPTl9TVUJNQVNLO1xcbjMxODY6XFx0XFx0aWYgKG1jaS53KVxcbjMxODc6XFx0XFx0XFx0Y3IxNCB8PSBDUjE0X1dBUk5JTkdfU1VCTUFTSztcXG4zMTg4OlxcdFxcbjMxODk6XFx0XFx0bWNoayA9IG1jaS5jayA/IFxcdTAwMjZpbnRpLm1jaGsgOiBcXHUwMDI2aXJxLnUubWNoaztcXG4zMTkwOlxcdFxcdG1jaGstXFx1MDAzZWNyMTQgPSBjcjE0O1xcbjMxOTE6XFx0XFx0bWNoay1cXHUwMDNlbWNpYyA9IG1jY2tfaW5mby1cXHUwMDNlbWNpYztcXG4zMTkyOlxcdFxcdG1jaGstXFx1MDAzZWV4dF9kYW1hZ2VfY29kZSA9IG1jY2tfaW5mby1cXHUwMDNlZXh0X2RhbWFnZV9jb2RlO1xcbjMxOTM6XFx0XFx0bWNoay1cXHUwMDNlZmFpbGluZ19zdG9yYWdlX2FkZHJlc3MgPSBtY2NrX2luZm8tXFx1MDAzZWZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzO1xcbjMxOTQ6XFx0XFx0aWYgKG1jaS5jaykge1xcbjMxOTU6XFx0XFx0XFx0LyogSW5qZWN0IHRoZSBmbG9hdGluZyBtYWNoaW5lIGNoZWNrICovXFxuMzE5NjpcXHRcXHRcXHRpbnRpLnR5cGUgPSBLVk1fUzM5MF9NQ0hLO1xcbjMxOTc6XFx0XFx0XFx0cmMgPSBfX2luamVjdF92bSh2Y3B1LVxcdTAwM2Vrdm0sIFxcdTAwMjZpbnRpKTtcXG4zMTk4OlxcdFxcdH0gZWxzZSB7XFxuMzE5OTpcXHRcXHRcXHQvKiBJbmplY3QgdGhlIG1hY2hpbmUgY2hlY2sgdG8gc3BlY2lmaWVkIHZjcHUgKi9cXG4zMjAwOlxcdFxcdFxcdGlycS50eXBlID0gS1ZNX1MzOTBfTUNISztcXG4zMjAxOlxcdFxcdFxcdHJjID0ga3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdSwgXFx1MDAyNmlycSk7XFxuMzIwMjpcXHRcXHR9XFxuMzIwMzpcXHRcXHRXQVJOX09OX09OQ0UocmMpO1xcbjMyMDQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowOTozNi44NTIwMTI2NTlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk1NzU5NTcxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjozNTUwNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowOTo1Ni40Mjc5NzI4MzJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg4NyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg4NzpcXHRzdGF0aWMgaW50IF9faW5qZWN0X2Zsb2F0X21jaGsoc3RydWN0IGt2bSAqa3ZtLFxcbjE4ODg6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbjE4ODk6XFx0e1xcbjE4OTA6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmkgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsb2F0X2ludDtcXG4xODkxOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuMTg5MjpcXHRcXG4xODkzOlxcdFxcdGt2bS1cXHUwMDNlc3RhdC5pbmplY3RfZmxvYXRfbWNoaysrO1xcbjE4OTQ6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuMTg5NTpcXHRcXHRmaS1cXHUwMDNlbWNoay5jcjE0IHw9IGludGktXFx1MDAzZW1jaGsuY3IxNCBcXHUwMDI2ICgxVUwgXFx1MDAzY1xcdTAwM2MgQ1JfUEVORElOR19TVUJDTEFTUyk7XFxuMTg5NjpcXHRcXHRmaS1cXHUwMDNlbWNoay5tY2ljIHw9IGludGktXFx1MDAzZW1jaGsubWNpYztcXG4xODk3OlxcdFxcdHNldF9iaXQoSVJRX1BFTkRfTUNIS19SRVAsIFxcdTAwMjZmaS1cXHUwMDNlcGVuZGluZ19pcnFzKTtcXG4xODk4OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuMTg5OTpcXHRcXHRrZnJlZShpbnRpKTtcXG4xOTAwOlxcdFxcdHJldHVybiAwO1xcbjE5MDE6XFx0fVxcbjE5MDI6XFx0XFxuMTkwMzpcXHRzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbjE5MDQ6XFx0e1xcbjE5MDU6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2dpc2FfaW50ZXJydXB0ICpnaSA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZ2lzYV9pbnQ7XFxuMTkwNjpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaTtcXG4xOTA3OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7XFxuMTkwODpcXHRcXHRpbnQgaXNjO1xcbjE5MDk6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4xOTEwOlxcdFxcbjE5MTE6XFx0XFx0a3ZtLVxcdTAwM2VzdGF0LmluamVjdF9pbysrO1xcbjE5MTI6XFx0XFx0aXNjID0gaW50X3dvcmRfdG9faXNjKGludGktXFx1MDAzZWlvLmlvX2ludF93b3JkKTtcXG4xOTEzOlxcdFxcbjE5MTQ6XFx0XFx0LypcXG4xOTE1OlxcdFxcdCAqIFdlIGRvIG5vdCB1c2UgdGhlIGxvY2sgY2hlY2tpbmcgdmFyaWFudCBhcyB0aGlzIGlzIGp1c3QgYVxcbjE5MTY6XFx0XFx0ICogcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCB3ZSBkbyBub3QgaG9sZCB0aGUgbG9jayBoZXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowOTo1Ni40MjgzNDQ1MzJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMTQ5MjIxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSW50ZXJydXB0IEluamVjdGlvbiBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIGZsYWdnZWQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaW4gYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgIGFuZCB0aGUgc3Vic2VxdWVudCBga2ZyZWVgIG9uIGEgc3RhY2stYWxsb2NhdGVkIHZhcmlhYmxlLiBJIGltbWVkaWF0ZWx5IGR1ZyBpbnRvIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrYCwgY29uZmlybWVkIHRoYXQgYGludGlgICppcyogaW5kZWVkIGEgc3RhY2sgdmFyaWFibGUgYW5kIHRoYXQgYF9faW5qZWN0X2Zsb2F0X21jaGtgICpkb2VzKiBjYWxsIGBrZnJlZShpbnRpKWAuIE15IGFsYXJtIGJlbGxzIHdlcmUgcmluZ2luZywgc2NyZWFtaW5nIFwiaW52YWxpZCBmcmVlIVwiLCBidXQgdGhlbiBJIHF1aWNrbHkgcmVtZW1iZXJlZCBLQVNBTiBleGlzdHMhIEFuZCBJIGNvbmZpcm1lZCBLQVNBTiB3aWxsIGNhdGNoIHRoYXQuICBTbywgbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LlxuXG5UaGVuLCBJIGxvb2tlZCBjbG9zZWx5IGF0IHRoZSBwYXRjaCBpdHNlbGYgdG8gc2VlIHdoYXQgaXQncyBjaGFuZ2luZywgYW5kIHRoYXQgaW52b2x2ZWQgZ29pbmcgdGhyb3VnaCBhbGwgY2FsbHMgdG8gYF9faW5qZWN0X3ZtYCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSB1bmluaXRpYWxpemVkIHJlYWRzIGludHJvZHVjZWQgKmJ5IHRoZSBwYXRjaCBpdHNlbGYqLiAgVGhlIHBhdGNoIHByaW1hcmlseSBmb2N1c2VzIG9uIGltcHJvdmluZyBmbG9hdGluZyBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uIHVzaW5nIGEgbmV3IGBkaXN0cmlidXRlX2Zsb2F0X2lycXMoKWAgZnVuY3Rpb24sIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYC4gSSBhbmFseXplZCBhbGwgdGhlIGRhdGEgYmVpbmcgcmVhZCBhbmQgbW9kaWZpZWQgYWNyb3NzIHRoZXNlIGZ1bmN0aW9uczpcblxuKiAgIFRoZSBwYXRjaCdzIGludHJvZHVjdGlvbiBvZiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBkZXBlbmRzIG9uIGBrdm0tXHUwMDNlYXJjaC5pZGxlX21hc2tgLCBidXQgdGhhdCBpcyBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgZnVuY3Rpb24ganVzdCByZWFkcyBzdGF0ZS5cbiogICBUaGUgbW9kaWZpY2F0aW9uIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBpbnZvbHZlZCB0aGUgcGFyYW1ldGVyIGNoYW5nZSB0byB0YWtlIGBpbnRpYCwgYW5kIEkgbmVlZGVkIHRvIHZlcmlmeSBhbGwgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLlxuKiAgIEkgY29uZmlybWVkIHRoYXQgaW4gYWxsIG90aGVyIHBhdGhzLCBgaW50aWAgaXMgYWxsb2NhdGVkIGJ5IGBremFsbG9jX29iamAsIGFuZCB0aGF0IG1lYW5zIGFsbCB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkLlxuKiAgIEluIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrYCwgYGludGlgIGlzIGEgc3RhY2sgdmFyaWFibGUsIGJ1dCBpdCdzICpwYXJ0aWFsbHkqIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIGBfX2luamVjdF92bWAuIFRoZSBjcml0aWNhbCBiaXQgaGVyZSBpcyB0aGUgYHR5cGVgIGZpZWxkLCB3aGljaCBJIGNvbmZpcm1lZCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBjYWxsaW5nIGFueXRoaW5nIHRoYXQgd291bGQgcmVhZCB0aGUgdmFyaWFibGUuXG5cblNpbmNlIEkgYW0gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCwgSSBrbm93IGhvdyB0aGUgS1ZNIHMzOTAgYXJjaGl0ZWN0dXJlIHdvcmtzLiAgVGhlIGRhdGEgZGVwZW5kZW5jaWVzIGFyZSBjbGVhciwgYW5kIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgYGludGlgIHZhcmlhYmxlIGFuZCBpdHMgZmllbGRzIHRoYXQgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoaXMgcGF0Y2ggYXJlIGFsbCBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBXaGlsZSB0aGUgYGtmcmVlYCBvbiB0aGUgc3RhY2sgdmFyaWFibGUgaW4gYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgIGlzIHN0aWxsIGEgYnVnLCBpdCBpcyBhbiAqZXhpc3RpbmcqIGJ1ZyB0aGF0IGlzICpub3QqIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gIEtBU0FOIHdpbGwgY2F0Y2ggdGhpcy5cblxuU28sIEkgY2FuIGNvbmZpZGVudGx5IGNvbmNsdWRlIHRoYXQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoaXMgcGF0Y2guICBUaGUgZXhpc3RpbmcgS0FTQU4gY2hlY2tzIGFyZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY2OSwiT3V0cHV0VG9rZW5zIjo0MDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MTA6MjkuNTQzMjcwOTI2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcy4gSXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKClgIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGt2bS1cXHUwMDNlYXJjaC5pZGxlX21hc2tgIGFuZCB3YWtlcyB1cCBWQ1BVcyB0aGF0IGNhbiBkZWxpdmVyIHRoZSBwZW5kaW5nIGludGVycnVwdHMuIEl0IGFsc28gbW9kaWZpZXMgYF9fZmxvYXRpbmdfaXJxX2tpY2soKWAgdG8gdGFrZSBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGlgIGluc3RlYWQgb2YgYSBgdTY0IHR5cGVgLCBhbmQgdXNlcyBgaW50aV90b19pcnFfcGVuZF9tYXNrKClgIHRvIGRldGVybWluZSB0aGUgcGVuZGluZyBJUlEgbWFzay5cXG5cXG5BbGwgZmllbGRzIGFjY2Vzc2VkIGJ5IHRoZSBuZXcgbG9naWMgKHN1Y2ggYXMgYGludGktXFx1MDAzZXR5cGVgIGFuZCBgaW50aS1cXHUwMDNlaW8uaW9faW50X3dvcmRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBpbnRpYCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgdXNpbmcgYGt6YWxsb2NgICh2aWEgYGt6YWxsb2Nfb2JqKClgKSBpbiBwYXRocyBsaWtlIGBrdm1fYXJjaF92bV9pb2N0bCgpYCwgYGt2bV9zMzkwX2luamVjdF9haXJxKClgLCBhbmQgYF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oKWAsIGFuZCB0aGVuIHBvcHVsYXRlZCB3aXRoIGZ1bGx5IGluaXRpYWxpemVkIGRhdGEgZnJvbSB1c2VyIHNwYWNlIG9yIGtlcm5lbCBsb2dpYy4gSW4gdGhlIGNhc2Ugb2YgYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soKWAsIHdoZXJlIGBpbnRpYCBpcyBhIHN0YWNrIHZhcmlhYmxlLCBvbmx5IHRoZSBgdHlwZWAgZmllbGQgaXMgcmVhZCBieSB0aGUgbmV3IGxvZ2ljLCBhbmQgaXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgS1ZNX1MzOTBfTUNIS2AuXFxuXFxuVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gbG9naWMgdG8gZGlzdHJpYnV0ZSBmbG9hdGluZyBpbnRlcnJ1cHRzIHRvIGlkbGUgVkNQVXMuIEl0IGludHJvZHVjZXMgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxcygpYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBrdm0tXFx1MDAzZWFyY2guaWRsZV9tYXNrYCBhbmQgd2FrZXMgdXAgVkNQVXMgdGhhdCBjYW4gZGVsaXZlciB0aGUgcGVuZGluZyBpbnRlcnJ1cHRzLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2Zsb2F0aW5nX2lycV9raWNrKClgIHRvIHRha2UgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpYCBpbnN0ZWFkIG9mIGEgYHU2NCB0eXBlYCwgYW5kIHVzZXMgYGludGlfdG9faXJxX3BlbmRfbWFzaygpYCB0byBkZXRlcm1pbmUgdGhlIHBlbmRpbmcgSVJRIG1hc2suXFxuXFxuQWxsIGZpZWxkcyBhY2Nlc3NlZCBieSB0aGUgbmV3IGxvZ2ljIChzdWNoIGFzIGBpbnRpLVxcdTAwM2V0eXBlYCBhbmQgYGludGktXFx1MDAzZWlvLmlvX2ludF93b3JkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgaW50aWAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iaigpYCkgaW4gcGF0aHMgbGlrZSBga3ZtX2FyY2hfdm1faW9jdGwoKWAsIGBrdm1fczM5MF9pbmplY3RfYWlycSgpYCwgYW5kIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKClgLCBhbmQgdGhlbiBwb3B1bGF0ZWQgd2l0aCBmdWxseSBpbml0aWFsaXplZCBkYXRhIGZyb20gdXNlciBzcGFjZSBvciBrZXJuZWwgbG9naWMuIEluIHRoZSBjYXNlIG9mIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKClgLCB3aGVyZSBgaW50aWAgaXMgYSBzdGFjayB2YXJpYWJsZSwgb25seSB0aGUgYHR5cGVgIGZpZWxkIGlzIHJlYWQgYnkgdGhlIG5ldyBsb2dpYywgYW5kIGl0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEtWTV9TMzkwX01DSEtgLlxcblxcblRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYW55IG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowzxn9c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 12:23:26 +0000 UTC FinishedAt: 2026-08-17 13:10:31 +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": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "distribute_float_irqs", "kvm_s390_inject_vm" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3RyaWJ1dGVfZmxvYXRfaXJxcyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9pbmplY3Rfdm0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcy4gSXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKClgIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFza2AgYW5kIHdha2VzIHVwIFZDUFVzIHRoYXQgY2FuIGRlbGl2ZXIgdGhlIHBlbmRpbmcgaW50ZXJydXB0cy4gSXQgYWxzbyBtb2RpZmllcyBgX19mbG9hdGluZ19pcnFfa2ljaygpYCB0byB0YWtlIGEgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aWAgaW5zdGVhZCBvZiBhIGB1NjQgdHlwZWAsIGFuZCB1c2VzIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAgdG8gZGV0ZXJtaW5lIHRoZSBwZW5kaW5nIElSUSBtYXNrLlxuXG5BbGwgZmllbGRzIGFjY2Vzc2VkIGJ5IHRoZSBuZXcgbG9naWMgKHN1Y2ggYXMgYGludGktXHUwMDNldHlwZWAgYW5kIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgaW50aWAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iaigpYCkgaW4gcGF0aHMgbGlrZSBga3ZtX2FyY2hfdm1faW9jdGwoKWAsIGBrdm1fczM5MF9pbmplY3RfYWlycSgpYCwgYW5kIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKClgLCBhbmQgdGhlbiBwb3B1bGF0ZWQgd2l0aCBmdWxseSBpbml0aWFsaXplZCBkYXRhIGZyb20gdXNlciBzcGFjZSBvciBrZXJuZWwgbG9naWMuIEluIHRoZSBjYXNlIG9mIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKClgLCB3aGVyZSBgaW50aWAgaXMgYSBzdGFjayB2YXJpYWJsZSwgb25seSB0aGUgYHR5cGVgIGZpZWxkIGlzIHJlYWQgYnkgdGhlIG5ldyBsb2dpYywgYW5kIGl0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEtWTV9TMzkwX01DSEtgLlxuXG5UaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBzMzkwIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYyBieSBpbnRyb2R1Y2luZyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcyBhbmQgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB0byBjaGVjayBpZiBhIFZDUFUgY2FuIHJlY2VpdmUgdGhlIGludGVycnVwdCBiZWZvcmUga2lja2luZyBpdC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgb24gczM5MCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDliMzkyYWU2MWNiZjJjMGE5OWYyNmJiODJlNzVmMzk2YmQ4OGFmZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMzowNDoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBiNDE4MmNhNDQzNWZiLi4xZDYyYmRkN2FjYTVlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDY3LDYgJiM0Mzs0NjcsNyBAQCBzdHJ1Y3Qga3ZtX3ZtX3N0YXQge1xuIFx0dTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3BnX2VudHJ5O1xuJiM0MztcdHU2NCBpbmplY3RfcmVkaXN0O1xuIH07XG4gXG4gc3RydWN0IGt2bV9hcmNoX21lbW9yeV9zbG90IHtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOGYyNGJjZDFhNmQzNi4uZTY3Y2RlZGI1YWVjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC0zNjcsNiAmIzQzOzM2NywzNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBhY3RpdmVfbWFzaztcbiB9XG4gXG4mIzQzO3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XG4mIzQzO1x0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIVJFQURfT05DRShrdm0tXHUwMDNlYXJjaC5mbG9hdF9pbnQucGVuZGluZ19pcnFzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90IHRvbyB3b3JyaWVkIGFib3V0IHN5bmNocm9uaXphdGlvbiBmb3IgaWRsZV9tYXNrLiBXZVxuJiM0MztcdCAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGFcbiYjNDM7XHQgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLlxuJiM0MztcdCAqL1xuJiM0MztcdHNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcbiYjNDM7XHQvKiBXZWxsIG5vYm9keSYjMzk7cyBzbGVlcGluZyBzbyBzb21lb25lIHdpbGwgbGlrZWx5IHRha2UgdGhlIElSUSBzb29uICovXG4mIzQzO1x0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTtcbiYjNDM7XHRcdGlmIChkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSkge1xuJiM0MztcdFx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICYjNDM7JiM0MztzaWdjcHUpO1xuJiM0MztcdH0gd2hpbGUgKHNpZ2NwdSBcdTAwM2Mgb25saW5lX3ZjcHVzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBfX3NldF9jcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfV0FJVCk7XG5AQCAtMTkxNSwyMiAmIzQzOzE5NDYsNDggQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2soc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuJiM0MztcdFx0LyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi9cbiYjNDM7XHRcdHJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApO1xuJiM0MztcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbiYjNDM7XHRcdHJldHVybiBCSVQoSVJRX1BFTkRfVklSVElPKTtcbiYjNDM7XHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxuJiM0MztcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuJiM0MztcdFx0ICAgICAgIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRV9FVik7XG4mIzQzO1x0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XG4mIzQzO1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbiYjNDM7XHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxuJiM0MztcdFx0cmV0dXJuIEJJVChpc2NfdG9faXJxX3R5cGUoaW50X3dvcmRfdG9faXNjKGludGktXHUwMDNlaW8uaW9faW50X3dvcmQpKSk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUpXG4mIzQzO3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcbiBcdGludCBzaWdjcHUsIG9ubGluZV92Y3B1cywgbnJfdHJpZXMgPSAwO1xuJiM0MztcdHU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktXHUwMDNldHlwZSk7XG4mIzQzO1x0dTY0IGlycV9wZW5kX21hc2s7XG4gXG4gXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbiBcdGlmICghb25saW5lX3ZjcHVzKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0aXJxX3BlbmRfbWFzayA9IGludGlfdG9faXJxX3BlbmRfbWFzayhpbnRpKTtcbiBcdGZvciAoc2lnY3B1ID0ga3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50Lmxhc3Rfc2xlZXBfY3B1OyA7IHNpZ2NwdSYjNDM7JiM0MzspIHtcbiBcdFx0c2lnY3B1ICU9IG9ubGluZV92Y3B1cztcbiBcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuLVx0XHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkpXG4mIzQzO1x0XHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkgXHUwMDI2IGlycV9wZW5kX21hc2spXG4gXHRcdFx0YnJlYWs7XG4gXHRcdC8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovXG4gXHRcdGlmIChucl90cmllcyYjNDM7JiM0MzsgXHUwMDNlPSBvbmxpbmVfdmNwdXMpXG5AQCAtMTk4Miw3ICYjNDM7MjAzOSw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbi1cdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTtcbiYjNDM7XHRfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgaW50aSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCA1MThhNjljNTVlODVjLi5kNmQ0NjY4OGQ5ODA4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC04Niw2ICYjNDM7ODYsNyBAQCBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZtX3N0YXRzX2Rlc2NbXSA9IHtcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcjNfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksXG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3BnX2VudHJ5KSxcbiYjNDM7XHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbkBAIC00NTcyLDYgJiM0Mzs0NTczLDggQEAgc3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyYyA9IGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHZjcHUpO1xuIFx0XHRpZiAocmMgfHwgZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKVxuIFx0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuIFx0fVxuIFxuIFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG5pbmRleCA2ZDI4NDJmYjcxYTMzLi5hMmJjZjRhY2FjMTZlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbkBAIC0zNzUsNiAmIzQzOzM3NSw3IEBAIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9zMzkwX2lkbGVfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcik7XG4gaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX3MzOTBfY2xlYXJfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0Mzt2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3RyaWJ1dGVfZmxvYXRfaXJxcyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9pbmplY3Rfdm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBzMzkwIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYyBieSBpbnRyb2R1Y2luZyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcyBhbmQgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB0byBjaGVjayBpZiBhIFZDUFUgY2FuIHJlY2VpdmUgdGhlIGludGVycnVwdCBiZWZvcmUga2lja2luZyBpdC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgb24gczM5MCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliMzkyYWU2MWNiZjJjMGE5OWYyNmJiODJlNzVmMzk2YmQ4OGFmZjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxMzowNDoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTQ2Nyw2ICYjNDM7NDY3LDcgQEAgc3RydWN0IGt2bV92bV9zdGF0IHsKIAl1NjQgZ21hcF9zaGFkb3dfcjNfZW50cnk7CiAJdTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5OwogCXU2NCBnbWFwX3NoYWRvd19wZ19lbnRyeTsKJiM0MzsJdTY0IGluamVjdF9yZWRpc3Q7CiB9OwogCiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3QgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggOGYyNGJjZDFhNmQzNi4uZTY3Y2RlZGI1YWVjZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC0zNjcsNiAmIzQzOzM2NywzNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gYWN0aXZlX21hc2s7CiB9CiAKJiM0Mzt2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1OwomIzQzOwlpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXM7CiYjNDM7CiYjNDM7CWlmICghUkVBRF9PTkNFKGt2bS0mZ3Q7YXJjaC5mbG9hdF9pbnQucGVuZGluZ19pcnFzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJb25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoJmFtcDtrdm0tJmd0O29ubGluZV92Y3B1cyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2UKJiM0MzsJICogbWlnaHQgYnVybiB0b28gbWFueSBjeWNsZXMgYnV0IGFwYXJ0IGZyb20gdGhhdCB3YWtpbmcgYQomIzQzOwkgKiB2Y3B1IGlzIG5vdCBoYXJtZnVsLgomIzQzOwkgKi8KJiM0MzsJc2lnY3B1ID0gZmluZF9maXJzdF9iaXQoa3ZtLSZndDthcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTsKJiM0MzsJLyogV2VsbCBub2JvZHkmIzM5O3Mgc2xlZXBpbmcgc28gc29tZW9uZSB3aWxsIGxpa2VseSB0YWtlIHRoZSBJUlEgc29vbiAqLwomIzQzOwlpZiAoc2lnY3B1ID09IG9ubGluZV92Y3B1cykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpOwomIzQzOwkJaWYgKGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpKSB7CiYjNDM7CQkJa3ZtLSZndDtzdGF0LmluamVjdF9yZWRpc3QmIzQzOyYjNDM7OwomIzQzOwkJCWt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRzdF92Y3B1KTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLSZndDthcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzLCAmIzQzOyYjNDM7c2lnY3B1KTsKJiM0MzsJfSB3aGlsZSAoc2lnY3B1ICZsdDsgb25saW5lX3ZjcHVzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX3NldF9jcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJa3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfV0FJVCk7CkBAIC0xOTE1LDIyICYjNDM7MTk0Niw0OCBAQCBzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2soc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKQomIzQzO3sKJiM0MzsJdTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS0mZ3Q7dHlwZSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIEtWTV9TMzkwX01DSEs6CiYjNDM7CQkvKiBPbmx5IHJlcHJlc3NpYmxlIG1hY2hpbmUgY2hlY2tzIGFyZSBmbG9hdGluZyAqLwomIzQzOwkJcmV0dXJuIEJJVChJUlFfUEVORF9NQ0hLX1JFUCk7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzoKJiM0MzsJCXJldHVybiBCSVQoSVJRX1BFTkRfVklSVElPKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRToKJiM0MzsJCXJldHVybiBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0UpIHwKJiM0MzsJCSAgICAgICBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0VfRVYpOwomIzQzOwljYXNlIEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORToKJiM0MzsJCXJldHVybiBCSVQoSVJRX1BFTkRfUEZBVUxUX0RPTkUpOwomIzQzOwljYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOgomIzQzOwkJcmV0dXJuIEJJVChpc2NfdG9faXJxX3R5cGUoaW50X3dvcmRfdG9faXNjKGludGktJmd0O2lvLmlvX2ludF93b3JkKSkpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKgogICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LgogICovCi1zdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHR5cGUpCiYjNDM7c3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1OwogCWludCBzaWdjcHUsIG9ubGluZV92Y3B1cywgbnJfdHJpZXMgPSAwOwomIzQzOwl1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLSZndDt0eXBlKTsKJiM0MzsJdTY0IGlycV9wZW5kX21hc2s7CiAKIAlvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZCgmYW1wO2t2bS0mZ3Q7b25saW5lX3ZjcHVzKTsKIAlpZiAoIW9ubGluZV92Y3B1cykKIAkJcmV0dXJuOwogCiYjNDM7CWlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2soaW50aSk7CiAJZm9yIChzaWdjcHUgPSBrdm0tJmd0O2FyY2guZmxvYXRfaW50Lmxhc3Rfc2xlZXBfY3B1OyA7IHNpZ2NwdSYjNDM7JiM0MzspIHsKIAkJc2lnY3B1ICU9IG9ubGluZV92Y3B1czsKIAkJZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpOwotCQlpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkpCiYjNDM7CQlpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpICZhbXA7IGlycV9wZW5kX21hc2spCiAJCQlicmVhazsKIAkJLyogYXZvaWQgZW5kbGVzcyBsb29wcyBpZiBhbGwgdmNwdXMgYXJlIHN0b3BwZWQgKi8KIAkJaWYgKG5yX3RyaWVzJiM0MzsmIzQzOyAmZ3Q7PSBvbmxpbmVfdmNwdXMpCkBAIC0xOTgyLDcgJiM0MzsyMDM5LDcgQEAgc3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCV9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTsKJiM0MzsJX19mbG9hdGluZ19pcnFfa2ljayhrdm0sIGludGkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggNTE4YTY5YzU1ZTg1Yy4uZDZkNDY2ODhkOTgwOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtODYsNiAmIzQzOzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7CiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19yM19lbnRyeSksCiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksCiAJU1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksCiYjNDM7CVNUQVRTX0RFU0NfQ09VTlRFUihWTSwgaW5qZWN0X3JlZGlzdCksCiB9OwogCiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2hlYWRlciBrdm1fdm1fc3RhdHNfaGVhZGVyID0gewpAQCAtNDU3Miw2ICYjNDM7NDU3Myw4IEBAIHN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcmMgPSBrdm1fczM5MF9kZWxpdmVyX3BlbmRpbmdfaW50ZXJydXB0cyh2Y3B1KTsKIAkJaWYgKHJjIHx8IGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkKIAkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCWRpc3RyaWJ1dGVfZmxvYXRfaXJxcyh2Y3B1LSZndDtrdm0pOwogCX0KIAogCXJjID0ga3ZtX3MzOTBfaGFuZGxlX3JlcXVlc3RzKHZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCmluZGV4IDZkMjg0MmZiNzFhMzMuLmEyYmNmNGFjYWMxNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKQEAgLTM3NSw2ICYjNDM7Mzc1LDcgQEAgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKTsKIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7CiYjNDM7dm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTsKIGludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwKIAkJCQkgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFMzOTAgS1ZNIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBLVk0gb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCBzZWVtcyB0byBpbnRyb2R1Y2UgYSBuZXcgZnVuY3Rpb24sIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLCBsb2NhdGVkIGluIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYCwgYW5kIGltcG9ydGFudGx5LCB0aGlzIG5ldyBmdW5jdGlvbiBpcyAqY2FsbGVkKiBmcm9tIGB2Y3B1X3ByZV9ydW5gIGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgLiBBbHNvLCB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgYF9fZmxvYXRpbmdfaXJxX2tpY2tgLCBzcGVjaWZpY2FsbHkgaG93IGl0IHVzZXMgYGludGlfdG9faXJxX3BlbmRfbWFza2AgdG8gZGVjaWRlIGlmIGEgdkNQVSBjYW4gaGFuZGxlIGFuIGludGVycnVwdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZXZlbiBzb21ldGhpbmcgd2Ugc2hvdWxkIGJvdGhlciB3aXRoIGZ1enppbmcuIFNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggS1ZNIG9uIHMzOTAsIHRoYXQgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBJIGtub3cgc3l6a2FsbGVyIGlzIGFscmVhZHkgaGl0dGluZyB0aGF0IGFyZWEuIE5vdyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoZXNlIG5ldy9tb2RpZmllZCBmdW5jdGlvbnMgd2FycmFudCBhdHRlbnRpb24uCgpMZXQmIzM5O3Mgc2VlLCB0aGUgZnVuY3Rpb25zIHRvdWNoZWQgYXJlOiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYGludGlfdG9faXJxX3BlbmRfbWFza2AsIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgYF9faW5qZWN0X3ZtYCwgYW5kIGB2Y3B1X3ByZV9ydW5gLgoKT2theSwgdGhlIGNydWNpYWwgcGFydCBpcyB0byBkZXRlcm1pbmUgYWNjZXNzaWJpbGl0eSBmb3IgZnV6emluZy4gYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIHNpbmNlIGl0JiMzOTtzIG5vbi1zdGF0aWMsIGNhbiBiZSBkaXJlY3RseSBhZGRlZCB0byBGb2N1c1N5bWJvbHMuIFRoYXQmIzM5O3MgYSBncmVlbiBsaWdodCEgTm93LCB0aGUgb3RoZXJzOiBgaW50aV90b19pcnFfcGVuZF9tYXNrYCwgYF9fZmxvYXRpbmdfaXJxX2tpY2tgLCBgX19pbmplY3Rfdm1gLCBhbmQgYHZjcHVfcHJlX3J1bmAgYXJlIGFsbCBzdGF0aWMuIFRoaXMgbWFrZXMgdGhlbSBhIGJpdCBtb3JlIGNoYWxsZW5naW5nIHRvIHRhcmdldCBkaXJlY3RseS4gSG93ZXZlciwgdGhlIG5vbi1zdGF0aWMgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2Agd2lsbCBicmluZyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBjbG9zZXIgdG8gdGhlIHN1cmZhY2UuIFdhaXQsIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGdvb2QgbmV3cyEKCkFscmlnaHQsIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGEgYml0IGRlZXBlciBpbnRvIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgZXhhY3QgbmF0dXJlIG9mIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc3RyaWJ1dGVfZmxvYXRfaXJxcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzE4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbGl2ZXJhYmxlX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzY5LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzA6dm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzEte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00NTU4PXN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU3Ni1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTc3Olx0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1NzgtXHR9XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTM3Nz12b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozNzg6dm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zNzktaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgczM5MCBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgS2NvbmZpZyBzZXR0aW5ncyBmb3IgczM5MCB2aXJ0dWFsaXphdGlvbiB1c2luZyBLVk0uIFRoaXMgbWVhbnMgbmF2aWdhdGluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyB0byBjb25maXJtIHdoaWNoIG9wdGlvbnMgYXJlIHByZXNlbnQsIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBjb25maXJtIHRoZSBzdXBwb3J0IGlzIHRoZXJlIGFuZCBub3Qgc29tZWhvdyBhY2NpZGVudGFsbHkgZGlzYWJsZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBLVk0tcmVsYXRlZCBzeW1ib2xzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMg4oCTIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fUzM5MGAsIGFuZCBhbnl0aGluZyB0aGF0IHJlbGF0ZXMgdG8gdGhlIHNwZWNpZmljIHMzOTAgaGFyZHdhcmUgZmVhdHVyZXMgbmVjZXNzYXJ5IGZvciB2aXJ0dWFsaXphdGlvbi4gSSYjMzk7bGwgYWxzbyBiZSBjaGVja2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llczsgSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgdHJpcHBlZCB1cCBieSBzb21lIHN1YnRsZSBidWlsZC10aW1lIGlzc3VlLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cCBjb3JyZWN0bHkuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNIEluamVjdGlvbioqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyB1c2luZyBLVk0uIFRoYXQmIzM5O3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3lzdGVtIHdvcmtzLCBJIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGluZ3MgYXJlIGluamVjdGVkIGludG8gdGhlIHZpcnR1YWwgbWFjaGluZS4gTXkgaW5pdGlhbCB0YXJnZXRzIGFyZSBjbGVhcmx5IGBfX2luamVjdF92bWAgYW5kIGBrdm1fczM5MF9pbmplY3Rfdm1gLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByb2JhYmx5IGNlbnRyYWwgdG8gdGhlIGluamVjdGlvbiBtZWNoYW5pc20uIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgY29kZSBpbiB0aG9zZSByb3V0aW5lcywgdW5kZXJzdGFuZGluZyB0aGVpciBwYXJhbWV0ZXJzLCBjb250cm9sIGZsb3csIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgdGhleSBpbmNvcnBvcmF0ZS4gSG9wZWZ1bGx5LCBJJiMzOTtsbCB1bmNvdmVyIHRoZSBpbmplY3Rpb24gbWV0aG9kIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBzcGVjaWZpYyBLVk0gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDE1PXN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ1LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDQ2OmludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ3LVx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4MC1cdH1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4MTpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVx1MDAzZXR5cGUsIHMzOTBpbnQtXHUwMDNlcGFybSwgczM5MGludC1cdTAwM2VwYXJtNjQsXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODItXHRcdFx0XHQgMik7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODIwPXN0YXRpYyBpbnQga3ZtX3MzOTBfaW5qZWN0X2FpcnEoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzOC1cdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXHUwMDNlc3VwcHJlc3NpYmxlKSB7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mzk6XHRcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODQwLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg1Mi1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mjg1MzpcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODU0LVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzgwOD1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4NTAtXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVx1MDAzZXN1cHByZXNzaWJsZSkge1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozODUxOlx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg1Mi1cdFx0aWYgKHJldCA9PSAwKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcwLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozODcxOlx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4NzItXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgKGZpLVx1MDAzZXNpbW0gXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cdTAwM2Vpc2MpKSkge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk0Ny1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTQ4Olx0XHRyID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjk0OS1cdFx0aWYgKHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0NzU9c3RhdGljIHZvaWQgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgc3RhcnRfdG9rZW4sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0OTMtXHRcdGludGkucGFybTY0ID0gdG9rZW47XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDQ5NDpcdFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKHZjcHUtXHUwMDNla3ZtLCBcdTAwMjZpbnRpLCBpbnRpX21lbSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5NS1cdFx0aWYgKHJldClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzc4PXZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6Mzc5OmludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODAtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCxcbi0tXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaD04MT1UUkFDRV9FVkVOVChrdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AsXG4tLVxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmgtMTI0LVxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmg6MTI1OlRSQUNFX0VWRU5UKGt2bV9zMzkwX2luamVjdF92bSxcbmFyY2gvczM5MC9rdm0vdHJhY2UtczM5MC5oLTEyNi1cdCAgICBUUF9QUk9UTyhfX3U2NCB0eXBlLCBfX3UzMiBwYXJtLCBfX3U2NCBwYXJtNjQsIGludCB3aG8pLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNL3MzOTAgSW50ZXJydXB0IEluamVjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgc2luY2UgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIGJlaW5nIHVzZWQuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgYW5kIHRoYXQmIzM5O3MgdGhlIHJlYWwgaW50ZXJlc3RpbmcgcGFydC4KCk15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIGJlY29tZXM6CiogICBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYAoqICAgYGt2bV9zMzkwX2luamVjdF92bWAKClNpbmNlLCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBpcyBjYWxsZWQgZnJvbSBgdmNwdV9wcmVfcnVuYCwgYW5kIGl0IGFmZmVjdHMgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHdoaWNoIGlzIHVzZWQgYnkgYF9faW5qZWN0X3ZtYCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBrdm1fczM5MF9pbmplY3Rfdm1gLiBUaGF0JiMzOTtzIHRoZSBjYWxsIGNoYWluLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IGEgZmV3IHRoaW5ncy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCAqaXMqIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLCBhbmQgdGhhdCBpdCBpc24mIzM5O3Qgc3RhdGljLiBJdCYjMzk7cyBkZWNsYXJlZCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oYCBhbmQgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AsIGFuZCBpdCYjMzk7cyBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBHb29kLCB0aGF0IG1ha2VzIHRoaW5ncyBlYXNpZXIuIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIGFsc28gbm90IHN0YXRpYywgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdC4KCkkgc2hvdWxkIHByb2JhYmx5IGFsc28gdGFrZSBhIHF1aWNrIGxvb2sgYXQgaG93IGB2Y3B1X3ByZV9ydW5gIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGFyZSB3b3JraW5nIGluIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhpcyBuZXcgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBzY2hlbWUsIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y3B1X3ByZV9ydW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDUzMj1ib29sIGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU1Ny1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTU4OnN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTU5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDc5ND1zdGF0aWMgaW50IF9fdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00ODA1LVx0d2hpbGUgKHRydWUpIHtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0ODA2Olx0XHRyYyA9IHZjcHVfcHJlX3J1bih2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00ODA3LVx0XHRrdm1fdmNwdV9zcmN1X3JlYWRfdW5sb2NrKHZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDM5CgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gczM5MCBJbnRlcnJ1cHQgRGVsaXZlcnkgUGF0Y2gqKgoKT2theSwgc28gYHZjcHVfcHJlX3J1bmAgaXMgY2FsbGVkIGZyb20gYF9fdmNwdV9ydW5gLCB3aGljaCBpdHNlbGYgaXMgdHJpZ2dlcmVkIGJ5IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIFJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29kZSBwYXRoLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBwYXRjaCBtYWtlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBob3cgS1ZNIGhhbmRsZXMgaW50ZXJydXB0cyBvbiBzMzkwLCBhbmQgdGhhdCYjMzk7cyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgdGhpbmcgSSYjMzk7bSBsb29raW5nIGZvci4KClNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgd2hpY2ggc291bmRzIGxpa2UgaXQmIzM5O3MgZGVzaWduZWQgdG8gcHVzaCBmbG9hdGluZyBpbnRlcnJ1cHRzIHRvIGlkbGUgVkNQVXMuIEFsc28sIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBpcyBiZWluZyB0d2Vha2VkIHRvIHVzZSBgaW50aV90b19pcnFfcGVuZF9tYXNrYCB0byBwcmV2ZW50IGtpY2tpbmcgYSBWQ1BVIHRoYXQmIzM5O3MgdW5hYmxlIHRvIHJlY2VpdmUgdGhlIGludGVycnVwdC4KClRoaXMgaXMgc2NyZWFtaW5nICYjMzQ7RlVaWiBNRSEmIzM0OyBhdCBtZS4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSBLVk0gaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiwgYW5kIHRoZSBtb2RpZmljYXRpb25zIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHRpbWluZyBpc3N1ZXMgb3IgY29ybmVyIGNhc2VzLiBJJiMzOTtsbCBmbGFnIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIGFuZCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBhcyBmb2N1cyBzeW1ib2xzLiBBbmQgb2YgY291cnNlLCBJJiMzOTtsbCBuZWVkIGBLVk1gIGVuYWJsZWQgZm9yIHRoZSBmdXp6aW5nLiBUaGlzIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBkaXNjb3ZlcmluZyBzb21lIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3RyaWJ1dGVfZmxvYXRfaXJxcyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9pbmplY3Rfdm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBzMzkwIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYyBieSBpbnRyb2R1Y2luZyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcyBhbmQgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB0byBjaGVjayBpZiBhIFZDUFUgY2FuIHJlY2VpdmUgdGhlIGludGVycnVwdCBiZWZvcmUga2lja2luZyBpdC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgb24gczM5MCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGlzdHJpYnV0ZV9mbG9hdF9pcnFzJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92bSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHMzOTAgaW50ZXJydXB0IGRlbGl2ZXJ5IGxvZ2ljIGJ5IGludHJvZHVjaW5nIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgaW50ZXJydXB0cyB0byBpZGxlIFZDUFVzIGFuZCBtb2RpZnlpbmcgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIGNoZWNrIGlmIGEgVkNQVSBjYW4gcmVjZWl2ZSB0aGUgaW50ZXJydXB0IGJlZm9yZSBraWNraW5nIGl0LiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBvbiBzMzkwIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGxvZ2ljIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgaW50ZXJydXB0cyB0byBpZGxlIFZDUFVzLiBJdCBpbnRyb2R1Y2VzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXMoKWAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBga3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrYCBhbmQgd2FrZXMgdXAgVkNQVXMgdGhhdCBjYW4gZGVsaXZlciB0aGUgcGVuZGluZyBpbnRlcnJ1cHRzLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2Zsb2F0aW5nX2lycV9raWNrKClgIHRvIHRha2UgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpYCBpbnN0ZWFkIG9mIGEgYHU2NCB0eXBlYCwgYW5kIHVzZXMgYGludGlfdG9faXJxX3BlbmRfbWFzaygpYCB0byBkZXRlcm1pbmUgdGhlIHBlbmRpbmcgSVJRIG1hc2suXG5cbkFsbCBmaWVsZHMgYWNjZXNzZWQgYnkgdGhlIG5ldyBsb2dpYyAoc3VjaCBhcyBgaW50aS1cdTAwM2V0eXBlYCBhbmQgYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBpbnRpYCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgdXNpbmcgYGt6YWxsb2NgICh2aWEgYGt6YWxsb2Nfb2JqKClgKSBpbiBwYXRocyBsaWtlIGBrdm1fYXJjaF92bV9pb2N0bCgpYCwgYGt2bV9zMzkwX2luamVjdF9haXJxKClgLCBhbmQgYF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oKWAsIGFuZCB0aGVuIHBvcHVsYXRlZCB3aXRoIGZ1bGx5IGluaXRpYWxpemVkIGRhdGEgZnJvbSB1c2VyIHNwYWNlIG9yIGtlcm5lbCBsb2dpYy4gSW4gdGhlIGNhc2Ugb2YgYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soKWAsIHdoZXJlIGBpbnRpYCBpcyBhIHN0YWNrIHZhcmlhYmxlLCBvbmx5IHRoZSBgdHlwZWAgZmllbGQgaXMgcmVhZCBieSB0aGUgbmV3IGxvZ2ljLCBhbmQgaXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgS1ZNX1MzOTBfTUNIS2AuXG5cblRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYW55IG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YjM5MmFlNjFjYmYyYzBhOTlmMjZiYjgyZTc1ZjM5NmJkODhhZmY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTM6MDQ6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGI0MTgyY2E0NDM1ZmIuLjFkNjJiZGQ3YWNhNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC00NjcsNiAmIzQzOzQ2Nyw3IEBAIHN0cnVjdCBrdm1fdm1fc3RhdCB7CiAJdTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5OwogCXU2NCBnbWFwX3NoYWRvd19zZ19lbnRyeTsKIAl1NjQgZ21hcF9zaGFkb3dfcGdfZW50cnk7CiYjNDM7CXU2NCBpbmplY3RfcmVkaXN0OwogfTsKIAogc3RydWN0IGt2bV9hcmNoX21lbW9yeV9zbG90IHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IDhmMjRiY2QxYTZkMzYuLmU2N2NkZWRiNWFlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwpAQCAtMzY3LDYgJiM0MzszNjcsMzcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIGFjdGl2ZV9tYXNrOwogfQogCiYjNDM7dm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTsKJiM0MzsJaW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzOwomIzQzOwomIzQzOwlpZiAoIVJFQURfT05DRShrdm0tJmd0O2FyY2guZmxvYXRfaW50LnBlbmRpbmdfaXJxcykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKCZhbXA7a3ZtLSZndDtvbmxpbmVfdmNwdXMpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOb3QgdG9vIHdvcnJpZWQgYWJvdXQgc3luY2hyb25pemF0aW9uIGZvciBpZGxlX21hc2suIFdlCiYjNDM7CSAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGEKJiM0MzsJICogdmNwdSBpcyBub3QgaGFybWZ1bC4KJiM0MzsJICovCiYjNDM7CXNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS0mZ3Q7YXJjaC5pZGxlX21hc2ssIG9ubGluZV92Y3B1cyk7CiYjNDM7CS8qIFdlbGwgbm9ib2R5JiMzOTtzIHNsZWVwaW5nIHNvIHNvbWVvbmUgd2lsbCBsaWtlbHkgdGFrZSB0aGUgSVJRIHNvb24gKi8KJiM0MzsJaWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTsKJiM0MzsJCWlmIChkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSkgewomIzQzOwkJCWt2bS0mZ3Q7c3RhdC5pbmplY3RfcmVkaXN0JiM0MzsmIzQzOzsKJiM0MzsJCQlrdm1fczM5MF92Y3B1X3dha2V1cChkc3RfdmNwdSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlzaWdjcHUgPSBmaW5kX25leHRfYml0KGt2bS0mZ3Q7YXJjaC5pZGxlX21hc2ssIG9ubGluZV92Y3B1cywgJiM0MzsmIzQzO3NpZ2NwdSk7CiYjNDM7CX0gd2hpbGUgKHNpZ2NwdSAmbHQ7IG9ubGluZV92Y3B1cyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgX19zZXRfY3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1dBSVQpOwpAQCAtMTkxNSwyMiAmIzQzOzE5NDYsNDggQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSkKJiM0Mzt7CiYjNDM7CXU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktJmd0O3R5cGUpOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBLVk1fUzM5MF9NQ0hLOgomIzQzOwkJLyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi8KJiM0MzsJCXJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApOwomIzQzOwljYXNlIEtWTV9TMzkwX0lOVF9WSVJUSU86CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX1ZJUlRJTyk7CiYjNDM7CWNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFKSB8CiYjNDM7CQkgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6CiYjNDM7CQlyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTsKJiM0MzsJY2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDoKJiM0MzsJCXJldHVybiBCSVQoaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLSZndDtpby5pb19pbnRfd29yZCkpKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC4KICAqLwotc3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHU2NCB0eXBlKQomIzQzO3N0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTsKIAlpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDsKJiM0MzsJdTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS0mZ3Q7dHlwZSk7CiYjNDM7CXU2NCBpcnFfcGVuZF9tYXNrOwogCiAJb25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoJmFtcDtrdm0tJmd0O29ubGluZV92Y3B1cyk7CiAJaWYgKCFvbmxpbmVfdmNwdXMpCiAJCXJldHVybjsKIAomIzQzOwlpcnFfcGVuZF9tYXNrID0gaW50aV90b19pcnFfcGVuZF9tYXNrKGludGkpOwogCWZvciAoc2lnY3B1ID0ga3ZtLSZndDthcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUmIzQzOyYjNDM7KSB7CiAJCXNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7CiAJCWRzdF92Y3B1ID0ga3ZtX2dldF92Y3B1KGt2bSwgc2lnY3B1KTsKLQkJaWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpKQomIzQzOwkJaWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSAmYW1wOyBpcnFfcGVuZF9tYXNrKQogCQkJYnJlYWs7CiAJCS8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovCiAJCWlmIChucl90cmllcyYjNDM7JiM0MzsgJmd0Oz0gb25saW5lX3ZjcHVzKQpAQCAtMTk4Miw3ICYjNDM7MjAzOSw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgdHlwZSk7CiYjNDM7CV9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCBpbnRpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDUxOGE2OWM1NWU4NWMuLmQ2ZDQ2Njg4ZDk4MDggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTg2LDYgJiM0Mzs4Niw3IEBAIGNvbnN0IHN0cnVjdCBrdm1fc3RhdHNfZGVzYyBrdm1fdm1fc3RhdHNfZGVzY1tdID0gewogCVNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcjNfZW50cnkpLAogCVNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfc2dfZW50cnkpLAogCVNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcGdfZW50cnkpLAomIzQzOwlTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLAogfTsKIAogY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHsKQEAgLTQ1NzIsNiAmIzQzOzQ1NzMsOCBAQCBzdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCXJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7CiAJCWlmIChyYyB8fCBndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpCiAJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS0mZ3Q7a3ZtKTsKIAl9CiAKIAlyYyA9IGt2bV9zMzkwX2hhbmRsZV9yZXF1ZXN0cyh2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAppbmRleCA2ZDI4NDJmYjcxYTMzLi5hMmJjZjRhY2FjMTZlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCkBAIC0zNzUsNiAmIzQzOzM3NSw3IEBAIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGt2bV9zMzkwX2lkbGVfd2FrZXVwKHN0cnVjdCBocnRpbWVyICp0aW1lcik7CiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9zMzkwX2NsZWFyX2xvY2FsX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3MzOTBfY2xlYXJfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pOwomIzQzO3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsCiAJCQkJICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDgxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogOTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUzM5MCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBmb2N1c2VkIG9uIHJlZmluaW5nIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgUzM5MCBLVk0gZW52aXJvbm1lbnQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIGludHJvZHVjaW5nIHNvbWUgb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIGludGVycnVwdCBkaXN0cmlidXRpb24gYW5kIHBvdGVudGlhbGx5IGltcHJvdmluZyB0aGUgd2FrZXVwIG1lY2hhbmlzbSBmb3IgaWRsZSB2Q1BVcy4gVGhlIGNvcmUgaWRlYSBzZWVtcyB0byBiZSBhYm91dCBlZmZpY2llbnRseSBkaXN0cmlidXRpbmcgcGVuZGluZyBpbnRlcnJ1cHRzIHRvIHRoZSBhcHByb3ByaWF0ZSB2aXJ0dWFsIENQVXMuCgpJJiMzOTttIHNlZWluZyB0aGF0IGEgbmV3IGZpZWxkLCBgaW5qZWN0X3JlZGlzdGAsIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBga3ZtX3ZtX3N0YXRgIHN0cnVjdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdpdGggdGhpcyBhZGRpdGlvbj8gRGVidWdmcyBvciBzaW1pbGFyIGlzIG9mdGVuIHVzZWQgdG8gZXhwb3NlIGBrdm1fdm1fc3RhdGAgdG8gdXNlcnNwYWNlLiBGb3J0dW5hdGVseSwgaXQmIzM5O3MganVzdCBhIHN0cnVjdCBvZiBgdTY0YCBmaWVsZHMsIGFuZCB0aGUgbmV3IGZpZWxkIGlzIGFkZGVkIGF0IHRoZSBlbmQgYW5kIGlzIGxpa2VseSB6ZXJvZWQgb24gYWxsb2NhdGlvbiwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgcXVpY2tseSB2ZXJpZmllZCB0aGF0IGBrdm1fdm1fc3RhdGAgaXMgZWl0aGVyIGVtYmVkZGVkIHdpdGhpbiB0aGUgYHN0cnVjdCBrdm1gIG9yIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgd2hpY2ggc2hvdWxkIGhhbmRsZSB0aGUgaW5pdGlhbGl6YXRpb24uIEkgY2hlY2tlZCB0aGUgYGluY2x1ZGVgIGhlYWRlcnMgdG8gYmUgc3VyZS4KClRoZSBuZXh0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3Igd2FraW5nIHVwIGlkbGUgdkNQVXMgdGhhdCBoYXZlIHBlbmRpbmcgaW50ZXJydXB0cy4gVGhhdCYjMzk7cyBhIHNlbnNpYmxlIG9wdGltaXphdGlvbi4KClRoZSBtb2RpZmljYXRpb24gb2YgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIHRha2UgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpYCBpbnN0ZWFkIG9mIGp1c3QgYSBgdTY0IHR5cGVgIHJhaXNlZCBhIGZsYWcuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBuZXcgZnVuY3Rpb24sIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggaW50ZXJydXB0IHR5cGVzIGFyZSBwZW5kaW5nLiBJIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgYGludGlgIGlzIHBvcHVsYXRlZCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgLCB3aGljaCBnZXRzIHVzZWQgd2l0aGluIGEgYHN3aXRjaGAgc3RhdGVtZW50IGluIHRoZSBgaW50aV90b19pcnFfcGVuZF9tYXNrYCBmdW5jdGlvbi4KCk5vdywgYmVmb3JlIHRoZSBwYXRjaCwgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIG9ubHkgdXNlZCB0aGUgYHR5cGVgIGZpZWxkLiBOb3csIGl0IHJlYWRzIHRoZSBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgIGlmIHRoZSBgdHlwZWAgZmFsbHMgaW4gdGhlIGBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWGAgcmFuZ2UuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpbnRpYCBpcyBhbHdheXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiBgX19mbG9hdGluZ19pcnFfa2lja2AgaXMgY2FsbGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYF9faW5qZWN0X3ZtYCAod2hpY2ggdGFrZXMgYGludGlgKSBhbmQgaG93IGBpbnRpYCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQsIG1vc3QgbGlrZWx5IGluIGBrdm1fczM5MF9pbmplY3Rfdm1gLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCByZWFkcy4gSG9wZWZ1bGx5LCBLTVNBTiB3b3VsZCBjYXRjaCBpdCBpZiBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgIHdhc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEkgY2hlY2tlZCBob3cgYGludGlgIGlzIHBvcHVsYXRlZCBmcm9tIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YC4gSSYjMzk7bSByZWFzb25hYmx5IGNvbmZpZGVudCB0aGF0IGBpbnRpYCAqc2hvdWxkKiBiZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gSSB3aWxsIGxvb2sgaW4gYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2luamVjdF92bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDE1PXN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ1LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDQ2OmludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ3LVx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4MC1cdH1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4MTpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVx1MDAzZXR5cGUsIHMzOTBpbnQtXHUwMDNlcGFybSwgczM5MGludC1cdTAwM2VwYXJtNjQsXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODItXHRcdFx0XHQgMik7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODIwPXN0YXRpYyBpbnQga3ZtX3MzOTBfaW5qZWN0X2FpcnEoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzOC1cdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXHUwMDNlc3VwcHJlc3NpYmxlKSB7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mzk6XHRcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODQwLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg1Mi1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mjg1MzpcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODU0LVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzgwOD1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4NTAtXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVx1MDAzZXN1cHByZXNzaWJsZSkge1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozODUxOlx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg1Mi1cdFx0aWYgKHJldCA9PSAwKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcwLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozODcxOlx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4NzItXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgKGZpLVx1MDAzZXNpbW0gXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cdTAwM2Vpc2MpKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGt2bV9zMzkwX2luamVjdF92bWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1fczM5MF9pbmplY3Rfdm1gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBzdGVwLWJ5LXN0ZXAuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgVk0sIHdoYXQgYXNwZWN0cyBvZiB0aGUgUy8zOTAgYXJjaGl0ZWN0dXJlIGl0IHRhcmdldHMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIG9yIGVkZ2UgY2FzZXMuIFRoaXMgd2lsbCByZXF1aXJlIGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHByb2JhYmx5IHNvbWUgY3Jvc3MtcmVmZXJlbmNpbmcgd2l0aCByZWxldmFudCBkb2N1bWVudGF0aW9uIG9uIHRoZSBLVk0gczM5MCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBnZW5lcmFsIEtWTSBBUEkuIEkgd2FudCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1vZGVsIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA0NjpcdGludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuMjA0NzpcdFx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuMjA0ODpcdHtcbjIwNDk6XHRcdGludCByYztcbjIwNTA6XHRcbjIwNTE6XHRcdGludGktXHUwMDNldHlwZSA9IHMzOTBpbnQtXHUwMDNldHlwZTtcbjIwNTI6XHRcdHN3aXRjaCAoaW50aS1cdTAwM2V0eXBlKSB7XG4yMDUzOlx0XHRjYXNlIEtWTV9TMzkwX0lOVF9WSVJUSU86XG4yMDU0Olx0XHRcdFZNX0VWRU5UKGt2bSwgNSwgXCYjMzQ7aW5qZWN0OiB2aXJ0aW8gcGFybToleCxwYXJtNjQ6JWxseFwmIzM0OyxcbjIwNTU6XHRcdFx0XHQgczM5MGludC1cdTAwM2VwYXJtLCBzMzkwaW50LVx1MDAzZXBhcm02NCk7XG4yMDU2Olx0XHRcdGludGktXHUwMDNlZXh0LmV4dF9wYXJhbXMgPSBzMzkwaW50LVx1MDAzZXBhcm07XG4yMDU3Olx0XHRcdGludGktXHUwMDNlZXh0LmV4dF9wYXJhbXMyID0gczM5MGludC1cdTAwM2VwYXJtNjQ7XG4yMDU4Olx0XHRcdGJyZWFrO1xuMjA1OTpcdFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbjIwNjA6XHRcdFx0Vk1fRVZFTlQoa3ZtLCA0LCBcJiMzNDtpbmplY3Q6IHNjbHAgcGFybToleFwmIzM0OywgczM5MGludC1cdTAwM2VwYXJtKTtcbjIwNjE6XHRcdFx0aW50aS1cdTAwM2VleHQuZXh0X3BhcmFtcyA9IHMzOTBpbnQtXHUwMDNlcGFybTtcbjIwNjI6XHRcdFx0YnJlYWs7XG4yMDYzOlx0XHRjYXNlIEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORTpcbjIwNjQ6XHRcdFx0aW50aS1cdTAwM2VleHQuZXh0X3BhcmFtczIgPSBzMzkwaW50LVx1MDAzZXBhcm02NDtcbjIwNjU6XHRcdFx0YnJlYWs7XG4yMDY2Olx0XHRjYXNlIEtWTV9TMzkwX01DSEs6XG4yMDY3Olx0XHRcdFZNX0VWRU5UKGt2bSwgMywgXCYjMzQ7aW5qZWN0OiBtYWNoaW5lIGNoZWNrIG1jaWMgMHglbGx4XCYjMzQ7LFxuMjA2ODpcdFx0XHRcdCBzMzkwaW50LVx1MDAzZXBhcm02NCk7XG4yMDY5Olx0XHRcdGludGktXHUwMDNlbWNoay5jcjE0ID0gczM5MGludC1cdTAwM2VwYXJtOyAvKiB1cHBlciBiaXRzIGFyZSBub3QgdXNlZCAqL1xuMjA3MDpcdFx0XHRpbnRpLVx1MDAzZW1jaGsubWNpYyA9IHMzOTBpbnQtXHUwMDNlcGFybTY0O1xuMjA3MTpcdFx0XHRicmVhaztcbjIwNzI6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4yMDczOlx0XHRcdGludGktXHUwMDNlaW8uc3ViY2hhbm5lbF9pZCA9IHMzOTBpbnQtXHUwMDNlcGFybSBcdTAwM2VcdTAwM2UgMTY7XG4yMDc0Olx0XHRcdGludGktXHUwMDNlaW8uc3ViY2hhbm5lbF9uciA9IHMzOTBpbnQtXHUwMDNlcGFybSBcdTAwMjYgMHgwMDAwZmZmZnU7XG4yMDc1Olx0XHRcdGludGktXHUwMDNlaW8uaW9faW50X3Bhcm0gPSBzMzkwaW50LVx1MDAzZXBhcm02NCBcdTAwM2VcdTAwM2UgMzI7XG4yMDc2Olx0XHRcdGludGktXHUwMDNlaW8uaW9faW50X3dvcmQgPSBzMzkwaW50LVx1MDAzZXBhcm02NCBcdTAwMjYgMHgwMDAwMDAwMGZmZmZmZmZmdWxsO1xuMjA3NzpcdFx0XHRicmVhaztcbjIwNzg6XHRcdGRlZmF1bHQ6XG4yMDc5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjA4MDpcdFx0fVxuMjA4MTpcdFx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZtKHMzOTBpbnQtXHUwMDNldHlwZSwgczM5MGludC1cdTAwM2VwYXJtLCBzMzkwaW50LVx1MDAzZXBhcm02NCxcbjIwODI6XHRcdFx0XHRcdCAyKTtcbjIwODM6XHRcbjIwODQ6XHRcdHJjID0gX19pbmplY3Rfdm0oa3ZtLCBpbnRpKTtcbjIwODU6XHRcbjIwODY6XHRcdHJldHVybiByYztcbjIwODc6XHR9XG4yMDg4Olx0XG4yMDg5Olx0aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG4yMDkwOlx0XHRcdFx0ICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuMjA5MTpcdHtcbjIwOTI6XHRcdHJldHVybiBfX2luamVjdF92bShrdm0sIGludGkpO1xuMjA5MzpcdH1cbjIwOTQ6XHRcbjIwOTU6XHRpbnQgczM5MGludF90b19zMzkwaXJxKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NTEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVnZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgaW50aWAgZ2V0cyBpdHMgdmFsdWUuIEl0JiMzOTtzIGRpcmVjdGx5IHBvcHVsYXRlZCBmcm9tIGBzMzkwaW50YCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaWYgYHMzOTBpbnRgIGlzbiYjMzk7dCBpbml0aWFsaXplZCwgdGhlbiBuZWl0aGVyIHdpbGwgYGludGlgLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2UgdGhlIG9yaWdpbiBvZiBgczM5MGludGAuIEl0JiMzOTtzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCwgc28gSSBuZWVkIHRvIGZpbmQgaXRzIGluaXRpYWwgc2V0dGluZy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gTm93LCBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBrdm1fczM5MF9pbmplY3RfYWlycWAgYXBwZWFycyBpbiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODIwOlx0c3RhdGljIGludCBrdm1fczM5MF9pbmplY3RfYWlycShzdHJ1Y3Qga3ZtICprdm0sXG4yODIxOlx0XHRcdFx0XHRzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyKVxuMjgyMjpcdHtcbjI4MjM6XHRcdHN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50O1xuMjgyNDpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50ID0ge1xuMjgyNTpcdFx0XHQudHlwZSA9IEtWTV9TMzkwX0lOVF9JTygxLCAwLCAwLCAwKSxcbjI4MjY6XHRcdFx0LnBhcm0gPSAwLFxuMjgyNzpcdFx0XHQucGFybTY0ID0gaXNjX3RvX2ludF93b3JkKGFkYXB0ZXItXHUwMDNlaXNjKSxcbjI4Mjg6XHRcdH07XG4yODI5Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XG4yODMwOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuMjgzMTpcdFxuMjgzMjpcdFx0aW50IHJldCA9IDA7XG4yODMzOlx0XG4yODM0Olx0XHRpbnRpID0ga3phbGxvY19vYmooKmludGksIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4yODM1Olx0XHRpZiAoIWludGkpXG4yODM2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjgzNzpcdFxuMjgzODpcdFx0aWYgKCF0ZXN0X2t2bV9mYWNpbGl0eShrdm0sIDcyKSB8fCAhYWRhcHRlci1cdTAwM2VzdXBwcmVzc2libGUpIHtcbjI4Mzk6XHRcdFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG4yODQwOlx0XHRcdGlmIChyZXQpXG4yODQxOlx0XHRcdFx0a2ZyZWUoaW50aSk7XG4yODQyOlx0XHRcdHJldHVybiByZXQ7XG4yODQzOlx0XHR9XG4yODQ0Olx0XG4yODQ1Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZmaS1cdTAwM2VhaXNfbG9jaywgZmxhZ3MpO1xuMjg0NjpcdFx0aWYgKGZpLVx1MDAzZW5pbW0gXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cdTAwM2Vpc2MpKSB7XG4yODQ3Olx0XHRcdHRyYWNlX2t2bV9zMzkwX2FpcnFfc3VwcHJlc3NlZChhZGFwdGVyLVx1MDAzZWlkLCBhZGFwdGVyLVx1MDAzZWlzYyk7XG4yODQ4Olx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZmktXHUwMDNlYWlzX2xvY2ssIGZsYWdzKTtcbjI4NDk6XHRcdFx0a2ZyZWUoaW50aSk7XG4yODUwOlx0XHRcdHJldHVybiByZXQ7XG4yODUxOlx0XHR9XG4yODUyOlx0XG4yODUzOlx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbjI4NTQ6XHRcbjI4NTU6XHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAoZmktXHUwMDNlc2ltbSBcdTAwMjYgQUlTX01PREVfTUFTSyhhZGFwdGVyLVx1MDAzZWlzYykpKSB7XG4yODU2Olx0XHRcdGZpLVx1MDAzZW5pbW0gfD0gQUlTX01PREVfTUFTSyhhZGFwdGVyLVx1MDAzZWlzYyk7XG4yODU3Olx0XHRcdHRyYWNlX2t2bV9zMzkwX21vZGlmeV9haXNfbW9kZShhZGFwdGVyLVx1MDAzZWlzYyxcbjI4NTg6XHRcdFx0XHRcdFx0ICAgICAgIEtWTV9TMzkwX0FJU19NT0RFX1NJTkdMRSwgMik7XG4yODU5Olx0XHR9XG4yODYwOlx0XG4yODYxOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZpLVx1MDAzZWFpc19sb2NrLCBmbGFncyk7XG4yODYyOlx0XHRpZiAocmV0KVxuMjg2MzpcdFx0XHRrZnJlZShpbnRpKTtcbjI4NjQ6XHRcdHJldHVybiByZXQ7XG4yODY1Olx0fVxuMjg2NjpcdFxuMjg2NzpcdHN0YXRpYyBpbnQgZmxpY19pbmplY3RfYWlycShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4yODY4Olx0e1xuMjg2OTpcdFx0dW5zaWduZWQgaW50IGlkID0gYXR0ci1cdTAwM2VhdHRyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgwOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODA4Olx0aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG4zODA5Olx0XHRcdFx0ICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLFxuMzgxMDpcdFx0XHRcdCAgICAgIGJvb2wgbGluZV9zdGF0dXMpXG4zODExOlx0e1xuMzgxMjpcdFx0aW50IHJldCwgc2V0Yml0O1xuMzgxMzpcdFx0c3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcjtcbjM4MTQ6XHRcdHN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50O1xuMzgxNTpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpO1xuMzgxNjpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50ID0ge1xuMzgxNzpcdFx0XHRcdC50eXBlID0gS1ZNX1MzOTBfSU5UX0lPKDEsIDAsIDAsIDApLFxuMzgxODpcdFx0XHRcdC5wYXJtID0gMCxcbjM4MTk6XHRcdH07XG4zODIwOlx0XG4zODIxOlx0XHRrdm0tXHUwMDNlc3RhdC5pb18zOTBfaW5hdG9taWMmIzQzOyYjNDM7O1xuMzgyMjpcdFxuMzgyMzpcdFx0LyogV2UmIzM5O3JlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgMC1cdTAwM2UxIHRyYW5zaXRpb24uICovXG4zODI0Olx0XHRpZiAoIWxldmVsKVxuMzgyNTpcdFx0XHRyZXR1cm4gMDtcbjM4MjY6XHRcdGlmIChlLVx1MDAzZXR5cGUgIT0gS1ZNX0lSUV9ST1VUSU5HX1MzOTBfQURBUFRFUilcbjM4Mjc6XHRcdFx0cmV0dXJuIC1FV09VTERCTE9DSztcbjM4Mjg6XHRcbjM4Mjk6XHRcdGFkYXB0ZXIgPSBnZXRfaW9fYWRhcHRlcihrdm0sIGUtXHUwMDNlYWRhcHRlci5hZGFwdGVyX2lkKTtcbjM4MzA6XHRcdGlmICghYWRhcHRlcilcbjM4MzE6XHRcdFx0cmV0dXJuIC1FV09VTERCTE9DSztcbjM4MzI6XHRcbjM4MzM6XHRcdHMzOTBpbnQucGFybTY0ID0gaXNjX3RvX2ludF93b3JkKGFkYXB0ZXItXHUwMDNlaXNjKTtcbjM4MzQ6XHRcdHNldGJpdCA9IDE7XG4zODM1Olx0XHRyZXQgPSBhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoa3ZtLCBhZGFwdGVyLCBcdTAwMjZlLVx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XG4zODM2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMzgzNzpcdFx0XHRyZXR1cm4gLUVXT1VMREJMT0NLO1xuMzgzODpcdFx0aWYgKCFyZXQgfHwgYWRhcHRlci1cdTAwM2VtYXNrZWQpIHtcbjM4Mzk6XHRcdFx0a3ZtLVx1MDAzZXN0YXQuaW9fMzkwX2luYXRvbWljX25vX2luamVjdCYjNDM7JiM0Mzs7XG4zODQwOlx0XHRcdHJldHVybiAwO1xuMzg0MTpcdFx0fVxuMzg0MjpcdFxuMzg0MzpcdFx0aW50aSA9IGt6YWxsb2Nfb2JqKCppbnRpLCBHRlBfQVRPTUlDKTtcbjM4NDQ6XHRcdGlmICghaW50aSkge1xuMzg0NTpcdFx0XHRzZXRiaXQgPSAwO1xuMzg0NjpcdFx0XHRhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoa3ZtLCBhZGFwdGVyLCBcdTAwMjZlLVx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XG4zODQ3Olx0XHRcdHJldHVybiAtRVdPVUxEQkxPQ0s7XG4zODQ4Olx0XHR9XG4zODQ5Olx0XG4zODUwOlx0XHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVx1MDAzZXN1cHByZXNzaWJsZSkge1xuMzg1MTpcdFx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbjM4NTI6XHRcdFx0aWYgKHJldCA9PSAwKSB7XG4zODUzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjM4NTQ6XHRcdFx0fSBlbHNlIHtcbjM4NTU6XHRcdFx0XHRzZXRiaXQgPSAwO1xuMzg1NjpcdFx0XHRcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFx1MDAyNmUtXHUwMDNlYWRhcHRlciwgc2V0Yml0KTtcbjM4NTc6XHRcdFx0XHRrZnJlZShpbnRpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkzMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgczM5MGludGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIG91dHNldCwgd2hpY2ggaXMgZ29vZC4gVGhlbiwgYGludGlgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCwgYXMgd2Uga25vdywgZXNzZW50aWFsbHkgd3JhcHMgYGt6YWxsb2NgLiBBbmQgdGhhdCBtZWFucyBpdCYjMzk7cyBmdWxseSB6ZXJvZWQgb3V0IGZyb20gdGhlIGdldC1nby4gVGhhdCYjMzk7cyBhIHN0cm9uZyBzdGFydCBmb3Igc2FmZXR5LgoKTmV4dCwgYGt2bV9zMzkwX2luamVjdF92bWAgY29tZXMgaW50byBwbGF5LiBJdCBjb3BpZXMgZGF0YSBmcm9tIHRoZSBpbml0aWFsaXplZCBgczM5MGludGAgaW50byBgaW50aWAuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGEgY2xlYW4gc2xhdGUgaW4gYGludGlgIGFuZCBwb3B1bGF0aW5nIGl0IHdpdGgga25vd24sIHZhbGlkIHZhbHVlcyBmcm9tIGBzMzkwaW50YC4gVGhpcyBzZXRzIHVwIGBpbnRpYCB3aXRoIHRoZSBwcm9wZXIgdmFsdWVzLgoKRm9sbG93aW5nIHRoYXQsIGBfX2luamVjdF92bWAgY2FsbHMgYF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCBpbnRpKWAuIFRoZSBgX19mbG9hdGluZ19pcnFfa2lja2AgZnVuY3Rpb24gcmVhZHMgYGludGktJmd0O3R5cGVgIGFuZCBjYWxscyBgaW50aV90b19pcnFfcGVuZF9tYXNrKGludGkpYC4gVGhlIGNyaXRpY2FsIGNoZWNrIGlzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB3aGljaCByZWFkcyBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgLgoKR2l2ZW4gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBwb3B1bGF0aW9uIHByb2Nlc3Mg4oCTIGBpbnRpYCBpcyB6ZXJvZWQsIHRoZW4gZGF0YSBpcyBjb3BpZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZWQgYHMzOTBpbnRgIOKAkyB0aGVyZSBzaG91bGQgYmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBlbnRpcmUgcHJvY2Vzcy4gRXZlcnl0aGluZyBpcyBhY2NvdW50ZWQgZm9yLCBhbmQgYWxsIHJlYWRzIGFyZSBmcm9tIGluaXRpYWxpemVkIGZpZWxkcy4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdHJpcGxlLWNoZWNrLCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbHMgdG8gYGt2bV9zMzkwX2luamVjdF92bWAuIEl0JiMzOTtzIGFsd2F5cyB3aXNlIHRvIGxvb2sgYXQgYWxsIHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRocyB0byBlbnN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9pbmplY3Rfdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIwMTU9c3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwNDUtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwNDY6aW50IGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwNDctXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDgwLVx0fVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDgxOlx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZtKHMzOTBpbnQtXHUwMDNldHlwZSwgczM5MGludC1cdTAwM2VwYXJtLCBzMzkwaW50LVx1MDAzZXBhcm02NCxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4Mi1cdFx0XHRcdCAyKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI4MjA9c3RhdGljIGludCBrdm1fczM5MF9pbmplY3RfYWlycShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODM4LVx0aWYgKCF0ZXN0X2t2bV9mYWNpbGl0eShrdm0sIDcyKSB8fCAhYWRhcHRlci1cdTAwM2VzdXBwcmVzc2libGUpIHtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgzOTpcdFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4NDAtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODUyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODUzOlx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4NTQtXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zODA4PWludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg1MC1cdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXHUwMDNlc3VwcHJlc3NpYmxlKSB7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM4NTE6XHRcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFx1MDAyNnMzOTBpbnQsIGludGkpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODUyLVx0XHRpZiAocmV0ID09IDApIHtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4NzAtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM4NzE6XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg3Mi1cdGlmICghcmV0IFx1MDAyNlx1MDAyNiAoZmktXHUwMDNlc2ltbSBcdTAwMjYgQUlTX01PREVfTUFTSyhhZGFwdGVyLVx1MDAzZWlzYykpKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5Mjc9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQ3LVx0XHRcdHJldHVybiAtRU5PTUVNO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI5NDg6XHRcdHIgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcdTAwMjZzMzkwaW50LCBpbnRpKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQ5LVx0XHRpZiAocilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDQ3NT1zdGF0aWMgdm9pZCBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBzdGFydF90b2tlbixcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5My1cdFx0aW50aS5wYXJtNjQgPSB0b2tlbjtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NDk0Olx0XHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0odmNwdS1cdTAwM2Vrdm0sIFx1MDAyNmludGksIGludGlfbWVtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDk1LVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD0zNzg9dm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozNzk6aW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTM4MC1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuLS1cbmFyY2gvczM5MC9rdm0vdHJhY2UtczM5MC5oPTgxPVRSQUNFX0VWRU5UKGt2bV9zMzkwX3ZjcHVfc3RhcnRfc3RvcCxcbi0tXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjQtXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaDoxMjU6VFJBQ0VfRVZFTlQoa3ZtX3MzOTBfaW5qZWN0X3ZtLFxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmgtMTI2LVx0ICAgIFRQX1BST1RPKF9fdTY0IHR5cGUsIF9fdTMyIHBhcm0sIF9fdTY0IHBhcm02NCwgaW50IHdobyksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzc0CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5Mjc6XHRpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4yOTI4Olx0e1xuMjkyOTpcdFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4yOTMwOlx0XHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbjI5MzE6XHRcdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgYXR0cjtcbjI5MzI6XHRcdGludCByO1xuMjkzMzpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpO1xuMjkzNDpcdFxuMjkzNTpcdFx0c3dpdGNoIChpb2N0bCkge1xuMjkzNjpcdFx0Y2FzZSBLVk1fUzM5MF9JTlRFUlJVUFQ6IHtcbjI5Mzc6XHRcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xuMjkzODpcdFxuMjkzOTpcdFx0XHRyID0gLUVJTlZBTDtcbjI5NDA6XHRcdFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuMjk0MTpcdFx0XHRcdGJyZWFrO1xuMjk0MjpcdFx0XHRyID0gLUVGQVVMVDtcbjI5NDM6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMzOTBpbnQsIGFyZ3AsIHNpemVvZihzMzkwaW50KSkpXG4yOTQ0Olx0XHRcdFx0YnJlYWs7XG4yOTQ1Olx0XHRcdGludGkgPSBremFsbG9jX29iaigqaW50aSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjI5NDY6XHRcdFx0aWYgKCFpbnRpKVxuMjk0NzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjk0ODpcdFx0XHRyID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXHUwMDI2czM5MGludCwgaW50aSk7XG4yOTQ5Olx0XHRcdGlmIChyKVxuMjk1MDpcdFx0XHRcdGtmcmVlKGludGkpO1xuMjk1MTpcdFx0XHRicmVhaztcbjI5NTI6XHRcdH1cbjI5NTM6XHRcdGNhc2UgS1ZNX0NSRUFURV9JUlFDSElQOiB7XG4yOTU0Olx0XHRcdHIgPSAtRUlOVkFMO1xuMjk1NTpcdFx0XHRpZiAoa3ZtLVx1MDAzZWFyY2gudXNlX2lycWNoaXApXG4yOTU2Olx0XHRcdFx0ciA9IDA7XG4yOTU3Olx0XHRcdGJyZWFrO1xuMjk1ODpcdFx0fVxuMjk1OTpcdFx0Y2FzZSBLVk1fU0VUX0RFVklDRV9BVFRSOiB7XG4yOTYwOlx0XHRcdHIgPSAtRUZBVUxUO1xuMjk2MTpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXR0ciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYXR0cikpKVxuMjk2MjpcdFx0XHRcdGJyZWFrO1xuMjk2MzpcdFx0XHRyID0ga3ZtX3MzOTBfdm1fc2V0X2F0dHIoa3ZtLCBcdTAwMjZhdHRyKTtcbjI5NjQ6XHRcdFx0YnJlYWs7XG4yOTY1Olx0XHR9XG4yOTY2Olx0XHRjYXNlIEtWTV9HRVRfREVWSUNFX0FUVFI6IHtcbjI5Njc6XHRcdFx0ciA9IC1FRkFVTFQ7XG4yOTY4Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhdHRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhdHRyKSkpXG4yOTY5Olx0XHRcdFx0YnJlYWs7XG4yOTcwOlx0XHRcdHIgPSBrdm1fczM5MF92bV9nZXRfYXR0cihrdm0sIFx1MDAyNmF0dHIpO1xuMjk3MTpcdFx0XHRicmVhaztcbjI5NzI6XHRcdH1cbjI5NzM6XHRcdGNhc2UgS1ZNX0hBU19ERVZJQ0VfQVRUUjoge1xuMjk3NDpcdFx0XHRyID0gLUVGQVVMVDtcbjI5NzU6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmF0dHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGF0dHIpKSlcbjI5NzY6XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5NDY6XHRcdHJldHVybiAwO1xuMTk0NzpcdH1cbjE5NDg6XHRcbjE5NDk6XHRzdGF0aWMgdTY0IGludGlfdG9faXJxX3BlbmRfbWFzayhzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4xOTUwOlx0e1xuMTk1MTpcdFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbjE5NTI6XHRcbjE5NTM6XHRcdHN3aXRjaCAodHlwZSkge1xuMTk1NDpcdFx0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuMTk1NTpcdFx0XHQvKiBPbmx5IHJlcHJlc3NpYmxlIG1hY2hpbmUgY2hlY2tzIGFyZSBmbG9hdGluZyAqL1xuMTk1NjpcdFx0XHRyZXR1cm4gQklUKElSUV9QRU5EX01DSEtfUkVQKTtcbjE5NTc6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbjE5NTg6XHRcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xuMTk1OTpcdFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbjE5NjA6XHRcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuMTk2MTpcdFx0XHQgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTtcbjE5NjI6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuMTk2MzpcdFx0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbjE5NjQ6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4xOTY1Olx0XHRcdHJldHVybiBCSVQoaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkKSkpO1xuMTk2NjpcdFx0ZGVmYXVsdDpcbjE5Njc6XHRcdFx0cmV0dXJuIDA7XG4xOTY4Olx0XHR9XG4xOTY5Olx0fVxuMTk3MDpcdFxuMTk3MTpcdC8qXG4xOTcyOlx0ICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxuMTk3MzpcdCAqL1xuMTk3NDpcdHN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4xOTc1Olx0e1xuMTk3NjpcdFx0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcbjE5Nzc6XHRcdGludCBzaWdjcHUsIG9ubGluZV92Y3B1cywgbnJfdHJpZXMgPSAwO1xuMTk3ODpcdFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbjE5Nzk6XHRcdHU2NCBpcnFfcGVuZF9tYXNrO1xuMTk4MDpcdFxuMTk4MTpcdFx0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4xOTgyOlx0XHRpZiAoIW9ubGluZV92Y3B1cylcbjE5ODM6XHRcdFx0cmV0dXJuO1xuMTk4NDpcdFxuMTk4NTpcdFx0aXJxX3BlbmRfbWFzayA9IGludGlfdG9faXJxX3BlbmRfbWFzayhpbnRpKTtcbjE5ODY6XHRcdGZvciAoc2lnY3B1ID0ga3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50Lmxhc3Rfc2xlZXBfY3B1OyA7IHNpZ2NwdSYjNDM7JiM0MzspIHtcbjE5ODc6XHRcdFx0c2lnY3B1ICU9IG9ubGluZV92Y3B1cztcbjE5ODg6XHRcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuMTk4OTpcdFx0XHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgXHUwMDI2XHUwMDI2XG4xOTkwOlx0XHRcdCAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSBcdTAwMjYgaXJxX3BlbmRfbWFzaylcbjE5OTE6XHRcdFx0XHRicmVhaztcbjE5OTI6XHRcdFx0LyogYXZvaWQgZW5kbGVzcyBsb29wcyBpZiBhbGwgdmNwdXMgYXJlIHN0b3BwZWQgKi9cbjE5OTM6XHRcdFx0aWYgKG5yX3RyaWVzJiM0MzsmIzQzOyBcdTAwM2U9IG9ubGluZV92Y3B1cylcbjE5OTQ6XHRcdFx0XHRyZXR1cm47XG4xOTk1Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTQ4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUzM5MCBLVk0gSW50ZXJydXB0IEluamVjdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNlZCBvbiByZWZpbmluZyB0aGUgaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB3aXRoaW4gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc3BlY2lmaWMgY2hhbmdlcywgbmFtZWx5IGludHJvZHVjaW5nIGEgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgZnVuY3Rpb24sIGFuZCBtb2RpZnlpbmcgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIHVzZSBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGlgIGluc3RlYWQgb2YganVzdCBhIGB1NjQgdHlwZWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGludGVycnVwdCBkZWxpdmVyeSBwYXRoLiBJdCBzZWVtcyBsaWtlIGEgbmV3IGhlbHBlciwgYGludGlfdG9faXJxX3BlbmRfbWFza2AgaGFzIGJlZW4gaW50cm9kdWNlZCwgd2hpY2ggcmVhZHMgdGhlIGludGVycnVwdCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBgaW50aS0mZ3Q7dHlwZWAgYW5kIGBpbnRpLSZndDtpby5pb19pbnRfd29yZGAgZmllbGRzLgoKVGhlIGludGVyZXN0aW5nIHBhcnQgaGVyZSBpcyBob3cgdGhpcyBgaW50aWAgc3RydWN0IGlzIGFsbG9jYXRlZC4gSXQmIzM5O3MgaGFwcGVuaW5nIGluIGEgZmV3IHBsYWNlczogYGt2bV9hcmNoX3ZtX2lvY3RsYCB1c2luZyBga3phbGxvY19vYmpgLCBga3ZtX3MzOTBfaW5qZWN0X2FpcnFgIGFsc28gd2l0aCBga3phbGxvY19vYmpgLCBhbmQgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIHVzaW5nIGBremFsbG9jX29iamAuIE15IGZpcnN0IHRob3VnaHQgaXMgJiMzNDt3YWl0LCB3aGF0JiMzOTtzIGBremFsbG9jX29iamA/JiMzNDsuIFRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGEgc3VidGxlIGJ1Zywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBxdWlja2x5IHJlYWxpemVkIGBremFsbG9jX29iamAgaXMgbGlrZWx5IGEgd3JhcHBlciBhcm91bmQgYGt6YWxsb2NgLCBhbmQgdGhhdCBtZWFucyB0aGUgbWVtb3J5ICppcyogemVyb2VkLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBJIHN0aWxsIHdhbnQgdG8gYmUgc3VyZS4gSXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIG1hY3JvLiBMZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgY2VydGFpbi4KCk9rYXksIEkmIzM5O3ZlIGNoZWNrZWQgYW5kIGNvbmZpcm1lZCBga3phbGxvY2AgemVyb2VzIHRoZSBtZW1vcnkuIFNvLCB0aGF0JiMzOTtzIG5vdCB0aGUgd29ycnkuIFRoZSBvdGhlciBwb3RlbnRpYWwgaXNzdWUgaXMsIGlzIHRoaXMgYGludGlgIHN0cnVjdHVyZSBwb3B1bGF0ZWQgZnJvbSB1c2VyIHNwYWNlPyBJZiBzbywgd2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gYXZvaWQgZXhwb3Npbmcga2VybmVsIG1lbW9yeSwgb3Igd29yc2UsIGhhdmUgaXQgcmVhZCB1bmluaXRpYWxpemVkLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIGluIGBrdm1fYXJjaF92bV9pb2N0bGAsIHRoZXJlJiMzOTtzIGEgYmxvY2sgaGFuZGxpbmcgYEtWTV9TMzkwX0lOVEVSUlVQVGAuIEl0IGNvcGllcyBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YCBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV91c2VyYCBpbnRvIGEgbG9jYWwgc3RydWN0dXJlIGNhbGxlZCBgczM5MGludGAuIFRoZW4sIGl0IGFsbG9jYXRlcyBgaW50aWAgd2l0aCBga3phbGxvY19vYmpgLCBhbmQgY2FsbHMgYGt2bV9zMzkwX2luamVjdF92bWAgdG8gZnVydGhlciBwcm9jZXNzIGl0LiBJIG5vdyBzZWUgdGhlIGZpZWxkcyBvZiBgczM5MGludGAgYXJlIGNvcGllZCBpbnRvIGBpbnRpYCBpbiB0aGF0IGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGBpbnRpLSZndDt0eXBlYCB0YWtlcyB0aGUgdmFsdWUgb2YgYHMzOTBpbnQtJmd0O3R5cGVgLiBGb3IgaW50ZXJydXB0IHR5cGUgYEtWTV9TMzkwX0lOVF9JT19NSU5gIHRvIGBLVk1fUzM5MF9JTlRfSU9fTUFYYCwgdGhlIGBzMzkwaW50YCYjMzk7cyBwYXJhbWV0ZXJzIGFyZSBtYXBwZWQgaW50byBgaW50aS0mZ3Q7aW9gIGZpZWxkcy4KClNvLCBgczM5MGludGAgaXMgZGlyZWN0bHkgcG9wdWxhdGVkIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggaXMgdGhlIGtleSBoZXJlLiBOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmFmdGVyKiB0aGF0IGNvcHk/IE5vLCBiZWNhdXNlIGBzMzkwaW50YCBpcyBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGJ5IHRoZSBgY29weV9mcm9tX3VzZXJgIGNhbGwsIGFuZCB0aGVuIGBpbnRpYCBpcyB6ZXJvZWQgYnkgdGhlIGBremFsbG9jX29iamAgYWxsb2NhdGlvbi4KCkFscmlnaHQsIHRoZSBjb2RlIGxvb2tzIHNhZmUgaW4gdGhpcyByZWdhcmQuIFRoZSB1c2VyLXByb3ZpZGVkIGRhdGEgaXMgY29waWVkIGludG8gdGhlIGxvY2FsIHN0cnVjdCwgdGhlIG5ldyBzdHJ1Y3QgYGludGlgIGlzIHplcm9lZCwgYW5kIHRoZW4gaW5pdGlhbGl6ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBhbmQgemVyb2VkIGRhdGEuIEkmIzM5O20gc2F0aXNmaWVkIGZvciBub3csIGJ1dCBJIHN0aWxsIHdhbnQgdG8gY2hlY2sgdGhlIGBremFsbG9jX29iamAgZGVmaW5pdGlvbiB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkxNjQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcdFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcdFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcdFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVx0bnN5bXMgPSBzeW10YWItXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXHRpZiAoIWNoYWlucykge1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcdFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVx0XHRpZiAoIXApXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXHRpZiAoY3R4LVx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XHRcdGN0eC1cdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXHUwMDNlaml0X2RhdGEpO1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXHRcdGlmICghY3R4LVx1MDAzZWppdF9kYXRhKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1Olx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cdGlmICghZGV2KSB7XG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cdGlmICghbGNoaXApXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXHRpZiAoIWRldikge1xuLS1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4Olx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXHRpZiAoIWRldnB0cilcbi0tXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcdFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXHRpZiAoIXJlcykge1xuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxuLS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cdGlmICghcG11X21tZGMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcdFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcdFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVx0XHRwLVx1MDAzZW5hbWUgPSBrc3RyZHVwKFwmIzM0O2FybSxpby1jb2hlcmVudFwmIzM0OywgR0ZQX0tFUk5FTCk7XG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3Olx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4Olx0XHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVx0XHRpZiAoIXBkYXRhKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cdGlmICghaHdtb2RzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1Olx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXHRpZiAoIXN5c2MpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9oLVx1MDAzZXNsYXZlX3BvcnRzKSkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcdFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cdFx0aWYgKCFvaSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVx0aWYgKCFvaCkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcdFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cdFx0aWYgKCFvaClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcdFx0b2gtXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXHUwMDNlY2xhc3MpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cdFx0aWYgKCFvaC1cdTAwM2VjbGFzcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cdGlmICghaWRsZV9zdGF0ZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cdGlmICghbnZhbHVlX3RhYmxlKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cdCAqL1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVx0aWYgKCFyZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXHQgKi9cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cdGlmICghcmVzKVxuLS1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcbi0tXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1Olx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVx0aWYgKCFlYykge1xuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XHRjZmctXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVx1MDAzZWluaXRfZGF0YSk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVx0aWYgKCFjZmctXHUwMDNlaW5pdF9kYXRhKVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcdFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVx0XHRpZiAoIXF1aXJrKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3Rlcilcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXHRpZiAoIW9wcHMpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVx0aW50IHJldDtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXHRpZiAoIWluZm8pXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4Olx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXHRpZiAoIXNwYylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXHRpZiAoIW5ld3Byb3ApXG4tLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXHRpZiAoIWwyeDBfcG11KSB7XG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cdGlmICghZGF0YSlcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XHRidWYgPSBremFsbG9jX29iaigqYnVmLFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXHRcdFx0ICBnZnAgXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3Olx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXHRpZiAoIW1hcHBpbmcpXG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0Olx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXHRpZiAoIXJlZ3MpIHtcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcdFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXHRcdGlmICghdG1wX3Jlcykge1xuLS1cbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXHRpZiAoIXAybV9lbnRyeSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0Olx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXHRpZiAoIXRoaXMpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cdGlmICghcGd0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXHRpZiAoIW1jLVx1MDAzZW1hcHBpbmcpIHtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XHRcdG1jLVx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0Olx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cdGlmICghaHlwX3BndGFibGUpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cdGlmICghdmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSB7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0Olx0XHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYixcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlx0a3ZtLVx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXHRpZiAoIXN0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXHRkaXN0LVx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XHRkaXN0LVx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXHRpZiAoIWRpc3QtXHUwMDNlc3Bpcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXHRcdFx0XHRcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cdGlmICghZW50cmllcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cdGlmICghaXJxKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3Olx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cdGlmICghY29sbGVjdGlvbilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIwLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjItXHRpZiAoIWl0ZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTE0Mj1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTQ4Olx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVx0aWYgKCFkZXZpY2UpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVx0aWYgKCFpdHMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cdGlmICghcmRyZWcpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcdGRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDgwPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMS1cdGlmICghaml0X2RhdGEpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDI6XHRcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDMtXHRcdGlmICghaml0X2RhdGEpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXHR2ZHNvX3BhZ2VsaXN0ID1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlx0XHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVx0aWYgKCFyYW5nZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XHRcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXHRpZiAoIXMpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cdGlmICghcylcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI2OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBga3phbGxvY19vYmpgIG1hY3JvIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBga3phbGxvY2AsIGxpa2VseSBkZWZpbmVkIHNvbWV3aGVyZSBpbiBhIGBzbGFiLmhgIGhlYWRlciwgb3IgbWF5YmUgc29tZXRoaW5nIHNpbWlsYXIgaW4gdGhpcyBwcm9qZWN0JiMzOTtzIGluY2x1ZGVzLiBBaCwgeWVzLCBpdCYjMzk7cyBga3phbGxvY19vYmooKmludGksIEdGUF9LRVJORUxfQUNDT1VOVClgLiBIbW0sIHRoYXQgYEdGUF9LRVJORUxfQUNDT1VOVGAgbG9va3Mgc3RhbmRhcmQgZW5vdWdoLCBidXQgYGt6YWxsb2Nfb2JqYC4uLiBpcyB0aGF0IGEgY3VzdG9tIG1hY3JvPyBNYXliZSBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBzeXprYWxsZXIgc2V0dXAgb3IgYSBtb3JlIHJlY2VudCBrZXJuZWwgYWRkaXRpb24/CgpSaWdodCwgYWZ0ZXIgYSBxdWljayBjaGVjaywgaXQmIzM5O3MgY2xlYXI6IGBremFsbG9jX29iamAgKmlzKiBqdXN0IGEgbWFjcm8sIGVmZmVjdGl2ZWx5IGRvaW5nIGBremFsbG9jKHNpemVvZigqaW50aSksIEdGUF9LRVJORUxfQUNDT1VOVClgLiBTbywgY2xhc3NpYyBga3phbGxvY2AgYmVoYXZpb3LigJR0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyB6ZXJvZWQgb3V0LiBUaGF0IG1lYW5zIGBpbnRpYCBpcyBndWFyYW50ZWVkIHRvIHN0YXJ0IGFzIGFsbCB6ZXJvcy4KCk5vdywgdGhlIGNvZGUgdGhlbiBwcm9jZWVkcyB0byBjb3B5IGRhdGEgZnJvbSBgczM5MGludGAgaW50byBgaW50aWAgdXNpbmcgYGt2bV9zMzkwX2luamVjdF92bWAuIFRoaXMgYHMzOTBpbnRgIGlzIHBvcHVsYXRlZCBlYXJsaWVyIHdpdGggYGNvcHlfZnJvbV91c2VyYCBpbiBga3ZtX2FyY2hfdm1faW9jdGxgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHk6IHdoYXQgaWYgYHMzOTBpbnRgIGhhcyBwYWRkaW5nPyBFdmVuIHRob3VnaCBgaW50aWAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgdGhlIGBjb3B5X2Zyb21fdXNlcmAgbWlnaHQgb3ZlcndyaXRlIHNvbWUgb2YgdGhhdCB6ZXJvZWQgcGFkZGluZyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHVzZXIgc3BhY2UuCgpPa2F5LCB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YC4gSSYjMzk7bGwgZmluZCBpdCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oYCBvciwgZ2l2ZW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBtYXliZSBgYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhgLiBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBzdHJ1Y3R1cmUgYW5kIGFueSBwb3RlbnRpYWwgcGFkZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTMyNjY9SW50ZXJydXB0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB2aWEga3ZtX3MzOTBfaW50ZXJydXB0OjpcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC0zMjY3LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjMyNjg6ICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC0zMjY5LVx0X191MzIgdHlwZTtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaD05Nj1zdHJ1Y3Qga3ZtX3MzOTBfcHN3IHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC0xMjUtXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDoxMjY6c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCB7XG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC0xMjctXHRfX3UzMiB0eXBlO1xuLS1cbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTk2PXN0cnVjdCBrdm1fczM5MF9wc3cge1xuLS1cbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTEyNS1cbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjEyNjpzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHtcbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTEyNy1cdF9fdTMyIHR5cGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Mzc0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI2Olx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCB7XG4gMTI3Olx0XHRfX3UzMiB0eXBlO1xuIDEyODpcdFx0X191MzIgcGFybTtcbiAxMjk6XHRcdF9fdTY0IHBhcm02NDtcbiAxMzA6XHR9O1xuIDEzMTpcdFxuIDEzMjpcdHN0cnVjdCBrdm1fczM5MF9pb19pbmZvIHtcbiAxMzM6XHRcdF9fdTE2IHN1YmNoYW5uZWxfaWQ7XG4gMTM0Olx0XHRfX3UxNiBzdWJjaGFubmVsX25yO1xuIDEzNTpcdFx0X191MzIgaW9faW50X3Bhcm07XG4gMTM2Olx0XHRfX3UzMiBpb19pbnRfd29yZDtcbiAxMzc6XHR9O1xuIDEzODpcdFxuIDEzOTpcdHN0cnVjdCBrdm1fczM5MF9leHRfaW5mbyB7XG4gMTQwOlx0XHRfX3UzMiBleHRfcGFyYW1zO1xuIDE0MTpcdFx0X191MzIgcGFkO1xuIDE0MjpcdFx0X191NjQgZXh0X3BhcmFtczI7XG4gMTQzOlx0fTtcbiAxNDQ6XHRcbiAxNDU6XHRzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MjExPWVudW0gaXJxX3R5cGVzIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0yOTYtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoyOTc6c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvIHtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTI5OC1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NzYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTc6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8ge1xuIDI5ODpcdFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIDI5OTpcdFx0dTY0XHR0eXBlO1xuIDMwMDpcdFx0dW5pb24ge1xuIDMwMTpcdFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW9faW5mbyBpbztcbiAzMDI6XHRcdFx0c3RydWN0IGt2bV9zMzkwX2V4dF9pbmZvIGV4dDtcbiAzMDM6XHRcdFx0c3RydWN0IGt2bV9zMzkwX3BnbV9pbmZvIHBnbTtcbiAzMDQ6XHRcdFx0c3RydWN0IGt2bV9zMzkwX2VtZXJnX2luZm8gZW1lcmc7XG4gMzA1Olx0XHRcdHN0cnVjdCBrdm1fczM5MF9leHRjYWxsX2luZm8gZXh0Y2FsbDtcbiAzMDY6XHRcdFx0c3RydWN0IGt2bV9zMzkwX3ByZWZpeF9pbmZvIHByZWZpeDtcbiAzMDc6XHRcdFx0c3RydWN0IGt2bV9zMzkwX3N0b3BfaW5mbyBzdG9wO1xuIDMwODpcdFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfbWNoa19pbmZvIG1jaGs7XG4gMzA5Olx0XHR9O1xuIDMxMDpcdH07XG4gMzExOlx0XG4gMzEyOlx0c3RydWN0IGt2bV9zMzkwX2lycV9wYXlsb2FkIHtcbiAzMTM6XHRcdHN0cnVjdCBrdm1fczM5MF9pb19pbmZvIGlvO1xuIDMxNDpcdFx0c3RydWN0IGt2bV9zMzkwX2V4dF9pbmZvIGV4dDtcbiAzMTU6XHRcdHN0cnVjdCBrdm1fczM5MF9wZ21faW5mbyBwZ207XG4gMzE2Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfZW1lcmdfaW5mbyBlbWVyZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBrdm1fczM5MF9pbnRlcnJ1cHQgU3RydWN0dXJlIGFuZCBJdHMgVXNhZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgdHlwZWAsIGBwYXJtYCwgYW5kIGBwYXJtNjRgLiBJdCYjMzk7cyBhIDE2LWJ5dGUgc3RydWN0dXJlIGFuZCwgaW1wb3J0YW50bHksIGl0JiMzOTtzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAgd2l0aG91dCBhbnkgaW50ZXJuYWwgcGFkZGluZyBpc3N1ZXMuIFdlIGFsbG9jYXRlIGBpbnRpYCB1c2luZyBga3phbGxvY19vYmpgLCBzbyB3ZSBzdGFydCB3aXRoIGEgemVyb2VkLW91dCBibG9jayBvZiBtZW1vcnkuIFRoZW4sIHRoZSBmaWVsZHMgYXJlIHBvcHVsYXRlZC4gVGhlIGZ1bmN0aW9uIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBpcyB0aGVuIGNhbGxlZC4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBgX19mbG9hdGluZ19pcnFfa2lja2AgcmVhZHMgYGludGktJmd0O3R5cGVgIGFuZCBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgLiBTaW5jZSBgaW50aWAgaXMgemVyb2VkIG91dCBpbml0aWFsbHksIGFuZCBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgIGlzIGRlcml2ZWQgZnJvbSBgczM5MGludC0mZ3Q7cGFybTY0YCwgd2hpY2ggd2UmIzM5O3ZlIGVzdGFibGlzaGVkIGlzIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmUsIGV2ZW4gdGhvdWdoIHdlIGFyZSBsb29raW5nIGF0IHNvbWV0aGluZyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLgoKSG93ZXZlciwgdGhlIGNhdGNoIGlzIHRoYXQgYGludGktJmd0O2lvLmlvX2ludF93b3JkYCBpcyAqb25seSogcmVhZCBpZiBgaW50aS0mZ3Q7dHlwZWAgZmFsbHMgd2l0aGluIHRoZSBgS1ZNX1MzOTBfSU5UX0lPX01JTmAgdG8gYEtWTV9TMzkwX0lOVF9JT19NQVhgIHJhbmdlLiBMb29raW5nIGJhY2sgYXQgYGt2bV9zMzkwX2luamVjdF92bWAsIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gSU8gaW50ZXJydXB0IChmYWxsaW5nIHdpdGhpbiB0aGF0IHR5cGUgcmFuZ2UpLCBgaW50aS0mZ3Q7aW8uaW9faW50X3dvcmRgIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBzMzkwaW50LSZndDtwYXJtNjQgJmFtcDsgMHhmZmZmZmZmZmAuIFNvLCBpdCYjMzk7cyAqZGVmaW5pdGVseSogaW5pdGlhbGl6ZWQgaW4gdGhhdCBzY2VuYXJpby4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhvc2UgcGxhY2VzLCB0aGVyZSBhcmUgbm8gb3RoZXIgY2FsbCBzaXRlcywgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgX19pbmplY3Rfdm1gLiBPa2F5LCBzbyBgX19pbmplY3Rfdm1gIGlzIGNhbGxlZCBmcm9tIGJvdGggYGt2bV9zMzkwX2luamVjdF92bWAgKmFuZCogYGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludGAuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBrdm1fczM5MF9yZWluamVjdF9pb19pbnRgIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgaXNzdWVzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9yZWluamVjdF9pb19pbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNzc3PXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqa3ZtX3MzOTBfZ2V0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODA2LVx0XHRpZiAoaW50aSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTgwNzpcdFx0XHRrdm1fczM5MF9yZWluamVjdF9pb19pbnQoa3ZtLCBpbnRpKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTgwOC1cdFx0aW50aSA9IHRtcF9pbnRpO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjA0Nj1pbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODgtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwODk6aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwOTAtXHRcdFx0ICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD00MDM9c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICprdm1fczM5MF9nZXRfaW9faW50KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00MDQtXHRcdFx0XHRcdFx0ICAgIHU2NCBpc2NfbWFzaywgdTMyIHNjaGlkKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDo0MDU6aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtNDA2LVx0XHRcdCAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKTtcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz00NDI9c3RhdGljIGludCBoYW5kbGVfdHBpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy00OTktXHQgKi9cbmFyY2gvczM5MC9rdm0vcHJpdi5jOjUwMDpcdGlmIChrdm1fczM5MF9yZWluamVjdF9pb19pbnQodmNwdS1cdTAwM2Vrdm0sIGludGkpKSB7XG5hcmNoL3MzOTAva3ZtL3ByaXYuYy01MDEtXHRcdGtmcmVlKGludGkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTkwNAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE5MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyBpbiBLVk0vczM5MCBJbnRlcnJ1cHQgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSB3YXMgaW5pdGlhbGx5IGNvbmNlcm5lZCBhYm91dCBwb3RlbnRpYWwgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhlIEtWTS9zMzkwIGludGVycnVwdCBoYW5kbGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZmxvYXRpbmcgaW50ZXJydXB0cy4gSSBzdGFydGVkIGJ5IHRyYWNpbmcgdGhlIHBhdGggb2YgYGludGlgICh0aGUgaW50ZXJydXB0IGluZm9ybWF0aW9uIHN0cnVjdHVyZSkgdGhyb3VnaCB0aGUgY29kZS4KClRoZSBmaXJzdCBwb2ludCBvZiBpbnRlcmVzdCB3YXMgYGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludGAuIFRoZSBgaW50aWAgcGFyYW1ldGVyIGhlcmUgY29tZXMgZnJvbSBgaGFuZGxlX3RwaWAsIGFuZCBgaGFuZGxlX3RwaWAgZ2V0cyBpdCBmcm9tIGBrdm1fczM5MF9nZXRfaW9faW50YC4gVGhpcyBmdW5jdGlvbiBkZXF1ZXVlcyBhbiBleGlzdGluZyBgaW50aWAgZnJvbSB0aGUgZmxvYXRpbmcgaW50ZXJydXB0IGxpc3QuIFNpbmNlIGl0JiMzOTtzIGFscmVhZHkgb24gdGhlIGxpc3QsIGl0IG1lYW5zIGl0IG11c3QgaGF2ZSBiZWVuICppbml0aWFsaXplZCogd2hlbiBpdCB3YXMgaW5qZWN0ZWQgb250byB0aGUgbGlzdC4gVGhhdCBlbGltaW5hdGVzIGEgZGlyZWN0IHVuaW5pdGlhbGl6ZWQgcmVhZCB0aGVyZS4KCk5leHQsIEkgbG9va2VkIGF0IGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggb25saW5lIHZDUFVzIGFuZCB0cmllcyB0byB3YWtlIG9uZSB1cCB0byBoYW5kbGUgYSBwZW5kaW5nIGludGVycnVwdC4gSXQgdXNlcyBga3ZtLSZndDthcmNoLmlkbGVfbWFza2AsIHdoaWNoIGlzIGFuIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGFuZCBpbmRleGVkIGJ5IHRoZSBudW1iZXIgb2Ygb25saW5lIHZjcHVzLiBUaGUgY3JpdGljYWwgZnVuY3Rpb25zIGhlcmUgYXJlIGBmaW5kX2ZpcnN0X2JpdGAgYW5kIGBmaW5kX25leHRfYml0YCB3aGljaCByZWFkcyB0aGUgYml0cyBmcm9tIGBrdm0tJmd0O2FyY2guaWRsZV9tYXNrYC4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB3aGV0aGVyIGBrdm0tJmd0O2FyY2guaWRsZV9tYXNrYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTG9va2luZyBhdCB3aGVyZSBpdCBjb21lcyBmcm9tLCB0aGUgYHN0cnVjdCBrdm1fYXJjaGAgaXMgZW1iZWRkZWQgd2l0aGluIHRoZSBgc3RydWN0IGt2bWAuIFRoZSBgc3RydWN0IGt2bWAgaXMgYWxsb2NhdGVkIHdpdGggYHZ6YWxsb2NgIG9yIGBremFsbG9jYCBpbiBga3ZtX2NyZWF0ZV92bWAsIHNvIGl0IGlzIGZ1bGx5IHplcm9lZC4gU28sIGBrdm0tJmd0O2FyY2guaWRsZV9tYXNrYCBzaG91bGQgYmUgY29tcGxldGVseSBpbml0aWFsaXplZC4gVGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSlgIGNoZWNrcyB0aGUgdmNwdSYjMzk7cyBwZW5kaW5nIGlycXMuIFRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlbiwganVzdCB0byBiZSBzdXJlLCBJIGNoZWNrZWQgd2hlcmUgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGlzIGNhbGxlZC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCB0aGUgY29kZSBvbmx5IGNhbGxzIGl0IGZyb20gaW5zaWRlIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gVGhpcyBjb25maW5lcyBpdHMgdXNhZ2UgdG8gYSBrbm93biBzY29wZS4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgYGt2bV9zMzkwX2luamVjdF92bWAuIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGluamVjdGluZyBpbnRlcnJ1cHRzIGludG8gdGhlIFZNLiBJdCB0YWtlcyBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YCBhbmQgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvYCAoaW50aSkgYXMgaW5wdXQuIEluc2lkZSwgaXQgcG9wdWxhdGVzIHRoZSBgaW50aWAgc3RydWN0dXJlIGJhc2VkIG9uIHRoZSBpbnRlcnJ1cHQgdHlwZS4gSSBtYWRlIHN1cmUgdG8gd2FsayB0aHJvdWdoIGFsbCBjYXNlcyBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudCB0byBjb25maXJtIGlmIGBfX2luamVjdF92bWAgY291bGQgYmUgY2FsbGVkLCBhbmQgYWxzbyB0byBzZWUgaWYgdGhlcmUgY291bGQgYmUgc29tZSBwYXRoIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IHJldHVybnMgYC1FSU5WQUxgIGlmIHRoZSB0eXBlIGlzbiYjMzk7dCBvbmUgb2YgdGhlIGtub3duIGNhc2VzLgoKVGhlIGtleSB0byB0aGUgY29kZSBpcyB0aGF0IGBfX2luamVjdF92bWAgY2FuIG9ubHkgYmUgY2FsbGVkIGlmIGBpbnRpLSZndDt0eXBlYCBtYXRjaGVzIG9uZSBvZiB0aGUga25vd24gaW50ZXJydXB0IHR5cGVzLiBXaGVuIGBpbnRpLSZndDt0eXBlYCBpcyBgS1ZNX1MzOTBfSU5UX1ZJUlRJT2AsIGl0IHRoZW4gY2FsbHMgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHdoaWNoIGluIHR1cm4gY2FsbHMgYGludGlfdG9faXJxX3BlbmRfbWFzayhpbnRpKWAuIEkgdHJhY2VkIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgIGFuZCBjaGVja2VkIGFsbCB0aGUgZGlmZmVyZW50IGNhc2VzLiBJIHNhdyB0aGF0IGZvciBgS1ZNX1MzOTBfSU5UX1ZJUlRJT2AsIGl0IHVzZXMgYEJJVChJUlFfUEVORF9WSVJUSU8pYC4gSXQgZG9lcyAqbm90KiByZWFkIGBpbnRpLSZndDtpby5pb19pbnRfd29yZGAuIFRoZSByZWFkcyBmcm9tIGBpbnRpLSZndDtpby5pb19pbnRfd29yZGAgb25seSBvY2N1ciBpZiBgaW50aS0mZ3Q7dHlwZWAgaXMgaW4gdGhlIGBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWGAgcmFuZ2UsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlcyBhcmUgYXNzaWduZWQgaW4gYGt2bV9zMzkwX2luamVjdF92bWAuIFRoZXJlZm9yZSwgdGhlcmUgc2hvdWxkIGJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBjYWxsZXJzIG9mIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGluamVjdCBpbnRlcnJ1cHRzLCBzdWNoIGFzIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuYC4gSXQmIzM5O3MgcG9zc2libGUgSSBtaXNzZWQgYSBwYXRoLiBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgaXRzIHVzYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDQ3NTpcdHN0YXRpYyB2b2lkIF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHN0YXJ0X3Rva2VuLFxuNDQ3NjpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRva2VuKVxuNDQ3NzpcdHtcbjQ0Nzg6XHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgaW50aTtcbjQ0Nzk6XHRcdHN0cnVjdCBrdm1fczM5MF9pcnEgaXJxO1xuNDQ4MDpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpX21lbSA9IE5VTEw7XG40NDgxOlx0XHRpbnQgcmV0ID0gMDtcbjQ0ODI6XHRcbjQ0ODM6XHRcdGlmIChzdGFydF90b2tlbikge1xuNDQ4NDpcdFx0XHRpcnEudS5leHQuZXh0X3BhcmFtczIgPSB0b2tlbjtcbjQ0ODU6XHRcdFx0aXJxLnR5cGUgPSBLVk1fUzM5MF9JTlRfUEZBVUxUX0lOSVQ7XG40NDg2Olx0XHRcdFdBUk5fT05fT05DRShrdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LCBcdTAwMjZpcnEpKTtcbjQ0ODc6XHRcdH0gZWxzZSB7XG40NDg4Olx0XHRcdGludGlfbWVtID0ga3phbGxvY19vYmooKmludGlfbWVtLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuNDQ4OTpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFpbnRpX21lbSkpXG40NDkwOlx0XHRcdFx0cmV0dXJuO1xuNDQ5MTpcdFxuNDQ5MjpcdFx0XHRpbnRpLnR5cGUgPSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU7XG40NDkzOlx0XHRcdGludGkucGFybTY0ID0gdG9rZW47XG40NDk0Olx0XHRcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bSh2Y3B1LVx1MDAzZWt2bSwgXHUwMDI2aW50aSwgaW50aV9tZW0pO1xuNDQ5NTpcdFx0XHRpZiAocmV0KVxuNDQ5NjpcdFx0XHRcdGtmcmVlKGludGlfbWVtKTtcbjQ0OTc6XHRcdFx0V0FSTl9PTl9PTkNFKHJldCk7XG40NDk4Olx0XHR9XG40NDk5Olx0fVxuNDUwMDpcdFxuNDUwMTpcdGJvb2wga3ZtX2FyY2hfYXN5bmNfcGFnZV9ub3RfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG40NTAyOlx0XHRcdFx0XHQgICAgIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXG40NTAzOlx0e1xuNDUwNDpcdFx0dHJhY2Vfa3ZtX3MzOTBfcGZhdWx0X2luaXQodmNwdSwgd29yay1cdTAwM2VhcmNoLnBmYXVsdF90b2tlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzM5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTgyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmNvdmVyaW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyBpbiBhIEtWTS9zMzkwIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHJpZ2h0IHRvIGZsYWcgdGhlIHVuaW5pdGlhbGl6ZWQgYGludGkucGFybWAgd2l0aGluIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuYC4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgY29kZSBpbiB0aGF0IGZ1bmN0aW9uIGRvZXNuJiMzOTt0IGluaXRpYWxpemUgaXQsIGFuZCBhbHRob3VnaCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBkb2VzbiYjMzk7dCAqdXNlKiBpdCBkaXJlY3RseSBmb3IgdGhlIGBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkVgIGNhc2UsIHRoZSBgdHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZtYCBjYWxsIGRvZXMgcmVhZCBgczM5MGludC0mZ3Q7cGFybWAuIEhvd2V2ZXIsIHRoaXMgd2FzbiYjMzk7dCBpbnRyb2R1Y2VkIGJ5ICp0aGlzKiBwYXRjaCDigJMgaXQmIzM5O3MgYW4gZXhpc3RpbmcgYnVnLgoKTm93LCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlICpuZXcqIGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcz8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBUaGUgY2hhbmdlcyBhcm91bmQgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIG5lZWRlZCBzY3J1dGlueS4gU3BlY2lmaWNhbGx5LCB0aGUgY2FsbCB0byBgaW50aV90b19pcnFfcGVuZF9tYXNrYC4gVGhhdCBmdW5jdGlvbiBhY2Nlc3NlcyBgaW50aS0mZ3Q7dHlwZWAgYW5kIGBpbnRpLSZndDtpby5pb19pbnRfd29yZGAuIEkgY29uZmlybWVkIHRoYXQgYGludGlgIGluIHRoaXMgY29udGV4dCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyb2VkIG1lbW9yeSwgaGVuY2UgYSBzYWZlIHJlYWQgb2YgYGludGktJmd0O2lvLmlvX2ludF93b3JkYC4gRXZlbiBpZiB0aGUgdHlwZSBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIGBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWGAuIEZvciB0aGUgYEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORWAgY2FzZSwgaXQmIzM5O3MgaXJyZWxldmFudC4KCkkgdGhlbiBsb29rZWQgYXQgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIGFuZCBgZGVsaXZlcmFibGVfaXJxc2AsIGJ1dCB0aGV5IGFyZSB1bmNoYW5nZWQgYnkgdGhlIHBhdGNoLgoKSSByZXZpc2l0ZWQgYGludGlfdG9faXJxX3BlbmRfbWFza2AgZm9yIGEgZnVsbCBjaGVjaywgbWFraW5nIHN1cmUgdGhhdCBgaW50aWAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJ5IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fczM5MF9pbmplY3RfYWlycWAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuYC4gVGhlIGBremFsbG9jX29iamAgY2FsbCBpbiB0aG9zZSBmdW5jdGlvbnMgZ3VhcmFudGVlcyB6ZXJvIGluaXRpYWxpemF0aW9uLCBtZWFuaW5nIHdlIGNhbiBiZSBhc3N1cmVkIHRoYXQgYGludGktJmd0O2lvLmlvX2ludF93b3JkYCBpcyBzYWZlbHkgcmVhZC4KCkhvd2V2ZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mb2AgaXMgbmV2ZXIgYWxsb2NhdGVkIGluIGEgd2F5IHRoYXQgKmRvZXNuJiMzOTt0KiB6ZXJvIGl0IG91dC4gSSYjMzk7bGwgc2VhcmNoIGZvciBhbGwgYWxsb2NhdGlvbnMgb2YgdGhhdCBzdHJ1Y3QgdG8gZW5zdXJlIGl0JiMzOTtzIGFsd2F5cyBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xMDM4PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIF9fZGVsaXZlcl9wZmF1bHRfZG9uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDQwLVx0c3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmkgPSBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA0MTpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA0Mi1cdGludCByYyA9IDA7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDQ2LVx0aW50aSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZmaS1cdTAwM2VsaXN0c1tGSVJRX0xJU1RfUEZBVUxUXSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA0NzpcdFx0XHRcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDQ4LVx0XHRcdFx0XHRsaXN0KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTEwODE9c3RhdGljIGludCBfX211c3RfY2hlY2sgX19kZWxpdmVyX3ZpcnRpbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDgzLVx0c3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmkgPSBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA4NDpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA4NS1cdGludCByYyA9IDA7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDg5LVx0aW50aSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZmaS1cdTAwM2VsaXN0c1tGSVJRX0xJU1RfVklSVElPXSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA5MDpcdFx0XHRcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDkxLVx0XHRcdFx0XHRsaXN0KTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTExNTQ9c3RhdGljIGludCBfX211c3RfY2hlY2sgX19kZWxpdmVyX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNTktXHRzdHJ1Y3Qga3ZtX3MzOTBfZ2lzYV9pbnRlcnJ1cHQgKmdpID0gXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5naXNhX2ludDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTE2MDpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNjEtXHRzdHJ1Y3Qga3ZtX3MzOTBfaW9faW5mbyBpbztcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNzEtXHRpbnRpID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKGlzY19saXN0LFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMTcyOlx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNzMtXHRcdFx0XHRcdGxpc3QpO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTY4OT1zdGF0aWMgaW50IF9faW5qZWN0X2NwdV90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzAyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzAzOnN0YXRpYyBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmdldF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzA0LVx0XHRcdFx0XHRcdCAgaW50IGlzYywgdTMyIHNjaGlkKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTcwNy1cdHN0cnVjdCBsaXN0X2hlYWQgKmlzY19saXN0ID0gXHUwMDI2ZmktXHUwMDNlbGlzdHNbRklSUV9MSVNUX0lPX0lTQ18wICYjNDM7IGlzY107XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE3MDg6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKml0ZXI7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3MDktXHR1MTYgaWQgPSAoc2NoaWQgXHUwMDI2IDB4ZmZmZjAwMDBVKSBcdTAwM2VcdTAwM2UgMTY7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzI5LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzMwOnN0YXRpYyBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmdldF90b3BfaW9faW50KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTczMS1cdFx0XHRcdFx0XHQgICAgICB1NjQgaXNjX21hc2ssIHUzMiBzY2hpZClcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTczMi17XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE3MzM6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkgPSBOVUxMO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzM0LVx0aW50IGlzYztcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE3NDM9c3RhdGljIGludCBnZXRfdG9wX2dpc2FfaXNjKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGlzY19tYXNrLCB1MzIgc2NoaWQpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzc2LSAqL1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzc3OnN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqa3ZtX3MzOTBfZ2V0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3NzgtXHRcdFx0XHRcdFx0ICAgIHU2NCBpc2NfbWFzaywgdTMyIHNjaGlkKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTc4MC1cdHN0cnVjdCBrdm1fczM5MF9naXNhX2ludGVycnVwdCAqZ2kgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC5naXNhX2ludDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTc4MTpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSwgKnRtcF9pbnRpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzgyLVx0aW50IGlzYztcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE4MTU9c3RhdGljIGludCBfX2luamVjdF9zZXJ2aWNlKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTgxNjpcdFx0XHQgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTgxNy17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xODQ3PXN0YXRpYyBpbnQgX19pbmplY3RfdmlydGlvKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTg0ODpcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODQ5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE4NjY9c3RhdGljIGludCBfX2luamVjdF9wZmF1bHRfZG9uZShzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE4Njc6XHRcdFx0XHQgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODY4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE4ODc9c3RhdGljIGludCBfX2luamVjdF9mbG9hdF9tY2hrKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTg4ODpcdFx0XHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTg4OS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xOTAyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxOTAzOnN0YXRpYyBpbnQgX19pbmplY3RfaW8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5MDQte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTk0OC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTk0OTpzdGF0aWMgdTY0IGludGlfdG9faXJxX3BlbmRfbWFzayhzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5NTAte1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTk3My0gKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTk3NDpzdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xOTc1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwMTQtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwMTU6c3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjAxNi17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDQ2PWludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDQ3Olx0XHQgICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ4LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIwODk9aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwOTA6XHRcdFx0ICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDkxLXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIyMjA9c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2lycV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKl9saXN0KVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMjIxLXtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjIyMjpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSwgKm47XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyMjMtXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMjI5LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMjMwOnN0YXRpYyB2b2lkIGludGlfdG9faXJxKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjIzMS1cdFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIyNjg9c3RhdGljIGludCBnZXRfYWxsX2Zsb2F0aW5nX2lycXMoc3RydWN0IGt2bSAqa3ZtLCB1OCBfX3VzZXIgKnVzcmJ1ZiwgdTY0IGxlbilcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyNzAtXHRzdHJ1Y3Qga3ZtX3MzOTBfZ2lzYV9pbnRlcnJ1cHQgKmdpID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2guZ2lzYV9pbnQ7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIyNzE6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyNzItXHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIzODI9c3RhdGljIGludCBmbGljX2dldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDAwLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNDAxOnN0YXRpYyBpbmxpbmUgaW50IGNvcHlfaXJxX2Zyb21fdXNlcihzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGksXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI0MDItXHRcdFx0XHQgICAgIHU2NCBhZGRyKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjQ0MT1zdGF0aWMgaW50IGVucXVldWVfZmxvYXRpbmdfaXJxKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDQzLXtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjQ0NDpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI0NDUtXHRpbnQgciA9IDA7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODIwPXN0YXRpYyBpbnQga3ZtX3MzOTBfaW5qZWN0X2FpcnEoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgyOC1cdH07XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mjk6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MzAtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzE2NT12b2lkIGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2Ny17XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMxNjg6XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gaW50aTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2OS1cdHN0cnVjdCBrdm1fczM5MF9pcnEgaXJxO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzgwOD1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4MTQtXHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzgxNTpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzgxNi1cdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludCA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5MzItXHRpbnQgcjtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTMzOlx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5MzQtXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ0NzU9c3RhdGljIHZvaWQgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgc3RhcnRfdG9rZW4sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0NzktXHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIGlycTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NDgwOlx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpX21lbSA9IE5VTEw7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ4MS1cdGludCByZXQgPSAwO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD0zNzk9aW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTM4MC1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjM4MTpcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTM4Mi1pbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzk0PXN0YXRpYyBpbmxpbmUgaW50IGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjb2RlKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00MDItfVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjQwMzpzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmt2bV9zMzkwX2dldF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQwNC1cdFx0XHRcdFx0XHQgICAgdTY0IGlzY19tYXNrLCB1MzIgc2NoaWQpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTQwNT1pbnQga3ZtX3MzOTBfcmVpbmplY3RfaW9faW50KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDo0MDY6XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQwNy1pbnQga3ZtX3MzOTBfbWFza19hZGFwdGVyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBib29sIG1hc2tlZCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NDQyPXN0YXRpYyBpbnQgaGFuZGxlX3RwaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy00NDMte1xuYXJjaC9zMzkwL2t2bS9wcml2LmM6NDQ0Olx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpO1xuYXJjaC9zMzkwL2t2bS9wcml2LmMtNDQ1LVx0dW5zaWduZWQgbG9uZyBsZW47XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTA4PXN0YXRpYyBpbnQgaGFuZGxlX3RzY2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNTA5LXtcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjUxMDpcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XG5hcmNoL3MzOTAva3ZtL3ByaXYuYy01MTEtXHRjb25zdCB1NjQgaXNjX21hc2sgPSAweGZmVUwgXHUwMDNjXHUwMDNjIDI0OyAvKiBhbGwgaXNjcyBzZXQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMjYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMTU6XHRzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuMjAxNjpcdHtcbjIwMTc6XHRcdHU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktXHUwMDNldHlwZSk7XG4yMDE4Olx0XHRpbnQgcmM7XG4yMDE5Olx0XG4yMDIwOlx0XHRzd2l0Y2ggKHR5cGUpIHtcbjIwMjE6XHRcdGNhc2UgS1ZNX1MzOTBfTUNISzpcbjIwMjI6XHRcdFx0cmMgPSBfX2luamVjdF9mbG9hdF9tY2hrKGt2bSwgaW50aSk7XG4yMDIzOlx0XHRcdGJyZWFrO1xuMjAyNDpcdFx0Y2FzZSBLVk1fUzM5MF9JTlRfVklSVElPOlxuMjAyNTpcdFx0XHRyYyA9IF9faW5qZWN0X3ZpcnRpbyhrdm0sIGludGkpO1xuMjAyNjpcdFx0XHRicmVhaztcbjIwMjc6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6XG4yMDI4Olx0XHRcdHJjID0gX19pbmplY3Rfc2VydmljZShrdm0sIGludGkpO1xuMjAyOTpcdFx0XHRicmVhaztcbjIwMzA6XHRcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuMjAzMTpcdFx0XHRyYyA9IF9faW5qZWN0X3BmYXVsdF9kb25lKGt2bSwgaW50aSk7XG4yMDMyOlx0XHRcdGJyZWFrO1xuMjAzMzpcdFx0Y2FzZSBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWDpcbjIwMzQ6XHRcdFx0cmMgPSBfX2luamVjdF9pbyhrdm0sIGludGkpO1xuMjAzNTpcdFx0XHRicmVhaztcbjIwMzY6XHRcdGRlZmF1bHQ6XG4yMDM3Olx0XHRcdHJjID0gLUVJTlZBTDtcbjIwMzg6XHRcdH1cbjIwMzk6XHRcdGlmIChyYylcbjIwNDA6XHRcdFx0cmV0dXJuIHJjO1xuMjA0MTpcdFxuMjA0MjpcdFx0X19mbG9hdGluZ19pcnFfa2ljayhrdm0sIGludGkpO1xuMjA0MzpcdFx0cmV0dXJuIDA7XG4yMDQ0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk4NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hY2hpbmUgQ2hlY2sgUmVpbmplY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBoYW5kbGluZyBtYWNoaW5lIGNoZWNrIGludGVycnVwdHMuIEkgc2VlIHJpZ2h0IG9mZiB0aGUgYmF0LCB3ZSYjMzk7dmUgZ290IGEgYGt2bV92Y3B1YCBwb2ludGVyIGFuZCBhIGBtY2lgIHN0cnVjdCBwYXNzZWQgaW4sIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCBJIG5vdGljZSB0aGF0IGBpbnRpYCBpcyBhIGxvY2FsIHZhcmlhYmxlLiBPa2F5LCB0aGF0IGZlZWxzIHJpZ2h0LCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBpbnRpYCBpcyB1dGlsaXplZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBvZiBga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVja2AgYW5kIHRyYWNlIHRoZSB1c2Ugb2YgdGhlc2UgdmFyaWFibGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNjU6XHR2b2lkIGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuMzE2NjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbWNja192b2xhdGlsZV9pbmZvICptY2NrX2luZm8pXG4zMTY3Olx0e1xuMzE2ODpcdFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvIGludGk7XG4zMTY5Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIGlycTtcbjMxNzA6XHRcdHN0cnVjdCBrdm1fczM5MF9tY2hrX2luZm8gKm1jaGs7XG4zMTcxOlx0XHR1bmlvbiBtY2kgbWNpO1xuMzE3MjpcdFx0X191NjQgY3IxNCA9IDA7ICAgICAgICAgLyogdXBwZXIgYml0cyBhcmUgbm90IHVzZWQgKi9cbjMxNzM6XHRcdGludCByYztcbjMxNzQ6XHRcbjMxNzU6XHRcdG1jaS52YWwgPSBtY2NrX2luZm8tXHUwMDNlbWNpYztcbjMxNzY6XHRcbjMxNzc6XHRcdC8qIGxvZyBtYWNoaW5lIGNoZWNrcyBiZWluZyByZWluamVjdGVkIG9uIGFsbCBkZWJ1Z3MgKi9cbjMxNzg6XHRcdFZDUFVfRVZFTlQodmNwdSwgMiwgXCYjMzQ7Z3Vlc3QgbWFjaGluZSBjaGVjayAlbHhcJiMzNDssIG1jaS52YWwpO1xuMzE3OTpcdFx0S1ZNX0VWRU5UKDIsIFwmIzM0O2d1ZXN0IG1hY2hpbmUgY2hlY2sgJWx4XCYjMzQ7LCBtY2kudmFsKTtcbjMxODA6XHRcdHByX2luZm8oXCYjMzQ7Z3Vlc3QgbWFjaGluZSBjaGVjayBwaWQgJWQ6ICVseFwmIzM0OywgY3VycmVudC1cdTAwM2VwaWQsIG1jaS52YWwpO1xuMzE4MTpcdFxuMzE4MjpcdFx0aWYgKG1jaS5zcilcbjMxODM6XHRcdFx0Y3IxNCB8PSBDUjE0X1JFQ09WRVJZX1NVQk1BU0s7XG4zMTg0Olx0XHRpZiAobWNpLmRnKVxuMzE4NTpcdFx0XHRjcjE0IHw9IENSMTRfREVHUkFEQVRJT05fU1VCTUFTSztcbjMxODY6XHRcdGlmIChtY2kudylcbjMxODc6XHRcdFx0Y3IxNCB8PSBDUjE0X1dBUk5JTkdfU1VCTUFTSztcbjMxODg6XHRcbjMxODk6XHRcdG1jaGsgPSBtY2kuY2sgPyBcdTAwMjZpbnRpLm1jaGsgOiBcdTAwMjZpcnEudS5tY2hrO1xuMzE5MDpcdFx0bWNoay1cdTAwM2VjcjE0ID0gY3IxNDtcbjMxOTE6XHRcdG1jaGstXHUwMDNlbWNpYyA9IG1jY2tfaW5mby1cdTAwM2VtY2ljO1xuMzE5MjpcdFx0bWNoay1cdTAwM2VleHRfZGFtYWdlX2NvZGUgPSBtY2NrX2luZm8tXHUwMDNlZXh0X2RhbWFnZV9jb2RlO1xuMzE5MzpcdFx0bWNoay1cdTAwM2VmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzcyA9IG1jY2tfaW5mby1cdTAwM2VmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzcztcbjMxOTQ6XHRcdGlmIChtY2kuY2spIHtcbjMxOTU6XHRcdFx0LyogSW5qZWN0IHRoZSBmbG9hdGluZyBtYWNoaW5lIGNoZWNrICovXG4zMTk2Olx0XHRcdGludGkudHlwZSA9IEtWTV9TMzkwX01DSEs7XG4zMTk3Olx0XHRcdHJjID0gX19pbmplY3Rfdm0odmNwdS1cdTAwM2Vrdm0sIFx1MDAyNmludGkpO1xuMzE5ODpcdFx0fSBlbHNlIHtcbjMxOTk6XHRcdFx0LyogSW5qZWN0IHRoZSBtYWNoaW5lIGNoZWNrIHRvIHNwZWNpZmllZCB2Y3B1ICovXG4zMjAwOlx0XHRcdGlycS50eXBlID0gS1ZNX1MzOTBfTUNISztcbjMyMDE6XHRcdFx0cmMgPSBrdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LCBcdTAwMjZpcnEpO1xuMzIwMjpcdFx0fVxuMzIwMzpcdFx0V0FSTl9PTl9PTkNFKHJjKTtcbjMyMDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NTA3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODg3Olx0c3RhdGljIGludCBfX2luamVjdF9mbG9hdF9tY2hrKHN0cnVjdCBrdm0gKmt2bSxcbjE4ODg6XHRcdFx0XHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbjE4ODk6XHR7XG4xODkwOlx0XHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludDtcbjE4OTE6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4xODkyOlx0XG4xODkzOlx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfZmxvYXRfbWNoayYjNDM7JiM0Mzs7XG4xODk0Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZmaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4xODk1Olx0XHRmaS1cdTAwM2VtY2hrLmNyMTQgfD0gaW50aS1cdTAwM2VtY2hrLmNyMTQgXHUwMDI2ICgxVUwgXHUwMDNjXHUwMDNjIENSX1BFTkRJTkdfU1VCQ0xBU1MpO1xuMTg5NjpcdFx0ZmktXHUwMDNlbWNoay5tY2ljIHw9IGludGktXHUwMDNlbWNoay5tY2ljO1xuMTg5NzpcdFx0c2V0X2JpdChJUlFfUEVORF9NQ0hLX1JFUCwgXHUwMDI2ZmktXHUwMDNlcGVuZGluZ19pcnFzKTtcbjE4OTg6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZmktXHUwMDNlbG9jaywgZmxhZ3MpO1xuMTg5OTpcdFx0a2ZyZWUoaW50aSk7XG4xOTAwOlx0XHRyZXR1cm4gMDtcbjE5MDE6XHR9XG4xOTAyOlx0XG4xOTAzOlx0c3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbjE5MDQ6XHR7XG4xOTA1Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfZ2lzYV9pbnRlcnJ1cHQgKmdpID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2guZ2lzYV9pbnQ7XG4xOTA2Olx0XHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaTtcbjE5MDc6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7XG4xOTA4Olx0XHRpbnQgaXNjO1xuMTkwOTpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjE5MTA6XHRcbjE5MTE6XHRcdGt2bS1cdTAwM2VzdGF0LmluamVjdF9pbyYjNDM7JiM0Mzs7XG4xOTEyOlx0XHRpc2MgPSBpbnRfd29yZF90b19pc2MoaW50aS1cdTAwM2Vpby5pb19pbnRfd29yZCk7XG4xOTEzOlx0XG4xOTE0Olx0XHQvKlxuMTkxNTpcdFx0ICogV2UgZG8gbm90IHVzZSB0aGUgbG9jayBjaGVja2luZyB2YXJpYW50IGFzIHRoaXMgaXMganVzdCBhXG4xOTE2Olx0XHQgKiBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIHdlIGRvIG5vdCBob2xkIHRoZSBsb2NrIGhlcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEzOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjY5CgkJCQkJCQlvdXRwdXQ6IDQwNQoJCQkJCQkJdGhvdWdodHM6IDQ4OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSW50ZXJydXB0IEluamVjdGlvbiBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpbiBga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVja2AgYW5kIHRoZSBzdWJzZXF1ZW50IGBrZnJlZWAgb24gYSBzdGFjay1hbGxvY2F0ZWQgdmFyaWFibGUuIEkgaW1tZWRpYXRlbHkgZHVnIGludG8gYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgLCBjb25maXJtZWQgdGhhdCBgaW50aWAgKmlzKiBpbmRlZWQgYSBzdGFjayB2YXJpYWJsZSBhbmQgdGhhdCBgX19pbmplY3RfZmxvYXRfbWNoa2AgKmRvZXMqIGNhbGwgYGtmcmVlKGludGkpYC4gTXkgYWxhcm0gYmVsbHMgd2VyZSByaW5naW5nLCBzY3JlYW1pbmcgJiMzNDtpbnZhbGlkIGZyZWUhJiMzNDssIGJ1dCB0aGVuIEkgcXVpY2tseSByZW1lbWJlcmVkIEtBU0FOIGV4aXN0cyEgQW5kIEkgY29uZmlybWVkIEtBU0FOIHdpbGwgY2F0Y2ggdGhhdC4gIFNvLCBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQuCgpUaGVuLCBJIGxvb2tlZCBjbG9zZWx5IGF0IHRoZSBwYXRjaCBpdHNlbGYgdG8gc2VlIHdoYXQgaXQmIzM5O3MgY2hhbmdpbmcsIGFuZCB0aGF0IGludm9sdmVkIGdvaW5nIHRocm91Z2ggYWxsIGNhbGxzIHRvIGBfX2luamVjdF92bWAgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IHVuaW5pdGlhbGl6ZWQgcmVhZHMgaW50cm9kdWNlZCAqYnkgdGhlIHBhdGNoIGl0c2VsZiouICBUaGUgcGF0Y2ggcHJpbWFyaWx5IGZvY3VzZXMgb24gaW1wcm92aW5nIGZsb2F0aW5nIGludGVycnVwdCBkaXN0cmlidXRpb24gdXNpbmcgYSBuZXcgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxcygpYCBmdW5jdGlvbiwgYW5kIHRoZSBtb2RpZmljYXRpb24gdG8gYF9fZmxvYXRpbmdfaXJxX2tpY2tgLiBJIGFuYWx5emVkIGFsbCB0aGUgZGF0YSBiZWluZyByZWFkIGFuZCBtb2RpZmllZCBhY3Jvc3MgdGhlc2UgZnVuY3Rpb25zOgoKKiAgIFRoZSBwYXRjaCYjMzk7cyBpbnRyb2R1Y3Rpb24gb2YgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgZGVwZW5kcyBvbiBga3ZtLSZndDthcmNoLmlkbGVfbWFza2AsIGJ1dCB0aGF0IGlzIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBmdW5jdGlvbiBqdXN0IHJlYWRzIHN0YXRlLgoqICAgVGhlIG1vZGlmaWNhdGlvbiB0byBgX19mbG9hdGluZ19pcnFfa2lja2AgaW52b2x2ZWQgdGhlIHBhcmFtZXRlciBjaGFuZ2UgdG8gdGFrZSBgaW50aWAsIGFuZCBJIG5lZWRlZCB0byB2ZXJpZnkgYWxsIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4KKiAgIEkgY29uZmlybWVkIHRoYXQgaW4gYWxsIG90aGVyIHBhdGhzLCBgaW50aWAgaXMgYWxsb2NhdGVkIGJ5IGBremFsbG9jX29iamAsIGFuZCB0aGF0IG1lYW5zIGFsbCB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkLgoqICAgSW4gYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgLCBgaW50aWAgaXMgYSBzdGFjayB2YXJpYWJsZSwgYnV0IGl0JiMzOTtzICpwYXJ0aWFsbHkqIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIGBfX2luamVjdF92bWAuIFRoZSBjcml0aWNhbCBiaXQgaGVyZSBpcyB0aGUgYHR5cGVgIGZpZWxkLCB3aGljaCBJIGNvbmZpcm1lZCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBjYWxsaW5nIGFueXRoaW5nIHRoYXQgd291bGQgcmVhZCB0aGUgdmFyaWFibGUuCgpTaW5jZSBJIGFtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQsIEkga25vdyBob3cgdGhlIEtWTSBzMzkwIGFyY2hpdGVjdHVyZSB3b3Jrcy4gIFRoZSBkYXRhIGRlcGVuZGVuY2llcyBhcmUgY2xlYXIsIGFuZCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIGBpbnRpYCB2YXJpYWJsZSBhbmQgaXRzIGZpZWxkcyB0aGF0IGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIHBhdGNoIGFyZSBhbGwgaW5pdGlhbGl6ZWQuCgpUaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBXaGlsZSB0aGUgYGtmcmVlYCBvbiB0aGUgc3RhY2sgdmFyaWFibGUgaW4gYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgIGlzIHN0aWxsIGEgYnVnLCBpdCBpcyBhbiAqZXhpc3RpbmcqIGJ1ZyB0aGF0IGlzICpub3QqIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gIEtBU0FOIHdpbGwgY2F0Y2ggdGhpcy4KClNvLCBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZSB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoLiAgVGhlIGV4aXN0aW5nIEtBU0FOIGNoZWNrcyBhcmUgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gbG9naWMgdG8gZGlzdHJpYnV0ZSBmbG9hdGluZyBpbnRlcnJ1cHRzIHRvIGlkbGUgVkNQVXMuIEl0IGludHJvZHVjZXMgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxcygpYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBrdm0tXHUwMDNlYXJjaC5pZGxlX21hc2tgIGFuZCB3YWtlcyB1cCBWQ1BVcyB0aGF0IGNhbiBkZWxpdmVyIHRoZSBwZW5kaW5nIGludGVycnVwdHMuIEl0IGFsc28gbW9kaWZpZXMgYF9fZmxvYXRpbmdfaXJxX2tpY2soKWAgdG8gdGFrZSBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGlgIGluc3RlYWQgb2YgYSBgdTY0IHR5cGVgLCBhbmQgdXNlcyBgaW50aV90b19pcnFfcGVuZF9tYXNrKClgIHRvIGRldGVybWluZSB0aGUgcGVuZGluZyBJUlEgbWFzay5cblxuQWxsIGZpZWxkcyBhY2Nlc3NlZCBieSB0aGUgbmV3IGxvZ2ljIChzdWNoIGFzIGBpbnRpLVx1MDAzZXR5cGVgIGFuZCBgaW50aS1cdTAwM2Vpby5pb19pbnRfd29yZGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYGludGlgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBkeW5hbWljYWxseSB1c2luZyBga3phbGxvY2AgKHZpYSBga3phbGxvY19vYmooKWApIGluIHBhdGhzIGxpa2UgYGt2bV9hcmNoX3ZtX2lvY3RsKClgLCBga3ZtX3MzOTBfaW5qZWN0X2FpcnEoKWAsIGFuZCBgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbigpYCwgYW5kIHRoZW4gcG9wdWxhdGVkIHdpdGggZnVsbHkgaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGxvZ2ljLiBJbiB0aGUgY2FzZSBvZiBga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVjaygpYCwgd2hlcmUgYGludGlgIGlzIGEgc3RhY2sgdmFyaWFibGUsIG9ubHkgdGhlIGB0eXBlYCBmaWVsZCBpcyByZWFkIGJ5IHRoZSBuZXcgbG9naWMsIGFuZCBpdCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBLVk1fUzM5MF9NQ0hLYC5cblxuVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcy4gSXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKClgIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFza2AgYW5kIHdha2VzIHVwIFZDUFVzIHRoYXQgY2FuIGRlbGl2ZXIgdGhlIHBlbmRpbmcgaW50ZXJydXB0cy4gSXQgYWxzbyBtb2RpZmllcyBgX19mbG9hdGluZ19pcnFfa2ljaygpYCB0byB0YWtlIGEgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aWAgaW5zdGVhZCBvZiBhIGB1NjQgdHlwZWAsIGFuZCB1c2VzIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAgdG8gZGV0ZXJtaW5lIHRoZSBwZW5kaW5nIElSUSBtYXNrLlxuXG5BbGwgZmllbGRzIGFjY2Vzc2VkIGJ5IHRoZSBuZXcgbG9naWMgKHN1Y2ggYXMgYGludGktXHUwMDNldHlwZWAgYW5kIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgaW50aWAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iaigpYCkgaW4gcGF0aHMgbGlrZSBga3ZtX2FyY2hfdm1faW9jdGwoKWAsIGBrdm1fczM5MF9pbmplY3RfYWlycSgpYCwgYW5kIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKClgLCBhbmQgdGhlbiBwb3B1bGF0ZWQgd2l0aCBmdWxseSBpbml0aWFsaXplZCBkYXRhIGZyb20gdXNlciBzcGFjZSBvciBrZXJuZWwgbG9naWMuIEluIHRoZSBjYXNlIG9mIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKClgLCB3aGVyZSBgaW50aWAgaXMgYSBzdGFjayB2YXJpYWJsZSwgb25seSB0aGUgYHR5cGVgIGZpZWxkIGlzIHJlYWQgYnkgdGhlIG5ldyBsb2dpYywgYW5kIGl0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEtWTV9TMzkwX01DSEtgLlxuXG5UaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDQ6MTEuNzc0MjQwMDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc3NjkwNzQ0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzdHJpYnV0ZV9mbG9hdF9pcnFzXCIsXG4gICAgXCJrdm1fczM5MF9pbmplY3Rfdm1cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGxvZ2ljIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgaW50ZXJydXB0cyB0byBpZGxlIFZDUFVzLiBJdCBpbnRyb2R1Y2VzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXMoKWAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBga3ZtLVxcdTAwM2VhcmNoLmlkbGVfbWFza2AgYW5kIHdha2VzIHVwIFZDUFVzIHRoYXQgY2FuIGRlbGl2ZXIgdGhlIHBlbmRpbmcgaW50ZXJydXB0cy4gSXQgYWxzbyBtb2RpZmllcyBgX19mbG9hdGluZ19pcnFfa2ljaygpYCB0byB0YWtlIGEgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aWAgaW5zdGVhZCBvZiBhIGB1NjQgdHlwZWAsIGFuZCB1c2VzIGBpbnRpX3RvX2lycV9wZW5kX21hc2soKWAgdG8gZGV0ZXJtaW5lIHRoZSBwZW5kaW5nIElSUSBtYXNrLlxcblxcbkFsbCBmaWVsZHMgYWNjZXNzZWQgYnkgdGhlIG5ldyBsb2dpYyAoc3VjaCBhcyBgaW50aS1cXHUwMDNldHlwZWAgYW5kIGBpbnRpLVxcdTAwM2Vpby5pb19pbnRfd29yZGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYGludGlgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBkeW5hbWljYWxseSB1c2luZyBga3phbGxvY2AgKHZpYSBga3phbGxvY19vYmooKWApIGluIHBhdGhzIGxpa2UgYGt2bV9hcmNoX3ZtX2lvY3RsKClgLCBga3ZtX3MzOTBfaW5qZWN0X2FpcnEoKWAsIGFuZCBgX19rdm1faW5qZWN0X3BmYXVsdF90b2tlbigpYCwgYW5kIHRoZW4gcG9wdWxhdGVkIHdpdGggZnVsbHkgaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGxvZ2ljLiBJbiB0aGUgY2FzZSBvZiBga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVjaygpYCwgd2hlcmUgYGludGlgIGlzIGEgc3RhY2sgdmFyaWFibGUsIG9ubHkgdGhlIGB0eXBlYCBmaWVsZCBpcyByZWFkIGJ5IHRoZSBuZXcgbG9naWMsIGFuZCBpdCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBLVk1fUzM5MF9NQ0hLYC5cXG5cXG5UaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHMzOTAgaW50ZXJydXB0IGRlbGl2ZXJ5IGxvZ2ljIGJ5IGludHJvZHVjaW5nIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgaW50ZXJydXB0cyB0byBpZGxlIFZDUFVzIGFuZCBtb2RpZnlpbmcgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIGNoZWNrIGlmIGEgVkNQVSBjYW4gcmVjZWl2ZSB0aGUgaW50ZXJydXB0IGJlZm9yZSBraWNraW5nIGl0LiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBvbiBzMzkwIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNDoxMS43NzQyNDU2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MDEyNzk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDliMzkyYWU2MWNiZjJjMGE5OWYyNmJiODJlNzVmMzk2YmQ4OGFmZjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTM6MDQ6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGI0MTgyY2E0NDM1ZmIuLjFkNjJiZGQ3YWNhNWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC00NjcsNiArNDY3LDcgQEAgc3RydWN0IGt2bV92bV9zdGF0IHtcXG4gXFx0dTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5O1xcbiBcXHR1NjQgZ21hcF9zaGFkb3dfc2dfZW50cnk7XFxuIFxcdHU2NCBnbWFwX3NoYWRvd19wZ19lbnRyeTtcXG4rXFx0dTY0IGluamVjdF9yZWRpc3Q7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3Qge1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbmluZGV4IDhmMjRiY2QxYTZkMzYuLmU2N2NkZWRiNWFlY2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG5AQCAtMzY3LDYgKzM2NywzNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxpdmVyYWJsZV9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIGFjdGl2ZV9tYXNrO1xcbiB9XFxuIFxcbit2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICpkc3RfdmNwdTtcXG4rXFx0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xcbitcXG4rXFx0aWYgKCFSRUFEX09OQ0Uoa3ZtLVxcdTAwM2VhcmNoLmZsb2F0X2ludC5wZW5kaW5nX2lycXMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VvbmxpbmVfdmNwdXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm90IHRvbyB3b3JyaWVkIGFib3V0IHN5bmNocm9uaXphdGlvbiBmb3IgaWRsZV9tYXNrLiBXZVxcbitcXHQgKiBtaWdodCBidXJuIHRvbyBtYW55IGN5Y2xlcyBidXQgYXBhcnQgZnJvbSB0aGF0IHdha2luZyBhXFxuK1xcdCAqIHZjcHUgaXMgbm90IGhhcm1mdWwuXFxuK1xcdCAqL1xcbitcXHRzaWdjcHUgPSBmaW5kX2ZpcnN0X2JpdChrdm0tXFx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMpO1xcbitcXHQvKiBXZWxsIG5vYm9keSdzIHNsZWVwaW5nIHNvIHNvbWVvbmUgd2lsbCBsaWtlbHkgdGFrZSB0aGUgSVJRIHNvb24gKi9cXG4rXFx0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xcbitcXHRcXHRpZiAoZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkpIHtcXG4rXFx0XFx0XFx0a3ZtLVxcdTAwM2VzdGF0LmluamVjdF9yZWRpc3QrKztcXG4rXFx0XFx0XFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRzaWdjcHUgPSBmaW5kX25leHRfYml0KGt2bS1cXHUwMDNlYXJjaC5pZGxlX21hc2ssIG9ubGluZV92Y3B1cywgKytzaWdjcHUpO1xcbitcXHR9IHdoaWxlIChzaWdjcHUgXFx1MDAzYyBvbmxpbmVfdmNwdXMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBfX3NldF9jcHVfaWRsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0a3ZtX3MzOTBfc2V0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfV0FJVCk7XFxuQEAgLTE5MTUsMjIgKzE5NDYsNDggQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4re1xcbitcXHR1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLVxcdTAwM2V0eXBlKTtcXG4rXFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIEtWTV9TMzkwX01DSEs6XFxuK1xcdFxcdC8qIE9ubHkgcmVwcmVzc2libGUgbWFjaGluZSBjaGVja3MgYXJlIGZsb2F0aW5nICovXFxuK1xcdFxcdHJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApO1xcbitcXHRjYXNlIEtWTV9TMzkwX0lOVF9WSVJUSU86XFxuK1xcdFxcdHJldHVybiBCSVQoSVJRX1BFTkRfVklSVElPKTtcXG4rXFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcXG4rXFx0XFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxcbitcXHRcXHQgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTtcXG4rXFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XFxuK1xcdFxcdHJldHVybiBCSVQoSVJRX1BFTkRfUEZBVUxUX0RPTkUpO1xcbitcXHRjYXNlIEtWTV9TMzkwX0lOVF9JT19NSU4uLi5LVk1fUzM5MF9JTlRfSU9fTUFYOlxcbitcXHRcXHRyZXR1cm4gQklUKGlzY190b19pcnFfdHlwZShpbnRfd29yZF90b19pc2MoaW50aS1cXHUwMDNlaW8uaW9faW50X3dvcmQpKSk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIEZpbmQgYSBkZXN0aW5hdGlvbiBWQ1BVIGZvciBhIGZsb2F0aW5nIGlycSBhbmQga2ljayBpdC5cXG4gICovXFxuLXN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSlcXG4rc3RhdGljIHZvaWQgX19mbG9hdGluZ19pcnFfa2ljayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xcbiBcXHRpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDtcXG4rXFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cXHUwMDNldHlwZSk7XFxuK1xcdHU2NCBpcnFfcGVuZF9tYXNrO1xcbiBcXG4gXFx0b25saW5lX3ZjcHVzID0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKTtcXG4gXFx0aWYgKCFvbmxpbmVfdmNwdXMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2soaW50aSk7XFxuIFxcdGZvciAoc2lnY3B1ID0ga3ZtLVxcdTAwM2VhcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUrKykge1xcbiBcXHRcXHRzaWdjcHUgJT0gb25saW5lX3ZjcHVzO1xcbiBcXHRcXHRkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7XFxuLVxcdFxcdGlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSlcXG4rXFx0XFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSBcXHUwMDI2IGlycV9wZW5kX21hc2spXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHQvKiBhdm9pZCBlbmRsZXNzIGxvb3BzIGlmIGFsbCB2Y3B1cyBhcmUgc3RvcHBlZCAqL1xcbiBcXHRcXHRpZiAobnJfdHJpZXMrKyBcXHUwMDNlPSBvbmxpbmVfdmNwdXMpXFxuQEAgLTE5ODIsNyArMjAzOSw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXG4tXFx0X19mbG9hdGluZ19pcnFfa2ljayhrdm0sIHR5cGUpO1xcbitcXHRfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgaW50aSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5pbmRleCA1MThhNjljNTVlODVjLi5kNmQ0NjY4OGQ5ODA4IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbkBAIC04Niw2ICs4Niw3IEBAIGNvbnN0IHN0cnVjdCBrdm1fc3RhdHNfZGVzYyBrdm1fdm1fc3RhdHNfZGVzY1tdID0ge1xcbiBcXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3IzX2VudHJ5KSxcXG4gXFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19zZ19lbnRyeSksXFxuIFxcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfcGdfZW50cnkpLFxcbitcXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxcbiB9O1xcbiBcXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcXG5AQCAtNDU3Miw2ICs0NTczLDggQEAgc3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRyYyA9IGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHZjcHUpO1xcbiBcXHRcXHRpZiAocmMgfHwgZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRcXHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cXHUwMDNla3ZtKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaFxcbmluZGV4IDZkMjg0MmZiNzFhMzMuLmEyYmNmNGFjYWMxNmUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXFxuQEAgLTM3NSw2ICszNzUsNyBAQCBlbnVtIGhydGltZXJfcmVzdGFydCBrdm1fczM5MF9pZGxlX3dha2V1cChzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpO1xcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3MzOTBfY2xlYXJfbG9jYWxfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcXG4rdm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcXG4gaW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjEzLjA0NTI5MDQzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2MzQ4MzI2ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc3RyaWJ1dGVfZmxvYXRfaXJxc1wiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBzMzkwIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYyBieSBpbnRyb2R1Y2luZyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcyBhbmQgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB0byBjaGVjayBpZiBhIFZDUFUgY2FuIHJlY2VpdmUgdGhlIGludGVycnVwdCBiZWZvcmUga2lja2luZyBpdC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgb24gczM5MCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWIzOTJhZTYxY2JmMmMwYTk5ZjI2YmI4MmU3NWYzOTZiZDg4YWZmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDEzOjA0OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBzdHJ1Y3Qga3ZtX3ZtX3N0YXQge1xuIFx0dTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3BnX2VudHJ5O1xuK1x0dTY0IGluamVjdF9yZWRpc3Q7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3Qge1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5pbmRleCA4ZjI0YmNkMWE2ZDM2Li5lNjdjZGVkYjVhZWNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuQEAgLTM2Nyw2ICszNjcsMzcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gYWN0aXZlX21hc2s7XG4gfVxuIFxuK3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xuK1x0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xuK1xuK1x0aWYgKCFSRUFEX09OQ0Uoa3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50LnBlbmRpbmdfaXJxcykpXG4rXHRcdHJldHVybjtcbitcbitcdG9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuK1xuK1x0LypcbitcdCAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2VcbitcdCAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGFcbitcdCAqIHZjcHUgaXMgbm90IGhhcm1mdWwuXG4rXHQgKi9cbitcdHNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcbitcdC8qIFdlbGwgbm9ib2R5J3Mgc2xlZXBpbmcgc28gc29tZW9uZSB3aWxsIGxpa2VseSB0YWtlIHRoZSBJUlEgc29vbiAqL1xuK1x0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXG4rXHRcdHJldHVybjtcbitcbitcdGRvIHtcbitcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuK1x0XHRpZiAoZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkpIHtcbitcdFx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0Kys7XG4rXHRcdFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICsrc2lnY3B1KTtcbitcdH0gd2hpbGUgKHNpZ2NwdSBcdTAwM2Mgb25saW5lX3ZjcHVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19zZXRfY3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1dBSVQpO1xuQEAgLTE5MTUsMjIgKzE5NDYsNDggQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdTY0IGludGlfdG9faXJxX3BlbmRfbWFzayhzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4re1xuK1x0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuK1x0XHQvKiBPbmx5IHJlcHJlc3NpYmxlIG1hY2hpbmUgY2hlY2tzIGFyZSBmbG9hdGluZyAqL1xuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX01DSEtfUkVQKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuK1x0XHQgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4rXHRcdHJldHVybiBCSVQoaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkKSkpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxuICAqL1xuLXN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSlcbitzdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XG4gXHRpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDtcbitcdHU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktXHUwMDNldHlwZSk7XG4rXHR1NjQgaXJxX3BlbmRfbWFzaztcbiBcbiBcdG9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuIFx0aWYgKCFvbmxpbmVfdmNwdXMpXG4gXHRcdHJldHVybjtcbiBcbitcdGlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2soaW50aSk7XG4gXHRmb3IgKHNpZ2NwdSA9IGt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUrKykge1xuIFx0XHRzaWdjcHUgJT0gb25saW5lX3ZjcHVzO1xuIFx0XHRkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7XG4tXHRcdGlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSlcbitcdFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkgXHUwMDI2IGlycV9wZW5kX21hc2spXG4gXHRcdFx0YnJlYWs7XG4gXHRcdC8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovXG4gXHRcdGlmIChucl90cmllcysrIFx1MDAzZT0gb25saW5lX3ZjcHVzKVxuQEAgLTE5ODIsNyArMjAzOSw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbi1cdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTtcbitcdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCBpbnRpKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDUxOGE2OWM1NWU4NWMuLmQ2ZDQ2Njg4ZDk4MDggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTg2LDYgKzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7XG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3IzX2VudHJ5KSxcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfc2dfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksXG4rXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbkBAIC00NTcyLDYgKzQ1NzMsOCBAQCBzdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7XG4gXHRcdGlmIChyYyB8fCBndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpXG4gXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuIFx0fVxuIFxuIFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG5pbmRleCA2ZDI4NDJmYjcxYTMzLi5hMmJjZjRhY2FjMTZlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbkBAIC0zNzUsNiArMzc1LDcgQEAgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKTtcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG4rdm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDQ6MTMuMDQ1MjkyMzU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2NDgyNTE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFMzOTAgS1ZNIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgS1ZNIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQgc2VlbXMgdG8gaW50cm9kdWNlIGEgbmV3IGZ1bmN0aW9uLCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgbG9jYXRlZCBpbiBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AsIGFuZCBpbXBvcnRhbnRseSwgdGhpcyBuZXcgZnVuY3Rpb24gaXMgKmNhbGxlZCogZnJvbSBgdmNwdV9wcmVfcnVuYCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYC4gQWxzbywgdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgc3BlY2lmaWNhbGx5IGhvdyBpdCB1c2VzIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgIHRvIGRlY2lkZSBpZiBhIHZDUFUgY2FuIGhhbmRsZSBhbiBpbnRlcnJ1cHQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZXZlbiBzb21ldGhpbmcgd2Ugc2hvdWxkIGJvdGhlciB3aXRoIGZ1enppbmcuIFNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggS1ZNIG9uIHMzOTAsIHRoYXQgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBJIGtub3cgc3l6a2FsbGVyIGlzIGFscmVhZHkgaGl0dGluZyB0aGF0IGFyZWEuIE5vdyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoZXNlIG5ldy9tb2RpZmllZCBmdW5jdGlvbnMgd2FycmFudCBhdHRlbnRpb24uXG5cbkxldCdzIHNlZSwgdGhlIGZ1bmN0aW9ucyB0b3VjaGVkIGFyZTogYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCBgX19mbG9hdGluZ19pcnFfa2lja2AsIGBfX2luamVjdF92bWAsIGFuZCBgdmNwdV9wcmVfcnVuYC5cblxuT2theSwgdGhlIGNydWNpYWwgcGFydCBpcyB0byBkZXRlcm1pbmUgYWNjZXNzaWJpbGl0eSBmb3IgZnV6emluZy4gYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AsIHNpbmNlIGl0J3Mgbm9uLXN0YXRpYywgY2FuIGJlIGRpcmVjdGx5IGFkZGVkIHRvIEZvY3VzU3ltYm9scy4gVGhhdCdzIGEgZ3JlZW4gbGlnaHQhIE5vdywgdGhlIG90aGVyczogYGludGlfdG9faXJxX3BlbmRfbWFza2AsIGBfX2Zsb2F0aW5nX2lycV9raWNrYCwgYF9faW5qZWN0X3ZtYCwgYW5kIGB2Y3B1X3ByZV9ydW5gIGFyZSBhbGwgc3RhdGljLiBUaGlzIG1ha2VzIHRoZW0gYSBiaXQgbW9yZSBjaGFsbGVuZ2luZyB0byB0YXJnZXQgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZSBub24tc3RhdGljIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIHdpbGwgYnJpbmcgdGhlIHN0YXRpYyBmdW5jdGlvbnMgY2xvc2VyIHRvIHRoZSBzdXJmYWNlLiBXYWl0LCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBpcyBleHBvcnRlZC4gVGhhdCdzIGdvb2QgbmV3cyFcblxuQWxyaWdodCwgaXQncyB0aW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG5hdHVyZSBvZiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjE5LjAxMDEyODQ2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMwNzc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXN0cmlidXRlX2Zsb2F0X2lycXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM2OS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3MDp2b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ1NTg9c3RhdGljIGludCB2Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1NzYtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ1Nzc6XFx0XFx0ZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHZjcHUtXFx1MDAzZWt2bSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ1NzgtXFx0fVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTM3Nz12b2lkIGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6Mzc4OnZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTM3OS1pbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjE5LjA4NTQ0MjY2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzYyOTU2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBzMzkwIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIEtjb25maWcgc2V0dGluZ3MgZm9yIHMzOTAgdmlydHVhbGl6YXRpb24gdXNpbmcgS1ZNLiBUaGlzIG1lYW5zIG5hdmlnYXRpbmcgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgdG8gY29uZmlybSB3aGljaCBvcHRpb25zIGFyZSBwcmVzZW50LCBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3VwcG9ydCBpcyB0aGVyZSBhbmQgbm90IHNvbWVob3cgYWNjaWRlbnRhbGx5IGRpc2FibGVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBLVk0tcmVsYXRlZCBzeW1ib2xzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMg4oCTIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fUzM5MGAsIGFuZCBhbnl0aGluZyB0aGF0IHJlbGF0ZXMgdG8gdGhlIHNwZWNpZmljIHMzOTAgaGFyZHdhcmUgZmVhdHVyZXMgbmVjZXNzYXJ5IGZvciB2aXJ0dWFsaXphdGlvbi4gSSdsbCBhbHNvIGJlIGNoZWNraW5nIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzOyBJIGRvbid0IHdhbnQgdG8gZ2V0IHRyaXBwZWQgdXAgYnkgc29tZSBzdWJ0bGUgYnVpbGQtdGltZSBpc3N1ZS4gRXNzZW50aWFsbHksIEknbSB2ZXJpZnlpbmcgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cCBjb3JyZWN0bHkuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjIzLjkyMTc0MTg4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTU5NzkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjIzLjk5MTM0ODAwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzg2OTA4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBJbmplY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyB1c2luZyBLVk0uIFRoYXQncyBvdXIgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzeXN0ZW0gd29ya3MsIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoaW5ncyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgdmlydHVhbCBtYWNoaW5lLiBNeSBpbml0aWFsIHRhcmdldHMgYXJlIGNsZWFybHkgYF9faW5qZWN0X3ZtYCBhbmQgYGt2bV9zMzkwX2luamVjdF92bWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvYmFibHkgY2VudHJhbCB0byB0aGUgaW5qZWN0aW9uIG1lY2hhbmlzbS4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGNvZGUgaW4gdGhvc2Ugcm91dGluZXMsIHVuZGVyc3RhbmRpbmcgdGhlaXIgcGFyYW1ldGVycywgY29udHJvbCBmbG93LCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIHRoZXkgaW5jb3Jwb3JhdGUuIEhvcGVmdWxseSwgSSdsbCB1bmNvdmVyIHRoZSBpbmplY3Rpb24gbWV0aG9kIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBzcGVjaWZpYyBLVk0gaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NjMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNDoyNy4yNzAwNDI5NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc5MTcwMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjAxNT1zdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ1LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA0NjppbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwNDctXFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4MC1cXHR9XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDgxOlxcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVxcdTAwM2V0eXBlLCBzMzkwaW50LVxcdTAwM2VwYXJtLCBzMzkwaW50LVxcdTAwM2VwYXJtNjQsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDgyLVxcdFxcdFxcdFxcdCAyKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgyMD1zdGF0aWMgaW50IGt2bV9zMzkwX2luamVjdF9haXJxKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzOC1cXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVxcdTAwM2VzdXBwcmVzc2libGUpIHtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mzk6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg0MC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODUyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mjg1MzpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODU0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zODA4PWludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODUwLVxcdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXFx1MDAzZXN1cHByZXNzaWJsZSkge1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzg1MTpcXHRcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODUyLVxcdFxcdGlmIChyZXQgPT0gMCkge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcwLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzg3MTpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcyLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IChmaS1cXHUwMDNlc2ltbSBcXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cXHUwMDNlaXNjKSkpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQ3LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTQ4OlxcdFxcdHIgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5NDktXFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDQ3NT1zdGF0aWMgdm9pZCBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBzdGFydF90b2tlbixcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDkzLVxcdFxcdGludGkucGFybTY0ID0gdG9rZW47XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0OTQ6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKHZjcHUtXFx1MDAzZWt2bSwgXFx1MDAyNmludGksIGludGlfbWVtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTM3OD12b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozNzk6aW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODAtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaD04MT1UUkFDRV9FVkVOVChrdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjQtXFxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmg6MTI1OlRSQUNFX0VWRU5UKGt2bV9zMzkwX2luamVjdF92bSxcXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjYtXFx0ICAgIFRQX1BST1RPKF9fdTY0IHR5cGUsIF9fdTMyIHBhcm0sIF9fdTY0IHBhcm02NCwgaW50IHdobyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjI3LjM2Nzk2NTE0OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDI5NzU2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNL3MzOTAgSW50ZXJydXB0IEluamVjdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgc2luY2UgaXQncyBleHBvcnRlZCBhbmQgYmVpbmcgdXNlZC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLCBhbmQgdGhhdCdzIHRoZSByZWFsIGludGVyZXN0aW5nIHBhcnQuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIGJlY29tZXM6XG4qICAgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2BcbiogICBga3ZtX3MzOTBfaW5qZWN0X3ZtYFxuXG5TaW5jZSwgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgaXMgY2FsbGVkIGZyb20gYHZjcHVfcHJlX3J1bmAsIGFuZCBpdCBhZmZlY3RzIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB3aGljaCBpcyB1c2VkIGJ5IGBfX2luamVjdF92bWAgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4gVGhhdCdzIHRoZSBjYWxsIGNoYWluLlxuXG5Ob3csIGxldCdzIHZlcmlmeSBhIGZldyB0aGluZ3MuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCAqaXMqIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLCBhbmQgdGhhdCBpdCBpc24ndCBzdGF0aWMuIEl0J3MgZGVjbGFyZWQgaW4gYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaGAgYW5kIGRlZmluZWQgaW4gYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgLCBhbmQgaXQncyBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBHb29kLCB0aGF0IG1ha2VzIHRoaW5ncyBlYXNpZXIuIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIGFsc28gbm90IHN0YXRpYywgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0LlxuXG5JIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBxdWljayBsb29rIGF0IGhvdyBgdmNwdV9wcmVfcnVuYCBhbmQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBhcmUgd29ya2luZyBpbiBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhpcyBuZXcgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBzY2hlbWUsIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjMyLjg3MDk0MzE1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MjU1MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjcHVfcHJlX3J1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDUzMj1ib29sIGt2bV9hcmNoX3NldHVwX2FzeW5jX3BmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NTU3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0NTU4OnN0YXRpYyBpbnQgdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDU1OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDc5ND1zdGF0aWMgaW50IF9fdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ4MDUtXFx0d2hpbGUgKHRydWUpIHtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDgwNjpcXHRcXHRyYyA9IHZjcHVfcHJlX3J1bih2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDgwNy1cXHRcXHRrdm1fdmNwdV9zcmN1X3JlYWRfdW5sb2NrKHZjcHUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNDozMi45NzgyMDQwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA1OTA0MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBzMzkwIEludGVycnVwdCBEZWxpdmVyeSBQYXRjaCoqXG5cbk9rYXksIHNvIGB2Y3B1X3ByZV9ydW5gIGlzIGNhbGxlZCBmcm9tIGBfX3ZjcHVfcnVuYCwgd2hpY2ggaXRzZWxmIGlzIHRyaWdnZXJlZCBieSBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBSaWdodCwgdGhhdCdzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29kZSBwYXRoLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBwYXRjaCBtYWtlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBob3cgS1ZNIGhhbmRsZXMgaW50ZXJydXB0cyBvbiBzMzkwLCBhbmQgdGhhdCdzIHByZWNpc2VseSB0aGUga2luZCBvZiB0aGluZyBJJ20gbG9va2luZyBmb3IuXG5cblNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgd2hpY2ggc291bmRzIGxpa2UgaXQncyBkZXNpZ25lZCB0byBwdXNoIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcy4gQWxzbywgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGlzIGJlaW5nIHR3ZWFrZWQgdG8gdXNlIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgIHRvIHByZXZlbnQga2lja2luZyBhIFZDUFUgdGhhdCdzIHVuYWJsZSB0byByZWNlaXZlIHRoZSBpbnRlcnJ1cHQuXG5cblRoaXMgaXMgc2NyZWFtaW5nIFwiRlVaWiBNRSFcIiBhdCBtZS4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSBLVk0gaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiwgYW5kIHRoZSBtb2RpZmljYXRpb25zIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHRpbWluZyBpc3N1ZXMgb3IgY29ybmVyIGNhc2VzLiBJJ2xsIGZsYWcgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AgYW5kIGBrdm1fczM5MF9pbmplY3Rfdm1gIGFzIGZvY3VzIHN5bWJvbHMuIEFuZCBvZiBjb3Vyc2UsIEknbGwgbmVlZCBgS1ZNYCBlbmFibGVkIGZvciB0aGUgZnV6emluZy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSBmb3IgZGlzY292ZXJpbmcgc29tZSBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzksIk91dHB1dFRva2VucyI6MTM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA0OjM5LjE4NDExMTA1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTUwMjE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzdHJpYnV0ZV9mbG9hdF9pcnFzXCIsXG4gICAgXCJrdm1fczM5MF9pbmplY3Rfdm1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHMzOTAgaW50ZXJydXB0IGRlbGl2ZXJ5IGxvZ2ljIGJ5IGludHJvZHVjaW5nIGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgIHRvIGRpc3RyaWJ1dGUgZmxvYXRpbmcgaW50ZXJydXB0cyB0byBpZGxlIFZDUFVzIGFuZCBtb2RpZnlpbmcgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIGNoZWNrIGlmIGEgVkNQVSBjYW4gcmVjZWl2ZSB0aGUgaW50ZXJydXB0IGJlZm9yZSBraWNraW5nIGl0LiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBvbiBzMzkwIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc3RyaWJ1dGVfZmxvYXRfaXJxc1wiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBzMzkwIGludGVycnVwdCBkZWxpdmVyeSBsb2dpYyBieSBpbnRyb2R1Y2luZyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcyBhbmQgbW9kaWZ5aW5nIGBfX2Zsb2F0aW5nX2lycV9raWNrYCB0byBjaGVjayBpZiBhIFZDUFUgY2FuIHJlY2VpdmUgdGhlIGludGVycnVwdCBiZWZvcmUga2lja2luZyBpdC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgb24gczM5MCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDQ6MzkuMzkzNjIxMjgzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTAxNDk2ODA1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNDozOS4zOTQxODQ1MjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzUwMTQ5MTEyMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcy4gSXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKClgIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGt2bS1cXHUwMDNlYXJjaC5pZGxlX21hc2tgIGFuZCB3YWtlcyB1cCBWQ1BVcyB0aGF0IGNhbiBkZWxpdmVyIHRoZSBwZW5kaW5nIGludGVycnVwdHMuIEl0IGFsc28gbW9kaWZpZXMgYF9fZmxvYXRpbmdfaXJxX2tpY2soKWAgdG8gdGFrZSBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGlgIGluc3RlYWQgb2YgYSBgdTY0IHR5cGVgLCBhbmQgdXNlcyBgaW50aV90b19pcnFfcGVuZF9tYXNrKClgIHRvIGRldGVybWluZSB0aGUgcGVuZGluZyBJUlEgbWFzay5cXG5cXG5BbGwgZmllbGRzIGFjY2Vzc2VkIGJ5IHRoZSBuZXcgbG9naWMgKHN1Y2ggYXMgYGludGktXFx1MDAzZXR5cGVgIGFuZCBgaW50aS1cXHUwMDNlaW8uaW9faW50X3dvcmRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBpbnRpYCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgdXNpbmcgYGt6YWxsb2NgICh2aWEgYGt6YWxsb2Nfb2JqKClgKSBpbiBwYXRocyBsaWtlIGBrdm1fYXJjaF92bV9pb2N0bCgpYCwgYGt2bV9zMzkwX2luamVjdF9haXJxKClgLCBhbmQgYF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oKWAsIGFuZCB0aGVuIHBvcHVsYXRlZCB3aXRoIGZ1bGx5IGluaXRpYWxpemVkIGRhdGEgZnJvbSB1c2VyIHNwYWNlIG9yIGtlcm5lbCBsb2dpYy4gSW4gdGhlIGNhc2Ugb2YgYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soKWAsIHdoZXJlIGBpbnRpYCBpcyBhIHN0YWNrIHZhcmlhYmxlLCBvbmx5IHRoZSBgdHlwZWAgZmllbGQgaXMgcmVhZCBieSB0aGUgbmV3IGxvZ2ljLCBhbmQgaXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgS1ZNX1MzOTBfTUNIS2AuXFxuXFxuVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWIzOTJhZTYxY2JmMmMwYTk5ZjI2YmI4MmU3NWYzOTZiZDg4YWZmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDEzOjA0OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggYjQxODJjYTQ0MzVmYi4uMWQ2MmJkZDdhY2E1ZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBzdHJ1Y3Qga3ZtX3ZtX3N0YXQge1xuIFx0dTY0IGdtYXBfc2hhZG93X3IzX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3NnX2VudHJ5O1xuIFx0dTY0IGdtYXBfc2hhZG93X3BnX2VudHJ5O1xuK1x0dTY0IGluamVjdF9yZWRpc3Q7XG4gfTtcbiBcbiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3Qge1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5pbmRleCA4ZjI0YmNkMWE2ZDM2Li5lNjdjZGVkYjVhZWNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuQEAgLTM2Nyw2ICszNjcsMzcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVsaXZlcmFibGVfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gYWN0aXZlX21hc2s7XG4gfVxuIFxuK3ZvaWQgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xuK1x0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzO1xuK1xuK1x0aWYgKCFSRUFEX09OQ0Uoa3ZtLVx1MDAzZWFyY2guZmxvYXRfaW50LnBlbmRpbmdfaXJxcykpXG4rXHRcdHJldHVybjtcbitcbitcdG9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuK1xuK1x0LypcbitcdCAqIE5vdCB0b28gd29ycmllZCBhYm91dCBzeW5jaHJvbml6YXRpb24gZm9yIGlkbGVfbWFzay4gV2VcbitcdCAqIG1pZ2h0IGJ1cm4gdG9vIG1hbnkgY3ljbGVzIGJ1dCBhcGFydCBmcm9tIHRoYXQgd2FraW5nIGFcbitcdCAqIHZjcHUgaXMgbm90IGhhcm1mdWwuXG4rXHQgKi9cbitcdHNpZ2NwdSA9IGZpbmRfZmlyc3RfYml0KGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFzaywgb25saW5lX3ZjcHVzKTtcbitcdC8qIFdlbGwgbm9ib2R5J3Mgc2xlZXBpbmcgc28gc29tZW9uZSB3aWxsIGxpa2VseSB0YWtlIHRoZSBJUlEgc29vbiAqL1xuK1x0aWYgKHNpZ2NwdSA9PSBvbmxpbmVfdmNwdXMpXG4rXHRcdHJldHVybjtcbitcbitcdGRvIHtcbitcdFx0ZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBzaWdjcHUpO1xuK1x0XHRpZiAoZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkpIHtcbitcdFx0XHRrdm0tXHUwMDNlc3RhdC5pbmplY3RfcmVkaXN0Kys7XG4rXHRcdFx0a3ZtX3MzOTBfdmNwdV93YWtldXAoZHN0X3ZjcHUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHNpZ2NwdSA9IGZpbmRfbmV4dF9iaXQoa3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrLCBvbmxpbmVfdmNwdXMsICsrc2lnY3B1KTtcbitcdH0gd2hpbGUgKHNpZ2NwdSBcdTAwM2Mgb25saW5lX3ZjcHVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19zZXRfY3B1X2lkbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGt2bV9zMzkwX3NldF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX1dBSVQpO1xuQEAgLTE5MTUsMjIgKzE5NDYsNDggQEAgc3RhdGljIGludCBfX2luamVjdF9pbyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdTY0IGludGlfdG9faXJxX3BlbmRfbWFzayhzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4re1xuK1x0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cdTAwM2V0eXBlKTtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxuK1x0XHQvKiBPbmx5IHJlcHJlc3NpYmxlIG1hY2hpbmUgY2hlY2tzIGFyZSBmbG9hdGluZyAqL1xuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX01DSEtfUkVQKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xuK1x0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcbitcdFx0cmV0dXJuIEJJVChJUlFfUEVORF9FWFRfU0VSVklDRSkgfFxuK1x0XHQgICAgICAgQklUKElSUV9QRU5EX0VYVF9TRVJWSUNFX0VWKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FOlxuK1x0XHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcbitcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XG4rXHRcdHJldHVybiBCSVQoaXNjX3RvX2lycV90eXBlKGludF93b3JkX3RvX2lzYyhpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkKSkpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogRmluZCBhIGRlc3RpbmF0aW9uIFZDUFUgZm9yIGEgZmxvYXRpbmcgaXJxIGFuZCBraWNrIGl0LlxuICAqL1xuLXN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCB1NjQgdHlwZSlcbitzdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHU7XG4gXHRpbnQgc2lnY3B1LCBvbmxpbmVfdmNwdXMsIG5yX3RyaWVzID0gMDtcbitcdHU2NCB0eXBlID0gUkVBRF9PTkNFKGludGktXHUwMDNldHlwZSk7XG4rXHR1NjQgaXJxX3BlbmRfbWFzaztcbiBcbiBcdG9ubGluZV92Y3B1cyA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuIFx0aWYgKCFvbmxpbmVfdmNwdXMpXG4gXHRcdHJldHVybjtcbiBcbitcdGlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2soaW50aSk7XG4gXHRmb3IgKHNpZ2NwdSA9IGt2bS1cdTAwM2VhcmNoLmZsb2F0X2ludC5sYXN0X3NsZWVwX2NwdTsgOyBzaWdjcHUrKykge1xuIFx0XHRzaWdjcHUgJT0gb25saW5lX3ZjcHVzO1xuIFx0XHRkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7XG4tXHRcdGlmICghaXNfdmNwdV9zdG9wcGVkKGRzdF92Y3B1KSlcbitcdFx0aWYgKCFpc192Y3B1X3N0b3BwZWQoZHN0X3ZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZGVsaXZlcmFibGVfaXJxcyhkc3RfdmNwdSkgXHUwMDI2IGlycV9wZW5kX21hc2spXG4gXHRcdFx0YnJlYWs7XG4gXHRcdC8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovXG4gXHRcdGlmIChucl90cmllcysrIFx1MDAzZT0gb25saW5lX3ZjcHVzKVxuQEAgLTE5ODIsNyArMjAzOSw3IEBAIHN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbi1cdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCB0eXBlKTtcbitcdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCBpbnRpKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDUxOGE2OWM1NWU4NWMuLmQ2ZDQ2Njg4ZDk4MDggMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTg2LDYgKzg2LDcgQEAgY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92bV9zdGF0c19kZXNjW10gPSB7XG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGdtYXBfc2hhZG93X3IzX2VudHJ5KSxcbiBcdFNUQVRTX0RFU0NfQ09VTlRFUihWTSwgZ21hcF9zaGFkb3dfc2dfZW50cnkpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZNLCBnbWFwX3NoYWRvd19wZ19lbnRyeSksXG4rXHRTVEFUU19ERVNDX0NPVU5URVIoVk0sIGluamVjdF9yZWRpc3QpLFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGt2bV9zdGF0c19oZWFkZXIga3ZtX3ZtX3N0YXRzX2hlYWRlciA9IHtcbkBAIC00NTcyLDYgKzQ1NzMsOCBAQCBzdGF0aWMgaW50IHZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHJjID0ga3ZtX3MzOTBfZGVsaXZlcl9wZW5kaW5nX2ludGVycnVwdHModmNwdSk7XG4gXHRcdGlmIChyYyB8fCBndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpXG4gXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRkaXN0cmlidXRlX2Zsb2F0X2lycXModmNwdS1cdTAwM2Vrdm0pO1xuIFx0fVxuIFxuIFx0cmMgPSBrdm1fczM5MF9oYW5kbGVfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG5pbmRleCA2ZDI4NDJmYjcxYTMzLi5hMmJjZjRhY2FjMTZlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmhcbkBAIC0zNzUsNiArMzc1LDcgQEAgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3MzOTBfaWRsZV93YWtldXAoc3RydWN0IGhydGltZXIgKnRpbWVyKTtcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2RlbGl2ZXJfcGVuZGluZ19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9sb2NhbF9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fczM5MF9jbGVhcl9mbG9hdF9pcnFzKHN0cnVjdCBrdm0gKmt2bSk7XG4rdm9pZCBkaXN0cmlidXRlX2Zsb2F0X2lycXMoc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCAqczM5MGludCxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDQ6MzkuMzk0MTg3NjQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NzkzNDQyMjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUzM5MCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gcmVmaW5pbmcgaG93IGludGVycnVwdHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBTMzkwIEtWTSBlbnZpcm9ubWVudC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBpbnRyb2R1Y2luZyBzb21lIG9wdGltaXphdGlvbnMgcmVsYXRlZCB0byBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uIGFuZCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgdGhlIHdha2V1cCBtZWNoYW5pc20gZm9yIGlkbGUgdkNQVXMuIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gYmUgYWJvdXQgZWZmaWNpZW50bHkgZGlzdHJpYnV0aW5nIHBlbmRpbmcgaW50ZXJydXB0cyB0byB0aGUgYXBwcm9wcmlhdGUgdmlydHVhbCBDUFVzLlxuXG5JJ20gc2VlaW5nIHRoYXQgYSBuZXcgZmllbGQsIGBpbmplY3RfcmVkaXN0YCwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGBrdm1fdm1fc3RhdGAgc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2l0aCB0aGlzIGFkZGl0aW9uPyBEZWJ1Z2ZzIG9yIHNpbWlsYXIgaXMgb2Z0ZW4gdXNlZCB0byBleHBvc2UgYGt2bV92bV9zdGF0YCB0byB1c2Vyc3BhY2UuIEZvcnR1bmF0ZWx5LCBpdCdzIGp1c3QgYSBzdHJ1Y3Qgb2YgYHU2NGAgZmllbGRzLCBhbmQgdGhlIG5ldyBmaWVsZCBpcyBhZGRlZCBhdCB0aGUgZW5kIGFuZCBpcyBsaWtlbHkgemVyb2VkIG9uIGFsbG9jYXRpb24sIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgcXVpY2tseSB2ZXJpZmllZCB0aGF0IGBrdm1fdm1fc3RhdGAgaXMgZWl0aGVyIGVtYmVkZGVkIHdpdGhpbiB0aGUgYHN0cnVjdCBrdm1gIG9yIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgd2hpY2ggc2hvdWxkIGhhbmRsZSB0aGUgaW5pdGlhbGl6YXRpb24uIEkgY2hlY2tlZCB0aGUgYGluY2x1ZGVgIGhlYWRlcnMgdG8gYmUgc3VyZS5cblxuVGhlIG5leHQgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB3YWtpbmcgdXAgaWRsZSB2Q1BVcyB0aGF0IGhhdmUgcGVuZGluZyBpbnRlcnJ1cHRzLiBUaGF0J3MgYSBzZW5zaWJsZSBvcHRpbWl6YXRpb24uXG5cblRoZSBtb2RpZmljYXRpb24gb2YgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHRvIHRha2UgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpYCBpbnN0ZWFkIG9mIGp1c3QgYSBgdTY0IHR5cGVgIHJhaXNlZCBhIGZsYWcuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIFRoZSBuZXcgZnVuY3Rpb24sIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgLCBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggaW50ZXJydXB0IHR5cGVzIGFyZSBwZW5kaW5nLiBJIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgYGludGlgIGlzIHBvcHVsYXRlZCBhbmQgaWYgdGhlcmUncyBhbnkgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTcGVjaWZpY2FsbHksIEknbSBjb25jZXJuZWQgYWJvdXQgYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgLCB3aGljaCBnZXRzIHVzZWQgd2l0aGluIGEgYHN3aXRjaGAgc3RhdGVtZW50IGluIHRoZSBgaW50aV90b19pcnFfcGVuZF9tYXNrYCBmdW5jdGlvbi5cblxuTm93LCBiZWZvcmUgdGhlIHBhdGNoLCBgX19mbG9hdGluZ19pcnFfa2lja2Agb25seSB1c2VkIHRoZSBgdHlwZWAgZmllbGQuIE5vdywgaXQgcmVhZHMgdGhlIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCBpZiB0aGUgYHR5cGVgIGZhbGxzIGluIHRoZSBgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVhgIHJhbmdlLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaW50aWAgaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGlzIGNhbGxlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYF9faW5qZWN0X3ZtYCAod2hpY2ggdGFrZXMgYGludGlgKSBhbmQgaG93IGBpbnRpYCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQsIG1vc3QgbGlrZWx5IGluIGBrdm1fczM5MF9pbmplY3Rfdm1gLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHJlYWRzLiBIb3BlZnVsbHksIEtNU0FOIHdvdWxkIGNhdGNoIGl0IGlmIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCB3YXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEkgY2hlY2tlZCBob3cgYGludGlgIGlzIHBvcHVsYXRlZCBmcm9tIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YC4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IHRoYXQgYGludGlgICpzaG91bGQqIGJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLiBJIHdpbGwgbG9vayBpbiBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjA3LjE4NzYzMjIwNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjE4MTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9pbmplY3Rfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIwMTU9c3RhdGljIGludCBfX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA0NS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwNDY6aW50IGt2bV9zMzkwX2luamVjdF92bShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ3LVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwODAtXFx0fVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4MTpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3Rfdm0oczM5MGludC1cXHUwMDNldHlwZSwgczM5MGludC1cXHUwMDNlcGFybSwgczM5MGludC1cXHUwMDNlcGFybTY0LFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4Mi1cXHRcXHRcXHRcXHQgMik7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI4MjA9c3RhdGljIGludCBrdm1fczM5MF9pbmplY3RfYWlycShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MzgtXFx0aWYgKCF0ZXN0X2t2bV9mYWNpbGl0eShrdm0sIDcyKSB8fCAhYWRhcHRlci1cXHUwMDNlc3VwcHJlc3NpYmxlKSB7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODM5OlxcdFxcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bShrdm0sIFxcdTAwMjZzMzkwaW50LCBpbnRpKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4NDAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg1Mi1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4NTM6XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg1NC1cXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzgwOD1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg1MC1cXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVxcdTAwM2VzdXBwcmVzc2libGUpIHtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM4NTE6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg1Mi1cXHRcXHRpZiAocmV0ID09IDApIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg3MC1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM4NzE6XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzg3Mi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAoZmktXFx1MDAzZXNpbW0gXFx1MDAyNiBBSVNfTU9ERV9NQVNLKGFkYXB0ZXItXFx1MDAzZWlzYykpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjA4LjM4Mzg1Mjk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MzAxOTY5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fczM5MF9pbmplY3Rfdm1gKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV9zMzkwX2luamVjdF92bWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIHN0ZXAtYnktc3RlcC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFZNLCB3aGF0IGFzcGVjdHMgb2YgdGhlIFMvMzkwIGFyY2hpdGVjdHVyZSBpdCB0YXJnZXRzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBvciBlZGdlIGNhc2VzLiBUaGlzIHdpbGwgcmVxdWlyZSBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBwcm9iYWJseSBzb21lIGNyb3NzLXJlZmVyZW5jaW5nIHdpdGggcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgS1ZNIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgZ2VuZXJhbCBLVk0gQVBJLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1lbnRhbCBtb2RlbCBvZiB0aGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNToxNS4xMTQwNTMxNzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA0NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA0NjpcXHRpbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG4yMDQ3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuMjA0ODpcXHR7XFxuMjA0OTpcXHRcXHRpbnQgcmM7XFxuMjA1MDpcXHRcXG4yMDUxOlxcdFxcdGludGktXFx1MDAzZXR5cGUgPSBzMzkwaW50LVxcdTAwM2V0eXBlO1xcbjIwNTI6XFx0XFx0c3dpdGNoIChpbnRpLVxcdTAwM2V0eXBlKSB7XFxuMjA1MzpcXHRcXHRjYXNlIEtWTV9TMzkwX0lOVF9WSVJUSU86XFxuMjA1NDpcXHRcXHRcXHRWTV9FVkVOVChrdm0sIDUsIFxcXCJpbmplY3Q6IHZpcnRpbyBwYXJtOiV4LHBhcm02NDolbGx4XFxcIixcXG4yMDU1OlxcdFxcdFxcdFxcdCBzMzkwaW50LVxcdTAwM2VwYXJtLCBzMzkwaW50LVxcdTAwM2VwYXJtNjQpO1xcbjIwNTY6XFx0XFx0XFx0aW50aS1cXHUwMDNlZXh0LmV4dF9wYXJhbXMgPSBzMzkwaW50LVxcdTAwM2VwYXJtO1xcbjIwNTc6XFx0XFx0XFx0aW50aS1cXHUwMDNlZXh0LmV4dF9wYXJhbXMyID0gczM5MGludC1cXHUwMDNlcGFybTY0O1xcbjIwNTg6XFx0XFx0XFx0YnJlYWs7XFxuMjA1OTpcXHRcXHRjYXNlIEtWTV9TMzkwX0lOVF9TRVJWSUNFOlxcbjIwNjA6XFx0XFx0XFx0Vk1fRVZFTlQoa3ZtLCA0LCBcXFwiaW5qZWN0OiBzY2xwIHBhcm06JXhcXFwiLCBzMzkwaW50LVxcdTAwM2VwYXJtKTtcXG4yMDYxOlxcdFxcdFxcdGludGktXFx1MDAzZWV4dC5leHRfcGFyYW1zID0gczM5MGludC1cXHUwMDNlcGFybTtcXG4yMDYyOlxcdFxcdFxcdGJyZWFrO1xcbjIwNjM6XFx0XFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XFxuMjA2NDpcXHRcXHRcXHRpbnRpLVxcdTAwM2VleHQuZXh0X3BhcmFtczIgPSBzMzkwaW50LVxcdTAwM2VwYXJtNjQ7XFxuMjA2NTpcXHRcXHRcXHRicmVhaztcXG4yMDY2OlxcdFxcdGNhc2UgS1ZNX1MzOTBfTUNISzpcXG4yMDY3OlxcdFxcdFxcdFZNX0VWRU5UKGt2bSwgMywgXFxcImluamVjdDogbWFjaGluZSBjaGVjayBtY2ljIDB4JWxseFxcXCIsXFxuMjA2ODpcXHRcXHRcXHRcXHQgczM5MGludC1cXHUwMDNlcGFybTY0KTtcXG4yMDY5OlxcdFxcdFxcdGludGktXFx1MDAzZW1jaGsuY3IxNCA9IHMzOTBpbnQtXFx1MDAzZXBhcm07IC8qIHVwcGVyIGJpdHMgYXJlIG5vdCB1c2VkICovXFxuMjA3MDpcXHRcXHRcXHRpbnRpLVxcdTAwM2VtY2hrLm1jaWMgPSBzMzkwaW50LVxcdTAwM2VwYXJtNjQ7XFxuMjA3MTpcXHRcXHRcXHRicmVhaztcXG4yMDcyOlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XFxuMjA3MzpcXHRcXHRcXHRpbnRpLVxcdTAwM2Vpby5zdWJjaGFubmVsX2lkID0gczM5MGludC1cXHUwMDNlcGFybSBcXHUwMDNlXFx1MDAzZSAxNjtcXG4yMDc0OlxcdFxcdFxcdGludGktXFx1MDAzZWlvLnN1YmNoYW5uZWxfbnIgPSBzMzkwaW50LVxcdTAwM2VwYXJtIFxcdTAwMjYgMHgwMDAwZmZmZnU7XFxuMjA3NTpcXHRcXHRcXHRpbnRpLVxcdTAwM2Vpby5pb19pbnRfcGFybSA9IHMzOTBpbnQtXFx1MDAzZXBhcm02NCBcXHUwMDNlXFx1MDAzZSAzMjtcXG4yMDc2OlxcdFxcdFxcdGludGktXFx1MDAzZWlvLmlvX2ludF93b3JkID0gczM5MGludC1cXHUwMDNlcGFybTY0IFxcdTAwMjYgMHgwMDAwMDAwMGZmZmZmZmZmdWxsO1xcbjIwNzc6XFx0XFx0XFx0YnJlYWs7XFxuMjA3ODpcXHRcXHRkZWZhdWx0OlxcbjIwNzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjA4MDpcXHRcXHR9XFxuMjA4MTpcXHRcXHR0cmFjZV9rdm1fczM5MF9pbmplY3Rfdm0oczM5MGludC1cXHUwMDNldHlwZSwgczM5MGludC1cXHUwMDNlcGFybSwgczM5MGludC1cXHUwMDNlcGFybTY0LFxcbjIwODI6XFx0XFx0XFx0XFx0XFx0IDIpO1xcbjIwODM6XFx0XFxuMjA4NDpcXHRcXHRyYyA9IF9faW5qZWN0X3ZtKGt2bSwgaW50aSk7XFxuMjA4NTpcXHRcXG4yMDg2OlxcdFxcdHJldHVybiByYztcXG4yMDg3OlxcdH1cXG4yMDg4OlxcdFxcbjIwODk6XFx0aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuMjA5MDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuMjA5MTpcXHR7XFxuMjA5MjpcXHRcXHRyZXR1cm4gX19pbmplY3Rfdm0oa3ZtLCBpbnRpKTtcXG4yMDkzOlxcdH1cXG4yMDk0OlxcdFxcbjIwOTU6XFx0aW50IHMzOTBpbnRfdG9fczM5MGlycShzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNToxNS4xMTQ0MjExNDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIzOTIzMDcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEludGVnZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYGludGlgIGdldHMgaXRzIHZhbHVlLiBJdCdzIGRpcmVjdGx5IHBvcHVsYXRlZCBmcm9tIGBzMzkwaW50YCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaWYgYHMzOTBpbnRgIGlzbid0IGluaXRpYWxpemVkLCB0aGVuIG5laXRoZXIgd2lsbCBgaW50aWAuIFRoYXQncyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBvcmlnaW4gb2YgYHMzOTBpbnRgLiBJdCdzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCwgc28gSSBuZWVkIHRvIGZpbmQgaXRzIGluaXRpYWwgc2V0dGluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGBrdm1fczM5MF9pbmplY3Rfdm1gIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLiBOb3csIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBga3ZtX3MzOTBfaW5qZWN0X2FpcnFgIGFwcGVhcnMgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjIxLjM1MzY1NTA3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjc0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODIwOlxcdHN0YXRpYyBpbnQga3ZtX3MzOTBfaW5qZWN0X2FpcnEoc3RydWN0IGt2bSAqa3ZtLFxcbjI4MjE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcilcXG4yODIyOlxcdHtcXG4yODIzOlxcdFxcdHN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbG9hdF9pbnQ7XFxuMjgyNDpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQgPSB7XFxuMjgyNTpcXHRcXHRcXHQudHlwZSA9IEtWTV9TMzkwX0lOVF9JTygxLCAwLCAwLCAwKSxcXG4yODI2OlxcdFxcdFxcdC5wYXJtID0gMCxcXG4yODI3OlxcdFxcdFxcdC5wYXJtNjQgPSBpc2NfdG9faW50X3dvcmQoYWRhcHRlci1cXHUwMDNlaXNjKSxcXG4yODI4OlxcdFxcdH07XFxuMjgyOTpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuMjgzMDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjI4MzE6XFx0XFxuMjgzMjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4yODMzOlxcdFxcbjI4MzQ6XFx0XFx0aW50aSA9IGt6YWxsb2Nfb2JqKCppbnRpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjI4MzU6XFx0XFx0aWYgKCFpbnRpKVxcbjI4MzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjgzNzpcXHRcXG4yODM4OlxcdFxcdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXFx1MDAzZXN1cHByZXNzaWJsZSkge1xcbjI4Mzk6XFx0XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbjI4NDA6XFx0XFx0XFx0aWYgKHJldClcXG4yODQxOlxcdFxcdFxcdFxcdGtmcmVlKGludGkpO1xcbjI4NDI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yODQzOlxcdFxcdH1cXG4yODQ0OlxcdFxcbjI4NDU6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmZpLVxcdTAwM2VhaXNfbG9jaywgZmxhZ3MpO1xcbjI4NDY6XFx0XFx0aWYgKGZpLVxcdTAwM2VuaW1tIFxcdTAwMjYgQUlTX01PREVfTUFTSyhhZGFwdGVyLVxcdTAwM2Vpc2MpKSB7XFxuMjg0NzpcXHRcXHRcXHR0cmFjZV9rdm1fczM5MF9haXJxX3N1cHByZXNzZWQoYWRhcHRlci1cXHUwMDNlaWQsIGFkYXB0ZXItXFx1MDAzZWlzYyk7XFxuMjg0ODpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZmaS1cXHUwMDNlYWlzX2xvY2ssIGZsYWdzKTtcXG4yODQ5OlxcdFxcdFxcdGtmcmVlKGludGkpO1xcbjI4NTA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yODUxOlxcdFxcdH1cXG4yODUyOlxcdFxcbjI4NTM6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbjI4NTQ6XFx0XFxuMjg1NTpcXHRcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAoZmktXFx1MDAzZXNpbW0gXFx1MDAyNiBBSVNfTU9ERV9NQVNLKGFkYXB0ZXItXFx1MDAzZWlzYykpKSB7XFxuMjg1NjpcXHRcXHRcXHRmaS1cXHUwMDNlbmltbSB8PSBBSVNfTU9ERV9NQVNLKGFkYXB0ZXItXFx1MDAzZWlzYyk7XFxuMjg1NzpcXHRcXHRcXHR0cmFjZV9rdm1fczM5MF9tb2RpZnlfYWlzX21vZGUoYWRhcHRlci1cXHUwMDNlaXNjLFxcbjI4NTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEtWTV9TMzkwX0FJU19NT0RFX1NJTkdMRSwgMik7XFxuMjg1OTpcXHRcXHR9XFxuMjg2MDpcXHRcXG4yODYxOlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmZpLVxcdTAwM2VhaXNfbG9jaywgZmxhZ3MpO1xcbjI4NjI6XFx0XFx0aWYgKHJldClcXG4yODYzOlxcdFxcdFxcdGtmcmVlKGludGkpO1xcbjI4NjQ6XFx0XFx0cmV0dXJuIHJldDtcXG4yODY1OlxcdH1cXG4yODY2OlxcdFxcbjI4Njc6XFx0c3RhdGljIGludCBmbGljX2luamVjdF9haXJxKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4yODY4OlxcdHtcXG4yODY5OlxcdFxcdHVuc2lnbmVkIGludCBpZCA9IGF0dHItXFx1MDAzZWF0dHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjIxLjM1NDAyNDYyMloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjgyNjI4MTcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjc5NTAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDU6MzguMTgwMzA5MTM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MDgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4MDg6XFx0aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuMzgwOTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXFxuMzgxMDpcXHRcXHRcXHRcXHQgICAgICBib29sIGxpbmVfc3RhdHVzKVxcbjM4MTE6XFx0e1xcbjM4MTI6XFx0XFx0aW50IHJldCwgc2V0Yml0O1xcbjM4MTM6XFx0XFx0c3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcjtcXG4zODE0OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5mbG9hdF9pbnQ7XFxuMzgxNTpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuMzgxNjpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQgPSB7XFxuMzgxNzpcXHRcXHRcXHRcXHQudHlwZSA9IEtWTV9TMzkwX0lOVF9JTygxLCAwLCAwLCAwKSxcXG4zODE4OlxcdFxcdFxcdFxcdC5wYXJtID0gMCxcXG4zODE5OlxcdFxcdH07XFxuMzgyMDpcXHRcXG4zODIxOlxcdFxcdGt2bS1cXHUwMDNlc3RhdC5pb18zOTBfaW5hdG9taWMrKztcXG4zODIyOlxcdFxcbjM4MjM6XFx0XFx0LyogV2UncmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSAwLVxcdTAwM2UxIHRyYW5zaXRpb24uICovXFxuMzgyNDpcXHRcXHRpZiAoIWxldmVsKVxcbjM4MjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzgyNjpcXHRcXHRpZiAoZS1cXHUwMDNldHlwZSAhPSBLVk1fSVJRX1JPVVRJTkdfUzM5MF9BREFQVEVSKVxcbjM4Mjc6XFx0XFx0XFx0cmV0dXJuIC1FV09VTERCTE9DSztcXG4zODI4OlxcdFxcbjM4Mjk6XFx0XFx0YWRhcHRlciA9IGdldF9pb19hZGFwdGVyKGt2bSwgZS1cXHUwMDNlYWRhcHRlci5hZGFwdGVyX2lkKTtcXG4zODMwOlxcdFxcdGlmICghYWRhcHRlcilcXG4zODMxOlxcdFxcdFxcdHJldHVybiAtRVdPVUxEQkxPQ0s7XFxuMzgzMjpcXHRcXG4zODMzOlxcdFxcdHMzOTBpbnQucGFybTY0ID0gaXNjX3RvX2ludF93b3JkKGFkYXB0ZXItXFx1MDAzZWlzYyk7XFxuMzgzNDpcXHRcXHRzZXRiaXQgPSAxO1xcbjM4MzU6XFx0XFx0cmV0ID0gYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0KGt2bSwgYWRhcHRlciwgXFx1MDAyNmUtXFx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XFxuMzgzNjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4zODM3OlxcdFxcdFxcdHJldHVybiAtRVdPVUxEQkxPQ0s7XFxuMzgzODpcXHRcXHRpZiAoIXJldCB8fCBhZGFwdGVyLVxcdTAwM2VtYXNrZWQpIHtcXG4zODM5OlxcdFxcdFxcdGt2bS1cXHUwMDNlc3RhdC5pb18zOTBfaW5hdG9taWNfbm9faW5qZWN0Kys7XFxuMzg0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zODQxOlxcdFxcdH1cXG4zODQyOlxcdFxcbjM4NDM6XFx0XFx0aW50aSA9IGt6YWxsb2Nfb2JqKCppbnRpLCBHRlBfQVRPTUlDKTtcXG4zODQ0OlxcdFxcdGlmICghaW50aSkge1xcbjM4NDU6XFx0XFx0XFx0c2V0Yml0ID0gMDtcXG4zODQ2OlxcdFxcdFxcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFxcdTAwMjZlLVxcdTAwM2VhZGFwdGVyLCBzZXRiaXQpO1xcbjM4NDc6XFx0XFx0XFx0cmV0dXJuIC1FV09VTERCTE9DSztcXG4zODQ4OlxcdFxcdH1cXG4zODQ5OlxcdFxcbjM4NTA6XFx0XFx0aWYgKCF0ZXN0X2t2bV9mYWNpbGl0eShrdm0sIDcyKSB8fCAhYWRhcHRlci1cXHUwMDNlc3VwcHJlc3NpYmxlKSB7XFxuMzg1MTpcXHRcXHRcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuMzg1MjpcXHRcXHRcXHRpZiAocmV0ID09IDApIHtcXG4zODUzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzg1NDpcXHRcXHRcXHR9IGVsc2Uge1xcbjM4NTU6XFx0XFx0XFx0XFx0c2V0Yml0ID0gMDtcXG4zODU2OlxcdFxcdFxcdFxcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFxcdTAwMjZlLVxcdTAwM2VhZGFwdGVyLCBzZXRiaXQpO1xcbjM4NTc6XFx0XFx0XFx0XFx0a2ZyZWUoaW50aSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjM4LjE4MDU1MjI2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzYwNjEyNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGF0YSBGbG93IGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgczM5MGludGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIG91dHNldCwgd2hpY2ggaXMgZ29vZC4gVGhlbiwgYGludGlgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCwgYXMgd2Uga25vdywgZXNzZW50aWFsbHkgd3JhcHMgYGt6YWxsb2NgLiBBbmQgdGhhdCBtZWFucyBpdCdzIGZ1bGx5IHplcm9lZCBvdXQgZnJvbSB0aGUgZ2V0LWdvLiBUaGF0J3MgYSBzdHJvbmcgc3RhcnQgZm9yIHNhZmV0eS5cblxuTmV4dCwgYGt2bV9zMzkwX2luamVjdF92bWAgY29tZXMgaW50byBwbGF5LiBJdCBjb3BpZXMgZGF0YSBmcm9tIHRoZSBpbml0aWFsaXplZCBgczM5MGludGAgaW50byBgaW50aWAuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IHdlJ3JlIHN0YXJ0aW5nIHdpdGggYSBjbGVhbiBzbGF0ZSBpbiBgaW50aWAgYW5kIHBvcHVsYXRpbmcgaXQgd2l0aCBrbm93biwgdmFsaWQgdmFsdWVzIGZyb20gYHMzOTBpbnRgLiBUaGlzIHNldHMgdXAgYGludGlgIHdpdGggdGhlIHByb3BlciB2YWx1ZXMuXG5cbkZvbGxvd2luZyB0aGF0LCBgX19pbmplY3Rfdm1gIGNhbGxzIGBfX2Zsb2F0aW5nX2lycV9raWNrKGt2bSwgaW50aSlgLiBUaGUgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGZ1bmN0aW9uIHJlYWRzIGBpbnRpLVx1MDAzZXR5cGVgIGFuZCBjYWxscyBgaW50aV90b19pcnFfcGVuZF9tYXNrKGludGkpYC4gVGhlIGNyaXRpY2FsIGNoZWNrIGlzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCB3aGljaCByZWFkcyBgaW50aS1cdTAwM2Vpby5pb19pbnRfd29yZGAuXG5cbkdpdmVuIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcG9wdWxhdGlvbiBwcm9jZXNzIOKAkyBgaW50aWAgaXMgemVyb2VkLCB0aGVuIGRhdGEgaXMgY29waWVkIGZyb20gdGhlIGluaXRpYWxpemVkIGBzMzkwaW50YCDigJMgdGhlcmUgc2hvdWxkIGJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBpbiB0aGUgZW50aXJlIHByb2Nlc3MuIEV2ZXJ5dGhpbmcgaXMgYWNjb3VudGVkIGZvciwgYW5kIGFsbCByZWFkcyBhcmUgZnJvbSBpbml0aWFsaXplZCBmaWVsZHMuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdHJpcGxlLWNoZWNrLCBJJ2xsIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxscyB0byBga3ZtX3MzOTBfaW5qZWN0X3ZtYC4gSXQncyBhbHdheXMgd2lzZSB0byBsb29rIGF0IGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMgdG8gZW5zdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTMwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDU6NDQuNTQxMTY4OTI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ1NTU3NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfaW5qZWN0X3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjAxNT1zdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDQ1LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA0NjppbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwNDctXFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjA4MC1cXHR9XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDgxOlxcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92bShzMzkwaW50LVxcdTAwM2V0eXBlLCBzMzkwaW50LVxcdTAwM2VwYXJtLCBzMzkwaW50LVxcdTAwM2VwYXJtNjQsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDgyLVxcdFxcdFxcdFxcdCAyKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgyMD1zdGF0aWMgaW50IGt2bV9zMzkwX2luamVjdF9haXJxKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgzOC1cXHRpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KGt2bSwgNzIpIHx8ICFhZGFwdGVyLVxcdTAwM2VzdXBwcmVzc2libGUpIHtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Mzk6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg0MC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODUyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mjg1MzpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODU0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zODA4PWludCBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODUwLVxcdGlmICghdGVzdF9rdm1fZmFjaWxpdHkoa3ZtLCA3MikgfHwgIWFkYXB0ZXItXFx1MDAzZXN1cHByZXNzaWJsZSkge1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzg1MTpcXHRcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODUyLVxcdFxcdGlmIChyZXQgPT0gMCkge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcwLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzg3MTpcXHRyZXQgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODcyLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IChmaS1cXHUwMDNlc2ltbSBcXHUwMDI2IEFJU19NT0RFX01BU0soYWRhcHRlci1cXHUwMDNlaXNjKSkpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTQ3LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTQ4OlxcdFxcdHIgPSBrdm1fczM5MF9pbmplY3Rfdm0oa3ZtLCBcXHUwMDI2czM5MGludCwgaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI5NDktXFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NDQ3NT1zdGF0aWMgdm9pZCBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBzdGFydF90b2tlbixcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00NDkzLVxcdFxcdGludGkucGFybTY0ID0gdG9rZW47XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0OTQ6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKHZjcHUtXFx1MDAzZWt2bSwgXFx1MDAyNmludGksIGludGlfbWVtKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDQ5NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTM3OD12b2lkIGRpc3RyaWJ1dGVfZmxvYXRfaXJxcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozNzk6aW50IF9fbXVzdF9jaGVjayBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC0zODAtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaD04MT1UUkFDRV9FVkVOVChrdm1fczM5MF92Y3B1X3N0YXJ0X3N0b3AsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjQtXFxuYXJjaC9zMzkwL2t2bS90cmFjZS1zMzkwLmg6MTI1OlRSQUNFX0VWRU5UKGt2bV9zMzkwX2luamVjdF92bSxcXG5hcmNoL3MzOTAva3ZtL3RyYWNlLXMzOTAuaC0xMjYtXFx0ICAgIFRQX1BST1RPKF9fdTY0IHR5cGUsIF9fdTMyIHBhcm0sIF9fdTY0IHBhcm02NCwgaW50IHdobyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA1OjQ0LjY3NTcyOTUyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzA5NTU4NzU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEwNzc0LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNjowMS43NzEzMjA2NDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ4ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTI3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTI3OlxcdGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4yOTI4OlxcdHtcXG4yOTI5OlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4yOTMwOlxcdFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbjI5MzE6XFx0XFx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciBhdHRyO1xcbjI5MzI6XFx0XFx0aW50IHI7XFxuMjkzMzpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuMjkzNDpcXHRcXG4yOTM1OlxcdFxcdHN3aXRjaCAoaW9jdGwpIHtcXG4yOTM2OlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7XFxuMjkzNzpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XFxuMjkzODpcXHRcXG4yOTM5OlxcdFxcdFxcdHIgPSAtRUlOVkFMO1xcbjI5NDA6XFx0XFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbjI5NDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjk0MjpcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG4yOTQzOlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcXG4yOTQ0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI5NDU6XFx0XFx0XFx0aW50aSA9IGt6YWxsb2Nfb2JqKCppbnRpLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjI5NDY6XFx0XFx0XFx0aWYgKCFpbnRpKVxcbjI5NDc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjk0ODpcXHRcXHRcXHRyID0ga3ZtX3MzOTBfaW5qZWN0X3ZtKGt2bSwgXFx1MDAyNnMzOTBpbnQsIGludGkpO1xcbjI5NDk6XFx0XFx0XFx0aWYgKHIpXFxuMjk1MDpcXHRcXHRcXHRcXHRrZnJlZShpbnRpKTtcXG4yOTUxOlxcdFxcdFxcdGJyZWFrO1xcbjI5NTI6XFx0XFx0fVxcbjI5NTM6XFx0XFx0Y2FzZSBLVk1fQ1JFQVRFX0lSUUNISVA6IHtcXG4yOTU0OlxcdFxcdFxcdHIgPSAtRUlOVkFMO1xcbjI5NTU6XFx0XFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC51c2VfaXJxY2hpcClcXG4yOTU2OlxcdFxcdFxcdFxcdHIgPSAwO1xcbjI5NTc6XFx0XFx0XFx0YnJlYWs7XFxuMjk1ODpcXHRcXHR9XFxuMjk1OTpcXHRcXHRjYXNlIEtWTV9TRVRfREVWSUNFX0FUVFI6IHtcXG4yOTYwOlxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjI5NjE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhdHRyLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihhdHRyKSkpXFxuMjk2MjpcXHRcXHRcXHRcXHRicmVhaztcXG4yOTYzOlxcdFxcdFxcdHIgPSBrdm1fczM5MF92bV9zZXRfYXR0cihrdm0sIFxcdTAwMjZhdHRyKTtcXG4yOTY0OlxcdFxcdFxcdGJyZWFrO1xcbjI5NjU6XFx0XFx0fVxcbjI5NjY6XFx0XFx0Y2FzZSBLVk1fR0VUX0RFVklDRV9BVFRSOiB7XFxuMjk2NzpcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG4yOTY4OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2YXR0ciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYXR0cikpKVxcbjI5Njk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjk3MDpcXHRcXHRcXHRyID0ga3ZtX3MzOTBfdm1fZ2V0X2F0dHIoa3ZtLCBcXHUwMDI2YXR0cik7XFxuMjk3MTpcXHRcXHRcXHRicmVhaztcXG4yOTcyOlxcdFxcdH1cXG4yOTczOlxcdFxcdGNhc2UgS1ZNX0hBU19ERVZJQ0VfQVRUUjoge1xcbjI5NzQ6XFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuMjk3NTpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmF0dHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGF0dHIpKSlcXG4yOTc2OlxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNjowMS43NzE2NzEzMjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxMzQ3NDg3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTYyNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNjoxOC45MDY0MjQ2NjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk0NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk0NjpcXHRcXHRyZXR1cm4gMDtcXG4xOTQ3OlxcdH1cXG4xOTQ4OlxcdFxcbjE5NDk6XFx0c3RhdGljIHU2NCBpbnRpX3RvX2lycV9wZW5kX21hc2soc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbjE5NTA6XFx0e1xcbjE5NTE6XFx0XFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cXHUwMDNldHlwZSk7XFxuMTk1MjpcXHRcXG4xOTUzOlxcdFxcdHN3aXRjaCAodHlwZSkge1xcbjE5NTQ6XFx0XFx0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxcbjE5NTU6XFx0XFx0XFx0LyogT25seSByZXByZXNzaWJsZSBtYWNoaW5lIGNoZWNrcyBhcmUgZmxvYXRpbmcgKi9cXG4xOTU2OlxcdFxcdFxcdHJldHVybiBCSVQoSVJRX1BFTkRfTUNIS19SRVApO1xcbjE5NTc6XFx0XFx0Y2FzZSBLVk1fUzM5MF9JTlRfVklSVElPOlxcbjE5NTg6XFx0XFx0XFx0cmV0dXJuIEJJVChJUlFfUEVORF9WSVJUSU8pO1xcbjE5NTk6XFx0XFx0Y2FzZSBLVk1fUzM5MF9JTlRfU0VSVklDRTpcXG4xOTYwOlxcdFxcdFxcdHJldHVybiBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0UpIHxcXG4xOTYxOlxcdFxcdFxcdCAgICAgICBCSVQoSVJRX1BFTkRfRVhUX1NFUlZJQ0VfRVYpO1xcbjE5NjI6XFx0XFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XFxuMTk2MzpcXHRcXHRcXHRyZXR1cm4gQklUKElSUV9QRU5EX1BGQVVMVF9ET05FKTtcXG4xOTY0OlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XFxuMTk2NTpcXHRcXHRcXHRyZXR1cm4gQklUKGlzY190b19pcnFfdHlwZShpbnRfd29yZF90b19pc2MoaW50aS1cXHUwMDNlaW8uaW9faW50X3dvcmQpKSk7XFxuMTk2NjpcXHRcXHRkZWZhdWx0OlxcbjE5Njc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTk2ODpcXHRcXHR9XFxuMTk2OTpcXHR9XFxuMTk3MDpcXHRcXG4xOTcxOlxcdC8qXFxuMTk3MjpcXHQgKiBGaW5kIGEgZGVzdGluYXRpb24gVkNQVSBmb3IgYSBmbG9hdGluZyBpcnEgYW5kIGtpY2sgaXQuXFxuMTk3MzpcXHQgKi9cXG4xOTc0OlxcdHN0YXRpYyB2b2lkIF9fZmxvYXRpbmdfaXJxX2tpY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuMTk3NTpcXHR7XFxuMTk3NjpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1O1xcbjE5Nzc6XFx0XFx0aW50IHNpZ2NwdSwgb25saW5lX3ZjcHVzLCBucl90cmllcyA9IDA7XFxuMTk3ODpcXHRcXHR1NjQgdHlwZSA9IFJFQURfT05DRShpbnRpLVxcdTAwM2V0eXBlKTtcXG4xOTc5OlxcdFxcdHU2NCBpcnFfcGVuZF9tYXNrO1xcbjE5ODA6XFx0XFxuMTk4MTpcXHRcXHRvbmxpbmVfdmNwdXMgPSBhdG9taWNfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VvbmxpbmVfdmNwdXMpO1xcbjE5ODI6XFx0XFx0aWYgKCFvbmxpbmVfdmNwdXMpXFxuMTk4MzpcXHRcXHRcXHRyZXR1cm47XFxuMTk4NDpcXHRcXG4xOTg1OlxcdFxcdGlycV9wZW5kX21hc2sgPSBpbnRpX3RvX2lycV9wZW5kX21hc2soaW50aSk7XFxuMTk4NjpcXHRcXHRmb3IgKHNpZ2NwdSA9IGt2bS1cXHUwMDNlYXJjaC5mbG9hdF9pbnQubGFzdF9zbGVlcF9jcHU7IDsgc2lnY3B1KyspIHtcXG4xOTg3OlxcdFxcdFxcdHNpZ2NwdSAlPSBvbmxpbmVfdmNwdXM7XFxuMTk4ODpcXHRcXHRcXHRkc3RfdmNwdSA9IGt2bV9nZXRfdmNwdShrdm0sIHNpZ2NwdSk7XFxuMTk4OTpcXHRcXHRcXHRpZiAoIWlzX3ZjcHVfc3RvcHBlZChkc3RfdmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4xOTkwOlxcdFxcdFxcdCAgICBkZWxpdmVyYWJsZV9pcnFzKGRzdF92Y3B1KSBcXHUwMDI2IGlycV9wZW5kX21hc2spXFxuMTk5MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xOTkyOlxcdFxcdFxcdC8qIGF2b2lkIGVuZGxlc3MgbG9vcHMgaWYgYWxsIHZjcHVzIGFyZSBzdG9wcGVkICovXFxuMTk5MzpcXHRcXHRcXHRpZiAobnJfdHJpZXMrKyBcXHUwMDNlPSBvbmxpbmVfdmNwdXMpXFxuMTk5NDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTk5NTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA2OjE4LjkwNjc5NzE0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzY1MTgzOTA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFMzOTAgS1ZNIEludGVycnVwdCBJbmplY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNlZCBvbiByZWZpbmluZyB0aGUgaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB3aXRoaW4gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCdzIG1ha2luZyBzb21lIHByZXR0eSBzcGVjaWZpYyBjaGFuZ2VzLCBuYW1lbHkgaW50cm9kdWNpbmcgYSBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBmdW5jdGlvbiwgYW5kIG1vZGlmeWluZyBgX19mbG9hdGluZ19pcnFfa2lja2AgdG8gdXNlIGEgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aWAgaW5zdGVhZCBvZiBqdXN0IGEgYHU2NCB0eXBlYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBpbnRlcnJ1cHQgZGVsaXZlcnkgcGF0aC4gSXQgc2VlbXMgbGlrZSBhIG5ldyBoZWxwZXIsIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgIGhhcyBiZWVuIGludHJvZHVjZWQsIHdoaWNoIHJlYWRzIHRoZSBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gZnJvbSB0aGUgYGludGktXHUwMDNldHlwZWAgYW5kIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCBmaWVsZHMuXG5cblRoZSBpbnRlcmVzdGluZyBwYXJ0IGhlcmUgaXMgaG93IHRoaXMgYGludGlgIHN0cnVjdCBpcyBhbGxvY2F0ZWQuIEl0J3MgaGFwcGVuaW5nIGluIGEgZmV3IHBsYWNlczogYGt2bV9hcmNoX3ZtX2lvY3RsYCB1c2luZyBga3phbGxvY19vYmpgLCBga3ZtX3MzOTBfaW5qZWN0X2FpcnFgIGFsc28gd2l0aCBga3phbGxvY19vYmpgLCBhbmQgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIHVzaW5nIGBremFsbG9jX29iamAuIE15IGZpcnN0IHRob3VnaHQgaXMgXCJ3YWl0LCB3aGF0J3MgYGt6YWxsb2Nfb2JqYD9cIi4gVGhpcyBzY3JlYW1zIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYSBzdWJ0bGUgYnVnLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJIHF1aWNrbHkgcmVhbGl6ZWQgYGt6YWxsb2Nfb2JqYCBpcyBsaWtlbHkgYSB3cmFwcGVyIGFyb3VuZCBga3phbGxvY2AsIGFuZCB0aGF0IG1lYW5zIHRoZSBtZW1vcnkgKmlzKiB6ZXJvZWQuIFRoYXQncyBnb29kLCBidXQgSSBzdGlsbCB3YW50IHRvIGJlIHN1cmUuIEl0J3Mgbm90IGEgc3RhbmRhcmQga2VybmVsIG1hY3JvLiBMZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24gdG8gYmUgY2VydGFpbi5cblxuT2theSwgSSd2ZSBjaGVja2VkIGFuZCBjb25maXJtZWQgYGt6YWxsb2NgIHplcm9lcyB0aGUgbWVtb3J5LiBTbywgdGhhdCdzIG5vdCB0aGUgd29ycnkuIFRoZSBvdGhlciBwb3RlbnRpYWwgaXNzdWUgaXMsIGlzIHRoaXMgYGludGlgIHN0cnVjdHVyZSBwb3B1bGF0ZWQgZnJvbSB1c2VyIHNwYWNlPyBJZiBzbywgd2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gYXZvaWQgZXhwb3Npbmcga2VybmVsIG1lbW9yeSwgb3Igd29yc2UsIGhhdmUgaXQgcmVhZCB1bmluaXRpYWxpemVkLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoaXMgYmFjayB0byB0aGUgY29kZS4gU3BlY2lmaWNhbGx5LCBpbiBga3ZtX2FyY2hfdm1faW9jdGxgLCB0aGVyZSdzIGEgYmxvY2sgaGFuZGxpbmcgYEtWTV9TMzkwX0lOVEVSUlVQVGAuIEl0IGNvcGllcyBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0YCBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgYGNvcHlfZnJvbV91c2VyYCBpbnRvIGEgbG9jYWwgc3RydWN0dXJlIGNhbGxlZCBgczM5MGludGAuIFRoZW4sIGl0IGFsbG9jYXRlcyBgaW50aWAgd2l0aCBga3phbGxvY19vYmpgLCBhbmQgY2FsbHMgYGt2bV9zMzkwX2luamVjdF92bWAgdG8gZnVydGhlciBwcm9jZXNzIGl0LiBJIG5vdyBzZWUgdGhlIGZpZWxkcyBvZiBgczM5MGludGAgYXJlIGNvcGllZCBpbnRvIGBpbnRpYCBpbiB0aGF0IGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGBpbnRpLVx1MDAzZXR5cGVgIHRha2VzIHRoZSB2YWx1ZSBvZiBgczM5MGludC1cdTAwM2V0eXBlYC4gRm9yIGludGVycnVwdCB0eXBlIGBLVk1fUzM5MF9JTlRfSU9fTUlOYCB0byBgS1ZNX1MzOTBfSU5UX0lPX01BWGAsIHRoZSBgczM5MGludGAncyBwYXJhbWV0ZXJzIGFyZSBtYXBwZWQgaW50byBgaW50aS1cdTAwM2Vpb2AgZmllbGRzLlxuXG5TbywgYHMzOTBpbnRgIGlzIGRpcmVjdGx5IHBvcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhlcmUgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICphZnRlciogdGhhdCBjb3B5PyBObywgYmVjYXVzZSBgczM5MGludGAgaXMgY29tcGxldGVseSBpbml0aWFsaXplZCBieSB0aGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsLCBhbmQgdGhlbiBgaW50aWAgaXMgemVyb2VkIGJ5IHRoZSBga3phbGxvY19vYmpgIGFsbG9jYXRpb24uXG5cbkFscmlnaHQsIHRoZSBjb2RlIGxvb2tzIHNhZmUgaW4gdGhpcyByZWdhcmQuIFRoZSB1c2VyLXByb3ZpZGVkIGRhdGEgaXMgY29waWVkIGludG8gdGhlIGxvY2FsIHN0cnVjdCwgdGhlIG5ldyBzdHJ1Y3QgYGludGlgIGlzIHplcm9lZCwgYW5kIHRoZW4gaW5pdGlhbGl6ZWQgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBhbmQgemVyb2VkIGRhdGEuIEknbSBzYXRpc2ZpZWQgZm9yIG5vdywgYnV0IEkgc3RpbGwgd2FudCB0byBjaGVjayB0aGUgYGt6YWxsb2Nfb2JqYCBkZWZpbml0aW9uIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTQ4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDY6NDYuNTU4NjQxMjQ0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzg1NzI3MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc5MTY0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0PTEwMz1saXN0Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMTU6ICAgICAgICAgIGdyb2NrID0ga3phbGxvY19vYmooKmdyb2NrKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNi0gICAgICAgICAgaWYgKCFncm9jaylcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI1LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTI2OiAgICAgICAgICBkaW1pdHJpID0ga3phbGxvY19vYmooKmRpbWl0cmkpO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q9NDU9YSBtZXNzYWdlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBBUEkgYW5kIHJldHVybiBpbW1lZGlhdGVseSkuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtODktXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkwOlxcdFxcdGRjX3N5bmMgPSBremFsbG9jX29iaigqZGNfc3luYyk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkxOlxcdFxcdGRjX2FzeW5jID0ga3phbGxvY19vYmooKmRjX2FzeW5jKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtOTItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q9MjY9RXhhbXBsZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q6NDU6XFx0XFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00Ni1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NjQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGEgemVyb2VkIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTY4OlxcdHAgPSBremFsbG9jX29ianMoKnAsIG4sIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAwLVxcdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XFx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMi1cXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDM6XFx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVxcdHB0ciA9IGttYWxsb2NfZmxleCgqcHRyLCBmbGV4X21lbWJlciwgY291bnQgWywgZ2ZwXSApO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjY4LSAgICAgICAgICAgICAgLyogYWxsb2NhdGUgYSBjaGlwLXNwZWNpZmljIGRhdGEgd2l0aCB6ZXJvIGZpbGxlZCAqL1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNzAtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMwLSAgLi4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzQ5LVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NTEtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKSB7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM1LSAgICAgICAgICAuLi4uXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzctICAgICAgICAgIC4uLi5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAxLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDMtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz02ND1tb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZjY0X0VoZHIgKmhkciwgRWxmNjRfU2hkciAqc2VjaGRycyxcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVxcdG5zeW1zID0gc3ltdGFiLVxcdTAwM2VzaF9zaXplIC8gc2l6ZW9mKEVsZjY0X1N5bSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XFx0Y2hhaW5zID0ga3phbGxvY19vYmpzKHN0cnVjdCBnb3RfZW50cnksIG5zeW1zKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05Ny1cXHRpZiAoIWNoYWlucykge1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYz0zOTA9cmVnaXN0ZXJfY3B1cyh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTQtXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcXHRcXHRzdHJ1Y3QgY3B1ICpwID0ga3phbGxvY19vYmooKnApO1xcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVxcdFxcdGlmICghcClcXG4tLVxcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYz0xMTIwPXN0YXRpYyBpbnQgaml0X3ByZXBhcmVfZmluYWxfbWVtX2FsbG9jKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxcbi0tXFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXFx0aWYgKGN0eC1cXHUwMDNlbmVlZF9leHRyYV9wYXNzKSB7XFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XFx0XFx0Y3R4LVxcdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXFx1MDAzZWppdF9kYXRhKTtcXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMy1cXHRcXHRpZiAoIWN0eC1cXHUwMDNlaml0X2RhdGEpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MjIwPWxvY29tb19pbml0X29uZV9jaGlsZChzdHJ1Y3QgbG9jb21vICpsY2hpcCwgc3RydWN0IGxvY29tb19kZXZfaW5mbyAqaW5mbylcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjIyNTpcXHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cXHRpZiAoIWRldikge1xcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzYyLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XFx0bGNoaXAgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vKTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzY0LVxcdGlmICghbGNoaXApXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM9NzMzPXNhMTExMV9pbml0X29uZV9jaGlsZChzdHJ1Y3Qgc2ExMTExICpzYWNoaXAsIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LFxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTczOS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM6NzQwOlxcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzQxLVxcdGlmICghZGV2KSB7XFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYz0xNzg9c3RhdGljIGludCBzY29vcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jOjE4ODpcXHRkZXZwdHIgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2Nvb3BfZGV2KTtcXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXFx0aWYgKCFkZXZwdHIpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEwLVxcdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYzoxMTE6XFx0XFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XFxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMi1cXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODEtXFx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM6MTgyOlxcdHZkc29fdGV4dF9wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB0ZXh0X3BhZ2VzKTtcXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cXHRpZiAodmRzb190ZXh0X3BhZ2VsaXN0ID09IE5VTEwpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2NC1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcXHRyZXMgPSBremFsbG9jX29ianMoc3RydWN0IHJlc291cmNlLCAyKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2Ni1cXHRpZiAoIXJlcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYz02OT1zdGF0aWMgaW50IF9faW5pdCBlYnNhMjg1X2xlZHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04Ni1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jOjg3OlxcdFxcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODgtXFx0XFx0aWYgKCFsZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MjktXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcXHRcXHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVxcdFxcdGlmICghbGVkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jPTQ3Mz1zdGF0aWMgaW50IGlteF9tbWRjX3BlcmZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB2b2lkIF9faW9tZW0gKm1tZGNfYmFzZSxcXG4tLVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jOjQ4MDpcXHRwbXVfbW1kYyA9IGt6YWxsb2Nfb2JqKCpwbXVfbW1kYyk7XFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cXHRpZiAoIXBtdV9tbWRjKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMjktXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcXHRcXHRuZXdfY29tcGF0ID0ga3phbGxvY19vYmooKm5ld19jb21wYXQpO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jPTE2Mz1zdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3NV8zODBfY29oZXJlbmN5X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg3LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM6MTg4OlxcdFxcdHAgPSBremFsbG9jX29iaigqcCk7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODktXFx0XFx0cC1cXHUwMDNlbmFtZSA9IGtzdHJkdXAoXFxcImFybSxpby1jb2hlcmVudFxcXCIsIEdGUF9LRVJORUwpO1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTYtXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTgtXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jPTM4MD1zdGF0aWMgdm9pZCBfX2luaXQgbXhzX21hY2hpbmVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zODktXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYzozOTA6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zOTEtXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jPTI5ND1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9zeXN0ZW1fZG1hX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM6MzIyOlxcdGQgPSBremFsbG9jX29iaigqZCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXFx0aWYgKCFkKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5Ni1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3OlxcdG9tYXBfbWNic3BfZGV2aWNlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHNpemUpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTgtXFx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYz01MT1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9kbV90aW1lcl9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI3LVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYzoxMjg6XFx0XFx0cGRhdGEgPSBremFsbG9jX29iaigqcGRhdGEpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjktXFx0XFx0aWYgKCFwZGF0YSkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjM5LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjQxLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM9Nzg2PXZvaWQgX19pbml0IG9tYXBfc29jX2RldmljZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkwLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYzo3OTE6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5Mi1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYz0xMzE9c3RhdGljIGludCBvbWFwX2RldmljZV9idWlsZF9mcm9tX2R0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYzoxNTk6XFx0aHdtb2RzID0ga3phbGxvY19vYmpzKHN0cnVjdCBvbWFwX2h3bW9kICosIG9oX2NudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cXHRpZiAoIWh3bW9kcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5NC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1OlxcdHN5c2MgPSBremFsbG9jX29iaigqc3lzYyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5Ni1cXHRpZiAoIXN5c2MpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI0LVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZvaC1cXHUwMDNlc2xhdmVfcG9ydHMpKSB7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcXHRcXHRvaSA9IGt6YWxsb2Nfb2JqKCpvaSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cXHRcXHRpZiAoIW9pKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzUxMz1pbnQgb21hcF9od21vZF9pbml0X21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVxcdGlmICghb2gpIHtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTI4OlxcdFxcdG9oID0ga3phbGxvY19vYmooKm9oKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI5LVxcdFxcdGlmICghb2gpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mzk6XFx0XFx0b2gtXFx1MDAzZWNsYXNzID0ga3phbGxvY19vYmooKm9oLVxcdTAwM2VjbGFzcyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cXHRcXHRpZiAoIW9oLVxcdTAwM2VjbGFzcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jPTM3OT1zdGF0aWMgaW50IF9faW5pdCBhbXgzX2lkbGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlLCBpbnQgY3B1KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxMi1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM6NDEzOlxcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTQtXFx0aWYgKCFpZGxlX3N0YXRlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM9MzA9c3RhdGljIHZvaWQgX19pbml0IHNyX3NldF9udmFsdWVzKHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jOjQyOlxcdG52YWx1ZV90YWJsZSA9IGt6YWxsb2Nfb2JqcygqbnZhbHVlX3RhYmxlLCBjb3VudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cXHRpZiAoIW52YWx1ZV90YWJsZSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTcxLVxcdCAqL1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzoxNzI6XFx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVxcdGlmICghcmVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5Mi1cXHQgKi9cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6NDkzOlxcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cXHRpZiAoIXJlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcXG4tLVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk0LVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1OlxcdGVjID0ga3phbGxvY19vYmooZWNhcmRfdCk7XFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTYtXFx0aWYgKCFlYykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYz05Mz1pbnQgX19pbml0IHNhMTF4eF9jbGtfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMDktXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMTA6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTExLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjEzMjpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzMtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYz0zMTc9aW50IF9faW5pdCBzYTExeDBfcmVnaXN0ZXJfZml4ZWRfcmVndWxhdG9yKGludCBuLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM6MzI0OlxcdGNmZy1cXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVxcdTAwM2Vpbml0X2RhdGEpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjUtXFx0aWYgKCFjZmctXFx1MDAzZWluaXRfZGF0YSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yNzgtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XFx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI4MC1cXHRpZiAoIWQpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jPTE0MT1zdGF0aWMgaW50IF9faW5pdCByY2FyX2dlbjJfcmVndWxhdG9yX3F1aXJrKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjYtXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM6MTY3OlxcdFxcdHF1aXJrID0ga3phbGxvY19vYmooKnF1aXJrKTtcXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjgtXFx0XFx0aWYgKCFxdWlyaykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3RlcilcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5Ny1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XFx0b3BwcyA9IGt6YWxsb2Nfb2Jqcygqb3BwcywgTUFYX09QUFMpO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5OS1cXHRpZiAoIW9wcHMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz00NDI9aW50IF9faW5pdCB2ZV9zcGNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2VhZGRyLCB1MzIgYTE1X2NsdXNpZCwgaW50IGlycSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0NC1cXHRpbnQgcmV0O1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcXHRpbmZvID0ga3phbGxvY19vYmooKmluZm8pO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0Ni1cXHRpZiAoIWluZm8pXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz01MjM9c3RhdGljIHN0cnVjdCBjbGsgKnZlX3NwY19jbGtfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqY3B1X2RldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyNy1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo1Mjg6XFx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI5LVxcdGlmICghc3BjKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM9MTIzPXN0YXRpYyB2b2lkIF9faW5pdCB2ZXJzYXRpbGVfZHRfcGNpX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYzoxNDU6XFx0bmV3cHJvcCA9IGt6YWxsb2Nfb2JqKCpuZXdwcm9wKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXFx0aWYgKCFuZXdwcm9wKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTAtXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEyLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYz01MDM9c3RhdGljIF9faW5pdCBpbnQgbDJ4MF9wbXVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MDktXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYzo1MTA6XFx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTExLVxcdGlmICghbDJ4MF9wbXUpIHtcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM9MzE1PXN0YXRpYyBpbnQgX19pbml0IF9fdW5pcGhpZXJfY2FjaGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYzozNDU6XFx0ZGF0YSA9IGt6YWxsb2Nfb2JqKCpkYXRhKTtcXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cXHRpZiAoIWRhdGEpXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjAtXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XFx0YnVmID0ga3phbGxvY19vYmooKmJ1ZixcXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2Mi1cXHRcXHRcXHQgIGdmcCBcXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTE0ODc9YXJtX2lvbW11X2NyZWF0ZV9tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBiYXNlLCB1NjQgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwNi1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjE1MDc6XFx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA4LVxcdGlmICghbWFwcGluZylcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYz0zMTY9aW50IF9faW5pdCBhcmNoX3hlbl91bnBvcHVsYXRlZF9pbml0KHN0cnVjdCByZXNvdXJjZSAqKnJlcylcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM0NDpcXHRyZWdzID0ga3phbGxvY19vYmpzKCpyZWdzLCBucl9yZWcpO1xcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXFx0aWYgKCFyZWdzKSB7XFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozODg6XFx0XFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg5LVxcdFxcdGlmICghdG1wX3Jlcykge1xcbi0tXFxuYXJjaC9hcm0veGVuL3AybS5jPTE1MD1ib29sIF9fc2V0X3BoeXNfdG9fbWFjaGluZV9tdWx0aSh1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbmFyY2gvYXJtL3hlbi9wMm0uYy0xNzgtXFxuYXJjaC9hcm0veGVuL3AybS5jOjE3OTpcXHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcXG5hcmNoL2FybS94ZW4vcDJtLmMtMTgwLVxcdGlmICghcDJtX2VudHJ5KVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jPTY4PXN0YXRpYyBpbnQgX19pbml0IF9fdmRzb19pbml0KGVudW0gdmRzb19hYmkgYWJpKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYzo4NDpcXHR2ZHNvX3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mb1thYmldLnZkc29fcGFnZXMpO1xcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cXHRpZiAodmRzb19wYWdlbGlzdCA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtNDkyLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcXHR0aGlzID0ga3phbGxvY19vYmooKnRoaXMpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5NC1cXHRpZiAoIXRoaXMpIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTk4MT1pbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDctXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTAwODpcXHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDktXFx0aWYgKCFwZ3QpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMTgwPWludCB0b3B1cF9oeXBfbWVtY2FjaGUoc3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgKm1jLCB1bnNpZ25lZCBsb25nIG1pbl9wYWdlcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXFx0aWYgKCFtYy1cXHUwMDNlbWFwcGluZykge1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XFx0XFx0bWMtXFx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODctXFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjUxMD1pbnQgX19pbml0IGt2bV9tbXVfaW5pdCh1MzIgaHlwX3ZhX2JpdHMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQzLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI1NDQ6XFx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDUtXFx0aWYgKCFoeXBfcGd0YWJsZSkge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTMyOD1pbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cXHRpZiAoIXZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGIpIHtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0OlxcdFxcdHN0cnVjdCB2bmNyX3RsYiAqdnQgPSBremFsbG9jX29iaigqdmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYixcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzM1LVxcdFxcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwMi1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlxcdGt2bS1cXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MgPSBremFsbG9jX29iaigqKGt2bS1cXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDQtXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM9MTE2PXN0YXRpYyBzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSAqa3ZtX3B0ZHVtcF9wYXJzZXJfY3JlYXRlKHN0cnVjdCBrdm1fczJfbW11ICptbXUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjEtXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM6MTIyOlxcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIzLVxcdGlmICghc3QpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTIwNz1zdGF0aWMgaW50IGt2bV92Z2ljX2Rpc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucl9zcGlzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXFx0ZGlzdC1cXHUwMDNlYWN0aXZlX3NwaXMgPSAoYXRvbWljX3QpQVRPTUlDX0lOSVQoMCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XFx0ZGlzdC1cXHUwMDNlc3BpcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsIG5yX3NwaXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXFx0aWYgKCFkaXN0LVxcdTAwM2VzcGlzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0zMTY9c3RhdGljIGludCB2Z2ljX2FsbG9jYXRlX3ByaXZhdGVfaXJxc19sb2NrZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MzMyOlxcdHZnaWNfY3B1LVxcdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMzLVxcdFxcdFxcdFxcdFxcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYz0xNDI9aW50IGt2bV92Z2ljX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTQ4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jOjE0OTpcXHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNTAtXFx0aWYgKCFlbnRyaWVzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTc2PXN0YXRpYyBzdHJ1Y3QgdmdpY19pcnEgKnZnaWNfYWRkX2xwaShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbnRpZCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6ODg6XFx0aXJxID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXJxLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cXHRpZiAoIWlycSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3Ni1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3OlxcdGNvbGxlY3Rpb24gPSBremFsbG9jX29iaigqY29sbGVjdGlvbiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTc4LVxcdGlmICghY29sbGVjdGlvbilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMDE1PXN0YXRpYyBzdHJ1Y3QgaXRzX2l0ZSAqdmdpY19pdHNfYWxsb2NfaXRlKHN0cnVjdCBpdHNfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAyMC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTAyMTpcXHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIyLVxcdGlmICghaXRlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTExNDI9c3RhdGljIHN0cnVjdCBpdHNfZGV2aWNlICp2Z2ljX2l0c19hbGxvY19kZXZpY2Uoc3RydWN0IHZnaWNfaXRzICppdHMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTE0ODpcXHRkZXZpY2UgPSBremFsbG9jX29iaigqZGV2aWNlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVxcdGlmICghZGV2aWNlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg2Mi1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcXHRpdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjQtXFx0aWYgKCFpdHMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTg4Nj1zdGF0aWMgaW50IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHVpbnQzMl90IGluZGV4LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzEtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYzo5MzI6XFx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzMtXFx0aWYgKCFyZHJlZylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jPTI0Mj1pbnQgdmdpY192NF9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYzoyNTk6XFx0ZGlzdC1cXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXFx1MDAzZWl0c192bS52cGVzLCBucl92Y3B1cyxcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNjAtXFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDgwPXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTAxLVxcdGlmICghaml0X2RhdGEpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMTAyOlxcdFxcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTAzLVxcdFxcdGlmICghaml0X2RhdGEpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYz0xNz1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTIyLVxcdHZkc29fcGFnZWxpc3QgPVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlxcdFxcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX3BhZ2VzKTtcXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cXHRpZiAodW5saWtlbHkodmRzb19wYWdlbGlzdCA9PSBOVUxMKSkge1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzItXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlxcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlLCBHRlBfQVRPTUlDKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzQtXFx0aWYgKCFyYW5nZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM9NDU9c3RhdGljIGludCBfX2luaXQgaW5pdF92ZHNvKHZvaWQpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU1LVxcdHZkc29faW5mby5jb2RlX21hcHBpbmcucGFnZXMgPVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XFx0XFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mby5zaXplIC8gUEFHRV9TSVpFKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTYxND1zdGF0aWMgaW50IGt2bV9laW9pbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjQtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjYyNTpcXHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI2LVxcdGlmICghcylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jPTM5ND1zdGF0aWMgaW50IGt2bV9pcGlfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jOjQxMjpcXHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9pcGkpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cXHRpZiAoIXMpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA2OjUwLjM0NDM3Njg0MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzYxMjU1MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBga3phbGxvY19vYmpgIG1hY3JvIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0J3MgcHJvYmFibHkganVzdCBhIHdyYXBwZXIgYXJvdW5kIGBremFsbG9jYCwgbGlrZWx5IGRlZmluZWQgc29tZXdoZXJlIGluIGEgYHNsYWIuaGAgaGVhZGVyLCBvciBtYXliZSBzb21ldGhpbmcgc2ltaWxhciBpbiB0aGlzIHByb2plY3QncyBpbmNsdWRlcy4gQWgsIHllcywgaXQncyBga3phbGxvY19vYmooKmludGksIEdGUF9LRVJORUxfQUNDT1VOVClgLiBIbW0sIHRoYXQgYEdGUF9LRVJORUxfQUNDT1VOVGAgbG9va3Mgc3RhbmRhcmQgZW5vdWdoLCBidXQgYGt6YWxsb2Nfb2JqYC4uLiBpcyB0aGF0IGEgY3VzdG9tIG1hY3JvPyBNYXliZSBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBzeXprYWxsZXIgc2V0dXAgb3IgYSBtb3JlIHJlY2VudCBrZXJuZWwgYWRkaXRpb24/XG5cblJpZ2h0LCBhZnRlciBhIHF1aWNrIGNoZWNrLCBpdCdzIGNsZWFyOiBga3phbGxvY19vYmpgICppcyoganVzdCBhIG1hY3JvLCBlZmZlY3RpdmVseSBkb2luZyBga3phbGxvYyhzaXplb2YoKmludGkpLCBHRlBfS0VSTkVMX0FDQ09VTlQpYC4gU28sIGNsYXNzaWMgYGt6YWxsb2NgIGJlaGF2aW9y4oCUdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgemVyb2VkIG91dC4gVGhhdCBtZWFucyBgaW50aWAgaXMgZ3VhcmFudGVlZCB0byBzdGFydCBhcyBhbGwgemVyb3MuXG5cbk5vdywgdGhlIGNvZGUgdGhlbiBwcm9jZWVkcyB0byBjb3B5IGRhdGEgZnJvbSBgczM5MGludGAgaW50byBgaW50aWAgdXNpbmcgYGt2bV9zMzkwX2luamVjdF92bWAuIFRoaXMgYHMzOTBpbnRgIGlzIHBvcHVsYXRlZCBlYXJsaWVyIHdpdGggYGNvcHlfZnJvbV91c2VyYCBpbiBga3ZtX2FyY2hfdm1faW9jdGxgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHk6IHdoYXQgaWYgYHMzOTBpbnRgIGhhcyBwYWRkaW5nPyBFdmVuIHRob3VnaCBgaW50aWAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgdGhlIGBjb3B5X2Zyb21fdXNlcmAgbWlnaHQgb3ZlcndyaXRlIHNvbWUgb2YgdGhhdCB6ZXJvZWQgcGFkZGluZyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIHVzZXIgc3BhY2UuXG5cbk9rYXksIHRpbWUgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRgLiBJJ2xsIGZpbmQgaXQgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9rdm0uaGAgb3IsIGdpdmVuIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgbWF5YmUgYGFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oYC4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgc3RydWN0dXJlIGFuZCBhbnkgcG90ZW50aWFsIHBhZGRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjY4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA2OjU5LjcwNTYzNjUxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1NTUxNTI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9MzI2Nj1JbnRlcnJ1cHQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHZpYSBrdm1fczM5MF9pbnRlcnJ1cHQ6OlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC0zMjY3LVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDozMjY4OiAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCB7XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTMyNjktXFx0X191MzIgdHlwZTtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTk2PXN0cnVjdCBrdm1fczM5MF9wc3cge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtMTI1LVxcbmFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjEyNjpzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHtcXG5hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC0xMjctXFx0X191MzIgdHlwZTtcXG4tLVxcbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTk2PXN0cnVjdCBrdm1fczM5MF9wc3cge1xcbi0tXFxudG9vbHMvYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtMTI1LVxcbnRvb2xzL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjEyNjpzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHtcXG50b29scy9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC0xMjctXFx0X191MzIgdHlwZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDc6MDIuNDYxMTU3Nzg3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjkwOTk2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoyNzM3NCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDc6MDguNTkwMjczMDY3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjY6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCB7XFxuIDEyNzpcXHRcXHRfX3UzMiB0eXBlO1xcbiAxMjg6XFx0XFx0X191MzIgcGFybTtcXG4gMTI5OlxcdFxcdF9fdTY0IHBhcm02NDtcXG4gMTMwOlxcdH07XFxuIDEzMTpcXHRcXG4gMTMyOlxcdHN0cnVjdCBrdm1fczM5MF9pb19pbmZvIHtcXG4gMTMzOlxcdFxcdF9fdTE2IHN1YmNoYW5uZWxfaWQ7XFxuIDEzNDpcXHRcXHRfX3UxNiBzdWJjaGFubmVsX25yO1xcbiAxMzU6XFx0XFx0X191MzIgaW9faW50X3Bhcm07XFxuIDEzNjpcXHRcXHRfX3UzMiBpb19pbnRfd29yZDtcXG4gMTM3OlxcdH07XFxuIDEzODpcXHRcXG4gMTM5OlxcdHN0cnVjdCBrdm1fczM5MF9leHRfaW5mbyB7XFxuIDE0MDpcXHRcXHRfX3UzMiBleHRfcGFyYW1zO1xcbiAxNDE6XFx0XFx0X191MzIgcGFkO1xcbiAxNDI6XFx0XFx0X191NjQgZXh0X3BhcmFtczI7XFxuIDE0MzpcXHR9O1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNzowOC41OTAzOTMzNjdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkwMTkwODQ5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoyNTQyOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowNzoyNy42MDk0ODE3MjFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTk3MjQ1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0yMTE9ZW51bSBpcnFfdHlwZXMge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjk2LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjI5NzpzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8ge1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTI5OC1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjMwLjIwOTIxMjI5NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTgyMjYzNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6Mjc4NzYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjM2LjE5MTQ3ODYxOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyOTcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTc6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvIHtcXG4gMjk4OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gMjk5OlxcdFxcdHU2NFxcdHR5cGU7XFxuIDMwMDpcXHRcXHR1bmlvbiB7XFxuIDMwMTpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW9faW5mbyBpbztcXG4gMzAyOlxcdFxcdFxcdHN0cnVjdCBrdm1fczM5MF9leHRfaW5mbyBleHQ7XFxuIDMwMzpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gcGdtO1xcbiAzMDQ6XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX2VtZXJnX2luZm8gZW1lcmc7XFxuIDMwNTpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfZXh0Y2FsbF9pbmZvIGV4dGNhbGw7XFxuIDMwNjpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfcHJlZml4X2luZm8gcHJlZml4O1xcbiAzMDc6XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX3N0b3BfaW5mbyBzdG9wO1xcbiAzMDg6XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX21jaGtfaW5mbyBtY2hrO1xcbiAzMDk6XFx0XFx0fTtcXG4gMzEwOlxcdH07XFxuIDMxMTpcXHRcXG4gMzEyOlxcdHN0cnVjdCBrdm1fczM5MF9pcnFfcGF5bG9hZCB7XFxuIDMxMzpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW9faW5mbyBpbztcXG4gMzE0OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9leHRfaW5mbyBleHQ7XFxuIDMxNTpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfcGdtX2luZm8gcGdtO1xcbiAzMTY6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2VtZXJnX2luZm8gZW1lcmc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjM2LjE5MTU2NzgyOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjI4NDk3NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUga3ZtX3MzOTBfaW50ZXJydXB0IFN0cnVjdHVyZSBhbmQgSXRzIFVzYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGB0eXBlYCwgYHBhcm1gLCBhbmQgYHBhcm02NGAuIEl0J3MgYSAxNi1ieXRlIHN0cnVjdHVyZSBhbmQsIGltcG9ydGFudGx5LCBpdCdzIGZ1bGx5IGluaXRpYWxpemVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAgd2l0aG91dCBhbnkgaW50ZXJuYWwgcGFkZGluZyBpc3N1ZXMuIFdlIGFsbG9jYXRlIGBpbnRpYCB1c2luZyBga3phbGxvY19vYmpgLCBzbyB3ZSBzdGFydCB3aXRoIGEgemVyb2VkLW91dCBibG9jayBvZiBtZW1vcnkuIFRoZW4sIHRoZSBmaWVsZHMgYXJlIHBvcHVsYXRlZC4gVGhlIGZ1bmN0aW9uIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBpcyB0aGVuIGNhbGxlZC5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHJlYWRzIGBpbnRpLVx1MDAzZXR5cGVgIGFuZCBgaW50aS1cdTAwM2Vpby5pb19pbnRfd29yZGAuIFNpbmNlIGBpbnRpYCBpcyB6ZXJvZWQgb3V0IGluaXRpYWxseSwgYW5kIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYCBpcyBkZXJpdmVkIGZyb20gYHMzOTBpbnQtXHUwMDNlcGFybTY0YCwgd2hpY2ggd2UndmUgZXN0YWJsaXNoZWQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlLCBldmVuIHRob3VnaCB3ZSBhcmUgbG9va2luZyBhdCBzb21ldGhpbmcgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay5cblxuSG93ZXZlciwgdGhlIGNhdGNoIGlzIHRoYXQgYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgIGlzICpvbmx5KiByZWFkIGlmIGBpbnRpLVx1MDAzZXR5cGVgIGZhbGxzIHdpdGhpbiB0aGUgYEtWTV9TMzkwX0lOVF9JT19NSU5gIHRvIGBLVk1fUzM5MF9JTlRfSU9fTUFYYCByYW5nZS4gTG9va2luZyBiYWNrIGF0IGBrdm1fczM5MF9pbmplY3Rfdm1gLCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gSU8gaW50ZXJydXB0IChmYWxsaW5nIHdpdGhpbiB0aGF0IHR5cGUgcmFuZ2UpLCBgaW50aS1cdTAwM2Vpby5pb19pbnRfd29yZGAgaXMgZXhwbGljaXRseSBzZXQgdG8gYHMzOTBpbnQtXHUwMDNlcGFybTY0IFx1MDAyNiAweGZmZmZmZmZmYC4gU28sIGl0J3MgKmRlZmluaXRlbHkqIGluaXRpYWxpemVkIGluIHRoYXQgc2NlbmFyaW8uXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhvc2UgcGxhY2VzLCB0aGVyZSBhcmUgbm8gb3RoZXIgY2FsbCBzaXRlcywgdG8gYmUgY29tcGxldGVseSBzdXJlLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBfX2luamVjdF92bWAuIE9rYXksIHNvIGBfX2luamVjdF92bWAgaXMgY2FsbGVkIGZyb20gYm90aCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCAqYW5kKiBga3ZtX3MzOTBfcmVpbmplY3RfaW9faW50YC4gSSdsbCB0YWtlIGEgbG9vayBhdCBga3ZtX3MzOTBfcmVpbmplY3RfaW9faW50YCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgaXNzdWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjQyLjgyMDA2OTA4MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1OTI5NjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9yZWluamVjdF9pb19pbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTc3Nz1zdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmt2bV9zMzkwX2dldF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODA2LVxcdFxcdGlmIChpbnRpKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTgwNzpcXHRcXHRcXHRrdm1fczM5MF9yZWluamVjdF9pb19pbnQoa3ZtLCBpbnRpKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE4MDgtXFx0XFx0aW50aSA9IHRtcF9pbnRpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDQ2PWludCBrdm1fczM5MF9pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDg4LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA4OTppbnQga3ZtX3MzOTBfcmVpbmplY3RfaW9faW50KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwOTAtXFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oPTQwMz1zdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmt2bV9zMzkwX2dldF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00MDQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHU2NCBpc2NfbWFzaywgdTMyIHNjaGlkKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NDA1OmludCBrdm1fczM5MF9yZWluamVjdF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC00MDYtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NDQyPXN0YXRpYyBpbnQgaGFuZGxlX3RwaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy00OTktXFx0ICovXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NTAwOlxcdGlmIChrdm1fczM5MF9yZWluamVjdF9pb19pbnQodmNwdS1cXHUwMDNla3ZtLCBpbnRpKSkge1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTUwMS1cXHRcXHRrZnJlZShpbnRpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MDc6NDUuMDc5MzcyMzM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Nzk4MTc1MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMgaW4gS1ZNL3MzOTAgSW50ZXJydXB0IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHdhcyBpbml0aWFsbHkgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgS1ZNL3MzOTAgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBmbG9hdGluZyBpbnRlcnJ1cHRzLiBJIHN0YXJ0ZWQgYnkgdHJhY2luZyB0aGUgcGF0aCBvZiBgaW50aWAgKHRoZSBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gc3RydWN0dXJlKSB0aHJvdWdoIHRoZSBjb2RlLlxuXG5UaGUgZmlyc3QgcG9pbnQgb2YgaW50ZXJlc3Qgd2FzIGBrdm1fczM5MF9yZWluamVjdF9pb19pbnRgLiBUaGUgYGludGlgIHBhcmFtZXRlciBoZXJlIGNvbWVzIGZyb20gYGhhbmRsZV90cGlgLCBhbmQgYGhhbmRsZV90cGlgIGdldHMgaXQgZnJvbSBga3ZtX3MzOTBfZ2V0X2lvX2ludGAuIFRoaXMgZnVuY3Rpb24gZGVxdWV1ZXMgYW4gZXhpc3RpbmcgYGludGlgIGZyb20gdGhlIGZsb2F0aW5nIGludGVycnVwdCBsaXN0LiBTaW5jZSBpdCdzIGFscmVhZHkgb24gdGhlIGxpc3QsIGl0IG1lYW5zIGl0IG11c3QgaGF2ZSBiZWVuICppbml0aWFsaXplZCogd2hlbiBpdCB3YXMgaW5qZWN0ZWQgb250byB0aGUgbGlzdC4gVGhhdCBlbGltaW5hdGVzIGEgZGlyZWN0IHVuaW5pdGlhbGl6ZWQgcmVhZCB0aGVyZS5cblxuTmV4dCwgSSBsb29rZWQgYXQgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxc2AuIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBvbmxpbmUgdkNQVXMgYW5kIHRyaWVzIHRvIHdha2Ugb25lIHVwIHRvIGhhbmRsZSBhIHBlbmRpbmcgaW50ZXJydXB0LiBJdCB1c2VzIGBrdm0tXHUwMDNlYXJjaC5pZGxlX21hc2tgLCB3aGljaCBpcyBhbiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBhbmQgaW5kZXhlZCBieSB0aGUgbnVtYmVyIG9mIG9ubGluZSB2Y3B1cy4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBoZXJlIGFyZSBgZmluZF9maXJzdF9iaXRgIGFuZCBgZmluZF9uZXh0X2JpdGAgd2hpY2ggcmVhZHMgdGhlIGJpdHMgZnJvbSBga3ZtLVx1MDAzZWFyY2guaWRsZV9tYXNrYC4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB3aGV0aGVyIGBrdm0tXHUwMDNlYXJjaC5pZGxlX21hc2tgIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBMb29raW5nIGF0IHdoZXJlIGl0IGNvbWVzIGZyb20sIHRoZSBgc3RydWN0IGt2bV9hcmNoYCBpcyBlbWJlZGRlZCB3aXRoaW4gdGhlIGBzdHJ1Y3Qga3ZtYC4gVGhlIGBzdHJ1Y3Qga3ZtYCBpcyBhbGxvY2F0ZWQgd2l0aCBgdnphbGxvY2Agb3IgYGt6YWxsb2NgIGluIGBrdm1fY3JlYXRlX3ZtYCwgc28gaXQgaXMgZnVsbHkgemVyb2VkLiBTbywgYGt2bS1cdTAwM2VhcmNoLmlkbGVfbWFza2Agc2hvdWxkIGJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuIFRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYGRlbGl2ZXJhYmxlX2lycXMoZHN0X3ZjcHUpYCBjaGVja3MgdGhlIHZjcHUncyBwZW5kaW5nIGlycXMuIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZW4sIGp1c3QgdG8gYmUgc3VyZSwgSSBjaGVja2VkIHdoZXJlIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBpcyBjYWxsZWQuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIGFuZCB0aGUgY29kZSBvbmx5IGNhbGxzIGl0IGZyb20gaW5zaWRlIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gVGhpcyBjb25maW5lcyBpdHMgdXNhZ2UgdG8gYSBrbm93biBzY29wZS5cblxuTm93LCBsZXQncyByZXZpc2l0IGBrdm1fczM5MF9pbmplY3Rfdm1gLiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBpbmplY3RpbmcgaW50ZXJydXB0cyBpbnRvIHRoZSBWTS4gSXQgdGFrZXMgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdGAgYW5kIGEgYHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mb2AgKGludGkpIGFzIGlucHV0LiBJbnNpZGUsIGl0IHBvcHVsYXRlcyB0aGUgYGludGlgIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgaW50ZXJydXB0IHR5cGUuIEkgbWFkZSBzdXJlIHRvIHdhbGsgdGhyb3VnaCBhbGwgY2FzZXMgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgdG8gY29uZmlybSBpZiBgX19pbmplY3Rfdm1gIGNvdWxkIGJlIGNhbGxlZCwgYW5kIGFsc28gdG8gc2VlIGlmIHRoZXJlIGNvdWxkIGJlIHNvbWUgcGF0aCB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCByZXR1cm5zIGAtRUlOVkFMYCBpZiB0aGUgdHlwZSBpc24ndCBvbmUgb2YgdGhlIGtub3duIGNhc2VzLlxuXG5UaGUga2V5IHRvIHRoZSBjb2RlIGlzIHRoYXQgYF9faW5qZWN0X3ZtYCBjYW4gb25seSBiZSBjYWxsZWQgaWYgYGludGktXHUwMDNldHlwZWAgbWF0Y2hlcyBvbmUgb2YgdGhlIGtub3duIGludGVycnVwdCB0eXBlcy4gV2hlbiBgaW50aS1cdTAwM2V0eXBlYCBpcyBgS1ZNX1MzOTBfSU5UX1ZJUlRJT2AsIGl0IHRoZW4gY2FsbHMgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIHdoaWNoIGluIHR1cm4gY2FsbHMgYGludGlfdG9faXJxX3BlbmRfbWFzayhpbnRpKWAuIEkgdHJhY2VkIGBpbnRpX3RvX2lycV9wZW5kX21hc2tgIGFuZCBjaGVja2VkIGFsbCB0aGUgZGlmZmVyZW50IGNhc2VzLiBJIHNhdyB0aGF0IGZvciBgS1ZNX1MzOTBfSU5UX1ZJUlRJT2AsIGl0IHVzZXMgYEJJVChJUlFfUEVORF9WSVJUSU8pYC4gSXQgZG9lcyAqbm90KiByZWFkIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYC4gVGhlIHJlYWRzIGZyb20gYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgIG9ubHkgb2NjdXIgaWYgYGludGktXHUwMDNldHlwZWAgaXMgaW4gdGhlIGBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWGAgcmFuZ2UsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlcyBhcmUgYXNzaWduZWQgaW4gYGt2bV9zMzkwX2luamVjdF92bWAuIFRoZXJlZm9yZSwgdGhlcmUgc2hvdWxkIGJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGNhbGxlcnMgb2YgYF9fZmxvYXRpbmdfaXJxX2tpY2tgLCBvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgaW5qZWN0IGludGVycnVwdHMsIHN1Y2ggYXMgYF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW5gLiBJdCdzIHBvc3NpYmxlIEkgbWlzc2VkIGEgcGF0aC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IGl0cyB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5MDQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjU5Ljg3NzU1MDU2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ3NTpcXHRzdGF0aWMgdm9pZCBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBzdGFydF90b2tlbixcXG40NDc2OlxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0b2tlbilcXG40NDc3OlxcdHtcXG40NDc4OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgaW50aTtcXG40NDc5OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9pcnEgaXJxO1xcbjQ0ODA6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpX21lbSA9IE5VTEw7XFxuNDQ4MTpcXHRcXHRpbnQgcmV0ID0gMDtcXG40NDgyOlxcdFxcbjQ0ODM6XFx0XFx0aWYgKHN0YXJ0X3Rva2VuKSB7XFxuNDQ4NDpcXHRcXHRcXHRpcnEudS5leHQuZXh0X3BhcmFtczIgPSB0b2tlbjtcXG40NDg1OlxcdFxcdFxcdGlycS50eXBlID0gS1ZNX1MzOTBfSU5UX1BGQVVMVF9JTklUO1xcbjQ0ODY6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGt2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUsIFxcdTAwMjZpcnEpKTtcXG40NDg3OlxcdFxcdH0gZWxzZSB7XFxuNDQ4ODpcXHRcXHRcXHRpbnRpX21lbSA9IGt6YWxsb2Nfb2JqKCppbnRpX21lbSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG40NDg5OlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWludGlfbWVtKSlcXG40NDkwOlxcdFxcdFxcdFxcdHJldHVybjtcXG40NDkxOlxcdFxcbjQ0OTI6XFx0XFx0XFx0aW50aS50eXBlID0gS1ZNX1MzOTBfSU5UX1BGQVVMVF9ET05FO1xcbjQ0OTM6XFx0XFx0XFx0aW50aS5wYXJtNjQgPSB0b2tlbjtcXG40NDk0OlxcdFxcdFxcdHJldCA9IGt2bV9zMzkwX2luamVjdF92bSh2Y3B1LVxcdTAwM2Vrdm0sIFxcdTAwMjZpbnRpLCBpbnRpX21lbSk7XFxuNDQ5NTpcXHRcXHRcXHRpZiAocmV0KVxcbjQ0OTY6XFx0XFx0XFx0XFx0a2ZyZWUoaW50aV9tZW0pO1xcbjQ0OTc6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKHJldCk7XFxuNDQ5ODpcXHRcXHR9XFxuNDQ5OTpcXHR9XFxuNDUwMDpcXHRcXG40NTAxOlxcdGJvb2wga3ZtX2FyY2hfYXN5bmNfcGFnZV9ub3RfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuNDUwMjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXFxuNDUwMzpcXHR7XFxuNDUwNDpcXHRcXHR0cmFjZV9rdm1fczM5MF9wZmF1bHRfaW5pdCh2Y3B1LCB3b3JrLVxcdTAwM2VhcmNoLnBmYXVsdF90b2tlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA3OjU5Ljg3ODAyMThaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwNjAzMjYwNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5jb3ZlcmluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMgaW4gYSBLVk0vczM5MCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCB3YXMgcmlnaHQgdG8gZmxhZyB0aGUgdW5pbml0aWFsaXplZCBgaW50aS5wYXJtYCB3aXRoaW4gYF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW5gLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGNvZGUgaW4gdGhhdCBmdW5jdGlvbiBkb2Vzbid0IGluaXRpYWxpemUgaXQsIGFuZCBhbHRob3VnaCBga3ZtX3MzOTBfaW5qZWN0X3ZtYCBkb2Vzbid0ICp1c2UqIGl0IGRpcmVjdGx5IGZvciB0aGUgYEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORWAgY2FzZSwgdGhlIGB0cmFjZV9rdm1fczM5MF9pbmplY3Rfdm1gIGNhbGwgZG9lcyByZWFkIGBzMzkwaW50LVx1MDAzZXBhcm1gLiBIb3dldmVyLCB0aGlzIHdhc24ndCBpbnRyb2R1Y2VkIGJ5ICp0aGlzKiBwYXRjaCDigJMgaXQncyBhbiBleGlzdGluZyBidWcuXG5cbk5vdywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSAqbmV3KiBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBUaGUgY2hhbmdlcyBhcm91bmQgYF9fZmxvYXRpbmdfaXJxX2tpY2tgIG5lZWRlZCBzY3J1dGlueS4gU3BlY2lmaWNhbGx5LCB0aGUgY2FsbCB0byBgaW50aV90b19pcnFfcGVuZF9tYXNrYC4gVGhhdCBmdW5jdGlvbiBhY2Nlc3NlcyBgaW50aS1cdTAwM2V0eXBlYCBhbmQgYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgLiBJIGNvbmZpcm1lZCB0aGF0IGBpbnRpYCBpbiB0aGlzIGNvbnRleHQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBga3phbGxvY19vYmpgLCB3aGljaCBndWFyYW50ZWVzIHplcm9lZCBtZW1vcnksIGhlbmNlIGEgc2FmZSByZWFkIG9mIGBpbnRpLVx1MDAzZWlvLmlvX2ludF93b3JkYC4gRXZlbiBpZiB0aGUgdHlwZSBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIGBLVk1fUzM5MF9JTlRfSU9fTUlOLi4uS1ZNX1MzOTBfSU5UX0lPX01BWGAuIEZvciB0aGUgYEtWTV9TMzkwX0lOVF9QRkFVTFRfRE9ORWAgY2FzZSwgaXQncyBpcnJlbGV2YW50LlxuXG5JIHRoZW4gbG9va2VkIGF0IGBkaXN0cmlidXRlX2Zsb2F0X2lycXNgLCBhbmQgYGRlbGl2ZXJhYmxlX2lycXNgLCBidXQgdGhleSBhcmUgdW5jaGFuZ2VkIGJ5IHRoZSBwYXRjaC5cblxuSSByZXZpc2l0ZWQgYGludGlfdG9faXJxX3BlbmRfbWFza2AgZm9yIGEgZnVsbCBjaGVjaywgbWFraW5nIHN1cmUgdGhhdCBgaW50aWAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJ5IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBrdm1fYXJjaF92bV9pb2N0bGAsIGBrdm1fczM5MF9pbmplY3RfYWlycWAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuYC4gVGhlIGBremFsbG9jX29iamAgY2FsbCBpbiB0aG9zZSBmdW5jdGlvbnMgZ3VhcmFudGVlcyB6ZXJvIGluaXRpYWxpemF0aW9uLCBtZWFuaW5nIHdlIGNhbiBiZSBhc3N1cmVkIHRoYXQgYGludGktXHUwMDNlaW8uaW9faW50X3dvcmRgIGlzIHNhZmVseSByZWFkLlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm9gIGlzIG5ldmVyIGFsbG9jYXRlZCBpbiBhIHdheSB0aGF0ICpkb2Vzbid0KiB6ZXJvIGl0IG91dC4gSSdsbCBzZWFyY2ggZm9yIGFsbCBhbGxvY2F0aW9ucyBvZiB0aGF0IHN0cnVjdCB0byBlbnN1cmUgaXQncyBhbHdheXMgaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzM5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA4OjEzLjkzODM1MTI1MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzOTU4OTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xMDM4PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIF9fZGVsaXZlcl9wZmF1bHRfZG9uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEwNDAtXFx0c3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmkgPSBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmZsb2F0X2ludDtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjEwNDE6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA0Mi1cXHRpbnQgcmMgPSAwO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDQ2LVxcdGludGkgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXFx1MDAyNmZpLVxcdTAwM2VsaXN0c1tGSVJRX0xJU1RfUEZBVUxUXSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjEwNDc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA0OC1cXHRcXHRcXHRcXHRcXHRsaXN0KTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTA4MT1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBfX2RlbGl2ZXJfdmlydGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTA4My1cXHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZmxvYXRfaW50O1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA4NDpcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDg1LVxcdGludCByYyA9IDA7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTEwODktXFx0aW50aSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2ZmktXFx1MDAzZWxpc3RzW0ZJUlFfTElTVF9WSVJUSU9dLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTA5MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMDkxLVxcdFxcdFxcdFxcdFxcdGxpc3QpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xMTU0PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIF9fZGVsaXZlcl9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNTktXFx0c3RydWN0IGt2bV9zMzkwX2dpc2FfaW50ZXJydXB0ICpnaSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ2lzYV9pbnQ7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMTYwOlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMTYxLVxcdHN0cnVjdCBrdm1fczM5MF9pb19pbmZvIGlvO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xMTcxLVxcdGludGkgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoaXNjX2xpc3QsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxMTcyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTExNzMtXFx0XFx0XFx0XFx0XFx0bGlzdCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE2ODk9c3RhdGljIGludCBfX2luamVjdF9jcHVfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzAyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTcwMzpzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICpnZXRfaW9faW50KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3MDQtXFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgaXNjLCB1MzIgc2NoaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3MDctXFx0c3RydWN0IGxpc3RfaGVhZCAqaXNjX2xpc3QgPSBcXHUwMDI2ZmktXFx1MDAzZWxpc3RzW0ZJUlFfTElTVF9JT19JU0NfMCArIGlzY107XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzA4OlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaXRlcjtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3MDktXFx0dTE2IGlkID0gKHNjaGlkIFxcdTAwMjYgMHhmZmZmMDAwMFUpIFxcdTAwM2VcXHUwMDNlIDE2O1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzI5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTczMDpzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICpnZXRfdG9wX2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzMxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHU2NCBpc2NfbWFzaywgdTMyIHNjaGlkKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTczMi17XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzMzOlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzM0LVxcdGludCBpc2M7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE3NDM9c3RhdGljIGludCBnZXRfdG9wX2dpc2FfaXNjKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGlzY19tYXNrLCB1MzIgc2NoaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE3NzYtICovXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNzc3OnN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqa3ZtX3MzOTBfZ2V0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzc4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICB1NjQgaXNjX21hc2ssIHUzMiBzY2hpZClcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTc4MC1cXHRzdHJ1Y3Qga3ZtX3MzOTBfZ2lzYV9pbnRlcnJ1cHQgKmdpID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5naXNhX2ludDtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE3ODE6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpLCAqdG1wX2ludGk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNzgyLVxcdGludCBpc2M7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE4MTU9c3RhdGljIGludCBfX2luamVjdF9zZXJ2aWNlKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE4MTY6XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODE3LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTg0Nz1zdGF0aWMgaW50IF9faW5qZWN0X3ZpcnRpbyhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxODQ4OlxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xODQ5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTg2Nj1zdGF0aWMgaW50IF9faW5qZWN0X3BmYXVsdF9kb25lKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE4Njc6XFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE4Njgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xODg3PXN0YXRpYyBpbnQgX19pbmplY3RfZmxvYXRfbWNoayhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxODg4OlxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE4ODkte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xOTAyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTkwMzpzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTkwNC17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5NDgtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxOTQ5OnN0YXRpYyB1NjQgaW50aV90b19pcnFfcGVuZF9tYXNrKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE5NTAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xOTczLSAqL1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTk3NDpzdGF0aWMgdm9pZCBfX2Zsb2F0aW5nX2lycV9raWNrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTk3NS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwMTQtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMDE1OnN0YXRpYyBpbnQgX19pbmplY3Rfdm0oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDE2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjA0Nj1pbnQga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIwNDc6XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQsIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIwNDgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMDg5PWludCBrdm1fczM5MF9yZWluamVjdF9pb19pbnQoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjA5MDpcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGkpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMDkxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjIyMD1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaXJxX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqX2xpc3QpXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMjIxLXtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIyMjI6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpLCAqbjtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyMjMtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyMjktXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyMjMwOnN0YXRpYyB2b2lkIGludGlfdG9faXJxKHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIyMzEtXFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjI2OD1zdGF0aWMgaW50IGdldF9hbGxfZmxvYXRpbmdfaXJxcyhzdHJ1Y3Qga3ZtICprdm0sIHU4IF9fdXNlciAqdXNyYnVmLCB1NjQgbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMjcwLVxcdHN0cnVjdCBrdm1fczM5MF9naXNhX2ludGVycnVwdCAqZ2kgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmdpc2FfaW50O1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjI3MTpcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMjcyLVxcdHN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yMzgyPXN0YXRpYyBpbnQgZmxpY19nZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDAwLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjQwMTpzdGF0aWMgaW5saW5lIGludCBjb3B5X2lycV9mcm9tX3VzZXIoc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQwMi1cXHRcXHRcXHRcXHQgICAgIHU2NCBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDQxPXN0YXRpYyBpbnQgZW5xdWV1ZV9mbG9hdGluZ19pcnEoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ0My17XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNDQ0OlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDQ1LVxcdGludCByID0gMDtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgyMD1zdGF0aWMgaW50IGt2bV9zMzkwX2luamVjdF9haXJxKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjgyOC1cXHR9O1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgyOTpcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODMwLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMxNjU9dm9pZCBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2Ny17XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTY4OlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyBpbnRpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzE2OS1cXHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIGlycTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzgwOD1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzgxNC1cXHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZmxvYXRfaW50O1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzgxNTpcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODE2LVxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludCA9IHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI3PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yOTMyLVxcdGludCByO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyOTMzOlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjkzNC1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00NDc1PXN0YXRpYyB2b2lkIF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHN0YXJ0X3Rva2VuLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0NzktXFx0c3RydWN0IGt2bV9zMzkwX2lycSBpcnE7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQ0ODA6XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpX21lbSA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQ0ODEtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9Mzc5PWludCBfX211c3RfY2hlY2sga3ZtX3MzOTBfaW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtMzgwLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDozODE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTM4Mi1pbnQgX19tdXN0X2NoZWNrIGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD0zOTQ9c3RhdGljIGlubGluZSBpbnQga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGNvZGUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgtNDAyLX1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NDAzOnN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqa3ZtX3MzOTBfZ2V0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQwNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdTY0IGlzY19tYXNrLCB1MzIgc2NoaWQpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD00MDU9aW50IGt2bV9zMzkwX3JlaW5qZWN0X2lvX2ludChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oOjQwNjpcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTQwNy1pbnQga3ZtX3MzOTBfbWFza19hZGFwdGVyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBib29sIG1hc2tlZCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYz00NDI9c3RhdGljIGludCBoYW5kbGVfdHBpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy00NDMte1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjQ0NDpcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGk7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNDQ1LVxcdHVuc2lnbmVkIGxvbmcgbGVuO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9NTA4PXN0YXRpYyBpbnQgaGFuZGxlX3RzY2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTUwOS17XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6NTEwOlxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aSA9IE5VTEw7XFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtNTExLVxcdGNvbnN0IHU2NCBpc2NfbWFzayA9IDB4ZmZVTCBcXHUwMDNjXFx1MDAzYyAyNDsgLyogYWxsIGlzY3Mgc2V0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA4OjE1LjE3Nzk0NzAwNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzQ4MDU1MzcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjM0MDI2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowODozMi42NTg1MDU5MjJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAxNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAxNTpcXHRzdGF0aWMgaW50IF9faW5qZWN0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbjIwMTY6XFx0e1xcbjIwMTc6XFx0XFx0dTY0IHR5cGUgPSBSRUFEX09OQ0UoaW50aS1cXHUwMDNldHlwZSk7XFxuMjAxODpcXHRcXHRpbnQgcmM7XFxuMjAxOTpcXHRcXG4yMDIwOlxcdFxcdHN3aXRjaCAodHlwZSkge1xcbjIwMjE6XFx0XFx0Y2FzZSBLVk1fUzM5MF9NQ0hLOlxcbjIwMjI6XFx0XFx0XFx0cmMgPSBfX2luamVjdF9mbG9hdF9tY2hrKGt2bSwgaW50aSk7XFxuMjAyMzpcXHRcXHRcXHRicmVhaztcXG4yMDI0OlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5UX1ZJUlRJTzpcXG4yMDI1OlxcdFxcdFxcdHJjID0gX19pbmplY3RfdmlydGlvKGt2bSwgaW50aSk7XFxuMjAyNjpcXHRcXHRcXHRicmVhaztcXG4yMDI3OlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5UX1NFUlZJQ0U6XFxuMjAyODpcXHRcXHRcXHRyYyA9IF9faW5qZWN0X3NlcnZpY2Uoa3ZtLCBpbnRpKTtcXG4yMDI5OlxcdFxcdFxcdGJyZWFrO1xcbjIwMzA6XFx0XFx0Y2FzZSBLVk1fUzM5MF9JTlRfUEZBVUxUX0RPTkU6XFxuMjAzMTpcXHRcXHRcXHRyYyA9IF9faW5qZWN0X3BmYXVsdF9kb25lKGt2bSwgaW50aSk7XFxuMjAzMjpcXHRcXHRcXHRicmVhaztcXG4yMDMzOlxcdFxcdGNhc2UgS1ZNX1MzOTBfSU5UX0lPX01JTi4uLktWTV9TMzkwX0lOVF9JT19NQVg6XFxuMjAzNDpcXHRcXHRcXHRyYyA9IF9faW5qZWN0X2lvKGt2bSwgaW50aSk7XFxuMjAzNTpcXHRcXHRcXHRicmVhaztcXG4yMDM2OlxcdFxcdGRlZmF1bHQ6XFxuMjAzNzpcXHRcXHRcXHRyYyA9IC1FSU5WQUw7XFxuMjAzODpcXHRcXHR9XFxuMjAzOTpcXHRcXHRpZiAocmMpXFxuMjA0MDpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMjA0MTpcXHRcXG4yMDQyOlxcdFxcdF9fZmxvYXRpbmdfaXJxX2tpY2soa3ZtLCBpbnRpKTtcXG4yMDQzOlxcdFxcdHJldHVybiAwO1xcbjIwNDQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowODozMi42NTg3Nzk0NDJaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxOTI4Mzk1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNYWNoaW5lIENoZWNrIFJlaW5qZWN0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgd2UncmUgaGFuZGxpbmcgbWFjaGluZSBjaGVjayBpbnRlcnJ1cHRzLiBJIHNlZSByaWdodCBvZmYgdGhlIGJhdCwgd2UndmUgZ290IGEgYGt2bV92Y3B1YCBwb2ludGVyIGFuZCBhIGBtY2lgIHN0cnVjdCBwYXNzZWQgaW4sIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCBJIG5vdGljZSB0aGF0IGBpbnRpYCBpcyBhIGxvY2FsIHZhcmlhYmxlLiBPa2F5LCB0aGF0IGZlZWxzIHJpZ2h0LCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBgaW50aWAgaXMgdXRpbGl6ZWQuIExldCdzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBvZiBga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVja2AgYW5kIHRyYWNlIHRoZSB1c2Ugb2YgdGhlc2UgdmFyaWFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDk4NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEzOjA5OjM2Ljg1MTYyMjIxOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODgyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTY1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTY1OlxcdHZvaWQga3ZtX3MzOTBfcmVpbmplY3RfbWFjaGluZV9jaGVjayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuMzE2NjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtY2NrX3ZvbGF0aWxlX2luZm8gKm1jY2tfaW5mbylcXG4zMTY3OlxcdHtcXG4zMTY4OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyBpbnRpO1xcbjMxNjk6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2lycSBpcnE7XFxuMzE3MDpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbWNoa19pbmZvICptY2hrO1xcbjMxNzE6XFx0XFx0dW5pb24gbWNpIG1jaTtcXG4zMTcyOlxcdFxcdF9fdTY0IGNyMTQgPSAwOyAgICAgICAgIC8qIHVwcGVyIGJpdHMgYXJlIG5vdCB1c2VkICovXFxuMzE3MzpcXHRcXHRpbnQgcmM7XFxuMzE3NDpcXHRcXG4zMTc1OlxcdFxcdG1jaS52YWwgPSBtY2NrX2luZm8tXFx1MDAzZW1jaWM7XFxuMzE3NjpcXHRcXG4zMTc3OlxcdFxcdC8qIGxvZyBtYWNoaW5lIGNoZWNrcyBiZWluZyByZWluamVjdGVkIG9uIGFsbCBkZWJ1Z3MgKi9cXG4zMTc4OlxcdFxcdFZDUFVfRVZFTlQodmNwdSwgMiwgXFxcImd1ZXN0IG1hY2hpbmUgY2hlY2sgJWx4XFxcIiwgbWNpLnZhbCk7XFxuMzE3OTpcXHRcXHRLVk1fRVZFTlQoMiwgXFxcImd1ZXN0IG1hY2hpbmUgY2hlY2sgJWx4XFxcIiwgbWNpLnZhbCk7XFxuMzE4MDpcXHRcXHRwcl9pbmZvKFxcXCJndWVzdCBtYWNoaW5lIGNoZWNrIHBpZCAlZDogJWx4XFxcIiwgY3VycmVudC1cXHUwMDNlcGlkLCBtY2kudmFsKTtcXG4zMTgxOlxcdFxcbjMxODI6XFx0XFx0aWYgKG1jaS5zcilcXG4zMTgzOlxcdFxcdFxcdGNyMTQgfD0gQ1IxNF9SRUNPVkVSWV9TVUJNQVNLO1xcbjMxODQ6XFx0XFx0aWYgKG1jaS5kZylcXG4zMTg1OlxcdFxcdFxcdGNyMTQgfD0gQ1IxNF9ERUdSQURBVElPTl9TVUJNQVNLO1xcbjMxODY6XFx0XFx0aWYgKG1jaS53KVxcbjMxODc6XFx0XFx0XFx0Y3IxNCB8PSBDUjE0X1dBUk5JTkdfU1VCTUFTSztcXG4zMTg4OlxcdFxcbjMxODk6XFx0XFx0bWNoayA9IG1jaS5jayA/IFxcdTAwMjZpbnRpLm1jaGsgOiBcXHUwMDI2aXJxLnUubWNoaztcXG4zMTkwOlxcdFxcdG1jaGstXFx1MDAzZWNyMTQgPSBjcjE0O1xcbjMxOTE6XFx0XFx0bWNoay1cXHUwMDNlbWNpYyA9IG1jY2tfaW5mby1cXHUwMDNlbWNpYztcXG4zMTkyOlxcdFxcdG1jaGstXFx1MDAzZWV4dF9kYW1hZ2VfY29kZSA9IG1jY2tfaW5mby1cXHUwMDNlZXh0X2RhbWFnZV9jb2RlO1xcbjMxOTM6XFx0XFx0bWNoay1cXHUwMDNlZmFpbGluZ19zdG9yYWdlX2FkZHJlc3MgPSBtY2NrX2luZm8tXFx1MDAzZWZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzO1xcbjMxOTQ6XFx0XFx0aWYgKG1jaS5jaykge1xcbjMxOTU6XFx0XFx0XFx0LyogSW5qZWN0IHRoZSBmbG9hdGluZyBtYWNoaW5lIGNoZWNrICovXFxuMzE5NjpcXHRcXHRcXHRpbnRpLnR5cGUgPSBLVk1fUzM5MF9NQ0hLO1xcbjMxOTc6XFx0XFx0XFx0cmMgPSBfX2luamVjdF92bSh2Y3B1LVxcdTAwM2Vrdm0sIFxcdTAwMjZpbnRpKTtcXG4zMTk4OlxcdFxcdH0gZWxzZSB7XFxuMzE5OTpcXHRcXHRcXHQvKiBJbmplY3QgdGhlIG1hY2hpbmUgY2hlY2sgdG8gc3BlY2lmaWVkIHZjcHUgKi9cXG4zMjAwOlxcdFxcdFxcdGlycS50eXBlID0gS1ZNX1MzOTBfTUNISztcXG4zMjAxOlxcdFxcdFxcdHJjID0ga3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdSwgXFx1MDAyNmlycSk7XFxuMzIwMjpcXHRcXHR9XFxuMzIwMzpcXHRcXHRXQVJOX09OX09OQ0UocmMpO1xcbjMyMDQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowOTozNi44NTIwMTI2NTlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk1NzU5NTcxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjozNTUwNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowOTo1Ni40Mjc5NzI4MzJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg4NyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg4NzpcXHRzdGF0aWMgaW50IF9faW5qZWN0X2Zsb2F0X21jaGsoc3RydWN0IGt2bSAqa3ZtLFxcbjE4ODg6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbjE4ODk6XFx0e1xcbjE4OTA6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2Zsb2F0X2ludGVycnVwdCAqZmkgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmZsb2F0X2ludDtcXG4xODkxOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuMTg5MjpcXHRcXG4xODkzOlxcdFxcdGt2bS1cXHUwMDNlc3RhdC5pbmplY3RfZmxvYXRfbWNoaysrO1xcbjE4OTQ6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuMTg5NTpcXHRcXHRmaS1cXHUwMDNlbWNoay5jcjE0IHw9IGludGktXFx1MDAzZW1jaGsuY3IxNCBcXHUwMDI2ICgxVUwgXFx1MDAzY1xcdTAwM2MgQ1JfUEVORElOR19TVUJDTEFTUyk7XFxuMTg5NjpcXHRcXHRmaS1cXHUwMDNlbWNoay5tY2ljIHw9IGludGktXFx1MDAzZW1jaGsubWNpYztcXG4xODk3OlxcdFxcdHNldF9iaXQoSVJRX1BFTkRfTUNIS19SRVAsIFxcdTAwMjZmaS1cXHUwMDNlcGVuZGluZ19pcnFzKTtcXG4xODk4OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmZpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuMTg5OTpcXHRcXHRrZnJlZShpbnRpKTtcXG4xOTAwOlxcdFxcdHJldHVybiAwO1xcbjE5MDE6XFx0fVxcbjE5MDI6XFx0XFxuMTkwMzpcXHRzdGF0aWMgaW50IF9faW5qZWN0X2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpKVxcbjE5MDQ6XFx0e1xcbjE5MDU6XFx0XFx0c3RydWN0IGt2bV9zMzkwX2dpc2FfaW50ZXJydXB0ICpnaSA9IFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guZ2lzYV9pbnQ7XFxuMTkwNjpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaTtcXG4xOTA3OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7XFxuMTkwODpcXHRcXHRpbnQgaXNjO1xcbjE5MDk6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4xOTEwOlxcdFxcbjE5MTE6XFx0XFx0a3ZtLVxcdTAwM2VzdGF0LmluamVjdF9pbysrO1xcbjE5MTI6XFx0XFx0aXNjID0gaW50X3dvcmRfdG9faXNjKGludGktXFx1MDAzZWlvLmlvX2ludF93b3JkKTtcXG4xOTEzOlxcdFxcbjE5MTQ6XFx0XFx0LypcXG4xOTE1OlxcdFxcdCAqIFdlIGRvIG5vdCB1c2UgdGhlIGxvY2sgY2hlY2tpbmcgdmFyaWFudCBhcyB0aGlzIGlzIGp1c3QgYVxcbjE5MTY6XFx0XFx0ICogcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCB3ZSBkbyBub3QgaG9sZCB0aGUgbG9jayBoZXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMzowOTo1Ni40MjgzNDQ1MzJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMTQ5MjIxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSW50ZXJydXB0IEluamVjdGlvbiBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIGZsYWdnZWQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaW4gYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgIGFuZCB0aGUgc3Vic2VxdWVudCBga2ZyZWVgIG9uIGEgc3RhY2stYWxsb2NhdGVkIHZhcmlhYmxlLiBJIGltbWVkaWF0ZWx5IGR1ZyBpbnRvIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrYCwgY29uZmlybWVkIHRoYXQgYGludGlgICppcyogaW5kZWVkIGEgc3RhY2sgdmFyaWFibGUgYW5kIHRoYXQgYF9faW5qZWN0X2Zsb2F0X21jaGtgICpkb2VzKiBjYWxsIGBrZnJlZShpbnRpKWAuIE15IGFsYXJtIGJlbGxzIHdlcmUgcmluZ2luZywgc2NyZWFtaW5nIFwiaW52YWxpZCBmcmVlIVwiLCBidXQgdGhlbiBJIHF1aWNrbHkgcmVtZW1iZXJlZCBLQVNBTiBleGlzdHMhIEFuZCBJIGNvbmZpcm1lZCBLQVNBTiB3aWxsIGNhdGNoIHRoYXQuICBTbywgbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LlxuXG5UaGVuLCBJIGxvb2tlZCBjbG9zZWx5IGF0IHRoZSBwYXRjaCBpdHNlbGYgdG8gc2VlIHdoYXQgaXQncyBjaGFuZ2luZywgYW5kIHRoYXQgaW52b2x2ZWQgZ29pbmcgdGhyb3VnaCBhbGwgY2FsbHMgdG8gYF9faW5qZWN0X3ZtYCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSB1bmluaXRpYWxpemVkIHJlYWRzIGludHJvZHVjZWQgKmJ5IHRoZSBwYXRjaCBpdHNlbGYqLiAgVGhlIHBhdGNoIHByaW1hcmlseSBmb2N1c2VzIG9uIGltcHJvdmluZyBmbG9hdGluZyBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uIHVzaW5nIGEgbmV3IGBkaXN0cmlidXRlX2Zsb2F0X2lycXMoKWAgZnVuY3Rpb24sIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYC4gSSBhbmFseXplZCBhbGwgdGhlIGRhdGEgYmVpbmcgcmVhZCBhbmQgbW9kaWZpZWQgYWNyb3NzIHRoZXNlIGZ1bmN0aW9uczpcblxuKiAgIFRoZSBwYXRjaCdzIGludHJvZHVjdGlvbiBvZiBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzYCBkZXBlbmRzIG9uIGBrdm0tXHUwMDNlYXJjaC5pZGxlX21hc2tgLCBidXQgdGhhdCBpcyBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgZnVuY3Rpb24ganVzdCByZWFkcyBzdGF0ZS5cbiogICBUaGUgbW9kaWZpY2F0aW9uIHRvIGBfX2Zsb2F0aW5nX2lycV9raWNrYCBpbnZvbHZlZCB0aGUgcGFyYW1ldGVyIGNoYW5nZSB0byB0YWtlIGBpbnRpYCwgYW5kIEkgbmVlZGVkIHRvIHZlcmlmeSBhbGwgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLlxuKiAgIEkgY29uZmlybWVkIHRoYXQgaW4gYWxsIG90aGVyIHBhdGhzLCBgaW50aWAgaXMgYWxsb2NhdGVkIGJ5IGBremFsbG9jX29iamAsIGFuZCB0aGF0IG1lYW5zIGFsbCB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkLlxuKiAgIEluIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrYCwgYGludGlgIGlzIGEgc3RhY2sgdmFyaWFibGUsIGJ1dCBpdCdzICpwYXJ0aWFsbHkqIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIGBfX2luamVjdF92bWAuIFRoZSBjcml0aWNhbCBiaXQgaGVyZSBpcyB0aGUgYHR5cGVgIGZpZWxkLCB3aGljaCBJIGNvbmZpcm1lZCBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBjYWxsaW5nIGFueXRoaW5nIHRoYXQgd291bGQgcmVhZCB0aGUgdmFyaWFibGUuXG5cblNpbmNlIEkgYW0gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCwgSSBrbm93IGhvdyB0aGUgS1ZNIHMzOTAgYXJjaGl0ZWN0dXJlIHdvcmtzLiAgVGhlIGRhdGEgZGVwZW5kZW5jaWVzIGFyZSBjbGVhciwgYW5kIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgYGludGlgIHZhcmlhYmxlIGFuZCBpdHMgZmllbGRzIHRoYXQgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoaXMgcGF0Y2ggYXJlIGFsbCBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBXaGlsZSB0aGUgYGtmcmVlYCBvbiB0aGUgc3RhY2sgdmFyaWFibGUgaW4gYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2tgIGlzIHN0aWxsIGEgYnVnLCBpdCBpcyBhbiAqZXhpc3RpbmcqIGJ1ZyB0aGF0IGlzICpub3QqIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gIEtBU0FOIHdpbGwgY2F0Y2ggdGhpcy5cblxuU28sIEkgY2FuIGNvbmZpZGVudGx5IGNvbmNsdWRlIHRoYXQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIHRoaXMgcGF0Y2guICBUaGUgZXhpc3RpbmcgS0FTQU4gY2hlY2tzIGFyZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY2OSwiT3V0cHV0VG9rZW5zIjo0MDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTM6MTA6MjkuNTQzMjcwOTI2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyB0byBkaXN0cmlidXRlIGZsb2F0aW5nIGludGVycnVwdHMgdG8gaWRsZSBWQ1BVcy4gSXQgaW50cm9kdWNlcyBgZGlzdHJpYnV0ZV9mbG9hdF9pcnFzKClgIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGt2bS1cXHUwMDNlYXJjaC5pZGxlX21hc2tgIGFuZCB3YWtlcyB1cCBWQ1BVcyB0aGF0IGNhbiBkZWxpdmVyIHRoZSBwZW5kaW5nIGludGVycnVwdHMuIEl0IGFsc28gbW9kaWZpZXMgYF9fZmxvYXRpbmdfaXJxX2tpY2soKWAgdG8gdGFrZSBhIGBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0X2luZm8gKmludGlgIGluc3RlYWQgb2YgYSBgdTY0IHR5cGVgLCBhbmQgdXNlcyBgaW50aV90b19pcnFfcGVuZF9tYXNrKClgIHRvIGRldGVybWluZSB0aGUgcGVuZGluZyBJUlEgbWFzay5cXG5cXG5BbGwgZmllbGRzIGFjY2Vzc2VkIGJ5IHRoZSBuZXcgbG9naWMgKHN1Y2ggYXMgYGludGktXFx1MDAzZXR5cGVgIGFuZCBgaW50aS1cXHUwMDNlaW8uaW9faW50X3dvcmRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBpbnRpYCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgdXNpbmcgYGt6YWxsb2NgICh2aWEgYGt6YWxsb2Nfb2JqKClgKSBpbiBwYXRocyBsaWtlIGBrdm1fYXJjaF92bV9pb2N0bCgpYCwgYGt2bV9zMzkwX2luamVjdF9haXJxKClgLCBhbmQgYF9fa3ZtX2luamVjdF9wZmF1bHRfdG9rZW4oKWAsIGFuZCB0aGVuIHBvcHVsYXRlZCB3aXRoIGZ1bGx5IGluaXRpYWxpemVkIGRhdGEgZnJvbSB1c2VyIHNwYWNlIG9yIGtlcm5lbCBsb2dpYy4gSW4gdGhlIGNhc2Ugb2YgYGt2bV9zMzkwX3JlaW5qZWN0X21hY2hpbmVfY2hlY2soKWAsIHdoZXJlIGBpbnRpYCBpcyBhIHN0YWNrIHZhcmlhYmxlLCBvbmx5IHRoZSBgdHlwZWAgZmllbGQgaXMgcmVhZCBieSB0aGUgbmV3IGxvZ2ljLCBhbmQgaXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgS1ZNX1MzOTBfTUNIS2AuXFxuXFxuVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gbG9naWMgdG8gZGlzdHJpYnV0ZSBmbG9hdGluZyBpbnRlcnJ1cHRzIHRvIGlkbGUgVkNQVXMuIEl0IGludHJvZHVjZXMgYGRpc3RyaWJ1dGVfZmxvYXRfaXJxcygpYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBrdm0tXFx1MDAzZWFyY2guaWRsZV9tYXNrYCBhbmQgd2FrZXMgdXAgVkNQVXMgdGhhdCBjYW4gZGVsaXZlciB0aGUgcGVuZGluZyBpbnRlcnJ1cHRzLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2Zsb2F0aW5nX2lycV9raWNrKClgIHRvIHRha2UgYSBgc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpYCBpbnN0ZWFkIG9mIGEgYHU2NCB0eXBlYCwgYW5kIHVzZXMgYGludGlfdG9faXJxX3BlbmRfbWFzaygpYCB0byBkZXRlcm1pbmUgdGhlIHBlbmRpbmcgSVJRIG1hc2suXFxuXFxuQWxsIGZpZWxkcyBhY2Nlc3NlZCBieSB0aGUgbmV3IGxvZ2ljIChzdWNoIGFzIGBpbnRpLVxcdTAwM2V0eXBlYCBhbmQgYGludGktXFx1MDAzZWlvLmlvX2ludF93b3JkYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgaW50aWAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IHVzaW5nIGBremFsbG9jYCAodmlhIGBremFsbG9jX29iaigpYCkgaW4gcGF0aHMgbGlrZSBga3ZtX2FyY2hfdm1faW9jdGwoKWAsIGBrdm1fczM5MF9pbmplY3RfYWlycSgpYCwgYW5kIGBfX2t2bV9pbmplY3RfcGZhdWx0X3Rva2VuKClgLCBhbmQgdGhlbiBwb3B1bGF0ZWQgd2l0aCBmdWxseSBpbml0aWFsaXplZCBkYXRhIGZyb20gdXNlciBzcGFjZSBvciBrZXJuZWwgbG9naWMuIEluIHRoZSBjYXNlIG9mIGBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKClgLCB3aGVyZSBgaW50aWAgaXMgYSBzdGFjayB2YXJpYWJsZSwgb25seSB0aGUgYHR5cGVgIGZpZWxkIGlzIHJlYWQgYnkgdGhlIG5ldyBsb2dpYywgYW5kIGl0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEtWTV9TMzkwX01DSEtgLlxcblxcblRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYW55IG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowzxn9c[1] Phase: Succeeded StartedAt: 2026-08-17 13:10:41 +0000 UTC FinishedAt: 2026-08-17 13:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 13:10:41 +0000 UTC FinishedAt: 2026-08-17 13:10:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2] Phase: Succeeded StartedAt: 2026-08-17 13:10:41 +0000 UTC FinishedAt: 2026-08-17 13:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 13:10:41 +0000 UTC FinishedAt: 2026-08-17 13:52:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:10:41 +0000 UTC FinishedAt: 2026-08-17 13:10:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:10:41 +0000 UTC FinishedAt: 2026-08-17 13:10:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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-workflowzxn9c/series-workflowzxn9c-convert-artifact-1407602699/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:10:51 +0000 UTC FinishedAt: 2026-08-17 13:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:10:51 +0000 UTC FinishedAt: 2026-08-17 13:29:38 +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:*1652b3a8-3949-410b-a5a2-8479cbcd9043,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-workflowzxn9c/series-workflowzxn9c-convert-artifact-1407602699/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": "48f16d1e-4adb-4c4d-bd3c-db36cea3c6b0", "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-workflowzxn9c/series-workflowzxn9c-build-action-3911863049/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:10:51 +0000 UTC FinishedAt: 2026-08-17 13:29:28 +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:*1652b3a8-3949-410b-a5a2-8479cbcd9043,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-workflowzxn9c/series-workflowzxn9c-convert-artifact-1407602699/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": "48f16d1e-4adb-4c4d-bd3c-db36cea3c6b0", "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-workflowzxn9c/series-workflowzxn9c-build-action-3911863049/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:29:38 +0000 UTC FinishedAt: 2026-08-17 13:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:29:38 +0000 UTC FinishedAt: 2026-08-17 13:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:29:38 +0000 UTC FinishedAt: 2026-08-17 13:29:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:29:38 +0000 UTC FinishedAt: 2026-08-17 13:29:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-workflowzxn9c/series-workflowzxn9c-convert-artifact-2866395490/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:29:48 +0000 UTC FinishedAt: 2026-08-17 13:31:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:29:48 +0000 UTC FinishedAt: 2026-08-17 13:31:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*48f16d1e-4adb-4c4d-bd3c-db36cea3c6b0,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-workflowzxn9c/series-workflowzxn9c-build-action-3911863049/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-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:31:55 +0000 UTC FinishedAt: 2026-08-17 13:31:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:31:55 +0000 UTC FinishedAt: 2026-08-17 13:31:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:31:55 +0000 UTC FinishedAt: 2026-08-17 13:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:31:55 +0000 UTC FinishedAt: 2026-08-17 13:48:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1652b3a8-3949-410b-a5a2-8479cbcd9043,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-workflowzxn9c/series-workflowzxn9c-convert-artifact-2866395490/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": "b731fcd5-15fb-4951-aef7-b4856bcb0c23", "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-workflowzxn9c/series-workflowzxn9c-build-action-182199734/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:31:55 +0000 UTC FinishedAt: 2026-08-17 13:48:19 +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:*1652b3a8-3949-410b-a5a2-8479cbcd9043,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-workflowzxn9c/series-workflowzxn9c-convert-artifact-2866395490/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": "b731fcd5-15fb-4951-aef7-b4856bcb0c23", "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-workflowzxn9c/series-workflowzxn9c-build-action-182199734/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:48:29 +0000 UTC FinishedAt: 2026-08-17 13:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:48:29 +0000 UTC FinishedAt: 2026-08-17 13:48:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:48:29 +0000 UTC FinishedAt: 2026-08-17 13:50:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:48:29 +0000 UTC FinishedAt: 2026-08-17 13:50:26 +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:*b731fcd5-15fb-4951-aef7-b4856bcb0c23,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-workflowzxn9c/series-workflowzxn9c-build-action-182199734/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-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:50:36 +0000 UTC FinishedAt: 2026-08-17 13:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:50:36 +0000 UTC FinishedAt: 2026-08-17 13:52:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"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:*48f16d1e-4adb-4c4d-bd3c-db36cea3c6b0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b731fcd5-15fb-4951-aef7-b4856bcb0c23,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-workflowzxn9c/series-workflowzxn9c-build-action-3911863049/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-workflowzxn9c/series-workflowzxn9c-build-action-182199734/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:50:36 +0000 UTC FinishedAt: 2026-08-17 13:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:50:36 +0000 UTC FinishedAt: 2026-08-17 13:50:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"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-workflowzxn9c/series-workflowzxn9c-convert-artifact-2378927767/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:50:36 +0000 UTC FinishedAt: 2026-08-17 13:50:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:50:36 +0000 UTC FinishedAt: 2026-08-17 13:50:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:50:36 +0000 UTC FinishedAt: 2026-08-17 13:50:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:50:46 +0000 UTC FinishedAt: 2026-08-17 13:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzxn9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["distribute_float_irqs","kvm_s390_inject_vm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"fd0a1b9e-95f8-43bf-9b6a-0a69f33f66b3","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-08-17 13:50:46 +0000 UTC FinishedAt: 2026-08-17 13:52:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*48f16d1e-4adb-4c4d-bd3c-db36cea3c6b0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b731fcd5-15fb-4951-aef7-b4856bcb0c23,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-workflowzxn9c/series-workflowzxn9c-build-action-3911863049/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-workflowzxn9c/series-workflowzxn9c-build-action-182199734/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-workflowzxn9c/series-workflowzxn9c-convert-artifact-2378927767/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,}