Name: series-workflowzbpb8 Phase: Succeeded StartedAt: 2026-09-09 20:22:37 +0000 UTC FinishedAt: 2026-09-10 00:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[0] Phase: Succeeded StartedAt: 2026-09-09 20:22:37 +0000 UTC FinishedAt: 2026-09-09 21:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 20:22:37 +0000 UTC FinishedAt: 2026-09-09 21:13:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KERNFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KERNFS" ], "series_id": "571c4630-8faa-4b81-a463-2ecc63efb449" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "sget_fc", "put_super", "deactivate_locked_super", "generic_shutdown_super", "kill_anon_super", "kernfs_kill_sb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tFUk5GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NnZXRfZmMmIzM0OywKICAgICYjMzQ7cHV0X3N1cGVyJiMzNDssCiAgICAmIzM0O2RlYWN0aXZhdGVfbG9ja2VkX3N1cGVyJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfc2h1dGRvd25fc3VwZXImIzM0OywKICAgICYjMzQ7a2lsbF9hbm9uX3N1cGVyJiMzNDssCiAgICAmIzM0O2tlcm5mc19raWxsX3NiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpbnN0YW5jZXMgKGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKSBhY3Jvc3MgbW91bnQgYW5kIHNodXRkb3duIHBhdGhzIChzZ2V0X2ZjLCBraWxsX3N1cGVyX25vdGlmeSwgcHV0X3N1cGVyKS4gSXQgZGVmZXJzIHVubGlua2luZyBzYi1cdTAwM2VzX2luc3RhbmNlcyBhbmQgcHV0X2ZpbGVzeXN0ZW0gdG8gcHV0X3N1cGVyLCB3aGlsZSBob2xkaW5nIHNiX2xvY2sgd2hlbiBzZXR0aW5nIFNCX0RFQUQgc28gY29uY3VycmVudCBzZ2V0X2ZjKCkgY2FsbHMgc2tpcCBkeWluZyBzdXBlcmJsb2Nrcy5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIChzYl9sb2NrKSwgbGlzdCBtYW5hZ2VtZW50LCBhbmQgb2JqZWN0IGxpZmVjeWNsZSBzeW5jaHJvbml6YXRpb24uIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0cmFja2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIHBhcnNpbmcsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29weWluZyBpcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCBhY3Jvc3MgbW91bnQgYW5kIHVubW91bnQgcGF0aHMgKGluIGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKS4gSXQgZGVmZXJzIHVubGlua2luZyBzdXBlcmJsb2NrcyBmcm9tIGZzX3N1cGVycyB1bnRpbCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZSBkcm9wcyBpbiBwdXRfc3VwZXIoKSwgc2V0cyBTQl9ERUFEIHVuZGVyIHNiX2xvY2sgaW4ga2lsbF9zdXBlcl9ub3RpZnkoKSwgYW5kIHNraXBzIFNCX0RFQUQgc3VwZXJibG9ja3MgZHVyaW5nIHNnZXRfZmMoKSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29uY3VycmVuY3kgaW52YXJpYW50cyBiZXR3ZWVuIGNvbmN1cnJlbnQgbW91bnQgKHNnZXRfZmMpIGFuZCBzaHV0ZG93bi9kZWFjdGl2YXRpb24gcm91dGluZXMsIG1ha2luZyB0aGlzIGNvcmUgc3Vic3lzdGVtIGNvZGUgd2VsbCB3b3J0aCBmdXp6aW5nIGZvciBzeW5jaHJvbml6YXRpb24gYW5kIHJlZmVyZW5jZSBjb3VudGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM5YzdmMDMzZTE3NDNlMzNlYmRlYjhiODk2ZGIyN2JhZjU0ZDcwYThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDIxOjEyOjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2tlcm5mcy9tb3VudC5jIGIvZnMva2VybmZzL21vdW50LmNcbmluZGV4IGYxODNhOTY3NzhiOWEuLmE1NzM5OTAyMWM4YjAgMTAwNjQ0XG4tLS0gYS9mcy9rZXJuZnMvbW91bnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMva2VybmZzL21vdW50LmNcbkBAIC00MzQsOCAmIzQzOzQzNCw4IEBAIHZvaWQga2VybmZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHVwX3dyaXRlKFx1MDAyNnJvb3QtXHUwMDNla2VybmZzX3N1cGVyc19yd3NlbSk7XG4gXG4gXHQvKlxuLVx0ICogUmVtb3ZlIHRoZSBzdXBlcmJsb2NrIGZyb20gZnNfc3VwZXJzL3NfaW5zdGFuY2VzXG4tXHQgKiBzbyB3ZSBjYW4mIzM5O3QgZmluZCBpdCwgYmVmb3JlIGZyZWVpbmcga2VybmZzX3N1cGVyX2luZm8uXG4mIzQzO1x0ICogTWFyayB0aGUgc3VwZXJibG9jayBkZWFkIHNvIHNnZXRfZmMoKSBjYW4mIzM5O3QgZmluZCBpdCxcbiYjNDM7XHQgKiBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cbiBcdCAqL1xuIFx0a2lsbF9hbm9uX3N1cGVyKHNiKTtcbiBcdGtmcmVlKGluZm8pO1xuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCAwNWU0NDMxNzMwMzg3Li4wZjllMTNlZWRiNGZiIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuY1xuQEAgLTQzMywxNSAmIzQzOzQzMywxOSBAQCBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxuIHZvaWQgcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbiB7XG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnMtXHUwMDNlc19wYXNzaXZlKSkge1xuJiM0MztcdFx0c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUgPSBzLVx1MDAzZXNfdHlwZTtcbiBcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnMtXHUwMDNlc19saXN0KTtcbiYjNDM7XHRcdGhsaXN0X2RlbF9pbml0KFx1MDAyNnMtXHUwMDNlc19pbnN0YW5jZXMpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbiBcbiBcdFx0V0FSTl9PTihzLVx1MDAzZXNfZGVudHJ5X2xydS5ub2RlKTtcbiBcdFx0V0FSTl9PTihzLVx1MDAzZXNfaW5vZGVfbHJ1Lm5vZGUpO1xuIFx0XHRXQVJOX09OKHMtXHUwMDNlc19tb3VudHMpO1xuIFx0XHRjYWxsX3JjdShcdTAwMjZzLVx1MDAzZXJjdSwgZGVzdHJveV9zdXBlcl9yY3UpO1xuJiM0MztcdFx0LyogVGhlIHVubGluayBhYm92ZSBtYXkgdG91Y2ggdHlwZS1cdTAwM2Vmc19zdXBlcnMsIHNvIGRyb3AgaXQgbGFzdC4gKi9cbiYjNDM7XHRcdHB1dF9maWxlc3lzdGVtKHR5cGUpO1xuIFx0fVxuIH1cbiBcbkBAIC01NTgsMTcgJiM0Mzs1NjIsNiBAQCBzdGF0aWMgdm9pZCBraWxsX3N1cGVyX25vdGlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0aWYgKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IFNCX0RFQUQpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qXG4tXHQgKiBSZW1vdmUgaXQgZnJvbSBAZnNfc3VwZXJzIHNvIGl0IGlzbiYjMzk7dCBmb3VuZCBieSBuZXdcbi1cdCAqIHNnZXRfZmMoKSB3YWxrZXJzIGFueW1vcmUuIEFueSBjb25jdXJyZW50IG1vdW50ZXIgc3RpbGxcbi1cdCAqIG1hbmFnaW5nIHRvIGdyYWIgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIGlzIGd1YXJhbnRlZWQgdG9cbi1cdCAqIGFscmVhZHkgc2VlIFNCX0RZSU5HIGFuZCB3aWxsIHdhaXQgdW50aWwgd2Ugbm90aWZ5IHRoZW0gYWJvdXRcbi1cdCAqIFNCX0RFQUQuXG4tXHQgKi9cbi1cdHNwaW5fbG9jayhcdTAwMjZzYl9sb2NrKTtcbi1cdGhsaXN0X2RlbF9pbml0KFx1MDAyNnNiLVx1MDAzZXNfaW5zdGFuY2VzKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuLVxuIFx0LyogRHJvcCBzZ2V0X2ZjKCkmIzM5O3MgY2xhaW07IGEgbmV2ZXItcmVnaXN0ZXJlZCBlbnRyeSBzdGF5cyB3aXRoIHRoZSBzYi4gKi9cbiBcdGlmIChzYi1cdTAwM2VzX3N1cGVyX2Rldi1cdTAwM2VzZF9kZXYpIHtcbiBcdFx0c3VwZXJfZGV2X3B1dChzYi1cdTAwM2VzX3N1cGVyX2Rldik7XG5AQCAtNTc3LDExICYjNDM7NTcwLDE1IEBAIHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXG4gXHQvKlxuIFx0ICogTGV0IGNvbmN1cnJlbnQgbW91bnRzIGtub3cgdGhhdCB0aGlzIHRoaW5nIGlzIHJlYWxseSBkZWFkLlxuLVx0ICogV2UgZG9uJiMzOTt0IG5lZWQgQHNiLVx1MDAzZXNfdW1vdW50IGhlcmUgYXMgZXZlcnkgY29uY3VycmVudCBjYWxsZXJcbi1cdCAqIHdpbGwgc2VlIFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZCB0aGUgc3VwZXJibG9jayBvciB3YWl0XG4tXHQgKiBmb3IgU0JfREVBRC5cbiYjNDM7XHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXG4mIzQzO1x0ICogc2JfbG9jaywgc28gc2V0IGl0IHVuZGVyIHNiX2xvY2s6IG9uY2Ugd2UgcmV0dXJuIG5vIHRlc3QoKVxuJiM0MztcdCAqIHJ1bnMgb24gdGhpcyBzdXBlcmJsb2NrIGFueW1vcmUgYW5kIG5vbmUgd2lsbCBzdGFydC4gRXZlcnlvbmVcbiYjNDM7XHQgKiBlbHNlIGFscmVhZHkgc2F3IFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZGVkIHRoZSBzdXBlcmJsb2NrXG4mIzQzO1x0ICogb3Igd2FpdHMgZm9yIFNCX0RFQUQuXG4gXHQgKi9cbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4gXHRzdXBlcl93YWtlKHNiLCBTQl9ERUFEKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNjA4LDcgJiM0Mzs2MDUsNiBAQCB2b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbiBcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZzLVx1MDAzZXNfZGVudHJ5X2xydSk7XG4gXHRcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2cy1cdTAwM2VzX2lub2RlX2xydSk7XG4gXG4tXHRcdHB1dF9maWxlc3lzdGVtKGZzKTtcbiBcdFx0cHV0X3N1cGVyKHMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3VwZXJfdW5sb2NrX2V4Y2wocyk7XG5AQCAtNzk1LDEyICYjNDM7NzkxLDEyIEBAIHZvaWQgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0fVxuIFx0LypcbiBcdCAqIEJyb2FkY2FzdCB0byBldmVyeW9uZSB0aGF0IGdyYWJiZWQgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHRvIHRoaXNcbi1cdCAqIHN1cGVyYmxvY2sgYmVmb3JlIHdlIHJlbW92ZWQgaXQgZnJvbSBAZnNfc3VwZXJzIHRoYXQgdGhlIHN1cGVyYmxvY2tcbi1cdCAqIGlzIGR5aW5nLiBFdmVyeSB3YWxrZXIgb2YgQGZzX3N1cGVycyBvdXRzaWRlIG9mIHNnZXRfZmMoKSB3aWxsIG5vd1xuLVx0ICogZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzIGRlYWQuXG4mIzQzO1x0ICogc3VwZXJibG9jayB0aGF0IGl0IGlzIGR5aW5nLiBFdmVyeSB3YWxrZXIgb2YgQGZzX3N1cGVycyBvdXRzaWRlXG4mIzQzO1x0ICogb2Ygc2dldF9mYygpIHdpbGwgbm93IGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhc1xuJiM0MztcdCAqIGRlYWQuXG4gXHQgKlxuLVx0ICogV2UgbGVhdmUgdGhlIHN1cGVyYmxvY2sgb24gQGZzX3N1cGVycyBzbyBpdCBjYW4gYmUgZm91bmQgYnlcbi1cdCAqIHNnZXRfZmMoKSB1bnRpbCB3ZSBwYXNzZWQgc2ItXHUwMDNla2lsbF9zYigpLlxuJiM0MztcdCAqIHNnZXRfZmMoKSBrZWVwcyBmaW5kaW5nIHRoZSBzdXBlcmJsb2NrIHVudGlsIFNCX0RFQUQgaXMgc2V0LCBzb1xuJiM0MztcdCAqIGEgY29uY3VycmVudCBtb3VudGVyIHdhaXRzIHVudGlsIHdlIHBhc3NlZCBzYi1cdTAwM2VraWxsX3NiKCkuXG4gXHQgKi9cbiBcdHN1cGVyX3dha2Uoc2IsIFNCX0RZSU5HKTtcbiBcdHN1cGVyX3VubG9ja19leGNsKHNiKTtcbkBAIC04NzksNiAmIzQzOzg3NSw5IEBAIHN0cnVjdCBzdXBlcl9ibG9jayAqc2dldF9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4gXHRpZiAodGVzdCkge1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShvbGQsIFx1MDAyNmZjLVx1MDAzZWZzX3R5cGUtXHUwMDNlZnNfc3VwZXJzLCBzX2luc3RhbmNlcykge1xuJiM0MztcdFx0XHQvKiBPbmx5IHVubGlua2VkIGF0IHRoZSBsYXN0IHBhc3NpdmUgcmVmZXJlbmNlLiAqL1xuJiM0MztcdFx0XHRpZiAoc3VwZXJfZmxhZ3Mob2xkLCBTQl9ERUFEKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRpZiAodGVzdChvbGQsIGZjKSlcbiBcdFx0XHRcdGdvdG8gc2hhcmVfZXh0YW50X3NiO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S0VSTkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2dldF9mYyYjMzQ7LAogICAgJiMzNDtwdXRfc3VwZXImIzM0OywKICAgICYjMzQ7ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXImIzM0OywKICAgICYjMzQ7Z2VuZXJpY19zaHV0ZG93bl9zdXBlciYjMzQ7LAogICAgJiMzNDtraWxsX2Fub25fc3VwZXImIzM0OywKICAgICYjMzQ7a2VybmZzX2tpbGxfc2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYWNyb3NzIG1vdW50IGFuZCB1bm1vdW50IHBhdGhzIChpbiBmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykuIEl0IGRlZmVycyB1bmxpbmtpbmcgc3VwZXJibG9ja3MgZnJvbSBmc19zdXBlcnMgdW50aWwgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UgZHJvcHMgaW4gcHV0X3N1cGVyKCksIHNldHMgU0JfREVBRCB1bmRlciBzYl9sb2NrIGluIGtpbGxfc3VwZXJfbm90aWZ5KCksIGFuZCBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGR1cmluZyBzZ2V0X2ZjKCkgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYmV0d2VlbiBjb25jdXJyZW50IG1vdW50IChzZ2V0X2ZjKSBhbmQgc2h1dGRvd24vZGVhY3RpdmF0aW9uIHJvdXRpbmVzLCBtYWtpbmcgdGhpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIHdlbGwgd29ydGggZnV6emluZyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjOWM3ZjAzM2UxNzQzZTMzZWJkZWI4Yjg5NmRiMjdiYWY1NGQ3MGE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMToxMjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2tlcm5mcy9tb3VudC5jIGIvZnMva2VybmZzL21vdW50LmMKaW5kZXggZjE4M2E5Njc3OGI5YS4uYTU3Mzk5MDIxYzhiMCAxMDA2NDQKLS0tIGEvZnMva2VybmZzL21vdW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMva2VybmZzL21vdW50LmMKQEAgLTQzNCw4ICYjNDM7NDM0LDggQEAgdm9pZCBrZXJuZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCXVwX3dyaXRlKCZhbXA7cm9vdC0mZ3Q7a2VybmZzX3N1cGVyc19yd3NlbSk7CiAKIAkvKgotCSAqIFJlbW92ZSB0aGUgc3VwZXJibG9jayBmcm9tIGZzX3N1cGVycy9zX2luc3RhbmNlcwotCSAqIHNvIHdlIGNhbiYjMzk7dCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby4KJiM0MzsJICogTWFyayB0aGUgc3VwZXJibG9jayBkZWFkIHNvIHNnZXRfZmMoKSBjYW4mIzM5O3QgZmluZCBpdCwKJiM0MzsJICogYmVmb3JlIGZyZWVpbmcga2VybmZzX3N1cGVyX2luZm8uCiAJICovCiAJa2lsbF9hbm9uX3N1cGVyKHNiKTsKIAlrZnJlZShpbmZvKTsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDA1ZTQ0MzE3MzAzODcuLjBmOWUxM2VlZGI0ZmIgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtNDMzLDE1ICYjNDM7NDMzLDE5IEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCiB2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiB7CiAJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3MtJmd0O3NfcGFzc2l2ZSkpIHsKJiM0MzsJCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlID0gcy0mZ3Q7c190eXBlOwogCiAJCXNwaW5fbG9jaygmYW1wO3NiX2xvY2spOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cy0mZ3Q7c19saXN0KTsKJiM0MzsJCWhsaXN0X2RlbF9pbml0KCZhbXA7cy0mZ3Q7c19pbnN0YW5jZXMpOwogCQlzcGluX3VubG9jaygmYW1wO3NiX2xvY2spOwogCiAJCVdBUk5fT04ocy0mZ3Q7c19kZW50cnlfbHJ1Lm5vZGUpOwogCQlXQVJOX09OKHMtJmd0O3NfaW5vZGVfbHJ1Lm5vZGUpOwogCQlXQVJOX09OKHMtJmd0O3NfbW91bnRzKTsKIAkJY2FsbF9yY3UoJmFtcDtzLSZndDtyY3UsIGRlc3Ryb3lfc3VwZXJfcmN1KTsKJiM0MzsJCS8qIFRoZSB1bmxpbmsgYWJvdmUgbWF5IHRvdWNoIHR5cGUtJmd0O2ZzX3N1cGVycywgc28gZHJvcCBpdCBsYXN0LiAqLwomIzQzOwkJcHV0X2ZpbGVzeXN0ZW0odHlwZSk7CiAJfQogfQogCkBAIC01NTgsMTcgJiM0Mzs1NjIsNiBAQCBzdGF0aWMgdm9pZCBraWxsX3N1cGVyX25vdGlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCWlmIChzYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9ERUFEKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIFJlbW92ZSBpdCBmcm9tIEBmc19zdXBlcnMgc28gaXQgaXNuJiMzOTt0IGZvdW5kIGJ5IG5ldwotCSAqIHNnZXRfZmMoKSB3YWxrZXJzIGFueW1vcmUuIEFueSBjb25jdXJyZW50IG1vdW50ZXIgc3RpbGwKLQkgKiBtYW5hZ2luZyB0byBncmFiIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyBndWFyYW50ZWVkIHRvCi0JICogYWxyZWFkeSBzZWUgU0JfRFlJTkcgYW5kIHdpbGwgd2FpdCB1bnRpbCB3ZSBub3RpZnkgdGhlbSBhYm91dAotCSAqIFNCX0RFQUQuCi0JICovCi0Jc3Bpbl9sb2NrKCZhbXA7c2JfbG9jayk7Ci0JaGxpc3RfZGVsX2luaXQoJmFtcDtzYi0mZ3Q7c19pbnN0YW5jZXMpOwotCXNwaW5fdW5sb2NrKCZhbXA7c2JfbG9jayk7Ci0KIAkvKiBEcm9wIHNnZXRfZmMoKSYjMzk7cyBjbGFpbTsgYSBuZXZlci1yZWdpc3RlcmVkIGVudHJ5IHN0YXlzIHdpdGggdGhlIHNiLiAqLwogCWlmIChzYi0mZ3Q7c19zdXBlcl9kZXYtJmd0O3NkX2RldikgewogCQlzdXBlcl9kZXZfcHV0KHNiLSZndDtzX3N1cGVyX2Rldik7CkBAIC01NzcsMTEgJiM0Mzs1NzAsMTUgQEAgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAogCS8qCiAJICogTGV0IGNvbmN1cnJlbnQgbW91bnRzIGtub3cgdGhhdCB0aGlzIHRoaW5nIGlzIHJlYWxseSBkZWFkLgotCSAqIFdlIGRvbiYjMzk7dCBuZWVkIEBzYi0mZ3Q7c191bW91bnQgaGVyZSBhcyBldmVyeSBjb25jdXJyZW50IGNhbGxlcgotCSAqIHdpbGwgc2VlIFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZCB0aGUgc3VwZXJibG9jayBvciB3YWl0Ci0JICogZm9yIFNCX0RFQUQuCiYjNDM7CSAqIHNnZXRfZmMoKSBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGFuZCBjYWxscyB0ZXN0KCkgdW5kZXIKJiM0MzsJICogc2JfbG9jaywgc28gc2V0IGl0IHVuZGVyIHNiX2xvY2s6IG9uY2Ugd2UgcmV0dXJuIG5vIHRlc3QoKQomIzQzOwkgKiBydW5zIG9uIHRoaXMgc3VwZXJibG9jayBhbnltb3JlIGFuZCBub25lIHdpbGwgc3RhcnQuIEV2ZXJ5b25lCiYjNDM7CSAqIGVsc2UgYWxyZWFkeSBzYXcgU0JfRFlJTkcgYW5kIGVpdGhlciBkaXNjYXJkZWQgdGhlIHN1cGVyYmxvY2sKJiM0MzsJICogb3Igd2FpdHMgZm9yIFNCX0RFQUQuCiAJICovCiYjNDM7CXNwaW5fbG9jaygmYW1wO3NiX2xvY2spOwogCXN1cGVyX3dha2Uoc2IsIFNCX0RFQUQpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3NiX2xvY2spOwogfQogCiAvKioKQEAgLTYwOCw3ICYjNDM7NjA1LDYgQEAgdm9pZCBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiAJCWxpc3RfbHJ1X2Rlc3Ryb3koJmFtcDtzLSZndDtzX2RlbnRyeV9scnUpOwogCQlsaXN0X2xydV9kZXN0cm95KCZhbXA7cy0mZ3Q7c19pbm9kZV9scnUpOwogCi0JCXB1dF9maWxlc3lzdGVtKGZzKTsKIAkJcHV0X3N1cGVyKHMpOwogCX0gZWxzZSB7CiAJCXN1cGVyX3VubG9ja19leGNsKHMpOwpAQCAtNzk1LDEyICYjNDM7NzkxLDEyIEBAIHZvaWQgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCX0KIAkvKgogCSAqIEJyb2FkY2FzdCB0byBldmVyeW9uZSB0aGF0IGdyYWJiZWQgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHRvIHRoaXMKLQkgKiBzdXBlcmJsb2NrIGJlZm9yZSB3ZSByZW1vdmVkIGl0IGZyb20gQGZzX3N1cGVycyB0aGF0IHRoZSBzdXBlcmJsb2NrCi0JICogaXMgZHlpbmcuIEV2ZXJ5IHdhbGtlciBvZiBAZnNfc3VwZXJzIG91dHNpZGUgb2Ygc2dldF9mYygpIHdpbGwgbm93Ci0JICogZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzIGRlYWQuCiYjNDM7CSAqIHN1cGVyYmxvY2sgdGhhdCBpdCBpcyBkeWluZy4gRXZlcnkgd2Fsa2VyIG9mIEBmc19zdXBlcnMgb3V0c2lkZQomIzQzOwkgKiBvZiBzZ2V0X2ZjKCkgd2lsbCBub3cgZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzCiYjNDM7CSAqIGRlYWQuCiAJICoKLQkgKiBXZSBsZWF2ZSB0aGUgc3VwZXJibG9jayBvbiBAZnNfc3VwZXJzIHNvIGl0IGNhbiBiZSBmb3VuZCBieQotCSAqIHNnZXRfZmMoKSB1bnRpbCB3ZSBwYXNzZWQgc2ItJmd0O2tpbGxfc2IoKS4KJiM0MzsJICogc2dldF9mYygpIGtlZXBzIGZpbmRpbmcgdGhlIHN1cGVyYmxvY2sgdW50aWwgU0JfREVBRCBpcyBzZXQsIHNvCiYjNDM7CSAqIGEgY29uY3VycmVudCBtb3VudGVyIHdhaXRzIHVudGlsIHdlIHBhc3NlZCBzYi0mZ3Q7a2lsbF9zYigpLgogCSAqLwogCXN1cGVyX3dha2Uoc2IsIFNCX0RZSU5HKTsKIAlzdXBlcl91bmxvY2tfZXhjbChzYik7CkBAIC04NzksNiAmIzQzOzg3NSw5IEBAIHN0cnVjdCBzdXBlcl9ibG9jayAqc2dldF9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJc3Bpbl9sb2NrKCZhbXA7c2JfbG9jayk7CiAJaWYgKHRlc3QpIHsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCAmYW1wO2ZjLSZndDtmc190eXBlLSZndDtmc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7CiYjNDM7CQkJLyogT25seSB1bmxpbmtlZCBhdCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZS4gKi8KJiM0MzsJCQlpZiAoc3VwZXJfZmxhZ3Mob2xkLCBTQl9ERUFEKSkKJiM0MzsJCQkJY29udGludWU7CiAJCQlpZiAodGVzdChvbGQsIGZjKSkKIAkJCQlnb3RvIHNoYXJlX2V4dGFudF9zYjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTg3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipBbmFseXppbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBldmFsdWF0ZSBhIExpbnV4IGtlcm5lbCBwYXRjaC4gU3BlY2lmaWNhbGx5LCB0aGlzIG9uZSYjMzk7cyBiZWVuIGZsYWdnZWQgZm9yIHVzZSB3aXRoIHN5emthbGxlciwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIG15IGludGVybmFsIHJlZCBmbGFncy4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHN1cmZhY2UgYW5kIGVuc3VyaW5nIHByb3BlciBjb3ZlcmFnZS4KCk15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBkaXZlIGRlZXAgaW50byB0aGUgcGF0Y2ggaXRzZWxmIGFuZCBpdHMgc3Vycm91bmRpbmcgY29udGV4dC4gV2hlcmUgZGlkIGl0IGNvbWUgZnJvbT8gV2hhdCYjMzk7cyB0aGUgY2hhbmdlIHRyeWluZyB0byBhY2hpZXZlPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyB0aGUgYWZmZWN0ZWQgZmlsZXMuIEEgcXVpY2sgbG9vayBhdCB0aGUgYGdpdGAgaGlzdG9yeSBhcm91bmQgdGhvc2UgZmlsZXMgaXMgZXNzZW50aWFsLCB1c2luZyB0b29scyBsaWtlIGBnaXQgYmxhbWVgIG9yIGBnaXQgbG9nYCB3aXRoIHRoZSByZWxldmFudCBgLS1mb2xsb3dgIGFuZCBgLS1uYW1lLW9ubHlgIG9wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXZlbG9wbWVudCBoaXN0b3J5LCB3aG8gYXV0aG9yZWQgdGhlIGNvZGUgYW5kIHRoZWlyIHByaW9yIGNvbnRleHQuCgpOZXh0IHN0ZXA6IEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMgb24gZmlsZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvICphY3R1YWxseSogcmVhZCB0aGUgcGF0Y2gsIGJ1dCBiZWZvcmUgSSBnZXQgYm9nZ2VkIGRvd24gaW4gZGV0YWlscyBJIG1heSB1c2UgYGdpdCBncmVwYCB3aXRoaW4gdGhlIGNoYW5nZWQgZmlsZXMgdG8gcXVpY2tseSBpZGVudGlmeSBrZXkgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGludGVyZXN0aW5nIHZhcmlhYmxlcy4gVGhpcyBtaWdodCBxdWlja2x5IGhpZ2hsaWdodCBhcmVhcyBvZiBpbnRlcmVzdCBhbmQgaGVscCB0byBmb2N1cyB0aGUgaW4tZGVwdGggcmV2aWV3LCBzYXZpbmcgdGltZS4gQWx0ZXJuYXRpdmVseSwgaWYgdGhlIGZpbGUgc2l6ZSBpcyBtYW5hZ2VhYmxlLCBJIGNvdWxkIGp1c3QgcmVhZCB0aGUgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2dldF9mYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy85cC92ZnNfc3VwZXIuYz04Mj1zdGF0aWMgaW50IHY5ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzLzlwL3Zmc19zdXBlci5jLTEwMy1cdGZjLVx1MDAzZXNfZnNfaW5mbyA9IHY5c2VzO1xuZnMvOXAvdmZzX3N1cGVyLmM6MTA0Olx0c2IgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBzZXRfYW5vbl9zdXBlcl9mYyk7XG5mcy85cC92ZnNfc3VwZXIuYy0xMDUtXHRpZiAoSVNfRVJSKHNiKSkge1xuLS1cbmZzL2Fmcy9zdXBlci5jPTU0OD1zdGF0aWMgaW50IGFmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvYWZzL3N1cGVyLmMtNTY4LVx0LyogYWxsb2NhdGUgYSBkZXZpY2VsZXNzIHN1cGVyYmxvY2sgKi9cbmZzL2Fmcy9zdXBlci5jOjU2OTpcdHNiID0gc2dldF9mYyhmYyxcbmZzL2Fmcy9zdXBlci5jLTU3MC1cdFx0ICAgICBhcy1cdTAwM2VkeW5fcm9vdCA/IGFmc19keW5yb290X3Rlc3Rfc3VwZXIgOiBhZnNfdGVzdF9zdXBlcixcbi0tXG5mcy9idHJmcy9zdXBlci5jPTE4NjE9c3RhdGljIGludCBidHJmc19nZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0xODg1LVx0LypcbmZzL2J0cmZzL3N1cGVyLmM6MTg4NjpcdCAqIFdlIGNhbm5vdCBob2xkIHV1aWRfbXV0ZXggY2FsbGluZyBzZ2V0X2ZjKCksIGl0IHdpbGwgbGVhZCB0byBhXG5mcy9idHJmcy9zdXBlci5jLTE4ODctXHQgKiBsb2NraW5nIG9yZGVyIHJldmVyc2FsIHdpdGggc191bW91bnQuXG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0xODk3LVxuZnMvYnRyZnMvc3VwZXIuYzoxODk4Olx0c2IgPSBzZ2V0X2ZjKGZjLCBidHJmc19mY190ZXN0X3N1cGVyLCBzZXRfYW5vbl9zdXBlcl9mYyk7XG5mcy9idHJmcy9zdXBlci5jLTE4OTktXHRpZiAoSVNfRVJSKHNiKSkge1xuLS1cbmZzL2J0cmZzL3N1cGVyLmM9MjA2MT1zdGF0aWMgaW50IGJ0cmZzX2dldF90cmVlX3N1YnZvbChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0yMDc1LVx0ICogb2YgdGhlIGZzX2luZm8gKGxvY2tzIGFuZCBzdWNoKSB0byBtYWtlIGNsZWFudXAgZWFzaWVyIGlmIHdlIGZpbmQgYVxuZnMvYnRyZnMvc3VwZXIuYzoyMDc2Olx0ICogc3VwZXJibG9jayB3aXRoIG91ciBnaXZlbiBmc19kZXZpY2VzIGxhdGVyIG9uIGF0IHNnZXRfZmMoKSB0aW1lLlxuZnMvYnRyZnMvc3VwZXIuYy0yMDc3LVx0ICovXG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0yMTAyLVx0LypcbmZzL2J0cmZzL3N1cGVyLmM6MjEwMzpcdCAqIFdoZW4gd2UgZG8gdGhlIHNnZXRfZmMgdGhpcyBnZXRzIHRyYW5zZmVycmVkIHRvIHRoZSBzYiwgc28gd2Ugb25seVxuZnMvYnRyZnMvc3VwZXIuYy0yMTA0LVx0ICogbmVlZCB0byBzZXQgaXQgb24gdGhlIGR1cF9mYyBhcyB0aGlzIGlzIHdoYXQgY3JlYXRlcyB0aGUgc3VwZXIgYmxvY2suXG4tLVxuZnMvYnRyZnMvdm9sdW1lcy5oPTM0MT1zdHJ1Y3QgYnRyZnNfZnNfZGV2aWNlcyB7XG4tLVxuZnMvYnRyZnMvdm9sdW1lcy5oLTQyOS1cdCAqIGFmdGVyIGEgc3VwZXIgYmxvY2sgaXMgY3JlYXRlZC4gIEJ1dCB3ZSBjYW5ub3QgdGFrZSB1dWlkX211dGV4XG5mcy9idHJmcy92b2x1bWVzLmg6NDMwOlx0ICogZHVyaW5nIHNnZXRfZmMoKSwgdGh1cyB3ZSBoYXZlIHRvIGhvbGQgdGhlIGZzX2RldmljZXMgKG1lYW5pbmcgaXRcbmZzL2J0cmZzL3ZvbHVtZXMuaC00MzEtXHQgKiBjYW5ub3QgYmUgcmVsZWFzZWQpIHVudGlsIGEgc3VwZXIgYmxvY2sgaXMgcmV0dXJuZWQuXG4tLVxuZnMvY2VwaC9zdXBlci5jPTEzMDk9c3RhdGljIGludCBjZXBoX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9jZXBoL3N1cGVyLmMtMTM0My1cdGZjLVx1MDAzZXNfZnNfaW5mbyA9IGZzYztcbmZzL2NlcGgvc3VwZXIuYzoxMzQ0Olx0c2IgPSBzZ2V0X2ZjKGZjLCBjb21wYXJlX3N1cGVyLCBjZXBoX3NldF9zdXBlcik7XG5mcy9jZXBoL3N1cGVyLmMtMTM0NS1cdGZjLVx1MDAzZXNfZnNfaW5mbyA9IE5VTEw7XG4tLVxuZnMvZWNyeXB0ZnMvbWFpbi5jPTQzNT1zdGF0aWMgaW50IGVjcnlwdGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lY3J5cHRmcy9tYWluLmMtNDY0LVxuZnMvZWNyeXB0ZnMvbWFpbi5jOjQ2NTpcdHMgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBzZXRfYW5vbl9zdXBlcl9mYyk7XG5mcy9lY3J5cHRmcy9tYWluLmMtNDY2LVx0aWYgKElTX0VSUihzKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MjIyPXN0YXRpYyBpbnQgZXh0ZW50c19rdW5pdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTI0Mi1cdH1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6MjQzOlx0c2IgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBleHRfc2V0KTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMjQ0LVx0cHV0X2ZzX2NvbnRleHQoZmMpO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9MTM3PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm1idF9leHQ0X2FsbG9jX3N1cGVyX2Jsb2NrKHZvaWQpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xNTEtXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jOjE1MjpcdHNiID0gc2dldF9mYyhmYywgTlVMTCwgbWJ0X3NldCk7XG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTE1My1cdHB1dF9mc19jb250ZXh0KGZjKTtcbi0tXG5mcy9mdXNlL2lub2RlLmM9MTY3Nj1zdGF0aWMgaW50IGZ1c2VfZ2V0X3RyZWVfc3VibW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZzYylcbi0tXG5mcy9mdXNlL2lub2RlLmMtMTY4OS1cdGZzYy1cdTAwM2VzX2ZzX2luZm8gPSBmbTtcbmZzL2Z1c2UvaW5vZGUuYzoxNjkwOlx0c2IgPSBzZ2V0X2ZjKGZzYywgTlVMTCwgc2V0X2Fub25fc3VwZXJfZmMpO1xuZnMvZnVzZS9pbm9kZS5jLTE2OTEtXHRpZiAoZnNjLVx1MDAzZXNfZnNfaW5mbylcbi0tXG5mcy9mdXNlL2lub2RlLmM9MTg1Mz1zdGF0aWMgaW50IGZ1c2VfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZzYylcbi0tXG5mcy9mdXNlL2lub2RlLmMtMTg5Ny1cdFx0ZnNjLVx1MDAzZXNnZXRfa2V5ID0gY3R4LVx1MDAzZWZ1ZDtcbmZzL2Z1c2UvaW5vZGUuYzoxODk4Olx0XHRzYiA9IHNnZXRfZmMoZnNjLCBmdXNlX3Rlc3Rfc3VwZXIsIGZ1c2Vfc2V0X25vX3N1cGVyKTtcbmZzL2Z1c2UvaW5vZGUuYy0xODk5LVx0XHRlcnIgPSBQVFJfRVJSX09SX1pFUk8oc2IpO1xuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTY4MT1zdGF0aWMgaW50IHZpcnRpb19mc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZnNjKVxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTczMy1cdGZzYy1cdTAwM2VzX2ZzX2luZm8gPSBmbTtcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTczNDpcdHNiID0gc2dldF9mYyhmc2MsIHZpcnRpb19mc190ZXN0X3N1cGVyLCBzZXRfYW5vbl9zdXBlcl9mYyk7XG5mcy9mdXNlL3ZpcnRpb19mcy5jLTE3MzUtXHRpZiAoZnNjLVx1MDAzZXNfZnNfaW5mbylcbi0tXG5mcy9nZnMyL29wc19mc3R5cGUuYz0xNjczPXN0YXRpYyBpbnQgZ2ZzMl9tZXRhX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNjkwLVx0ZmMtXHUwMDNlc2dldF9rZXkgPSBwYXRoLmRlbnRyeS1cdTAwM2VkX3NiLVx1MDAzZXNfYmRldjtcbmZzL2dmczIvb3BzX2ZzdHlwZS5jOjE2OTE6XHRzID0gc2dldF9mYyhmYywgdGVzdF9tZXRhX3N1cGVyLCBzZXRfbWV0YV9zdXBlcik7XG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNjkyLVx0cGF0aF9wdXQoXHUwMDI2cGF0aCk7XG4tLVxuZnMva2VybmZzL21vdW50LmM9MzY2PWludCBrZXJuZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2tlcm5mcy9tb3VudC5jLTM4MS1cdGZjLVx1MDAzZXNfZnNfaW5mbyA9IGluZm87XG5mcy9rZXJuZnMvbW91bnQuYzozODI6XHRzYiA9IHNnZXRfZmMoZmMsIGtlcm5mc190ZXN0X3N1cGVyLCBrZXJuZnNfc2V0X3N1cGVyKTtcbmZzL2tlcm5mcy9tb3VudC5jLTM4My1cdGlmIChJU19FUlIoc2IpKVxuLS1cbmZzL2tlcm5mcy9tb3VudC5jPTQyNz12b2lkIGtlcm5mc19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMva2VybmZzL21vdW50LmMtNDM2LVx0LypcbmZzL2tlcm5mcy9tb3VudC5jOjQzNzpcdCAqIE1hcmsgdGhlIHN1cGVyYmxvY2sgZGVhZCBzbyBzZ2V0X2ZjKCkgY2FuJiMzOTt0IGZpbmQgaXQsXG5mcy9rZXJuZnMvbW91bnQuYy00MzgtXHQgKiBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cbi0tXG5mcy9uZnMvc3VwZXIuYz0xMjk2PWludCBuZnNfZ2V0X3RyZWVfY29tbW9uKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9uZnMvc3VwZXIuYy0xMzE2LVx0ZmMtXHUwMDNlc19mc19pbmZvID0gc2VydmVyO1xuZnMvbmZzL3N1cGVyLmM6MTMxNzpcdHMgPSBzZ2V0X2ZjKGZjLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyKTtcbmZzL25mcy9zdXBlci5jLTEzMTgtXHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xuLS1cbmZzL29yYW5nZWZzL3N1cGVyLmM9NDU1PXN0YXRpYyBpbnQgb3JhbmdlZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL29yYW5nZWZzL3N1cGVyLmMtNDg5LVxuZnMvb3JhbmdlZnMvc3VwZXIuYzo0OTA6XHRzYiA9IHNnZXRfZmMoZmMsIE5VTEwsIHNldF9hbm9uX3N1cGVyX2ZjKTtcbmZzL29yYW5nZWZzL3N1cGVyLmMtNDkxLVxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9OTkwPWNpZnNfc21iM19kb19tb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzbWIzX2ZzX2NvbnRleHQgKm9sZF9jdHgpXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMDQyLVx0ICogaWdub3JlZCB0aGUgY2FsbGVyLXN1cHBsaWVkIFNCXyogZmxhZ3MuIFByZXNlcnZlIHRoYXQgYmVoYXZpb3VyIGJ5XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEwNDM6XHQgKiBvdmVycmlkaW5nIGZjLVx1MDAzZXNiX2ZsYWdzIGFyb3VuZCB0aGUgc2dldF9mYygpIGNhbGwuXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEwNDQtXHQgKlxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxMDQ1Olx0ICogSGFuZCBjaWZzX3NiIHRvIHNnZXRfZmMoKSB2aWEgZmMtXHUwMDNlc19mc19pbmZvOyBzZ2V0X2ZjKCkgY29waWVzIGl0XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEwNDYtXHQgKiBvbnRvIHNiLVx1MDAzZXNfZnNfaW5mbyBiZWZvcmUgcnVubmluZyBzZXQoKSBhbmQgY2xlYXJzIGZjLVx1MDAzZXNfZnNfaW5mb1xuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTA1My1cdGZjLVx1MDAzZXNnZXRfa2V5ID0gXHUwMDI2bW50X2RhdGE7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEwNTQ6XHRzYiA9IHNnZXRfZmMoZmMsIGNpZnNfbWF0Y2hfc3VwZXIsIHNldF9hbm9uX3N1cGVyX2ZjKTtcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTA1NS1cdGZjLVx1MDAzZXNnZXRfa2V5ID0gTlVMTDtcbi0tXG5mcy9zdXBlci5jPTMzNz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxuLS1cbmZzL3N1cGVyLmMtMzUwLVx0LypcbmZzL3N1cGVyLmM6MzUxOlx0ICogc2dldF9mYygpIGNhbiBoYXZlIHNfdW1vdW50IHJlY3Vyc2lvbi5cbmZzL3N1cGVyLmMtMzUyLVx0ICpcbi0tXG5mcy9zdXBlci5jPTU1Nz1zdGF0aWMgdm9pZCBraWxsX3N1cGVyX25vdGlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtNTY0LVxuZnMvc3VwZXIuYzo1NjU6XHQvKiBEcm9wIHNnZXRfZmMoKSYjMzk7cyBjbGFpbTsgYSBuZXZlci1yZWdpc3RlcmVkIGVudHJ5IHN0YXlzIHdpdGggdGhlIHNiLiAqL1xuZnMvc3VwZXIuYy01NjYtXHRpZiAoc2ItXHUwMDNlc19zdXBlcl9kZXYtXHUwMDNlc2RfZGV2KSB7XG4tLVxuZnMvc3VwZXIuYy01NzItXHQgKiBMZXQgY29uY3VycmVudCBtb3VudHMga25vdyB0aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRlYWQuXG5mcy9zdXBlci5jOjU3MzpcdCAqIHNnZXRfZmMoKSBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGFuZCBjYWxscyB0ZXN0KCkgdW5kZXJcbmZzL3N1cGVyLmMtNTc0LVx0ICogc2JfbG9jaywgc28gc2V0IGl0IHVuZGVyIHNiX2xvY2s6IG9uY2Ugd2UgcmV0dXJuIG5vIHRlc3QoKVxuLS1cbmZzL3N1cGVyLmM9NjMyPUVYUE9SVF9TWU1CT0woZGVhY3RpdmF0ZV9zdXBlcik7XG4tLVxuZnMvc3VwZXIuYy02MzgtICogQWNxdWlyZSBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugb24gYSBzdXBlcmJsb2NrIGFuZCB0cnkgdG8gdHJhZGUgaXQgZm9yXG5mcy9zdXBlci5jOjYzOTogKiBhbiBhY3RpdmUgcmVmZXJlbmNlLiBUaGlzIGlzIHVzZWQgaW4gc2dldF9mYygpIHRvIHdhaXQgZm9yIGFcbmZzL3N1cGVyLmMtNjQwLSAqIHN1cGVyYmxvY2sgdG8gZWl0aGVyIGJlY29tZSBTQl9CT1JOIG9yIGZvciBpdCB0byBwYXNzIHRocm91Z2hcbi0tXG5mcy9zdXBlci5jPTczNz12b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTc5NC1cdCAqIHN1cGVyYmxvY2sgdGhhdCBpdCBpcyBkeWluZy4gRXZlcnkgd2Fsa2VyIG9mIEBmc19zdXBlcnMgb3V0c2lkZVxuZnMvc3VwZXIuYzo3OTU6XHQgKiBvZiBzZ2V0X2ZjKCkgd2lsbCBub3cgZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzXG5mcy9zdXBlci5jLTc5Ni1cdCAqIGRlYWQuXG5mcy9zdXBlci5jLTc5Ny1cdCAqXG5mcy9zdXBlci5jOjc5ODpcdCAqIHNnZXRfZmMoKSBrZWVwcyBmaW5kaW5nIHRoZSBzdXBlcmJsb2NrIHVudGlsIFNCX0RFQUQgaXMgc2V0LCBzb1xuZnMvc3VwZXIuYy03OTktXHQgKiBhIGNvbmN1cnJlbnQgbW91bnRlciB3YWl0cyB1bnRpbCB3ZSBwYXNzZWQgc2ItXHUwMDNla2lsbF9zYigpLlxuLS1cbmZzL3N1cGVyLmM9ODEzPWJvb2wgbW91bnRfY2FwYWJsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvc3VwZXIuYy04MjEtLyoqXG5mcy9zdXBlci5jOjgyMjogKiBzZ2V0X2ZjIC0gRmluZCBvciBjcmVhdGUgYSBzdXBlcmJsb2NrXG5mcy9zdXBlci5jLTgyMy0gKiBAZmM6XHRGaWxlc3lzdGVtIGNvbnRleHQuXG4tLVxuZnMvc3VwZXIuYy04NTItICovXG5mcy9zdXBlci5jOjg1MzpzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuZnMvc3VwZXIuYy04NTQtXHRcdFx0ICAgIGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcbi0tXG5mcy9zdXBlci5jLTkzNC19XG5mcy9zdXBlci5jOjkzNTpFWFBPUlRfU1lNQk9MKHNnZXRfZmMpO1xuZnMvc3VwZXIuYy05MzYtXG4tLVxuZnMvc3VwZXIuYz0xMzkxPXN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvc3VwZXIuYy0xMzk4LVxuZnMvc3VwZXIuYzoxMzk5Olx0c2IgPSBzZ2V0X2ZjKGZjLCB0ZXN0LCBzZXRfYW5vbl9zdXBlcl9mYyk7XG5mcy9zdXBlci5jLTE0MDAtXHRpZiAoSVNfRVJSKHNiKSlcbi0tXG5mcy9zdXBlci5jPTE0ODI9c3RydWN0IHN1cGVyX2Jsb2NrICpzZ2V0X2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIGRldl90IGRldilcbi0tXG5mcy9zdXBlci5jLTE0ODQtXHRmYy1cdTAwM2VzZ2V0X2tleSA9IFx1MDAyNmRldjtcbmZzL3N1cGVyLmM6MTQ4NTpcdHJldHVybiBzZ2V0X2ZjKGZjLCBzdXBlcl9zX2Rldl90ZXN0LCBzdXBlcl9zX2Rldl9zZXQpO1xuZnMvc3VwZXIuYy0xNDg2LX1cbi0tXG5mcy9zdXBlci5jPTE3OTg9aW50IHNldHVwX2JkZXZfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNiX2ZsYWdzLFxuLS1cbmZzL3N1cGVyLmMtMTgyMi1cbmZzL3N1cGVyLmM6MTgyMzpcdC8qIFRoZSBzZ2V0X2ZjKCkgZW50cnkgaXMgYWxyZWFkeSBwdWJsaXNoZWQ7IHBhaXJzIHdpdGggYmRldl9mcmVlemUoKS4gKi9cbmZzL3N1cGVyLmMtMTgyNC1cdHNtcF9tYigpO1xuLS1cbmZzL3ViaWZzL3N1cGVyLmM9MjIzMj1zdGF0aWMgaW50IHViaWZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy91Ymlmcy9zdXBlci5jLTIyNjYtXG5mcy91Ymlmcy9zdXBlci5jOjIyNjc6XHRzYiA9IHNnZXRfZmMoZmMsIHNiX3Rlc3QsIHNldF9hbm9uX3N1cGVyX2ZjKTtcbmZzL3ViaWZzL3N1cGVyLmMtMjI2OC1cdGlmIChJU19FUlIoc2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlsZXN5c3RlbSBDaGFuZ2VzKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGZpbGVzeXN0ZW0gbW9kaWZpY2F0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgZGlmZiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbnMuIE15IGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2VzIHRvIGBmcy9zdXBlci5jYCBhbmQgYGZzL2tlcm5mcy9tb3VudC5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBvZiB0aGlzIGxpa2VseSByZXNpZGVzLiBJJiMzOTtsbCByZWFkIHRocm91Z2ggYGZzL3N1cGVyLmNgIGZpcnN0LCBzcGVjaWZpY2FsbHkgbGluZXMgNDIwLTYyMCBhbmQgdGhlbiBsaW5lcyA4NjAtOTQwLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmaWxlLiBJIGV4cGVjdCB0aGVyZSB0byBiZSB0aGUgbWVhdCBvZiB0aGUgY2hhbmdlcyBpbiB0aGlzIHJhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0fVxuIDQyNjpcdFxuIDQyNzpcdC8qIFN1cGVyYmxvY2sgcmVmY291bnRpbmcgICovXG4gNDI4Olx0XG4gNDI5Olx0LypcbiA0MzA6XHQgKiBEcm9wIGEgc3VwZXJibG9jayYjMzk7cyBwYXNzaXZlIHJlZmVyZW5jZS4gIE11c3QgYmUgY2FsbGVkIFdJVEhPVVQgc2JfbG9jayBoZWxkO1xuIDQzMTpcdCAqIHB1dF9zdXBlcigpIGFjcXVpcmVzIHNiX2xvY2sgaXRzZWxmIHdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyBkcm9wcGVkLlxuIDQzMjpcdCAqL1xuIDQzMzpcdHZvaWQgcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbiA0MzQ6XHR7XG4gNDM1Olx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnMtXHUwMDNlc19wYXNzaXZlKSkge1xuIDQzNjpcdFx0XHRzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSA9IHMtXHUwMDNlc190eXBlO1xuIDQzNzpcdFxuIDQzODpcdFx0XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4gNDM5Olx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cy1cdTAwM2VzX2xpc3QpO1xuIDQ0MDpcdFx0XHRobGlzdF9kZWxfaW5pdChcdTAwMjZzLVx1MDAzZXNfaW5zdGFuY2VzKTtcbiA0NDE6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4gNDQyOlx0XG4gNDQzOlx0XHRcdFdBUk5fT04ocy1cdTAwM2VzX2RlbnRyeV9scnUubm9kZSk7XG4gNDQ0Olx0XHRcdFdBUk5fT04ocy1cdTAwM2VzX2lub2RlX2xydS5ub2RlKTtcbiA0NDU6XHRcdFx0V0FSTl9PTihzLVx1MDAzZXNfbW91bnRzKTtcbiA0NDY6XHRcdFx0Y2FsbF9yY3UoXHUwMDI2cy1cdTAwM2VyY3UsIGRlc3Ryb3lfc3VwZXJfcmN1KTtcbiA0NDc6XHRcdFx0LyogVGhlIHVubGluayBhYm92ZSBtYXkgdG91Y2ggdHlwZS1cdTAwM2Vmc19zdXBlcnMsIHNvIGRyb3AgaXQgbGFzdC4gKi9cbiA0NDg6XHRcdFx0cHV0X2ZpbGVzeXN0ZW0odHlwZSk7XG4gNDQ5Olx0XHR9XG4gNDUwOlx0fVxuIDQ1MTpcdFxuIDQ1MjpcdHN0cnVjdCBzdXBlcl9kZXYge1xuIDQ1MzpcdFx0ZGV2X3RcdFx0XHRzZF9kZXY7XG4gNDU0Olx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2tcdCpzZF9zYjtcbiA0NTU6XHRcdHJlZmNvdW50X3RcdFx0c2RfcmVmO1xuIDQ1NjpcdFx0c3RydWN0IHJobGlzdF9oZWFkXHRzZF9ub2RlO1xuIDQ1NzpcdFx0c3RydWN0IHJjdV9oZWFkXHRcdHNkX3JjdTtcbiA0NTg6XHR9O1xuIDQ1OTpcdFxuIDQ2MDpcdHN0YXRpYyBzdHJ1Y3QgcmhsdGFibGUgc3VwZXJfZGV2X3RhYmxlO1xuIDQ2MTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgc3VwZXJfZGV2X3BhcmFtcyA9IHtcbiA0NjI6XHRcdC5rZXlfbGVuXHQ9IHNpemVvZihkZXZfdCksXG4gNDYzOlx0XHQua2V5X29mZnNldFx0PSBvZmZzZXRvZihzdHJ1Y3Qgc3VwZXJfZGV2LCBzZF9kZXYpLFxuIDQ2NDpcdFx0LmhlYWRfb2Zmc2V0XHQ9IG9mZnNldG9mKHN0cnVjdCBzdXBlcl9kZXYsIHNkX25vZGUpLFxuIDQ2NTpcdH07XG4gNDY2Olx0XG4gNDY3Olx0c3RhdGljIHN0cnVjdCBzdXBlcl9kZXYgKnN1cGVyX2Rldl9hbGxvYyhkZXZfdCBkZXYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gNDY4Olx0e1xuIDQ2OTpcdFx0c3RydWN0IHN1cGVyX2RldiAqZnNkO1xuIDQ3MDpcdFxuIDQ3MTpcdFx0ZnNkID0ga3phbGxvY19vYmooKmZzZCk7XG4gNDcyOlx0XHRpZiAoIWZzZClcbiA0NzM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDc0Olx0XHRmc2QtXHUwMDNlc2RfZGV2ID0gZGV2O1xuIDQ3NTpcdFx0ZnNkLVx1MDAzZXNkX3NiID0gc2I7XG4gNDc2Olx0XHRyZWZjb3VudF9zZXQoXHUwMDI2ZnNkLVx1MDAzZXNkX3JlZiwgMSk7XG4gNDc3Olx0XHRyZXR1cm4gZnNkO1xuIDQ3ODpcdH1cbiA0Nzk6XHRcbiA0ODA6XHRzdGF0aWMgdm9pZCBzdXBlcl9kZXZfcHV0KHN0cnVjdCBzdXBlcl9kZXYgKmZzZClcbiA0ODE6XHR7XG4gNDgyOlx0XHQvKiBVbmxpbmsgb25seSBvbmNlIHVucGlubmVkLCBzbyBhIGN1cnNvciBuZXZlciByZXN1bWVzIGZyb20gYSByZW1vdmVkIG5vZGUuICovXG4gNDgzOlx0XHRpZiAoZnNkIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZnNkLVx1MDAzZXNkX3JlZikpIHtcbiA0ODQ6XHRcdFx0cmhsdGFibGVfcmVtb3ZlKFx1MDAyNnN1cGVyX2Rldl90YWJsZSwgXHUwMDI2ZnNkLVx1MDAzZXNkX25vZGUsIHN1cGVyX2Rldl9wYXJhbXMpO1xuIDQ4NTpcdFx0XHRwdXRfc3VwZXIoZnNkLVx1MDAzZXNkX3NiKTtcbiA0ODY6XHRcdFx0a2ZyZWVfcmN1KGZzZCwgc2RfcmN1KTtcbiA0ODc6XHRcdH1cbiA0ODg6XHR9XG4gNDg5Olx0XG4gNDkwOlx0dm9pZCBfX2luaXQgc3VwZXJfZGV2X2luaXQodm9pZClcbiA0OTE6XHR7XG4gNDkyOlx0XHRpZiAocmhsdGFibGVfaW5pdChcdTAwMjZzdXBlcl9kZXZfdGFibGUsIFx1MDAyNnN1cGVyX2Rldl9wYXJhbXMpKVxuIDQ5MzpcdFx0XHRwYW5pYyhcJiMzNDtWRlM6IENhbm5vdCBpbml0aWFsaXNlIHN1cGVyX2Rldl90YWJsZVxcblwmIzM0Oyk7XG4gNDk0Olx0fVxuIDQ5NTpcdFxuIDQ5NjpcdHN0YXRpYyBpbnQgc3VwZXJfZGV2X2luc2VydChzdHJ1Y3Qgc3VwZXJfZGV2ICpmc2QpXG4gNDk3Olx0e1xuIDQ5ODpcdFx0aW50IGVycjtcbiA0OTk6XHRcbiA1MDA6XHRcdGVyciA9IHJobHRhYmxlX2luc2VydChcdTAwMjZzdXBlcl9kZXZfdGFibGUsIFx1MDAyNmZzZC1cdTAwM2VzZF9ub2RlLCBzdXBlcl9kZXZfcGFyYW1zKTtcbiA1MDE6XHRcdGlmICghZXJyKVxuIDUwMjpcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2ZnNkLVx1MDAzZXNkX3NiLVx1MDAzZXNfcGFzc2l2ZSk7XG4gNTAzOlx0XHRyZXR1cm4gZXJyO1xuIDUwNDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2Ugc2VjdGlvbnMsIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyB1bmRlcnN0YW5kcyBrZXJuZWwgY29kZToKCioqQW5hbHl6aW5nIGBmcy9zdXBlci5jYCBTZWN0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgZnMvc3VwZXIuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBsaW5lcyA1NTAgdGhyb3VnaCA2MjAgYW5kIHRoZW4ganVtcGluZyBhaGVhZCB0byBsaW5lcyA4NjAgdGhyb3VnaCA5MjAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0aWVzIGJlaW5nIGRpc2N1c3NlZCBpbiB0aG9zZSByYW5nZXMuIEdpdmVuIHRoZSBmaWxlIGFuZCB0aGVzZSBsaW5lIG51bWJlcnMsIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgSSYjMzk7bGwgZmluZCBjb2RlIHJlbGF0ZWQgdG8gc3VwZXJibG9jayBvcGVyYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBnZXQgYW4gb3ZlcnZpZXcgb2YgaG93IHRoZSBzdXBlcmJsb2NrIGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkLCBwb3RlbnRpYWxseSBjb3ZlcmluZyBhc3BlY3RzIGxpa2UgcmVhZGluZyBpdCBmcm9tIGRpc2ssIHZhbGlkYXRpbmcgaXRzIGNvbnRlbnRzLCBhbmQgYW55IGFzc29jaWF0ZWQgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIHJlZ2FyZGluZyBkaWZmZXJlbnQgZmlsZXN5c3RlbSB0eXBlcy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZCwgc2luY2UgYGZzL3N1cGVyLmNgIGlzIHRoZSBjb3JlIG9mIGhvdyBmaWxlc3lzdGVtcyBhcmUgbW91bnRlZCBhbmQgbWFuYWdlZC4gSSBuZWVkIHRvIGJlIHN1cmUgYW55IGxvY2tpbmcgaXMgdXNlZCBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29kZSBkZWFscyB3aXRoIHNwZWNpZmljIHN1cGVyYmxvY2sgb3BlcmF0aW9ucywgYW5kIGlmIHNvLCBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaG9va2VkIGludG8gdGhlIGdlbmVyaWMgVkZTIGZyYW1ld29yay4gQW55IGludGVyYWN0aW9ucyB3aXRoIHVuZGVybHlpbmcgZGV2aWNlIGRyaXZlcnMgb3IgYmxvY2sgbGF5ZXIgY29tcG9uZW50cyB3aWxsIGJlIGNyaXRpY2FsLgoKRnVydGhlcm1vcmUsIEkmIzM5O20gYW50aWNpcGF0aW5nIHBvdGVudGlhbCBkaXNjdXNzaW9ucyBvZiBmaWxlc3lzdGVtLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIG9yIGRhdGEgc3RydWN0dXJlcywgZXNwZWNpYWxseSBpZiB0aG9zZSBsaW5lcyBjb3ZlciBhc3BlY3RzIGxpa2Ugc2V0dGluZyB1cCB0aGUgcm9vdCBpbm9kZSBvciBtYW5hZ2luZyB0aGUgZnJlZSBzcGFjZSBvbiB0aGUgZmlsZXN5c3RlbS4gSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMgc3VwZXJibG9jayBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcywgYW5kIGhvdyB0aGV5IHdvdWxkIGJlIHJlc29sdmVkIG9yIGxvZ2dlZC4gSSBhbHNvIG1pZ2h0IHNlZSBhbiBhbmFseXNpcyBvZiBob3cgbWV0YWRhdGEgaXMgaGFuZGxlZCBhbmQgdHJhY2tlZC4gSSYjMzk7bGwgYWxzbyB0cnkgdG8gdHJhY2sgaG93IHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBvbi1kaXNrIGZvcm1hdCBpcyBkZWZpbmVkIGFuZCB1dGlsaXplZCBpbiB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NTA6XHRcdHNiX2RldiA9IHN1cGVyX2Rldl9nZXQocmN1X2RlcmVmZXJlbmNlX2FsbChwcmV2LVx1MDAzZXNkX25vZGUubmV4dCkpO1xuIDU1MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNTUyOlx0XG4gNTUzOlx0XHRzdXBlcl9kZXZfcHV0KHByZXYpO1xuIDU1NDpcdFx0cmV0dXJuIHNiX2RldjtcbiA1NTU6XHR9XG4gNTU2Olx0XG4gNTU3Olx0c3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiA1NTg6XHR7XG4gNTU5Olx0XHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcdTAwMjZzYi1cdTAwM2VzX3Vtb3VudCk7XG4gNTYwOlx0XG4gNTYxOlx0XHQvKiBhbHJlYWR5IG5vdGlmaWVkIGVhcmxpZXIgKi9cbiA1NjI6XHRcdGlmIChzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9ERUFEKVxuIDU2MzpcdFx0XHRyZXR1cm47XG4gNTY0Olx0XG4gNTY1Olx0XHQvKiBEcm9wIHNnZXRfZmMoKSYjMzk7cyBjbGFpbTsgYSBuZXZlci1yZWdpc3RlcmVkIGVudHJ5IHN0YXlzIHdpdGggdGhlIHNiLiAqL1xuIDU2NjpcdFx0aWYgKHNiLVx1MDAzZXNfc3VwZXJfZGV2LVx1MDAzZXNkX2Rldikge1xuIDU2NzpcdFx0XHRzdXBlcl9kZXZfcHV0KHNiLVx1MDAzZXNfc3VwZXJfZGV2KTtcbiA1Njg6XHRcdFx0c2ItXHUwMDNlc19zdXBlcl9kZXYgPSBOVUxMO1xuIDU2OTpcdFx0fVxuIDU3MDpcdFxuIDU3MTpcdFx0LypcbiA1NzI6XHRcdCAqIExldCBjb25jdXJyZW50IG1vdW50cyBrbm93IHRoYXQgdGhpcyB0aGluZyBpcyByZWFsbHkgZGVhZC5cbiA1NzM6XHRcdCAqIHNnZXRfZmMoKSBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGFuZCBjYWxscyB0ZXN0KCkgdW5kZXJcbiA1NzQ6XHRcdCAqIHNiX2xvY2ssIHNvIHNldCBpdCB1bmRlciBzYl9sb2NrOiBvbmNlIHdlIHJldHVybiBubyB0ZXN0KClcbiA1NzU6XHRcdCAqIHJ1bnMgb24gdGhpcyBzdXBlcmJsb2NrIGFueW1vcmUgYW5kIG5vbmUgd2lsbCBzdGFydC4gRXZlcnlvbmVcbiA1NzY6XHRcdCAqIGVsc2UgYWxyZWFkeSBzYXcgU0JfRFlJTkcgYW5kIGVpdGhlciBkaXNjYXJkZWQgdGhlIHN1cGVyYmxvY2tcbiA1Nzc6XHRcdCAqIG9yIHdhaXRzIGZvciBTQl9ERUFELlxuIDU3ODpcdFx0ICovXG4gNTc5Olx0XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4gNTgwOlx0XHRzdXBlcl93YWtlKHNiLCBTQl9ERUFEKTtcbiA1ODE6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuIDU4MjpcdH1cbiA1ODM6XHRcbiA1ODQ6XHQvKipcbiA1ODU6XHQgKlx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJcdC1cdGRyb3AgYW4gYWN0aXZlIHJlZmVyZW5jZSB0byBzdXBlcmJsb2NrXG4gNTg2Olx0ICpcdEBzOiBzdXBlcmJsb2NrIHRvIGRlYWN0aXZhdGVcbiA1ODc6XHQgKlxuIDU4ODpcdCAqXHREcm9wcyBhbiBhY3RpdmUgcmVmZXJlbmNlIHRvIHN1cGVyYmxvY2ssIGNvbnZlcnRpbmcgaXQgaW50byBhIHRlbXBvcmFyeVxuIDU4OTpcdCAqXHRvbmUgaWYgdGhlcmUgaXMgbm8gb3RoZXIgYWN0aXZlIHJlZmVyZW5jZXMgbGVmdC4gIEluIHRoYXQgY2FzZSB3ZVxuIDU5MDpcdCAqXHR0ZWxsIGZzIGRyaXZlciB0byBzaHV0IGl0IGRvd24gYW5kIGRyb3AgdGhlIHRlbXBvcmFyeSByZWZlcmVuY2Ugd2VcbiA1OTE6XHQgKlx0aGFkIGp1c3QgYWNxdWlyZWQuXG4gNTkyOlx0ICpcbiA1OTM6XHQgKlx0Q2FsbGVyIGhvbGRzIGV4Y2x1c2l2ZSBsb2NrIG9uIHN1cGVyYmxvY2s7IHRoYXQgbG9jayBpcyByZWxlYXNlZC5cbiA1OTQ6XHQgKi9cbiA1OTU6XHR2b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbiA1OTY6XHR7XG4gNTk3Olx0XHRzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnMgPSBzLVx1MDAzZXNfdHlwZTtcbiA1OTg6XHRcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnMtXHUwMDNlc19hY3RpdmUpKSB7XG4gNTk5Olx0XHRcdHNocmlua2VyX2ZyZWUocy1cdTAwM2VzX3Nocmluayk7XG4gNjAwOlx0XHRcdGZzLVx1MDAzZWtpbGxfc2Iocyk7XG4gNjAxOlx0XG4gNjAyOlx0XHRcdGtpbGxfc3VwZXJfbm90aWZ5KHMpO1xuIDYwMzpcdFxuIDYwNDpcdFx0XHQvKiBsaXN0X2xydV9kZXN0cm95KCkgbWF5IHNsZWVwOyBwdXRfc3VwZXIoKSBjYWxsZXJzIG1heSBub3QuICovXG4gNjA1Olx0XHRcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2cy1cdTAwM2VzX2RlbnRyeV9scnUpO1xuIDYwNjpcdFx0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNnMtXHUwMDNlc19pbm9kZV9scnUpO1xuIDYwNzpcdFxuIDYwODpcdFx0XHRwdXRfc3VwZXIocyk7XG4gNjA5Olx0XHR9IGVsc2Uge1xuIDYxMDpcdFx0XHRzdXBlcl91bmxvY2tfZXhjbChzKTtcbiA2MTE6XHRcdH1cbiA2MTI6XHR9XG4gNjEzOlx0XG4gNjE0Olx0RVhQT1JUX1NZTUJPTChkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcik7XG4gNjE1Olx0XG4gNjE2Olx0LyoqXG4gNjE3Olx0ICpcdGRlYWN0aXZhdGVfc3VwZXJcdC1cdGRyb3AgYW4gYWN0aXZlIHJlZmVyZW5jZSB0byBzdXBlcmJsb2NrXG4gNjE4Olx0ICpcdEBzOiBzdXBlcmJsb2NrIHRvIGRlYWN0aXZhdGVcbiA2MTk6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjg3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGF0IHNlY3Rpb24gb2YgYGZzL3N1cGVyLmNgLgoKKipEaXZpbmcgaW50byB0aGUgU3VwZXJibG9jayBDb2RlKioKCkFscmlnaHQsIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gbGluZXMgODYwIHRvIDkzNSBvZiBgZnMvc3VwZXIuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHN1cGVyYmxvY2sgaGFuZGxpbmcgaXMgdGFraW5nIHBsYWNlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHN1cGVyYmxvY2sgaW5pdGlhbGl6YXRpb24sIG1vdW50aW5nLCB1bm1vdW50aW5nLCBhbmQgcG9zc2libHkgc29tZSBtYW5hZ2VtZW50IG9mIHRoZSBzdXBlcmJsb2NrJiMzOTtzIGluLW1lbW9yeSByZXByZXNlbnRhdGlvbi4gSSBrbm93IHRoaXMgYXJlYSBpbnRpbWF0ZWx5LCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgdGhlIG1haW4gZnVuY3Rpb25zIGNhbGxlZC4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGJlaW5nIHVzZWQuIEkgd2lsbCBiZSBsb29raW5nIG91dCBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgaG93IHRoZSBzdXBlcmJsb2NrIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBvciBzdG9yYWdlLiBBbnkgaW50ZXJlc3RpbmcgbG9ja2luZyBtZWNoYW5pc21zIHdpbGwgYmUgb2YgcGFydGljdWxhciBpbnRlcmVzdCwgZXNwZWNpYWxseSByZWFkLXdyaXRlIGxvY2tzIG9yIHNwaW5sb2NrcyB1c2VkIHRvIHByb3RlY3QgdGhlIHN1cGVyYmxvY2sgZGF0YS4gSSYjMzk7bSBob3BpbmcgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGlzIGNvZGUgd2l0aCB0aGUgVkZTIGxheWVyLCBwYXJ0aWN1bGFybHkgaG93IHN1cGVyYmxvY2sgaW5mb3JtYXRpb24gaXMgY29tbXVuaWNhdGVkIHVwd2FyZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODYwOlx0XHRpbnQgZXJyO1xuIDg2MTpcdFxuIDg2MjpcdFx0LypcbiA4NjM6XHRcdCAqIE5ldmVyIGFsbG93IHNfdXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMgd2hlbiBGU19VU0VSTlNfTU9VTlQgb3JcbiA4NjQ6XHRcdCAqIEZTX1VTRVJOU19ERUxFR0FUQUJMRSBpcyBub3Qgc2V0LCBhcyB0aGUgZmlsZXN5c3RlbSBpcyBsaWtlbHlcbiA4NjU6XHRcdCAqIHVucHJlcGFyZWQgdG8gaGFuZGxlIGl0LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBmc2NvbmZpZygpIGlzIGNhbGxlZFxuIDg2NjpcdFx0ICogZnJvbSBpbml0X3VzZXJfbnMgd2l0aCBhbiBmc19mZCBvcGVuZWQgaW4gYW5vdGhlciB1c2VyIG5hbWVzcGFjZS5cbiA4Njc6XHRcdCAqL1xuIDg2ODpcdFx0aWYgKHVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zIFx1MDAyNlx1MDAyNlxuIDg2OTpcdFx0ICAgICEoZmMtXHUwMDNlZnNfdHlwZS1cdTAwM2Vmc19mbGFncyBcdTAwMjYgKEZTX1VTRVJOU19NT1VOVCB8IEZTX1VTRVJOU19ERUxFR0FUQUJMRSkpKSB7XG4gODcwOlx0XHRcdGVycm9yZmMoZmMsIFwmIzM0O1ZGUzogTW91bnRpbmcgZnJvbSBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZSBpcyBub3QgYWxsb3dlZFwmIzM0Oyk7XG4gODcxOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FUEVSTSk7XG4gODcyOlx0XHR9XG4gODczOlx0XG4gODc0Olx0cmV0cnk6XG4gODc1Olx0XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4gODc2Olx0XHRpZiAodGVzdCkge1xuIDg3NzpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShvbGQsIFx1MDAyNmZjLVx1MDAzZWZzX3R5cGUtXHUwMDNlZnNfc3VwZXJzLCBzX2luc3RhbmNlcykge1xuIDg3ODpcdFx0XHRcdC8qIE9ubHkgdW5saW5rZWQgYXQgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UuICovXG4gODc5Olx0XHRcdFx0aWYgKHN1cGVyX2ZsYWdzKG9sZCwgU0JfREVBRCkpXG4gODgwOlx0XHRcdFx0XHRjb250aW51ZTtcbiA4ODE6XHRcdFx0XHRpZiAodGVzdChvbGQsIGZjKSlcbiA4ODI6XHRcdFx0XHRcdGdvdG8gc2hhcmVfZXh0YW50X3NiO1xuIDg4MzpcdFx0XHR9XG4gODg0Olx0XHR9XG4gODg1Olx0XHRpZiAoIXMpIHtcbiA4ODY6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4gODg3Olx0XG4gODg4Olx0XHRcdHMgPSBhbGxvY19zdXBlcihmYy1cdTAwM2Vmc190eXBlLCBmYy1cdTAwM2VzYl9mbGFncywgdXNlcl9ucyk7XG4gODg5Olx0XHRcdGlmICghcylcbiA4OTA6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiA4OTE6XHRcdFx0Z290byByZXRyeTtcbiA4OTI6XHRcdH1cbiA4OTM6XHRcbiA4OTQ6XHRcdHMtXHUwMDNlc19mc19pbmZvID0gZmMtXHUwMDNlc19mc19pbmZvO1xuIDg5NTpcdFx0ZXJyID0gc2V0KHMsIGZjKTtcbiA4OTY6XHRcdGlmIChlcnIpIHtcbiA4OTc6XHRcdFx0VkZTX1dBUk5fT05fT05DRShzLVx1MDAzZXNfc3VwZXJfZGV2LVx1MDAzZXNkX2Rldik7XG4gODk4Olx0XHRcdHMtXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbiA4OTk6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4gOTAwOlx0XHRcdGRlc3Ryb3lfdW51c2VkX3N1cGVyKHMpO1xuIDkwMTpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIDkwMjpcdFx0fVxuIDkwMzpcdFx0VkZTX1dBUk5fT05fT05DRSghcy1cdTAwM2VzX3N1cGVyX2Rldi1cdTAwM2VzZF9kZXYpO1xuIDkwNDpcdFx0ZmMtXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbiA5MDU6XHRcdHMtXHUwMDNlc190eXBlID0gZmMtXHUwMDNlZnNfdHlwZTtcbiA5MDY6XHRcdHMtXHUwMDNlc19pZmxhZ3MgfD0gZmMtXHUwMDNlc19pZmxhZ3M7XG4gOTA3Olx0XHRzdHJzY3B5KHMtXHUwMDNlc19pZCwgcy1cdTAwM2VzX3R5cGUtXHUwMDNlbmFtZSwgc2l6ZW9mKHMtXHUwMDNlc19pZCkpO1xuIDkwODpcdFx0LypcbiA5MDk6XHRcdCAqIE1ha2UgdGhlIHN1cGVyYmxvY2sgdmlzaWJsZSBvbiBAc3VwZXJfYmxvY2tzIGFuZCBAZnNfc3VwZXJzLlxuIDkxMDpcdFx0ICogSXQmIzM5O3MgaW4gYSBuYXNjZW50IHN0YXRlIGFuZCB1c2VycyBzaG91bGQgd2FpdCBvbiBTQl9CT1JOIG9yXG4gOTExOlx0XHQgKiBTQl9EWUlORyB0byBiZSBzZXQuXG4gOTEyOlx0XHQgKi9cbiA5MTM6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cy1cdTAwM2VzX2xpc3QsIFx1MDAyNnN1cGVyX2Jsb2Nrcyk7XG4gOTE0Olx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZzLVx1MDAzZXNfaW5zdGFuY2VzLCBcdTAwMjZzLVx1MDAzZXNfdHlwZS1cdTAwM2Vmc19zdXBlcnMpO1xuIDkxNTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4gOTE2Olx0XHRnZXRfZmlsZXN5c3RlbShzLVx1MDAzZXNfdHlwZSk7XG4gOTE3Olx0XHRzaHJpbmtlcl9yZWdpc3RlcihzLVx1MDAzZXNfc2hyaW5rKTtcbiA5MTg6XHRcdHJldHVybiBzO1xuIDkxOTpcdFxuIDkyMDpcdHNoYXJlX2V4dGFudF9zYjpcbiA5MjE6XHRcdGlmICh1c2VyX25zICE9IG9sZC1cdTAwM2VzX3VzZXJfbnMgfHwgZmMtXHUwMDNlZXhjbHVzaXZlKSB7XG4gOTIyOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuIDkyMzpcdFx0XHRkZXN0cm95X3VudXNlZF9zdXBlcihzKTtcbiA5MjQ6XHRcdFx0aWYgKGZjLVx1MDAzZWV4Y2x1c2l2ZSlcbiA5MjU6XHRcdFx0XHR3YXJuZmMoZmMsIFwmIzM0O3JldXNpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbSBub3QgYWxsb3dlZFwmIzM0Oyk7XG4gOTI2Olx0XHRcdGVsc2VcbiA5Mjc6XHRcdFx0XHR3YXJuZmMoZmMsIFwmIzM0O3JldXNpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbSBpbiBhbm90aGVyIG5hbWVzcGFjZSBub3QgYWxsb3dlZFwmIzM0Oyk7XG4gOTI4Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FQlVTWSk7XG4gOTI5Olx0XHR9XG4gOTMwOlx0XHRpZiAoIWdyYWJfc3VwZXIob2xkKSlcbiA5MzE6XHRcdFx0Z290byByZXRyeTtcbiA5MzI6XHRcdGRlc3Ryb3lfdW51c2VkX3N1cGVyKHMpO1xuIDkzMzpcdFx0cmV0dXJuIG9sZDtcbiA5MzQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODE2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgY29tbWl0IGhpc3RvcnkgdXNpbmcgYGdpdCBsb2dgLCBvciBhdCBsZWFzdCBjaGVjayB0aGUgY29tbWl0IGNvbnRleHQgaWYgYSBkaXJlY3QgdG9vbCBpc24mIzM5O3QgYXZhaWxhYmxlLiBVbmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UgaXMgY3J1Y2lhbC4KCkFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgZnMva2VybmZzL21vdW50LmNgIGFuZCBgZnMvc3VwZXIuY2AuIFRoYXQmIzM5O3MgYWxyZWFkeSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSB0aGUgbGF0dGVyLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYGZzL3N1cGVyLmNgIGNoYW5nZXM6CgoxLiAgKipgcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylgKio6IFRoZSBvcmlnaW5hbCBjb2RlIHBsYWNlZCBgaGxpc3RfZGVsX2luaXQoJmFtcDtzYi0mZ3Q7c19pbnN0YW5jZXMpYCBhbmQgYHB1dF9maWxlc3lzdGVtKHR5cGUpYCBpbiBga2lsbF9zdXBlcl9ub3RpZnkoKWAgYW5kIGBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcigpYC4gTm93LCB0aGVzZSBhcmUgbW92ZWQgdG8gYHB1dF9zdXBlcigpYCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zIHJlbGF0ZWQgdG8gcGFzc2l2ZSByZWZlcmVuY2UgY291bnRzLgoyLiAgKipga2lsbF9zdXBlcl9ub3RpZnkoKWAqKjogIFRoZSByZW1vdmFsIG9mIGBobGlzdF9kZWxfaW5pdGAgZnJvbSB0aGlzIGZ1bmN0aW9uIGlzIG5vdGV3b3J0aHkuIEl0IGFsc28gbG9va3MgbGlrZSBzZXR0aW5nIGBTQl9ERUFEYCBub3cgcmVxdWlyZXMgcHJvdGVjdGlvbiBmcm9tIGBzYl9sb2NrYCB3aGljaCBpcyBnb29kLgozLiAgKipgc2dldF9mYygpYCoqOiBUaGUgY2hhbmdlZCBjb25kaXRpb25hbCBmb3IgYGZzX3N1cGVyc2AgbGlzdCB0cmF2ZXJzYWwgaXMgYWxzbyB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGFzIGl0cyByZWxhdGVkIHRvIGZpbmRpbmcgZGVhZCBzdXBlcmJsb2Nrcy4KNC4gICoqYGtlcm5mc19raWxsX3NiKClgKio6ICBBIGNvbW1lbnQgdXBkYXRlIGhlcmUgaW5kaWNhdGVzIGEgY2hhbmdlIGluIHRoZSBzdXBlcmJsb2NrIHN0YXRlIHRvIG1hcmsgaXQgZGVhZC4KCkVzc2VudGlhbGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgaG93IHN1cGVyYmxvY2tzIGFyZSBtYW5hZ2VkIGFuZCBjbGVhbmVkIHVwLCBlc3BlY2lhbGx5IGluIGNvbmN1cnJlbnQgc2NlbmFyaW9zLiAgSXQmIzM5O3MgdG91Y2hpbmcgdGhlIGxpZmVjeWNsZSwgbG9ja2luZywgYW5kIGxpc3QgbWFuYWdlbWVudCBvZiB0aGVzZSBzdXBlcmJsb2Nrcy4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246ICoqV29ydGhGdXp6aW5nPyoqCgpEZWZpbml0ZWx5LiBgZnMvc3VwZXIuY2AgaXMgdGhlIGNvcmUgb2YgdGhlIFZGUyBzdXBlcmJsb2NrIGltcGxlbWVudGF0aW9uLiAgSXQmIzM5O3MgaW52b2x2ZWQgaW4gc3VwZXJibG9jayBsaWZlY3ljbGUsIGNvbmN1cnJlbnQgbW91bnRpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgbG9ja2luZywgYW5kIGxpc3Qgb3BlcmF0aW9ucyBvbiBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgdG91Y2hlcyBzdHVmZiBsaWtlIGBzZ2V0X2ZjKClgLCBgZ3JhYl9zdXBlcigpYCwgYHB1dF9zdXBlcigpYCwgYGtpbGxfc3VwZXJfbm90aWZ5KClgLCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpYCwgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKClgIHdoaWNoIEkgcmVndWxhcmx5IHVzZSwgc28gdGhpcyBsb29rcyBsaWtlIGhpZ2gtY29uY3VycmVuY3ksIGNyaXRpY2FsIFZGUyBjb3JlIGxvZ2ljLiAgSXQmIzM5O3MgbGlrZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGNvbW1vbiBzeXNjYWxscyBsaWtlIGBtb3VudGAsIGB1bW91bnRgLCBgZnNvcGVuYCwgYGZzbW91bnRgLCBgZnNjb25maWdgLCBldGMuIFllcywgdGhpcyBpcyBjb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZXJlZm9yZSBpcyBpbmRlZWQgd29ydGggZnV6emluZy4KCkZpbmFsbHksIHJlZ2FyZGluZyBgRW5hYmxlQ29uZmlnc2A6IGBmcy9zdXBlci5jYCBpcyBhbHdheXMgY29tcGlsZWQuIGBmcy9rZXJuZnMvbW91bnQuY2AgcmVxdWlyZXMgYENPTkZJR19LRVJORlNgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZnMvTWFrZWZpbGVgIGFuZCBgZnMva2VybmZzL01ha2VmaWxlYCAvIGBmcy9LY29uZmlnYCB0byBjb25maXJtIGFueSByZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2VybmZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9NTU9b2JqLSQoQ09ORklHX1BST0NfRlMpXHRcdCYjNDM7PSBwcm9jL1xuZnMvTWFrZWZpbGU6NTY6b2JqLSQoQ09ORklHX0tFUk5GUylcdFx0JiM0Mzs9IGtlcm5mcy9cbmZzL01ha2VmaWxlLTU3LW9iai0kKENPTkZJR19TWVNGUylcdFx0JiM0Mzs9IHN5c2ZzL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUwNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgZmlsZXN5c3RlbS1yZWxhdGVkIHRhc2sgSSYjMzk7bSB3b3JraW5nIG9uIGFyZSBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiBgZnMva2VybmZzL0tjb25maWdgIG9yLCBtb3JlIGJyb2FkbHksIGBmcy9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgY29udGFpbmluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhleSYjMzk7cmUgY2VudHJhbCB0byBob3cgd2UgbWFuYWdlIGFuZCBleHBvc2UgZmlsZXN5c3RlbS1zcGVjaWZpYyBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UgYW5kIHNlZSB3aGF0IEkgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtFUk5GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9rZXJuZnMvS2NvbmZpZy01LVxuZnMva2VybmZzL0tjb25maWc6Njpjb25maWcgS0VSTkZTXG5mcy9rZXJuZnMvS2NvbmZpZy03LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDczMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRmlsZXN5c3RlbSBTdXBlcmJsb2NrIEhhbmRsaW5nKioKCk9rYXksIHNvIEtFUk5GUyBpcyBhIGJvb2xlYW4gY29uZmlnIG9wdGlvbiwgc2VsZWN0ZWQgYnkgdGhlIGxpa2VzIG9mIFNZU0ZTIGFuZCBDR1JPVVBTLCBidXQgYGZzL3N1cGVyLmNgIGlzIGFsd2F5cyBjb21waWxlZCBpbiDigJMgaXQmIzM5O3MgdW5jb25kaXRpb25hbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIsIGJ1dCBpdCBzZWVtcyBsaWtlIGBmcy9zdXBlci5jYCBpcyBjb3JlIFZGUywgYWx3YXlzIGluY2x1ZGVkIGluIGB2bWxpbnV4YC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGBGb2N1c1N5bWJvbHNgIGZvciB0aGlzIGFuYWx5c2lzLiBJIGhhdmUgdG8gYXZvaWQgdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyB0aGUgdWJpcXVpdG91cyBmdW5jdGlvbnMgYW5kIGhvdCBwYXRocyB0aGF0IGFyZSBjYWxsZWQgYnkgcHJhY3RpY2FsbHkgZXZlcnl0aGluZy4gSW5zdGVhZCwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgKnNwZWNpZmljYWxseSogaW1wbGVtZW50IHRoZSBjaGFuZ2VkIGxvZ2ljIG9yIGFjdCBhcyBBUEkgZW50cnkgcG9pbnRzIGZvciB0aGlzIHBhcnRpY3VsYXIgc3Vic3lzdGVtLgoKTG9va2luZyBhdCB0aGUgcGF0Y2gsIEkgc2VlIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9uczoKCjEuICBgc2dldF9mY2A6IEl0JiMzOTtzIHN1cHBvc2VkIHRvIGZpbmQgb3IgY3JlYXRlIGEgc3VwZXJibG9jayB1c2luZyBgZnNfY29udGV4dGAsIGFuZCB0aGUgbG9naWMgc2VlbXMgdG8gc2tpcCBkZWFkIHN1cGVyYmxvY2tzLgoyLiAgYGtpbGxfc3VwZXJfbm90aWZ5YDogVGhpcyBpcyBhIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBmb3Igc3VwZXJibG9jayB0ZWFyZG93bi4gSXQmIzM5O3MgbW9kaWZpZWQgd2l0aCBgc3VwZXJfd2FrZShzYiwgU0JfREVBRClgLiBJdCYjMzk7cyBzdGF0aWMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgbm90IGlubGluZWQuCjMuICBgcHV0X3N1cGVyYDogQSBub24tc3RhdGljIGZ1bmN0aW9uIGluIGBmcy9zdXBlci5jYC4gSXQmIzM5O3MgZGVjbGFyZWQgc29tZXdoZXJlIGluIGBpbmNsdWRlL2xpbnV4L2ZzLmhgIG9yIGBmcy9pbnRlcm5hbC5oYCwgc28gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQuCjQuICBgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJgOiBBbm90aGVyIG5vbi1zdGF0aWMgZXhwb3J0ZWQgZnVuY3Rpb24gaW4gYGZzL3N1cGVyLmNgLgo1LiAgYGdlbmVyaWNfc2h1dGRvd25fc3VwZXJgOiBBbHNvIGEgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbiBpbiBgZnMvc3VwZXIuY2AuIFRoaXMgaXMgcGFydCBvZiB0aGUgc2h1dGRvd24gcGF0aC4KNi4gIGBrZXJuZnNfa2lsbF9zYmA6IE5vbi1zdGF0aWMsIGJ1dCBpbiBgZnMva2VybmZzL21vdW50LmNgLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNhbGxlcnMgYW5kIGRlY2xhcmF0aW9ucyBvZiB0aGVzZSBzeW1ib2xzIHRvIGNvbmZpcm0gd2hpY2ggYXJlIHZhbGlkLCBub24tdWJpcXVpdG91cyBzeW1ib2xzIHdpdGhpbiB0aGUgdm1saW51eCBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B1dF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjIzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5mcy9hZGZzL3N1cGVyLmM9NTQ9c3RhdGljIGludCBhZGZzX2NoZWNrZGlzY3JlY29yZChzdHJ1Y3QgYWRmc19kaXNjcmVjb3JkICpkcilcbi0tXG5mcy9hZGZzL3N1cGVyLmMtOTItXG5mcy9hZGZzL3N1cGVyLmM6OTM6c3RhdGljIHZvaWQgYWRmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2FkZnMvc3VwZXIuYy05NC17XG4tLVxuZnMvYWRmcy9zdXBlci5jPTI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYWRmc19zb3BzID0ge1xuLS1cbmZzL2FkZnMvc3VwZXIuYy0yNDgtXHQud3JpdGVfaW5vZGVcdD0gYWRmc193cml0ZV9pbm9kZSxcbmZzL2FkZnMvc3VwZXIuYzoyNDk6XHQucHV0X3N1cGVyXHQ9IGFkZnNfcHV0X3N1cGVyLFxuZnMvYWRmcy9zdXBlci5jLTI1MC1cdC5zdGF0ZnNcdFx0PSBhZGZzX3N0YXRmcyxcbi0tXG5mcy9hZmZzL3N1cGVyLmM9NDk9c3RhdGljIHZvaWRcbmZzL2FmZnMvc3VwZXIuYzo1MDphZmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYWZmcy9zdXBlci5jLTUxLXtcbi0tXG5mcy9hZmZzL3N1cGVyLmM9MTUwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZmZzX3NvcHMgPSB7XG4tLVxuZnMvYWZmcy9zdXBlci5jLTE1NC1cdC5ldmljdF9pbm9kZVx0PSBhZmZzX2V2aWN0X2lub2RlLFxuZnMvYWZmcy9zdXBlci5jOjE1NTpcdC5wdXRfc3VwZXJcdD0gYWZmc19wdXRfc3VwZXIsXG5mcy9hZmZzL3N1cGVyLmMtMTU2LVx0LnN5bmNfZnNcdD0gYWZmc19zeW5jX2ZzLFxuLS1cbmZzL2JlZnMvQ2hhbmdlTG9nPTE3Nj1WZXJzaW9uIDAuNDUgKDIwMDEtMTAtMjkpXG4tLVxuZnMvYmVmcy9DaGFuZ2VMb2ctMTgzLVx0c3RydWN0dXJlcyBpbnRvIHRoZSBnZW5lcmljIHBvaW50ZXIgZmllbGRzIG9mIHRoZSBwdWJsaWMgc3RydWN0dXJlcyBcbmZzL2JlZnMvQ2hhbmdlTG9nOjE4NDpcdHdpdGgga21hbGxvYygpLiBwdXRfc3VwZXIgYW5kIHB1dF9pbm9kZSBmcmVlIHRoZW0uIFRoaXMgYWxsb3dzIHVzIG5vdCBcbmZzL2JlZnMvQ2hhbmdlTG9nLTE4NS1cdHRvIGhhdmUgdG8gdG91Y2ggdGhlIGRlZmluaXRpb25zIG9mIHRoZSBwdWJsaWMgc3RydWN0dXJlcyBpbiBcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmM9NTY9c3RhdGljIGludCBiZWZzX25sczJ1dGYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqaW4sIGludCBpbl9sZW4sXG5mcy9iZWZzL2xpbnV4dmZzLmMtNTctXHRcdFx0Y2hhciAqKm91dCwgaW50ICpvdXRfbGVuKTtcbmZzL2JlZnMvbGludXh2ZnMuYzo1ODpzdGF0aWMgdm9pZCBiZWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG5mcy9iZWZzL2xpbnV4dmZzLmMtNTktc3RhdGljIGludCBiZWZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdGZzICopO1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz02OD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmVmc19zb3BzID0ge1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy03MC1cdC5mcmVlX2lub2RlXHQ9IGJlZnNfZnJlZV9pbm9kZSwgLyogZGVhbGxvY2F0ZSBhbiBpbm9kZSAqL1xuZnMvYmVmcy9saW51eHZmcy5jOjcxOlx0LnB1dF9zdXBlclx0PSBiZWZzX3B1dF9zdXBlcixcdC8qIHVuaW5pdCBzdXBlciAqL1xuZnMvYmVmcy9saW51eHZmcy5jLTcyLVx0LnN0YXRmc1x0XHQ9IGJlZnNfc3RhdGZzLFx0Lyogc3RhdGZzICovXG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTc0OD1zdGF0aWMgdm9pZFxuZnMvYmVmcy9saW51eHZmcy5jOjc0OTpiZWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYmVmcy9saW51eHZmcy5jLTc1MC17XG4tLVxuZnMvYmZzL2lub2RlLmM9MTk1PXN0YXRpYyB2b2lkIGJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2Jmcy9pbm9kZS5jLTI0Mi1cbmZzL2Jmcy9pbm9kZS5jOjI0MzpzdGF0aWMgdm9pZCBiZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbmZzL2Jmcy9pbm9kZS5jLTI0NC17XG4tLVxuZnMvYmZzL2lub2RlLmM9MzE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcbi0tXG5mcy9iZnMvaW5vZGUuYy0zMjMtXHQuZXZpY3RfaW5vZGVcdD0gYmZzX2V2aWN0X2lub2RlLFxuZnMvYmZzL2lub2RlLmM6MzI0Olx0LnB1dF9zdXBlclx0PSBiZnNfcHV0X3N1cGVyLFxuZnMvYmZzL2lub2RlLmMtMzI1LVx0LnN0YXRmc1x0XHQ9IGJmc19zdGF0ZnMsXG4tLVxuZnMvYnRyZnMvc3VwZXIuYz02OT1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYnRyZnNfZnNfdHlwZTtcbmZzL2J0cmZzL3N1cGVyLmMtNzAtXG5mcy9idHJmcy9zdXBlci5jOjcxOnN0YXRpYyB2b2lkIGJ0cmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYnRyZnMvc3VwZXIuYy03Mi17XG4tLVxuZnMvYnRyZnMvc3VwZXIuYz0yNTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBidHJmc19zdXBlcl9vcHMgPSB7XG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0yNTI4LVx0LmV2aWN0X2lub2RlXHQ9IGJ0cmZzX2V2aWN0X2lub2RlLFxuZnMvYnRyZnMvc3VwZXIuYzoyNTI5Olx0LnB1dF9zdXBlclx0PSBidHJmc19wdXRfc3VwZXIsXG5mcy9idHJmcy9zdXBlci5jLTI1MzAtXHQuc3luY19mc1x0PSBidHJmc19zeW5jX2ZzLFxuLS1cbmZzL2NlcGgvc3VwZXIuYz0zOD1zdGF0aWMgTElTVF9IRUFEKGNlcGhfZnNjX2xpc3QpO1xuLS1cbmZzL2NlcGgvc3VwZXIuYy00OC0gKi9cbmZzL2NlcGgvc3VwZXIuYzo0OTpzdGF0aWMgdm9pZCBjZXBoX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG5mcy9jZXBoL3N1cGVyLmMtNTAte1xuLS1cbmZzL2NlcGgvc3VwZXIuYz0xMDQ4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBjZXBoX3N1cGVyX29wcyA9IHtcbi0tXG5mcy9jZXBoL3N1cGVyLmMtMTA1NC1cdC5zeW5jX2ZzICAgICAgICA9IGNlcGhfc3luY19mcyxcbmZzL2NlcGgvc3VwZXIuYzoxMDU1Olx0LnB1dF9zdXBlclx0PSBjZXBoX3B1dF9zdXBlcixcbmZzL2NlcGgvc3VwZXIuYy0xMDU2LVx0LnNob3dfb3B0aW9ucyAgID0gY2VwaF9zaG93X29wdGlvbnMsXG4tLVxuZnMvY29kYS9pbm9kZS5jPTM5PXN0YXRpYyB2b2lkIGNvZGFfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuZnMvY29kYS9pbm9kZS5jOjQwOnN0YXRpYyB2b2lkIGNvZGFfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcbmZzL2NvZGEvaW5vZGUuYy00MS1zdGF0aWMgaW50IGNvZGFfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XG4tLVxuZnMvY29kYS9pbm9kZS5jPTEwMD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY29kYV9zdXBlcl9vcGVyYXRpb25zID1cbi0tXG5mcy9jb2RhL2lub2RlLmMtMTA0LVx0LmV2aWN0X2lub2RlXHQ9IGNvZGFfZXZpY3RfaW5vZGUsXG5mcy9jb2RhL2lub2RlLmM6MTA1Olx0LnB1dF9zdXBlclx0PSBjb2RhX3B1dF9zdXBlcixcbmZzL2NvZGEvaW5vZGUuYy0xMDYtXHQuc3RhdGZzXHRcdD0gY29kYV9zdGF0ZnMsXG4tLVxuZnMvY29kYS9pbm9kZS5jPTE5OT1zdGF0aWMgaW50IGNvZGFfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvY29kYS9pbm9kZS5jLTI3Ny1cbmZzL2NvZGEvaW5vZGUuYzoyNzg6c3RhdGljIHZvaWQgY29kYV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2NvZGEvaW5vZGUuYy0yNzkte1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9OTQ2PXN0YXRpYyB2b2lkIGVyb2ZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTk1OS1cbmZzL2Vyb2ZzL3N1cGVyLmM6OTYwOnN0YXRpYyB2b2lkIGVyb2ZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXJvZnMvc3VwZXIuYy05NjEte1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9MTEzMj1jb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBlcm9mc19zb3BzID0ge1xuZnMvZXJvZnMvc3VwZXIuYzoxMTMzOlx0LnB1dF9zdXBlciA9IGVyb2ZzX3B1dF9zdXBlcixcbmZzL2Vyb2ZzL3N1cGVyLmMtMTEzNC1cdC5hbGxvY19pbm9kZSA9IGVyb2ZzX2FsbG9jX2lub2RlLFxuLS1cbmZzL2V4ZmF0L3N1cGVyLmM9MzQ9c3RhdGljIHZvaWQgZXhmYXRfc2V0X2lvY2hhcnNldChzdHJ1Y3QgZXhmYXRfbW91bnRfb3B0aW9ucyAqb3B0cyxcbi0tXG5mcy9leGZhdC9zdXBlci5jLTQzLVxuZnMvZXhmYXQvc3VwZXIuYzo0NDpzdGF0aWMgdm9pZCBleGZhdF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4ZmF0L3N1cGVyLmMtNDUte1xuLS1cbmZzL2V4ZmF0L3N1cGVyLmM9MjA2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleGZhdF9zb3BzID0ge1xuLS1cbmZzL2V4ZmF0L3N1cGVyLmMtMjEwLVx0LmV2aWN0X2lub2RlXHQ9IGV4ZmF0X2V2aWN0X2lub2RlLFxuZnMvZXhmYXQvc3VwZXIuYzoyMTE6XHQucHV0X3N1cGVyXHQ9IGV4ZmF0X3B1dF9zdXBlcixcbmZzL2V4ZmF0L3N1cGVyLmMtMjEyLVx0LnN0YXRmc1x0XHQ9IGV4ZmF0X3N0YXRmcyxcbi0tXG5mcy9leHQyL3N1cGVyLmM9MTY1PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQyX3F1b3RhX29mZl91bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQyL3N1cGVyLmMtMTY5LVxuZnMvZXh0Mi9zdXBlci5jOjE3MDpzdGF0aWMgdm9pZCBleHQyX3B1dF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpXG5mcy9leHQyL3N1cGVyLmMtMTcxLXtcbi0tXG5mcy9leHQyL3N1cGVyLmM9MzYxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQyX3NvcHMgPSB7XG4tLVxuZnMvZXh0Mi9zdXBlci5jLTM2Ni1cdC5ldmljdF9pbm9kZVx0PSBleHQyX2V2aWN0X2lub2RlLFxuZnMvZXh0Mi9zdXBlci5jOjM2NzpcdC5wdXRfc3VwZXJcdD0gZXh0Ml9wdXRfc3VwZXIsXG5mcy9leHQyL3N1cGVyLmMtMzY4LVx0LnN5bmNfZnNcdD0gZXh0Ml9zeW5jX2ZzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz0xMjY5PXN0YXRpYyB2b2lkIGV4dDRfZmxleF9ncm91cHNfZnJlZShzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEyODEtXG5mcy9leHQ0L3N1cGVyLmM6MTI4MjpzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTEyODMte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNjc3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE2ODUtXHQuZXZpY3RfaW5vZGVcdD0gZXh0NF9ldmljdF9pbm9kZSxcbmZzL2V4dDQvc3VwZXIuYzoxNjg2Olx0LnB1dF9zdXBlclx0PSBleHQ0X3B1dF9zdXBlcixcbmZzL2V4dDQvc3VwZXIuYy0xNjg3LVx0LnN5bmNfZnNcdD0gZXh0NF9zeW5jX2ZzLFxuLS1cbmZzL2YyZnMvZjJmcy5oPTUxMT1zdHJ1Y3QgZGlzY2FyZF9wb2xpY3kge1xuLS1cbmZzL2YyZnMvZjJmcy5oLTUyMC1cdGJvb2wgb3JkZXJlZDtcdFx0XHQvKiBpc3N1ZSBkaXNjYXJkIGJ5IGxiYSBvcmRlciAqL1xuZnMvZjJmcy9mMmZzLmg6NTIxOlx0Ym9vbCB0aW1lb3V0O1x0XHRcdC8qIGRpc2NhcmQgdGltZW91dCBmb3IgcHV0X3N1cGVyICovXG5mcy9mMmZzL2YyZnMuaC01MjItXHR1bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHk7XHQvKiBkaXNjYXJkIGdyYW51bGFyaXR5ICovXG4tLVxuZnMvZjJmcy9zaHJpbmtlci5jPTQwPXVuc2lnbmVkIGxvbmcgZjJmc19zaHJpbmtfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxuZnMvZjJmcy9zaHJpbmtlci5jLTUxLVxuZnMvZjJmcy9zaHJpbmtlci5jOjUyOlx0XHQvKiBzdG9wIGYyZnNfcHV0X3N1cGVyICovXG5mcy9mMmZzL3Nocmlua2VyLmMtNTMtXHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZzYmktXHUwMDNldW1vdW50X211dGV4KSkge1xuLS1cbmZzL2YyZnMvc2hyaW5rZXIuYz03OT11bnNpZ25lZCBsb25nIGYyZnNfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxuZnMvZjJmcy9zaHJpbmtlci5jLTk4LVxuZnMvZjJmcy9zaHJpbmtlci5jOjk5Olx0XHQvKiBzdG9wIGYyZnNfcHV0X3N1cGVyICovXG5mcy9mMmZzL3Nocmlua2VyLmMtMTAwLVx0XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2c2JpLVx1MDAzZXVtb3VudF9tdXRleCkpIHtcbi0tXG5mcy9mMmZzL3Nocmlua2VyLmM9MTM0PXVuc2lnbmVkIGludCBmMmZzX2RvbmF0ZV9maWxlcyh2b2lkKVxuLS1cbmZzL2YyZnMvc2hyaW5rZXIuYy0xNDQtXG5mcy9mMmZzL3Nocmlua2VyLmM6MTQ1Olx0XHQvKiBzdG9wIGYyZnNfcHV0X3N1cGVyICovXG5mcy9mMmZzL3Nocmlua2VyLmMtMTQ2LVx0XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2c2JpLVx1MDAzZXVtb3VudF9tdXRleCkpIHtcbi0tXG5mcy9mMmZzL3Nocmlua2VyLmM9MjA1PXZvaWQgZjJmc19yZWNsYWltX2NhY2hlcyh1bnNpZ25lZCBpbnQgcmVjbGFpbV9jYWNoZXNfa2IpXG4tLVxuZnMvZjJmcy9zaHJpbmtlci5jLTIxNC1cbmZzL2YyZnMvc2hyaW5rZXIuYzoyMTU6XHRcdC8qIHN0b3AgZjJmc19wdXRfc3VwZXIgKi9cbmZzL2YyZnMvc2hyaW5rZXIuYy0yMTYtXHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZzYmktXHUwMDNldW1vdW50X211dGV4KSkge1xuLS1cbmZzL2YyZnMvc3VwZXIuYz0xOTk2PXN0YXRpYyB2b2lkIGRlc3Ryb3lfZGV2aWNlX2xpc3Qoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKVxuLS1cbmZzL2YyZnMvc3VwZXIuYy0yMDA5LVxuZnMvZjJmcy9zdXBlci5jOjIwMTA6c3RhdGljIHZvaWQgZjJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2YyZnMvc3VwZXIuYy0yMDExLXtcbi0tXG5mcy9mMmZzL3N1cGVyLmM9MzU5MT12b2lkIGYyZnNfcXVvdGFfb2ZmX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2YyZnMvc3VwZXIuYy0zNjA4LVx0ICogVGhpcyBjYW4gY2F1c2UgTlVMTCBleGNlcHRpb24gZm9yIG5vZGVfaW5vZGUgaW4gZW5kX2lvLCBzaW5jZVxuZnMvZjJmcy9zdXBlci5jOjM2MDk6XHQgKiBwdXRfc3VwZXIgYWxyZWFkeSBkcm9wcGVkIGl0LlxuZnMvZjJmcy9zdXBlci5jLTM2MTAtXHQgKi9cbi0tXG5mcy9mMmZzL3N1cGVyLmM9MzczMD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZjJmc19zb3BzID0ge1xuLS1cbmZzL2YyZnMvc3VwZXIuYy0zNzQyLVx0LmV2aWN0X2lub2RlXHQ9IGYyZnNfZXZpY3RfaW5vZGUsXG5mcy9mMmZzL3N1cGVyLmM6Mzc0MzpcdC5wdXRfc3VwZXJcdD0gZjJmc19wdXRfc3VwZXIsXG5mcy9mMmZzL3N1cGVyLmMtMzc0NC1cdC5zeW5jX2ZzXHQ9IGYyZnNfc3luY19mcyxcbi0tXG5mcy9mYXQvaW5vZGUuYz03NjE9c3RhdGljIHZvaWQgZGVsYXllZF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcClcbi0tXG5mcy9mYXQvaW5vZGUuYy03NjktXG5mcy9mYXQvaW5vZGUuYzo3NzA6c3RhdGljIHZvaWQgZmF0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZmF0L2lub2RlLmMtNzcxLXtcbi0tXG5mcy9mYXQvaW5vZGUuYz05Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGZhdF9zb3BzID0ge1xuLS1cbmZzL2ZhdC9pbm9kZS5jLTk3NC1cdC5ldmljdF9pbm9kZVx0PSBmYXRfZXZpY3RfaW5vZGUsXG5mcy9mYXQvaW5vZGUuYzo5NzU6XHQucHV0X3N1cGVyXHQ9IGZhdF9wdXRfc3VwZXIsXG5mcy9mYXQvaW5vZGUuYy05NzYtXHQuc3RhdGZzXHRcdD0gZmF0X3N0YXRmcyxcbi0tXG5mcy9nZnMyL3N1cGVyLmM9NTM5PXZvaWQgZ2ZzMl9tYWtlX2ZzX3JvKHN0cnVjdCBnZnMyX3NiZCAqc2RwKVxuLS1cbmZzL2dmczIvc3VwZXIuYy01NzEtLyoqXG5mcy9nZnMyL3N1cGVyLmM6NTcyOiAqIGdmczJfcHV0X3N1cGVyIC0gVW5tb3VudCB0aGUgZmlsZXN5c3RlbVxuZnMvZ2ZzMi9zdXBlci5jLTU3My0gKiBAc2I6IFRoZSBWRlMgc3VwZXJibG9ja1xuLS1cbmZzL2dmczIvc3VwZXIuYy01NzYtXG5mcy9nZnMyL3N1cGVyLmM6NTc3OnN0YXRpYyB2b2lkIGdmczJfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9nZnMyL3N1cGVyLmMtNTc4LXtcbi0tXG5mcy9nZnMyL3N1cGVyLmM9MTU2OT1jb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBnZnMyX3N1cGVyX29wcyA9IHtcbi0tXG5mcy9nZnMyL3N1cGVyLmMtMTU3NC1cdC5ldmljdF9pbm9kZVx0XHQ9IGdmczJfZXZpY3RfaW5vZGUsXG5mcy9nZnMyL3N1cGVyLmM6MTU3NTpcdC5wdXRfc3VwZXJcdFx0PSBnZnMyX3B1dF9zdXBlcixcbmZzL2dmczIvc3VwZXIuYy0xNTc2LVx0LnN5bmNfZnNcdFx0PSBnZnMyX3N5bmNfZnMsXG4tLVxuZnMvaGZzL3N1cGVyLmM9MzU9c3RhdGljIGludCBoZnNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdClcbi0tXG5mcy9oZnMvc3VwZXIuYy00Ny0vKlxuZnMvaGZzL3N1cGVyLmM6NDg6ICogaGZzX3B1dF9zdXBlcigpXG5mcy9oZnMvc3VwZXIuYy00OS0gKlxuZnMvaGZzL3N1cGVyLmM6NTA6ICogVGhpcyBpcyB0aGUgcHV0X3N1cGVyKCkgZW50cnkgaW4gdGhlIHN1cGVyX29wZXJhdGlvbnMgc3RydWN0dXJlIGZvclxuZnMvaGZzL3N1cGVyLmMtNTEtICogSEZTIGZpbGVzeXN0ZW1zLiAgVGhlIHB1cnBvc2UgaXMgdG8gcmVsZWFzZSB0aGUgcmVzb3VyY2VzXG4tLVxuZnMvaGZzL3N1cGVyLmMtNTMtICovXG5mcy9oZnMvc3VwZXIuYzo1NDpzdGF0aWMgdm9pZCBoZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9oZnMvc3VwZXIuYy01NS17XG4tLVxuZnMvaGZzL3N1cGVyLmM9MTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBoZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9oZnMvc3VwZXIuYy0xOTItXHQuZXZpY3RfaW5vZGVcdD0gaGZzX2V2aWN0X2lub2RlLFxuZnMvaGZzL3N1cGVyLmM6MTkzOlx0LnB1dF9zdXBlclx0PSBoZnNfcHV0X3N1cGVyLFxuZnMvaGZzL3N1cGVyLmMtMTk0LVx0LnN5bmNfZnNcdD0gaGZzX3N5bmNfZnMsXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jPTMyMT1zdGF0aWMgdm9pZCBkZWxheWVkX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpwKVxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy0zMjgtXG5mcy9oZnNwbHVzL3N1cGVyLmM6MzI5OnN0YXRpYyB2b2lkIGhmc3BsdXNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9oZnNwbHVzL3N1cGVyLmMtMzMwLXtcbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmM9NDA4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBoZnNwbHVzX3NvcHMgPSB7XG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jLTQxMi1cdC5ldmljdF9pbm9kZVx0PSBoZnNwbHVzX2V2aWN0X2lub2RlLFxuZnMvaGZzcGx1cy9zdXBlci5jOjQxMzpcdC5wdXRfc3VwZXJcdD0gaGZzcGx1c19wdXRfc3VwZXIsXG5mcy9oZnNwbHVzL3N1cGVyLmMtNDE0LVx0LnN5bmNfZnNcdD0gaGZzcGx1c19zeW5jX2ZzLFxuLS1cbmZzL2hwZnMvc3VwZXIuYz0xMjI9c3RhdGljIHZvaWQgbGF6eV9mcmVlX3NiaShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5mcy9ocGZzL3N1cGVyLmMtMTI2LVxuZnMvaHBmcy9zdXBlci5jOjEyNzpzdGF0aWMgdm9pZCBocGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG5mcy9ocGZzL3N1cGVyLmMtMTI4LXtcbi0tXG5mcy9ocGZzL3N1cGVyLmM9NDkxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBocGZzX3NvcHMgPVxuLS1cbmZzL2hwZnMvc3VwZXIuYy00OTUtXHQuZXZpY3RfaW5vZGVcdD0gaHBmc19ldmljdF9pbm9kZSxcbmZzL2hwZnMvc3VwZXIuYzo0OTY6XHQucHV0X3N1cGVyXHQ9IGhwZnNfcHV0X3N1cGVyLFxuZnMvaHBmcy9zdXBlci5jLTQ5Ny1cdC5zdGF0ZnNcdFx0PSBocGZzX3N0YXRmcyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMDk0PXN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTEyNC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExMjU6c3RhdGljIHZvaWQgaHVnZXRsYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTEyNi17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTIzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaHVnZXRsYmZzX29wcyA9IHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjQwLVx0LnN0YXRmc1x0XHQ9IGh1Z2V0bGJmc19zdGF0ZnMsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQxOlx0LnB1dF9zdXBlclx0PSBodWdldGxiZnNfcHV0X3N1cGVyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI0Mi1cdC5zaG93X29wdGlvbnNcdD0gaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyxcbi0tXG5mcy9pbnRlcm5hbC5oPTEzOD1zdHJ1Y3Qgc3VwZXJfYmxvY2sgKnVzZXJfZ2V0X3N1cGVyKGRldl90LCBib29sIGV4Y2wpO1xuZnMvaW50ZXJuYWwuaDoxMzk6dm9pZCBwdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9pbnRlcm5hbC5oLTE0MC12b2lkIF9faW5pdCBzdXBlcl9kZXZfaW5pdCh2b2lkKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTQ4PXN0YXRpYyBpbnQgaXNvZnNfZGVudHJ5X2NtcF9tcyhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy01MS1cbmZzL2lzb2ZzL2lub2RlLmM6NTI6c3RhdGljIHZvaWQgaXNvZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9pc29mcy9pbm9kZS5jLTUzLXtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTEyMj1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaXNvZnNfc29wcyA9IHtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEyNC1cdC5mcmVlX2lub2RlXHQ9IGlzb2ZzX2ZyZWVfaW5vZGUsXG5mcy9pc29mcy9pbm9kZS5jOjEyNTpcdC5wdXRfc3VwZXJcdD0gaXNvZnNfcHV0X3N1cGVyLFxuZnMvaXNvZnMvaW5vZGUuYy0xMjYtXHQuc3RhdGZzXHRcdD0gaXNvZnNfc3RhdGZzLFxuLS1cbmZzL2pmZnMyL3N1cGVyLmMtMzMtXG5mcy9qZmZzMi9zdXBlci5jOjM0OnN0YXRpYyB2b2lkIGpmZnMyX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG5mcy9qZmZzMi9zdXBlci5jLTM1LVxuLS1cbmZzL2pmZnMyL3N1cGVyLmM9MjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBqZmZzMl9zdXBlcl9vcGVyYXRpb25zID1cbi0tXG5mcy9qZmZzMi9zdXBlci5jLTI0Ny1cdC5mcmVlX2lub2RlID1cdGpmZnMyX2ZyZWVfaW5vZGUsXG5mcy9qZmZzMi9zdXBlci5jOjI0ODpcdC5wdXRfc3VwZXIgPVx0amZmczJfcHV0X3N1cGVyLFxuZnMvamZmczIvc3VwZXIuYy0yNDktXHQuc3RhdGZzID1cdGpmZnMyX3N0YXRmcyxcbi0tXG5mcy9qZmZzMi9zdXBlci5jPTMxMD1zdGF0aWMgaW50IGpmZnMyX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvamZmczIvc3VwZXIuYy0zMjItXG5mcy9qZmZzMi9zdXBlci5jOjMyMzpzdGF0aWMgdm9pZCBqZmZzMl9wdXRfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9qZmZzMi9zdXBlci5jLTMyNC17XG4tLVxuZnMvamZzL3N1cGVyLmM9MTgwPXN0YXRpYyBpbmxpbmUgdm9pZCBqZnNfcXVvdGFfb2ZmX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2pmcy9zdXBlci5jLTE4NC1cbmZzL2pmcy9zdXBlci5jOjE4NTpzdGF0aWMgdm9pZCBqZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9qZnMvc3VwZXIuYy0xODYte1xuLS1cbmZzL2pmcy9zdXBlci5jLTE4OS1cbmZzL2pmcy9zdXBlci5jOjE5MDpcdGpmc19pbmZvKFwmIzM0O0luIGpmc19wdXRfc3VwZXJcJiMzNDspO1xuZnMvamZzL3N1cGVyLmMtMTkxLVxuLS1cbmZzL2pmcy9zdXBlci5jPTg0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgamZzX3N1cGVyX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvamZzL3N1cGVyLmMtODQ5LVx0LmV2aWN0X2lub2RlXHQ9IGpmc19ldmljdF9pbm9kZSxcbmZzL2pmcy9zdXBlci5jOjg1MDpcdC5wdXRfc3VwZXJcdD0gamZzX3B1dF9zdXBlcixcbmZzL2pmcy9zdXBlci5jLTg1MS1cdC5zeW5jX2ZzXHQ9IGpmc19zeW5jX2ZzLFxuLS1cbmZzL21pbml4L2lub2RlLmM9NDc9c3RhdGljIHZvaWQgbWluaXhfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9taW5peC9pbm9kZS5jLTYxLVxuZnMvbWluaXgvaW5vZGUuYzo2MjpzdGF0aWMgdm9pZCBtaW5peF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL21pbml4L2lub2RlLmMtNjMte1xuLS1cbmZzL21pbml4L2lub2RlLmM9MTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtaW5peF9zb3BzID0ge1xuLS1cbmZzL21pbml4L2lub2RlLmMtMTM0LVx0LmV2aWN0X2lub2RlXHQ9IG1pbml4X2V2aWN0X2lub2RlLFxuZnMvbWluaXgvaW5vZGUuYzoxMzU6XHQucHV0X3N1cGVyXHQ9IG1pbml4X3B1dF9zdXBlcixcbmZzL21pbml4L2lub2RlLmMtMTM2LVx0LnN0YXRmc1x0XHQ9IG1pbml4X3N0YXRmcyxcbi0tXG5mcy9uaWxmczIvc3VwZXIuYz00MzA9aW50IG5pbGZzX3Jlc2l6ZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3U2NCBuZXdzaXplKVxuLS1cbmZzL25pbGZzMi9zdXBlci5jLTUwNC1cbmZzL25pbGZzMi9zdXBlci5jOjUwNTpzdGF0aWMgdm9pZCBuaWxmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL25pbGZzMi9zdXBlci5jLTUwNi17XG4tLVxuZnMvbmlsZnMyL3N1cGVyLmM9NzA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBuaWxmc19zb3BzID0ge1xuLS1cbmZzL25pbGZzMi9zdXBlci5jLTcwOS1cdC5ldmljdF9pbm9kZSAgICA9IG5pbGZzX2V2aWN0X2lub2RlLFxuZnMvbmlsZnMyL3N1cGVyLmM6NzEwOlx0LnB1dF9zdXBlciAgICAgID0gbmlsZnNfcHV0X3N1cGVyLFxuZnMvbmlsZnMyL3N1cGVyLmMtNzExLVx0LnN5bmNfZnMgICAgICAgID0gbmlsZnNfc3luY19mcyxcbi0tXG5mcy9udGZzL3N1cGVyLmM9MTY2OD1zdGF0aWMgdm9pZCBudGZzX3ZvbHVtZV9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0xNzA3LS8qXG5mcy9udGZzL3N1cGVyLmM6MTcwODogKiBudGZzX3B1dF9zdXBlciAtIGNhbGxlZCBieSB0aGUgdmZzIHRvIHVubW91bnQgYSB2b2x1bWVcbmZzL250ZnMvc3VwZXIuYy0xNzA5LSAqIEBzYjpcdFx0dmZzIHN1cGVyYmxvY2sgb2Ygdm9sdW1lIHRvIHVubW91bnRcbmZzL250ZnMvc3VwZXIuYy0xNzEwLSAqL1xuZnMvbnRmcy9zdXBlci5jOjE3MTE6c3RhdGljIHZvaWQgbnRmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL250ZnMvc3VwZXIuYy0xNzEyLXtcbi0tXG5mcy9udGZzL3N1cGVyLmM9MjE2MD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbnRmc19zb3BzID0ge1xuLS1cbmZzL250ZnMvc3VwZXIuYy0yMTY0LVx0LndyaXRlX2lub2RlXHQ9IG50ZnNfd3JpdGVfaW5vZGUsXHQvKiBWRlM6IFdyaXRlIGRpcnR5IGlub2RlIHRvIGRpc2suICovXG5mcy9udGZzL3N1cGVyLmM6MjE2NTpcdC5wdXRfc3VwZXJcdD0gbnRmc19wdXRfc3VwZXIsXHQvKiBTeXNjYWxsOiB1bW91bnQuICovXG5mcy9udGZzL3N1cGVyLmMtMjE2Ni1cdC5zaHV0ZG93blx0PSBudGZzX3NodXRkb3duLFxuLS1cbmZzL250ZnMzL3N1cGVyLmM9NzA5PXN0YXRpYyB2b2lkIG50ZnMzX2ZyZWVfc2JpKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSlcbi0tXG5mcy9udGZzMy9zdXBlci5jLTcyMS1cbmZzL250ZnMzL3N1cGVyLmM6NzIyOnN0YXRpYyB2b2lkIG50ZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9udGZzMy9zdXBlci5jLTcyMy17XG4tLVxuZnMvbnRmczMvc3VwZXIuYz04NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG50ZnNfc29wcyA9IHtcbi0tXG5mcy9udGZzMy9zdXBlci5jLTg3My1cdC5ldmljdF9pbm9kZSA9IG50ZnNfZXZpY3RfaW5vZGUsXG5mcy9udGZzMy9zdXBlci5jOjg3NDpcdC5wdXRfc3VwZXIgPSBudGZzX3B1dF9zdXBlcixcbmZzL250ZnMzL3N1cGVyLmMtODc1LVx0LnN0YXRmcyA9IG50ZnNfc3RhdGZzLFxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MTY3Mz1UUkFDRV9FVkVOVChvY2ZzMl9wYXJzZV9vcHRpb25zLFxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTY4Ni1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MTY4NzpERUZJTkVfT0NGUzJfUE9JTlRFUl9FVkVOVChvY2ZzMl9wdXRfc3VwZXIpO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xNjg4LVxuLS1cbmZzL29jZnMyL3N1cGVyLmM9ODk9c3RhdGljIGludCBvY2ZzMl9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbmZzL29jZnMyL3N1cGVyLmM6OTA6c3RhdGljIHZvaWQgb2NmczJfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvb2NmczIvc3VwZXIuYy05MS1zdGF0aWMgaW50IG9jZnMyX21vdW50X3ZvbHVtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbi0tXG5mcy9vY2ZzMi9zdXBlci5jPTEyOD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb2NmczJfc29wcyA9IHtcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTEzNC1cdC5zeW5jX2ZzXHQ9IG9jZnMyX3N5bmNfZnMsXG5mcy9vY2ZzMi9zdXBlci5jOjEzNTpcdC5wdXRfc3VwZXJcdD0gb2NmczJfcHV0X3N1cGVyLFxuZnMvb2NmczIvc3VwZXIuYy0xMzYtXHQuc2hvd19vcHRpb25zICAgPSBvY2ZzMl9zaG93X29wdGlvbnMsXG4tLVxuZnMvb2NmczIvc3VwZXIuYz0xNTM0PXN0YXRpYyB2b2lkIF9fZXhpdCBvY2ZzMl9leGl0KHZvaWQpXG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xNTQ2LVxuZnMvb2NmczIvc3VwZXIuYzoxNTQ3OnN0YXRpYyB2b2lkIG9jZnMyX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvb2NmczIvc3VwZXIuYy0xNTQ4LXtcbmZzL29jZnMyL3N1cGVyLmM6MTU0OTpcdHRyYWNlX29jZnMyX3B1dF9zdXBlcihzYik7XG5mcy9vY2ZzMi9zdXBlci5jLTE1NTAtXG4tLVxuZnMvb21mcy9pbm9kZS5jPTIwND1zdHJ1Y3QgaW5vZGUgKm9tZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8pXG4tLVxuZnMvb21mcy9pbm9kZS5jLTI2NC1cbmZzL29tZnMvaW5vZGUuYzoyNjU6c3RhdGljIHZvaWQgb21mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL29tZnMvaW5vZGUuYy0yNjYte1xuLS1cbmZzL29tZnMvaW5vZGUuYz0zMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG9tZnNfc29wcyA9IHtcbi0tXG5mcy9vbWZzL2lub2RlLmMtMzIyLVx0LmV2aWN0X2lub2RlXHQ9IG9tZnNfZXZpY3RfaW5vZGUsXG5mcy9vbWZzL2lub2RlLmM6MzIzOlx0LnB1dF9zdXBlclx0PSBvbWZzX3B1dF9zdXBlcixcbmZzL29tZnMvaW5vZGUuYy0zMjQtXHQuc3RhdGZzXHRcdD0gb21mc19zdGF0ZnMsXG4tLVxuZnMvb3ZlcmxheWZzL3N1cGVyLmM9MjEzPXN0YXRpYyB2b2lkIG92bF9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvb3ZlcmxheWZzL3N1cGVyLmMtMjI0LVxuZnMvb3ZlcmxheWZzL3N1cGVyLmM6MjI1OnN0YXRpYyB2b2lkIG92bF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL292ZXJsYXlmcy9zdXBlci5jLTIyNi17XG4tLVxuZnMvb3ZlcmxheWZzL3N1cGVyLmM9Mjk3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvdmxfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9vdmVybGF5ZnMvc3VwZXIuYy0zMDEtXHQuZHJvcF9pbm9kZVx0PSBpbm9kZV9qdXN0X2Ryb3AsXG5mcy9vdmVybGF5ZnMvc3VwZXIuYzozMDI6XHQucHV0X3N1cGVyXHQ9IG92bF9wdXRfc3VwZXIsXG5mcy9vdmVybGF5ZnMvc3VwZXIuYy0zMDMtXHQuc3luY19mc1x0PSBvdmxfc3luY19mcyxcbi0tXG5mcy9xbng2L2lub2RlLmM9Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHFueDZfc29wcztcbmZzL3FueDYvaW5vZGUuYy0zMC1cbmZzL3FueDYvaW5vZGUuYzozMTpzdGF0aWMgdm9pZCBxbng2X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL3FueDYvaW5vZGUuYy0zMi1zdGF0aWMgc3RydWN0IGlub2RlICpxbng2X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuLS1cbmZzL3FueDYvaW5vZGUuYz0zOD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgcW54Nl9zb3BzID0ge1xuLS1cbmZzL3FueDYvaW5vZGUuYy00MC1cdC5mcmVlX2lub2RlXHQ9IHFueDZfZnJlZV9pbm9kZSxcbmZzL3FueDYvaW5vZGUuYzo0MTpcdC5wdXRfc3VwZXJcdD0gcW54Nl9wdXRfc3VwZXIsXG5mcy9xbng2L2lub2RlLmMtNDItXHQuc3RhdGZzXHRcdD0gcW54Nl9zdGF0ZnMsXG4tLVxuZnMvcW54Ni9pbm9kZS5jPTI5MT1zdGF0aWMgaW50IHFueDZfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9xbng2L2lub2RlLmMtNDczLVxuZnMvcW54Ni9pbm9kZS5jOjQ3NDpzdGF0aWMgdm9pZCBxbng2X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvcW54Ni9pbm9kZS5jLTQ3NS17XG4tLVxuZnMvcXVvdGEvcXVvdGEuYz04NjY9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqcXVvdGFjdGxfYmxvY2soY29uc3QgY2hhciBfX3VzZXIgKnNwZWNpYWwsIGludCBjbWQpXG4tLVxuZnMvcXVvdGEvcXVvdGEuYy04OTktXHRcdHNiX2VuZF93cml0ZShzYik7XG5mcy9xdW90YS9xdW90YS5jOjkwMDpcdFx0cHV0X3N1cGVyKHNiKTtcbmZzL3F1b3RhL3F1b3RhLmMtOTAxLVx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYz04OTk9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmMtOTI1LVxuZnMvc21iL2NsaWVudC9taXNjLmM6OTI2OnN0YXRpYyB2b2lkIF9fY2lmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkyNy17XG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmM9OTQzPXZvaWQgY2lmc19wdXRfdGNwX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9zbWIvY2xpZW50L21pc2MuYy05NDQte1xuZnMvc21iL2NsaWVudC9taXNjLmM6OTQ1Olx0X19jaWZzX3B1dF9zdXBlcihzYik7XG5mcy9zbWIvY2xpZW50L21pc2MuYy05NDYtfVxuLS1cbmZzL3NxdWFzaGZzL3N1cGVyLmM9NTcxPXN0YXRpYyBpbnQgc3F1YXNoZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zilcbi0tXG5mcy9zcXVhc2hmcy9zdXBlci5jLTU5MC1cbmZzL3NxdWFzaGZzL3N1cGVyLmM6NTkxOnN0YXRpYyB2b2lkIHNxdWFzaGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvc3F1YXNoZnMvc3VwZXIuYy01OTIte1xuLS1cbmZzL3NxdWFzaGZzL3N1cGVyLmM9Njk0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzcXVhc2hmc19zdXBlcl9vcHMgPSB7XG4tLVxuZnMvc3F1YXNoZnMvc3VwZXIuYy02OTctXHQuc3RhdGZzID0gc3F1YXNoZnNfc3RhdGZzLFxuZnMvc3F1YXNoZnMvc3VwZXIuYzo2OTg6XHQucHV0X3N1cGVyID0gc3F1YXNoZnNfcHV0X3N1cGVyLFxuZnMvc3F1YXNoZnMvc3VwZXIuYy02OTktXHQuc2hvd19vcHRpb25zID0gc3F1YXNoZnNfc2hvd19vcHRpb25zLFxuLS1cbmZzL3N1cGVyLmM9MzM3PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsXG4tLVxuZnMvc3VwZXIuYy00MzAtICogRHJvcCBhIHN1cGVyYmxvY2smIzM5O3MgcGFzc2l2ZSByZWZlcmVuY2UuICBNdXN0IGJlIGNhbGxlZCBXSVRIT1VUIHNiX2xvY2sgaGVsZDtcbmZzL3N1cGVyLmM6NDMxOiAqIHB1dF9zdXBlcigpIGFjcXVpcmVzIHNiX2xvY2sgaXRzZWxmIHdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyBkcm9wcGVkLlxuZnMvc3VwZXIuYy00MzItICovXG5mcy9zdXBlci5jOjQzMzp2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG5mcy9zdXBlci5jLTQzNC17XG4tLVxuZnMvc3VwZXIuYz00ODA9c3RhdGljIHZvaWQgc3VwZXJfZGV2X3B1dChzdHJ1Y3Qgc3VwZXJfZGV2ICpmc2QpXG4tLVxuZnMvc3VwZXIuYy00ODQtXHRcdHJobHRhYmxlX3JlbW92ZShcdTAwMjZzdXBlcl9kZXZfdGFibGUsIFx1MDAyNmZzZC1cdTAwM2VzZF9ub2RlLCBzdXBlcl9kZXZfcGFyYW1zKTtcbmZzL3N1cGVyLmM6NDg1Olx0XHRwdXRfc3VwZXIoZnNkLVx1MDAzZXNkX3NiKTtcbmZzL3N1cGVyLmMtNDg2LVx0XHRrZnJlZV9yY3UoZnNkLCBzZF9yY3UpO1xuLS1cbmZzL3N1cGVyLmM9NTk1PXZvaWQgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxuLS1cbmZzL3N1cGVyLmMtNjAzLVxuZnMvc3VwZXIuYzo2MDQ6XHRcdC8qIGxpc3RfbHJ1X2Rlc3Ryb3koKSBtYXkgc2xlZXA7IHB1dF9zdXBlcigpIGNhbGxlcnMgbWF5IG5vdC4gKi9cbmZzL3N1cGVyLmMtNjA1LVx0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNnMtXHUwMDNlc19kZW50cnlfbHJ1KTtcbi0tXG5mcy9zdXBlci5jLTYwNy1cbmZzL3N1cGVyLmM6NjA4Olx0XHRwdXRfc3VwZXIocyk7XG5mcy9zdXBlci5jLTYwOS1cdH0gZWxzZSB7XG4tLVxuZnMvc3VwZXIuYz02NDY9c3RhdGljIGJvb2wgZ3JhYl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtNjU0LVx0XHRpZiAoYXRvbWljX2luY19ub3RfemVybyhcdTAwMjZzYi1cdTAwM2VzX2FjdGl2ZSkpIHtcbmZzL3N1cGVyLmM6NjU1Olx0XHRcdHB1dF9zdXBlcihzYik7XG5mcy9zdXBlci5jLTY1Ni1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5mcy9zdXBlci5jLTY2MC1cdHdhaXRfdmFyX2V2ZW50KFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MsIHN1cGVyX2ZsYWdzKHNiLCBTQl9ERUFEKSk7XG5mcy9zdXBlci5jOjY2MTpcdHB1dF9zdXBlcihzYik7XG5mcy9zdXBlci5jLTY2Mi1cdHJldHVybiBmYWxzZTtcbi0tXG5mcy9zdXBlci5jPTczNz12b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTc2My1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg1NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNodXRkb3duIFNlcXVlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGtlcm5lbCBzaHV0ZG93biBzZXF1ZW5jZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBzdXBlcmJsb2NrcyBhcmUgaGFuZGxlZC4gSSBzZWUgYSBjaGFpbiBvZiBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBzZ2V0X2ZjYCwgYHB1dF9zdXBlcmAsIGBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcmAsIGBraWxsX3N1cGVyX25vdGlmeWAsIGBnZW5lcmljX3NodXRkb3duX3N1cGVyYCwgYW5kIGBrZXJuZnNfa2lsbF9zYmAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IHRoaXMgc3RlcCBieSBzdGVwLiBJJiMzOTttIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBga2lsbF9zdXBlcl9ub3RpZnlgLiBJIHZhZ3VlbHkgcmVjYWxsIGl0cyBwdXJwb3NlIGFuZCBJIHdhbnQgdG8gY29uZmlybSBpZiBteSBtZW1vcnkgaXMgY29ycmVjdC4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgaWYgYGtpbGxfc3VwZXJfbm90aWZ5YCBpcyBpbmRlZWQgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFllcywgY29uZmlybWVkOiBgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilgIHdpdGhpbiBgZnMvc3VwZXIuY2AuIFBlcmZlY3QsIHRoYXQgcmVpbmZvcmNlcyBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcuIE5vdywgSSBuZWVkIHRvIGtub3cgdGhlIGNhbGwgc2l0ZXMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgaW52b2tlZCB3aXRoaW4gdGhpcyBzaHV0ZG93biBwcm9jZXNzPyBJcyBpdCBqdXN0IGNhbGxlZCBieSBgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocylgIG9yIG90aGVyIHN1cGVyYmxvY2sgY2xlYW5pbmcgcm91dGluZXMgbGlrZSBga2lsbF9hbm9uX3N1cGVyKHNiKWAsIG9yIGFyZSB0aGVyZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHRoYXQgcmVseSBvbiBpdD8gVG8gYmUgc3VyZSwgSSYjMzk7bGwgbmVlZCB0byBydW4gYSBicm9hZCBzZWFyY2ggZm9yIGBraWxsX3N1cGVyX25vdGlmeWAgdGhyb3VnaG91dCB0aGUgZW50aXJlIGNvZGViYXNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYW5kIGludGVyYWN0aW9ucy4gVGhpcyBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN1cGVyYmxvY2sgdGVhcmRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tpbGxfc3VwZXJfbm90aWZ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9NTQ1PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfZGV2ICpzdXBlcl9kZXZfbmV4dChzdHJ1Y3Qgc3VwZXJfZGV2ICpwcmV2KVxuLS1cbmZzL3N1cGVyLmMtNTU2LVxuZnMvc3VwZXIuYzo1NTc6c3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3N1cGVyLmMtNTU4LXtcbi0tXG5mcy9zdXBlci5jPTU5NT12b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbi0tXG5mcy9zdXBlci5jLTYwMS1cbmZzL3N1cGVyLmM6NjAyOlx0XHRraWxsX3N1cGVyX25vdGlmeShzKTtcbmZzL3N1cGVyLmMtNjAzLVxuLS1cbmZzL3N1cGVyLmM9MTM2Nj12b2lkIGtpbGxfYW5vbl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtMTM2OS1cdGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc2IpO1xuZnMvc3VwZXIuYzoxMzcwOlx0a2lsbF9zdXBlcl9ub3RpZnkoc2IpO1xuZnMvc3VwZXIuYy0xMzcxLVx0ZnJlZV9hbm9uX2JkZXYoZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1ODQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRGlnZ2luZyBEZWVwZXIgZm9yIEltcGFjdCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBga2lsbF9zdXBlcl9ub3RpZnlgLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBsaWtlbHkgb24gYSBzcGVjaWZpYyBhcmVhLCBidXQgSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgYnJvYWRlbiB0aGUgc2NvcGUgb2Ygb3VyIHNlYXJjaC4gSnVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIHdlIGRvbiYjMzk7dCBtaXNzIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcywgSSYjMzk7bSBnb2luZyB0byBydW4gYSBmdWxsLXRyZWUgc2VhcmNoIGZvciBga2lsbF9zdXBlcl9ub3RpZnlgLiBUaGlzIHdpbGwgbGV0IG1lIHNlZSBpZiBpdCYjMzk7cyByZWZlcmVuY2VkIGFueXdoZXJlIHVuZXhwZWN0ZWQsIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wYWN0IG9mIHRoaXMgZnVuY3Rpb24gYWNyb3NzIHRoZSBjb2RlYmFzZSwgbm90IGp1c3QgaW4gdGhlIGltbWVkaWF0ZSBhcmVhIEkgc3RhcnRlZCBpbnZlc3RpZ2F0aW5nLiBCZXR0ZXIgdG8gY2FzdCBhIHdpZGUgbmV0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tpbGxfc3VwZXJfbm90aWZ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9NTQ1PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfZGV2ICpzdXBlcl9kZXZfbmV4dChzdHJ1Y3Qgc3VwZXJfZGV2ICpwcmV2KVxuLS1cbmZzL3N1cGVyLmMtNTU2LVxuZnMvc3VwZXIuYzo1NTc6c3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3N1cGVyLmMtNTU4LXtcbi0tXG5mcy9zdXBlci5jPTU5NT12b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbi0tXG5mcy9zdXBlci5jLTYwMS1cbmZzL3N1cGVyLmM6NjAyOlx0XHRraWxsX3N1cGVyX25vdGlmeShzKTtcbmZzL3N1cGVyLmMtNjAzLVxuLS1cbmZzL3N1cGVyLmM9MTM2Nj12b2lkIGtpbGxfYW5vbl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtMTM2OS1cdGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc2IpO1xuZnMvc3VwZXIuYzoxMzcwOlx0a2lsbF9zdXBlcl9ub3RpZnkoc2IpO1xuZnMvc3VwZXIuYy0xMzcxLVx0ZnJlZV9hbm9uX2JkZXYoZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwMjIKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogMTE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBTdXBlcmJsb2NrIExpZmVjeWNsZSBhbmQgU3luY2hyb25pemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYCwgYGRlYWN0aXZhdGVfc3VwZXJgLCBga2lsbF9hbm9uX3N1cGVyYCwgYHB1dF9zdXBlcmAsIGBzZ2V0X2ZjYCwgYW5kIGBrZXJuZnNfa2lsbF9zYmAuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgYHB1dF9zdXBlcmAgaXMgdXNlZDsgaXMgaXQgYSB1YmlxdWl0b3VzIGZ1bmN0aW9uLCBvciBpcyBpdHMgdXNhZ2UgbW9yZSBzcGVjaWZpYz8gSXQgbG9va3MgbGlrZSBgcHV0X3N1cGVyYCBpcyBvbmx5IGNhbGxlZCB3aGVuIHBhc3NpdmVseSByZWxlYXNpbmcgYSBzdXBlcmJsb2NrLCBsaWtlIGR1cmluZyB1bm1vdW50IG9yIHdoZW4gYHNnZXRfZmNgIG9yIGBzdXBlcl9kZXZfcHV0YCBmYWlsLCB3aGljaCBtYWtlcyBpdCBsZXNzIHViaXF1aXRvdXMuICBUaGUga2V5IGZ1bmN0aW9uIGZvciBmaWx0ZXJpbmcgYW5kIGhhbmRsaW5nIGBTQl9ERUFEYCBzdXBlcmJsb2NrcyBzZWVtcyB0byBiZSBgc2dldF9mY2AuIEkmIzM5O20gYWxzbyBub3RpbmcgdGhhdCBgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJgIGlzIHRoZSBwb2ludCB3aGVyZSBhY3RpdmUgcmVmZXJlbmNlcyBkcm9wIHRvIHplcm8sIHRyaWdnZXJpbmcgYGtpbGxfc2JgLiBga2lsbF9hbm9uX3N1cGVyYCBjYWxscyBga2lsbF9zdXBlcl9ub3RpZnlgLCB3aGljaCBpcyBhbHNvIGltcG9ydGFudCwgYXMgaXMgYGtlcm5mc19raWxsX3NiYCwgd2hpY2ggaW4gdHVybiBjYWxscyBga2lsbF9hbm9uX3N1cGVyYC4KCk5vdywgSSB3YW50IHRvIG1hcCBvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gIFdlIGhhdmUgYHNnZXRfZmNgIGZvciBzdXBlcmJsb2NrIGxvb2t1cCBhbmQgY3JlYXRpb24sIGBwdXRfc3VwZXJgIGZvciBwYXNzaXZlIHJlZmNvdW50IGRyb3BzIGFuZCBkZWxldGlvbiwgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYCBmb3IgZGVhY3RpdmF0aW9uLCBga2lsbF9hbm9uX3N1cGVyYCBmb3IgdGVhcmRvd24sIGFuZCBga2VybmZzX2tpbGxfc2JgIGZvciBrZXJuZnMtc3BlY2lmaWMgc2h1dGRvd24uIEkmIzM5O2xsIGFsc28gY29uc2lkZXIgYGdlbmVyaWNfc2h1dGRvd25fc3VwZXJgIGluIHRoaXMgY29udGV4dC4KCkNoZWNraW5nIHRoZSBwYXRjaCwgSSBzZWUgdGhlc2Ugc3ltYm9sczogYGZzL2tlcm5mcy9tb3VudC5jOmtlcm5mc19raWxsX3NiYCwgYGZzL3N1cGVyLmM6cHV0X3N1cGVyYCwgYGZzL3N1cGVyLmM6a2lsbF9zdXBlcl9ub3RpZnlgLCBgZnMvc3VwZXIuYzpkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcmAsIGBmcy9zdXBlci5jOmdlbmVyaWNfc2h1dGRvd25fc3VwZXJgLCBhbmQgYGZzL3N1cGVyLmM6c2dldF9mY2AuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYGZzL3N1cGVyLmNgIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgYnV0IGBmcy9rZXJuZnMvbW91bnQuY2AgaXMgY29tcGlsZWQgd2hlbiBgS0VSTkZTYCBpcyBzZXQuIFNvLCBgS0VSTkZTYCBpcyBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gdG8gY29uc2lkZXIuIEl0JiMzOTtzIGJvb2xlYW4sIG9mdGVuIHNlbGVjdGVkLCBhbmQgbmVlZHMgdG8gYmUgaW5jbHVkZWQuICBgZnMvc3VwZXIuY2AgaXRzZWxmIGRvZXNuJiMzOTt0IGRlcGVuZCBvbiBhbnkgY29uZmlnIG9wdGlvbnMuCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSByZXF1aXJlZCBvdXRwdXRzLiBXZSBoYXZlIGBXb3J0aEZ1enppbmdgLCBgUmVhc29uaW5nYCwgYEZvY3VzU3ltYm9sc2AsIGFuZCBgRW5hYmxlQ29uZmlnc2AuCgpGb3IgYEZvY3VzU3ltYm9sc2AsIEkmIzM5O3ZlIGRlY2lkZWQgb246IGBzZ2V0X2ZjYCwgYHB1dF9zdXBlcmAsIGBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcmAsIGBnZW5lcmljX3NodXRkb3duX3N1cGVyYCwgYGtpbGxfc3VwZXJfbm90aWZ5YCAoaW1wb3J0YW50LCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMg4oCTIHRoZSBjb21waWxlciBtYXkgcmV0YWluIGl0IG9yIHdlIGNhbiBjb25zaWRlciBpdHMgY2FsbGVycyksIGBraWxsX2Fub25fc3VwZXJgLCBhbmQgYGtlcm5mc19raWxsX3NiYC4gVGhpcyBzZWxlY3Rpb24gY292ZXJzIGJvdGggdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBvZiB0aGUgc3RhdGljIGhlbHBlcnMuCgpGb3IgYEVuYWJsZUNvbmZpZ3NgLCBpdCYjMzk7cyBqdXN0IGBLRVJORlNgLgoKSGVyZSYjMzk7cyBteSBjb25jaXNlIHJlYXNvbmluZzogVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgbW91bnQvdW5tb3VudC4gSXQgY2hhbmdlcyBob3cgc3VwZXJibG9ja3MgYXJlIHVubGlua2VkLCBzeW5jaHJvbml6ZXMgYFNCX0RFQURgIHN0YXR1cyB1bmRlciBgc2JfbG9ja2AsIG1vdmVzIGBwdXRfZmlsZXN5c3RlbSgpYCB0byBgcHV0X3N1cGVyKClgLCBhbmQgdXBkYXRlcyBgc2dldF9mYygpYCB0byBhdm9pZCBgU0JfREVBRGAgc3VwZXJibG9ja3MuICBUaGlzIGludm9sdmVzIGNvbXBsZXggY29uY3VycmVuY3kgYmV0d2VlbiBtb3VudGluZyBhbmQgdW5tb3VudGluZyBwcm9jZXNzZXMsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBhc3NlcnRpb24gZmFpbHVyZXMuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLRVJORlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZ2V0X2ZjJiMzNDssCiAgICAmIzM0O3B1dF9zdXBlciYjMzQ7LAogICAgJiMzNDtkZWFjdGl2YXRlX2xvY2tlZF9zdXBlciYjMzQ7LAogICAgJiMzNDtnZW5lcmljX3NodXRkb3duX3N1cGVyJiMzNDssCiAgICAmIzM0O2tpbGxfYW5vbl9zdXBlciYjMzQ7LAogICAgJiMzNDtrZXJuZnNfa2lsbF9zYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCBhY3Jvc3MgbW91bnQgYW5kIHVubW91bnQgcGF0aHMgKGluIGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKS4gSXQgZGVmZXJzIHVubGlua2luZyBzdXBlcmJsb2NrcyBmcm9tIGZzX3N1cGVycyB1bnRpbCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZSBkcm9wcyBpbiBwdXRfc3VwZXIoKSwgc2V0cyBTQl9ERUFEIHVuZGVyIHNiX2xvY2sgaW4ga2lsbF9zdXBlcl9ub3RpZnkoKSwgYW5kIHNraXBzIFNCX0RFQUQgc3VwZXJibG9ja3MgZHVyaW5nIHNnZXRfZmMoKSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29uY3VycmVuY3kgaW52YXJpYW50cyBiZXR3ZWVuIGNvbmN1cnJlbnQgbW91bnQgKHNnZXRfZmMpIGFuZCBzaHV0ZG93bi9kZWFjdGl2YXRpb24gcm91dGluZXMsIG1ha2luZyB0aGlzIGNvcmUgc3Vic3lzdGVtIGNvZGUgd2VsbCB3b3J0aCBmdXp6aW5nIGZvciBzeW5jaHJvbml6YXRpb24gYW5kIHJlZmVyZW5jZSBjb3VudGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S0VSTkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2dldF9mYyYjMzQ7LAogICAgJiMzNDtwdXRfc3VwZXImIzM0OywKICAgICYjMzQ7ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXImIzM0OywKICAgICYjMzQ7Z2VuZXJpY19zaHV0ZG93bl9zdXBlciYjMzQ7LAogICAgJiMzNDtraWxsX2Fub25fc3VwZXImIzM0OywKICAgICYjMzQ7a2VybmZzX2tpbGxfc2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYWNyb3NzIG1vdW50IGFuZCB1bm1vdW50IHBhdGhzIChpbiBmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykuIEl0IGRlZmVycyB1bmxpbmtpbmcgc3VwZXJibG9ja3MgZnJvbSBmc19zdXBlcnMgdW50aWwgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UgZHJvcHMgaW4gcHV0X3N1cGVyKCksIHNldHMgU0JfREVBRCB1bmRlciBzYl9sb2NrIGluIGtpbGxfc3VwZXJfbm90aWZ5KCksIGFuZCBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGR1cmluZyBzZ2V0X2ZjKCkgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYmV0d2VlbiBjb25jdXJyZW50IG1vdW50IChzZ2V0X2ZjKSBhbmQgc2h1dGRvd24vZGVhY3RpdmF0aW9uIHJvdXRpbmVzLCBtYWtpbmcgdGhpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIHdlbGwgd29ydGggZnV6emluZyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBzdXBlcmJsb2NrIGluc3RhbmNlcyAoZnMvc3VwZXIuYyBhbmQgZnMva2VybmZzL21vdW50LmMpIGFjcm9zcyBtb3VudCBhbmQgc2h1dGRvd24gcGF0aHMgKHNnZXRfZmMsIGtpbGxfc3VwZXJfbm90aWZ5LCBwdXRfc3VwZXIpLiBJdCBkZWZlcnMgdW5saW5raW5nIHNiLVx1MDAzZXNfaW5zdGFuY2VzIGFuZCBwdXRfZmlsZXN5c3RlbSB0byBwdXRfc3VwZXIsIHdoaWxlIGhvbGRpbmcgc2JfbG9jayB3aGVuIHNldHRpbmcgU0JfREVBRCBzbyBjb25jdXJyZW50IHNnZXRfZmMoKSBjYWxscyBza2lwIGR5aW5nIHN1cGVyYmxvY2tzLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcgKHNiX2xvY2spLCBsaXN0IG1hbmFnZW1lbnQsIGFuZCBvYmplY3QgbGlmZWN5Y2xlIHN5bmNocm9uaXphdGlvbi4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgaGVyZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb25zLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRyYWNrZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgcGFyc2luZywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3B5aW5nIGlzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjOWM3ZjAzM2UxNzQzZTMzZWJkZWI4Yjg5NmRiMjdiYWY1NGQ3MGE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMToxMjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2tlcm5mcy9tb3VudC5jIGIvZnMva2VybmZzL21vdW50LmMKaW5kZXggZjE4M2E5Njc3OGI5YS4uYTU3Mzk5MDIxYzhiMCAxMDA2NDQKLS0tIGEvZnMva2VybmZzL21vdW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMva2VybmZzL21vdW50LmMKQEAgLTQzNCw4ICYjNDM7NDM0LDggQEAgdm9pZCBrZXJuZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCXVwX3dyaXRlKCZhbXA7cm9vdC0mZ3Q7a2VybmZzX3N1cGVyc19yd3NlbSk7CiAKIAkvKgotCSAqIFJlbW92ZSB0aGUgc3VwZXJibG9jayBmcm9tIGZzX3N1cGVycy9zX2luc3RhbmNlcwotCSAqIHNvIHdlIGNhbiYjMzk7dCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby4KJiM0MzsJICogTWFyayB0aGUgc3VwZXJibG9jayBkZWFkIHNvIHNnZXRfZmMoKSBjYW4mIzM5O3QgZmluZCBpdCwKJiM0MzsJICogYmVmb3JlIGZyZWVpbmcga2VybmZzX3N1cGVyX2luZm8uCiAJICovCiAJa2lsbF9hbm9uX3N1cGVyKHNiKTsKIAlrZnJlZShpbmZvKTsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDA1ZTQ0MzE3MzAzODcuLjBmOWUxM2VlZGI0ZmIgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtNDMzLDE1ICYjNDM7NDMzLDE5IEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCiB2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiB7CiAJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3MtJmd0O3NfcGFzc2l2ZSkpIHsKJiM0MzsJCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlID0gcy0mZ3Q7c190eXBlOwogCiAJCXNwaW5fbG9jaygmYW1wO3NiX2xvY2spOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cy0mZ3Q7c19saXN0KTsKJiM0MzsJCWhsaXN0X2RlbF9pbml0KCZhbXA7cy0mZ3Q7c19pbnN0YW5jZXMpOwogCQlzcGluX3VubG9jaygmYW1wO3NiX2xvY2spOwogCiAJCVdBUk5fT04ocy0mZ3Q7c19kZW50cnlfbHJ1Lm5vZGUpOwogCQlXQVJOX09OKHMtJmd0O3NfaW5vZGVfbHJ1Lm5vZGUpOwogCQlXQVJOX09OKHMtJmd0O3NfbW91bnRzKTsKIAkJY2FsbF9yY3UoJmFtcDtzLSZndDtyY3UsIGRlc3Ryb3lfc3VwZXJfcmN1KTsKJiM0MzsJCS8qIFRoZSB1bmxpbmsgYWJvdmUgbWF5IHRvdWNoIHR5cGUtJmd0O2ZzX3N1cGVycywgc28gZHJvcCBpdCBsYXN0LiAqLwomIzQzOwkJcHV0X2ZpbGVzeXN0ZW0odHlwZSk7CiAJfQogfQogCkBAIC01NTgsMTcgJiM0Mzs1NjIsNiBAQCBzdGF0aWMgdm9pZCBraWxsX3N1cGVyX25vdGlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCWlmIChzYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9ERUFEKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIFJlbW92ZSBpdCBmcm9tIEBmc19zdXBlcnMgc28gaXQgaXNuJiMzOTt0IGZvdW5kIGJ5IG5ldwotCSAqIHNnZXRfZmMoKSB3YWxrZXJzIGFueW1vcmUuIEFueSBjb25jdXJyZW50IG1vdW50ZXIgc3RpbGwKLQkgKiBtYW5hZ2luZyB0byBncmFiIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyBndWFyYW50ZWVkIHRvCi0JICogYWxyZWFkeSBzZWUgU0JfRFlJTkcgYW5kIHdpbGwgd2FpdCB1bnRpbCB3ZSBub3RpZnkgdGhlbSBhYm91dAotCSAqIFNCX0RFQUQuCi0JICovCi0Jc3Bpbl9sb2NrKCZhbXA7c2JfbG9jayk7Ci0JaGxpc3RfZGVsX2luaXQoJmFtcDtzYi0mZ3Q7c19pbnN0YW5jZXMpOwotCXNwaW5fdW5sb2NrKCZhbXA7c2JfbG9jayk7Ci0KIAkvKiBEcm9wIHNnZXRfZmMoKSYjMzk7cyBjbGFpbTsgYSBuZXZlci1yZWdpc3RlcmVkIGVudHJ5IHN0YXlzIHdpdGggdGhlIHNiLiAqLwogCWlmIChzYi0mZ3Q7c19zdXBlcl9kZXYtJmd0O3NkX2RldikgewogCQlzdXBlcl9kZXZfcHV0KHNiLSZndDtzX3N1cGVyX2Rldik7CkBAIC01NzcsMTEgJiM0Mzs1NzAsMTUgQEAgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAogCS8qCiAJICogTGV0IGNvbmN1cnJlbnQgbW91bnRzIGtub3cgdGhhdCB0aGlzIHRoaW5nIGlzIHJlYWxseSBkZWFkLgotCSAqIFdlIGRvbiYjMzk7dCBuZWVkIEBzYi0mZ3Q7c191bW91bnQgaGVyZSBhcyBldmVyeSBjb25jdXJyZW50IGNhbGxlcgotCSAqIHdpbGwgc2VlIFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZCB0aGUgc3VwZXJibG9jayBvciB3YWl0Ci0JICogZm9yIFNCX0RFQUQuCiYjNDM7CSAqIHNnZXRfZmMoKSBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGFuZCBjYWxscyB0ZXN0KCkgdW5kZXIKJiM0MzsJICogc2JfbG9jaywgc28gc2V0IGl0IHVuZGVyIHNiX2xvY2s6IG9uY2Ugd2UgcmV0dXJuIG5vIHRlc3QoKQomIzQzOwkgKiBydW5zIG9uIHRoaXMgc3VwZXJibG9jayBhbnltb3JlIGFuZCBub25lIHdpbGwgc3RhcnQuIEV2ZXJ5b25lCiYjNDM7CSAqIGVsc2UgYWxyZWFkeSBzYXcgU0JfRFlJTkcgYW5kIGVpdGhlciBkaXNjYXJkZWQgdGhlIHN1cGVyYmxvY2sKJiM0MzsJICogb3Igd2FpdHMgZm9yIFNCX0RFQUQuCiAJICovCiYjNDM7CXNwaW5fbG9jaygmYW1wO3NiX2xvY2spOwogCXN1cGVyX3dha2Uoc2IsIFNCX0RFQUQpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3NiX2xvY2spOwogfQogCiAvKioKQEAgLTYwOCw3ICYjNDM7NjA1LDYgQEAgdm9pZCBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiAJCWxpc3RfbHJ1X2Rlc3Ryb3koJmFtcDtzLSZndDtzX2RlbnRyeV9scnUpOwogCQlsaXN0X2xydV9kZXN0cm95KCZhbXA7cy0mZ3Q7c19pbm9kZV9scnUpOwogCi0JCXB1dF9maWxlc3lzdGVtKGZzKTsKIAkJcHV0X3N1cGVyKHMpOwogCX0gZWxzZSB7CiAJCXN1cGVyX3VubG9ja19leGNsKHMpOwpAQCAtNzk1LDEyICYjNDM7NzkxLDEyIEBAIHZvaWQgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCX0KIAkvKgogCSAqIEJyb2FkY2FzdCB0byBldmVyeW9uZSB0aGF0IGdyYWJiZWQgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHRvIHRoaXMKLQkgKiBzdXBlcmJsb2NrIGJlZm9yZSB3ZSByZW1vdmVkIGl0IGZyb20gQGZzX3N1cGVycyB0aGF0IHRoZSBzdXBlcmJsb2NrCi0JICogaXMgZHlpbmcuIEV2ZXJ5IHdhbGtlciBvZiBAZnNfc3VwZXJzIG91dHNpZGUgb2Ygc2dldF9mYygpIHdpbGwgbm93Ci0JICogZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzIGRlYWQuCiYjNDM7CSAqIHN1cGVyYmxvY2sgdGhhdCBpdCBpcyBkeWluZy4gRXZlcnkgd2Fsa2VyIG9mIEBmc19zdXBlcnMgb3V0c2lkZQomIzQzOwkgKiBvZiBzZ2V0X2ZjKCkgd2lsbCBub3cgZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzCiYjNDM7CSAqIGRlYWQuCiAJICoKLQkgKiBXZSBsZWF2ZSB0aGUgc3VwZXJibG9jayBvbiBAZnNfc3VwZXJzIHNvIGl0IGNhbiBiZSBmb3VuZCBieQotCSAqIHNnZXRfZmMoKSB1bnRpbCB3ZSBwYXNzZWQgc2ItJmd0O2tpbGxfc2IoKS4KJiM0MzsJICogc2dldF9mYygpIGtlZXBzIGZpbmRpbmcgdGhlIHN1cGVyYmxvY2sgdW50aWwgU0JfREVBRCBpcyBzZXQsIHNvCiYjNDM7CSAqIGEgY29uY3VycmVudCBtb3VudGVyIHdhaXRzIHVudGlsIHdlIHBhc3NlZCBzYi0mZ3Q7a2lsbF9zYigpLgogCSAqLwogCXN1cGVyX3dha2Uoc2IsIFNCX0RZSU5HKTsKIAlzdXBlcl91bmxvY2tfZXhjbChzYik7CkBAIC04NzksNiAmIzQzOzg3NSw5IEBAIHN0cnVjdCBzdXBlcl9ibG9jayAqc2dldF9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJc3Bpbl9sb2NrKCZhbXA7c2JfbG9jayk7CiAJaWYgKHRlc3QpIHsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCAmYW1wO2ZjLSZndDtmc190eXBlLSZndDtmc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7CiYjNDM7CQkJLyogT25seSB1bmxpbmtlZCBhdCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZS4gKi8KJiM0MzsJCQlpZiAoc3VwZXJfZmxhZ3Mob2xkLCBTQl9ERUFEKSkKJiM0MzsJCQkJY29udGludWU7CiAJCQlpZiAodGVzdChvbGQsIGZjKSkKIAkJCQlnb3RvIHNoYXJlX2V4dGFudF9zYjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5OQoJCQkJCQkJb3V0cHV0OiAyMTIKCQkJCQkJCXRob3VnaHRzOiAxMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggYSBLTVNBTiBmdXp6aW5nIHJ1bi4gVGhlIGNoYW5nZXMgdG91Y2ggYGZzL2tlcm5mcy9tb3VudC5jYCBhbmQgYGZzL3N1cGVyLmNgLCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHN1cGVyYmxvY2sgc3R1ZmYuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyBsaWtlIGEgcmV3b3JrIG9mIHRoZSBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBzZ2V0X2ZjYCwgYGtpbGxfc3VwZXJfbm90aWZ5YCwgYHB1dF9zdXBlcmAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGRlZmVycyBgaGxpc3RfZGVsX2luaXRgIG9mIGBzX2luc3RhbmNlc2AgYW5kIGFkZHMgYSBgU0JfREVBRGAgY2hlY2sgaW4gYHNnZXRfZmNgLiBUaGVyZSBhcmUgYWxzbyBzb21lIGBwdXRfZmlsZXN5c3RlbWAgY2FsbHMgYmVpbmcgbW92ZWQuIEl0JiMzOTtzIGEgc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgcmVmYWN0b3IsIGVzc2VudGlhbGx5LgoKTm93LCBmb3IgS01TQU4sIHdlIG5lZWQgdG8gYXNrLCBkb2VzIHRoaXMgaW50cm9kdWNlIHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IERvZXMgaXQgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbj8gTm8sIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBzZWVtIHRvIHRvdWNoIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBJdCYjMzk7cyBub3QgY29weWluZyBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBpbnZvbHZlZCBpbiBhbnkgbmV3IG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhYm91dCBhZGRyZXNzaW5nIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZXMsIGFuZCBtYXliZSByZWZjb3VudCBwcm9ibGVtcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgbGlzdCBjb3JydXB0aW9uLgoKTm93LCBsZXQmIzM5O3MgY2hlY2sgdGhlIGd1aWRlbGluZXMuIFRoZSBndWlkZWxpbmVzIG1ha2UgaXQgdmVyeSBjbGVhcjogaWYgYSBidWcgY2FuIGJlIGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCBkZXRlY3RvcnMsIGEgS01TQU4gc2Vzc2lvbiBpcyBwb2ludGxlc3MuIEtBU0FOIGlzIGJ1aWx0IHRvIGNhdGNoIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGludmFsaWQgZnJlZXMuIExvY2tkZXAgaXMgZ29vZCBmb3IgbG9ja2luZyBidWdzLiBUaGlzIHBhdGNoIGRlYWxzIHdpdGggc3luY2hyb25pemF0aW9uLCBjb25jdXJyZW5jeSwgbGlzdCBtYW5pcHVsYXRpb24sIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gSXQmIzM5O3MgYWJvdXQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBhbmQgbGlzdCBjb3JydXB0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgZGVhbCB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHJlZmFjdG9yaW5nIHRvdWNoZXMgc3luY2hyb25pemF0aW9uLCBsaXN0IG1hbmlwdWxhdGlvbiwgYW5kIHN1cGVyYmxvY2sgbGlmZWN5Y2xlLCB0aGUgcmlza3MgYXJlIGFyb3VuZCBjb25jdXJyZW5jeSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxpc3QgY29ycnVwdGlvbiwgYWxsIG9mIHdoaWNoIGZhbGwgZmlybWx5IHVuZGVyIEtBU0FOL0xPQ0tERVAuIFRoZXJlJiMzOTtzIG5vIEtNU0FOIHJpc2sgaGVyZS4KClNvLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGltZSB0byBwcmVwYXJlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpbnN0YW5jZXMgKGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKSBhY3Jvc3MgbW91bnQgYW5kIHNodXRkb3duIHBhdGhzIChzZ2V0X2ZjLCBraWxsX3N1cGVyX25vdGlmeSwgcHV0X3N1cGVyKS4gSXQgZGVmZXJzIHVubGlua2luZyBzYi1cdTAwM2VzX2luc3RhbmNlcyBhbmQgcHV0X2ZpbGVzeXN0ZW0gdG8gcHV0X3N1cGVyLCB3aGlsZSBob2xkaW5nIHNiX2xvY2sgd2hlbiBzZXR0aW5nIFNCX0RFQUQgc28gY29uY3VycmVudCBzZ2V0X2ZjKCkgY2FsbHMgc2tpcCBkeWluZyBzdXBlcmJsb2Nrcy5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIChzYl9sb2NrKSwgbGlzdCBtYW5hZ2VtZW50LCBhbmQgb2JqZWN0IGxpZmVjeWNsZSBzeW5jaHJvbml6YXRpb24uIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0cmFja2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIHBhcnNpbmcsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29weWluZyBpcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpbnN0YW5jZXMgKGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKSBhY3Jvc3MgbW91bnQgYW5kIHNodXRkb3duIHBhdGhzIChzZ2V0X2ZjLCBraWxsX3N1cGVyX25vdGlmeSwgcHV0X3N1cGVyKS4gSXQgZGVmZXJzIHVubGlua2luZyBzYi1cdTAwM2VzX2luc3RhbmNlcyBhbmQgcHV0X2ZpbGVzeXN0ZW0gdG8gcHV0X3N1cGVyLCB3aGlsZSBob2xkaW5nIHNiX2xvY2sgd2hlbiBzZXR0aW5nIFNCX0RFQUQgc28gY29uY3VycmVudCBzZ2V0X2ZjKCkgY2FsbHMgc2tpcCBkeWluZyBzdXBlcmJsb2Nrcy5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIChzYl9sb2NrKSwgbGlzdCBtYW5hZ2VtZW50LCBhbmQgb2JqZWN0IGxpZmVjeWNsZSBzeW5jaHJvbml6YXRpb24uIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0cmFja2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIHBhcnNpbmcsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29weWluZyBpcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMjozNC4zNTQyMzc2ODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODM0NDMzNzYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLRVJORlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ2V0X2ZjXCIsXG4gICAgXCJwdXRfc3VwZXJcIixcbiAgICBcImRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyXCIsXG4gICAgXCJnZW5lcmljX3NodXRkb3duX3N1cGVyXCIsXG4gICAgXCJraWxsX2Fub25fc3VwZXJcIixcbiAgICBcImtlcm5mc19raWxsX3NiXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBzdXBlcmJsb2NrIGluc3RhbmNlcyAoZnMvc3VwZXIuYyBhbmQgZnMva2VybmZzL21vdW50LmMpIGFjcm9zcyBtb3VudCBhbmQgc2h1dGRvd24gcGF0aHMgKHNnZXRfZmMsIGtpbGxfc3VwZXJfbm90aWZ5LCBwdXRfc3VwZXIpLiBJdCBkZWZlcnMgdW5saW5raW5nIHNiLVxcdTAwM2VzX2luc3RhbmNlcyBhbmQgcHV0X2ZpbGVzeXN0ZW0gdG8gcHV0X3N1cGVyLCB3aGlsZSBob2xkaW5nIHNiX2xvY2sgd2hlbiBzZXR0aW5nIFNCX0RFQUQgc28gY29uY3VycmVudCBzZ2V0X2ZjKCkgY2FsbHMgc2tpcCBkeWluZyBzdXBlcmJsb2Nrcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcgKHNiX2xvY2spLCBsaXN0IG1hbmFnZW1lbnQsIGFuZCBvYmplY3QgbGlmZWN5Y2xlIHN5bmNocm9uaXphdGlvbi4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgaGVyZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb25zLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRyYWNrZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgcGFyc2luZywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3B5aW5nIGlzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYWNyb3NzIG1vdW50IGFuZCB1bm1vdW50IHBhdGhzIChpbiBmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykuIEl0IGRlZmVycyB1bmxpbmtpbmcgc3VwZXJibG9ja3MgZnJvbSBmc19zdXBlcnMgdW50aWwgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UgZHJvcHMgaW4gcHV0X3N1cGVyKCksIHNldHMgU0JfREVBRCB1bmRlciBzYl9sb2NrIGluIGtpbGxfc3VwZXJfbm90aWZ5KCksIGFuZCBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGR1cmluZyBzZ2V0X2ZjKCkgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYmV0d2VlbiBjb25jdXJyZW50IG1vdW50IChzZ2V0X2ZjKSBhbmQgc2h1dGRvd24vZGVhY3RpdmF0aW9uIHJvdXRpbmVzLCBtYWtpbmcgdGhpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIHdlbGwgd29ydGggZnV6emluZyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIxOjEyOjM0LjM1NDI0MzA1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MjAyODM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM5YzdmMDMzZTE3NDNlMzNlYmRlYjhiODk2ZGIyN2JhZjU0ZDcwYThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAyMToxMjozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9rZXJuZnMvbW91bnQuYyBiL2ZzL2tlcm5mcy9tb3VudC5jXFxuaW5kZXggZjE4M2E5Njc3OGI5YS4uYTU3Mzk5MDIxYzhiMCAxMDA2NDRcXG4tLS0gYS9mcy9rZXJuZnMvbW91bnQuY1xcbisrKyBiL2ZzL2tlcm5mcy9tb3VudC5jXFxuQEAgLTQzNCw4ICs0MzQsOCBAQCB2b2lkIGtlcm5mc19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZyb290LVxcdTAwM2VrZXJuZnNfc3VwZXJzX3J3c2VtKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFJlbW92ZSB0aGUgc3VwZXJibG9jayBmcm9tIGZzX3N1cGVycy9zX2luc3RhbmNlc1xcbi1cXHQgKiBzbyB3ZSBjYW4ndCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cXG4rXFx0ICogTWFyayB0aGUgc3VwZXJibG9jayBkZWFkIHNvIHNnZXRfZmMoKSBjYW4ndCBmaW5kIGl0LFxcbitcXHQgKiBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cXG4gXFx0ICovXFxuIFxcdGtpbGxfYW5vbl9zdXBlcihzYik7XFxuIFxcdGtmcmVlKGluZm8pO1xcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLjBmOWUxM2VlZGI0ZmIgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtNDMzLDE1ICs0MzMsMTkgQEAgc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcXG4gdm9pZCBwdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxcbiB7XFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnMtXFx1MDAzZXNfcGFzc2l2ZSkpIHtcXG4rXFx0XFx0c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUgPSBzLVxcdTAwM2VzX3R5cGU7XFxuIFxcbiBcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiX2xvY2spO1xcbiBcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzLVxcdTAwM2VzX2xpc3QpO1xcbitcXHRcXHRobGlzdF9kZWxfaW5pdChcXHUwMDI2cy1cXHUwMDNlc19pbnN0YW5jZXMpO1xcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuIFxcbiBcXHRcXHRXQVJOX09OKHMtXFx1MDAzZXNfZGVudHJ5X2xydS5ub2RlKTtcXG4gXFx0XFx0V0FSTl9PTihzLVxcdTAwM2VzX2lub2RlX2xydS5ub2RlKTtcXG4gXFx0XFx0V0FSTl9PTihzLVxcdTAwM2VzX21vdW50cyk7XFxuIFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZzLVxcdTAwM2VyY3UsIGRlc3Ryb3lfc3VwZXJfcmN1KTtcXG4rXFx0XFx0LyogVGhlIHVubGluayBhYm92ZSBtYXkgdG91Y2ggdHlwZS1cXHUwMDNlZnNfc3VwZXJzLCBzbyBkcm9wIGl0IGxhc3QuICovXFxuK1xcdFxcdHB1dF9maWxlc3lzdGVtKHR5cGUpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTU1OCwxNyArNTYyLDYgQEAgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0aWYgKHNiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgU0JfREVBRClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogUmVtb3ZlIGl0IGZyb20gQGZzX3N1cGVycyBzbyBpdCBpc24ndCBmb3VuZCBieSBuZXdcXG4tXFx0ICogc2dldF9mYygpIHdhbGtlcnMgYW55bW9yZS4gQW55IGNvbmN1cnJlbnQgbW91bnRlciBzdGlsbFxcbi1cXHQgKiBtYW5hZ2luZyB0byBncmFiIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyBndWFyYW50ZWVkIHRvXFxuLVxcdCAqIGFscmVhZHkgc2VlIFNCX0RZSU5HIGFuZCB3aWxsIHdhaXQgdW50aWwgd2Ugbm90aWZ5IHRoZW0gYWJvdXRcXG4tXFx0ICogU0JfREVBRC5cXG4tXFx0ICovXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2c2JfbG9jayk7XFxuLVxcdGhsaXN0X2RlbF9pbml0KFxcdTAwMjZzYi1cXHUwMDNlc19pbnN0YW5jZXMpO1xcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuLVxcbiBcXHQvKiBEcm9wIHNnZXRfZmMoKSdzIGNsYWltOyBhIG5ldmVyLXJlZ2lzdGVyZWQgZW50cnkgc3RheXMgd2l0aCB0aGUgc2IuICovXFxuIFxcdGlmIChzYi1cXHUwMDNlc19zdXBlcl9kZXYtXFx1MDAzZXNkX2Rldikge1xcbiBcXHRcXHRzdXBlcl9kZXZfcHV0KHNiLVxcdTAwM2VzX3N1cGVyX2Rldik7XFxuQEAgLTU3NywxMSArNTcwLDE1IEBAIHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBMZXQgY29uY3VycmVudCBtb3VudHMga25vdyB0aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRlYWQuXFxuLVxcdCAqIFdlIGRvbid0IG5lZWQgQHNiLVxcdTAwM2VzX3Vtb3VudCBoZXJlIGFzIGV2ZXJ5IGNvbmN1cnJlbnQgY2FsbGVyXFxuLVxcdCAqIHdpbGwgc2VlIFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZCB0aGUgc3VwZXJibG9jayBvciB3YWl0XFxuLVxcdCAqIGZvciBTQl9ERUFELlxcbitcXHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXFxuK1xcdCAqIHNiX2xvY2ssIHNvIHNldCBpdCB1bmRlciBzYl9sb2NrOiBvbmNlIHdlIHJldHVybiBubyB0ZXN0KClcXG4rXFx0ICogcnVucyBvbiB0aGlzIHN1cGVyYmxvY2sgYW55bW9yZSBhbmQgbm9uZSB3aWxsIHN0YXJ0LiBFdmVyeW9uZVxcbitcXHQgKiBlbHNlIGFscmVhZHkgc2F3IFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZGVkIHRoZSBzdXBlcmJsb2NrXFxuK1xcdCAqIG9yIHdhaXRzIGZvciBTQl9ERUFELlxcbiBcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gXFx0c3VwZXJfd2FrZShzYiwgU0JfREVBRCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTYwOCw3ICs2MDUsNiBAQCB2b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG4gXFx0XFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2cy1cXHUwMDNlc19kZW50cnlfbHJ1KTtcXG4gXFx0XFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2cy1cXHUwMDNlc19pbm9kZV9scnUpO1xcbiBcXG4tXFx0XFx0cHV0X2ZpbGVzeXN0ZW0oZnMpO1xcbiBcXHRcXHRwdXRfc3VwZXIocyk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN1cGVyX3VubG9ja19leGNsKHMpO1xcbkBAIC03OTUsMTIgKzc5MSwxMiBAQCB2b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0fVxcbiBcXHQvKlxcbiBcXHQgKiBCcm9hZGNhc3QgdG8gZXZlcnlvbmUgdGhhdCBncmFiYmVkIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSB0byB0aGlzXFxuLVxcdCAqIHN1cGVyYmxvY2sgYmVmb3JlIHdlIHJlbW92ZWQgaXQgZnJvbSBAZnNfc3VwZXJzIHRoYXQgdGhlIHN1cGVyYmxvY2tcXG4tXFx0ICogaXMgZHlpbmcuIEV2ZXJ5IHdhbGtlciBvZiBAZnNfc3VwZXJzIG91dHNpZGUgb2Ygc2dldF9mYygpIHdpbGwgbm93XFxuLVxcdCAqIGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhcyBkZWFkLlxcbitcXHQgKiBzdXBlcmJsb2NrIHRoYXQgaXQgaXMgZHlpbmcuIEV2ZXJ5IHdhbGtlciBvZiBAZnNfc3VwZXJzIG91dHNpZGVcXG4rXFx0ICogb2Ygc2dldF9mYygpIHdpbGwgbm93IGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhc1xcbitcXHQgKiBkZWFkLlxcbiBcXHQgKlxcbi1cXHQgKiBXZSBsZWF2ZSB0aGUgc3VwZXJibG9jayBvbiBAZnNfc3VwZXJzIHNvIGl0IGNhbiBiZSBmb3VuZCBieVxcbi1cXHQgKiBzZ2V0X2ZjKCkgdW50aWwgd2UgcGFzc2VkIHNiLVxcdTAwM2VraWxsX3NiKCkuXFxuK1xcdCAqIHNnZXRfZmMoKSBrZWVwcyBmaW5kaW5nIHRoZSBzdXBlcmJsb2NrIHVudGlsIFNCX0RFQUQgaXMgc2V0LCBzb1xcbitcXHQgKiBhIGNvbmN1cnJlbnQgbW91bnRlciB3YWl0cyB1bnRpbCB3ZSBwYXNzZWQgc2ItXFx1MDAzZWtpbGxfc2IoKS5cXG4gXFx0ICovXFxuIFxcdHN1cGVyX3dha2Uoc2IsIFNCX0RZSU5HKTtcXG4gXFx0c3VwZXJfdW5sb2NrX2V4Y2woc2IpO1xcbkBAIC04NzksNiArODc1LDkgQEAgc3RydWN0IHN1cGVyX2Jsb2NrICpzZ2V0X2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gXFx0aWYgKHRlc3QpIHtcXG4gXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCBcXHUwMDI2ZmMtXFx1MDAzZWZzX3R5cGUtXFx1MDAzZWZzX3N1cGVycywgc19pbnN0YW5jZXMpIHtcXG4rXFx0XFx0XFx0LyogT25seSB1bmxpbmtlZCBhdCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZS4gKi9cXG4rXFx0XFx0XFx0aWYgKHN1cGVyX2ZsYWdzKG9sZCwgU0JfREVBRCkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRpZiAodGVzdChvbGQsIGZjKSlcXG4gXFx0XFx0XFx0XFx0Z290byBzaGFyZV9leHRhbnRfc2I7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6MzYuMDE3MzMxMDc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NTg2NDEwNDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLRVJORlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ2V0X2ZjXCIsXG4gICAgXCJwdXRfc3VwZXJcIixcbiAgICBcImRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyXCIsXG4gICAgXCJnZW5lcmljX3NodXRkb3duX3N1cGVyXCIsXG4gICAgXCJraWxsX2Fub25fc3VwZXJcIixcbiAgICBcImtlcm5mc19raWxsX3NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYWNyb3NzIG1vdW50IGFuZCB1bm1vdW50IHBhdGhzIChpbiBmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykuIEl0IGRlZmVycyB1bmxpbmtpbmcgc3VwZXJibG9ja3MgZnJvbSBmc19zdXBlcnMgdW50aWwgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UgZHJvcHMgaW4gcHV0X3N1cGVyKCksIHNldHMgU0JfREVBRCB1bmRlciBzYl9sb2NrIGluIGtpbGxfc3VwZXJfbm90aWZ5KCksIGFuZCBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGR1cmluZyBzZ2V0X2ZjKCkgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYmV0d2VlbiBjb25jdXJyZW50IG1vdW50IChzZ2V0X2ZjKSBhbmQgc2h1dGRvd24vZGVhY3RpdmF0aW9uIHJvdXRpbmVzLCBtYWtpbmcgdGhpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIHdlbGwgd29ydGggZnV6emluZyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzljN2YwMzNlMTc0M2UzM2ViZGViOGI4OTZkYjI3YmFmNTRkNzBhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjE6MTI6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9rZXJuZnMvbW91bnQuYyBiL2ZzL2tlcm5mcy9tb3VudC5jXG5pbmRleCBmMTgzYTk2Nzc4YjlhLi5hNTczOTkwMjFjOGIwIDEwMDY0NFxuLS0tIGEvZnMva2VybmZzL21vdW50LmNcbisrKyBiL2ZzL2tlcm5mcy9tb3VudC5jXG5AQCAtNDM0LDggKzQzNCw4IEBAIHZvaWQga2VybmZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHVwX3dyaXRlKFx1MDAyNnJvb3QtXHUwMDNla2VybmZzX3N1cGVyc19yd3NlbSk7XG4gXG4gXHQvKlxuLVx0ICogUmVtb3ZlIHRoZSBzdXBlcmJsb2NrIGZyb20gZnNfc3VwZXJzL3NfaW5zdGFuY2VzXG4tXHQgKiBzbyB3ZSBjYW4ndCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cbitcdCAqIE1hcmsgdGhlIHN1cGVyYmxvY2sgZGVhZCBzbyBzZ2V0X2ZjKCkgY2FuJ3QgZmluZCBpdCxcbitcdCAqIGJlZm9yZSBmcmVlaW5nIGtlcm5mc19zdXBlcl9pbmZvLlxuIFx0ICovXG4gXHRraWxsX2Fub25fc3VwZXIoc2IpO1xuIFx0a2ZyZWUoaW5mbyk7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLjBmOWUxM2VlZGI0ZmIgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtNDMzLDE1ICs0MzMsMTkgQEAgc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcbiB2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG4ge1xuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZzLVx1MDAzZXNfcGFzc2l2ZSkpIHtcbitcdFx0c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUgPSBzLVx1MDAzZXNfdHlwZTtcbiBcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnMtXHUwMDNlc19saXN0KTtcbitcdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2cy1cdTAwM2VzX2luc3RhbmNlcyk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFxuIFx0XHRXQVJOX09OKHMtXHUwMDNlc19kZW50cnlfbHJ1Lm5vZGUpO1xuIFx0XHRXQVJOX09OKHMtXHUwMDNlc19pbm9kZV9scnUubm9kZSk7XG4gXHRcdFdBUk5fT04ocy1cdTAwM2VzX21vdW50cyk7XG4gXHRcdGNhbGxfcmN1KFx1MDAyNnMtXHUwMDNlcmN1LCBkZXN0cm95X3N1cGVyX3JjdSk7XG4rXHRcdC8qIFRoZSB1bmxpbmsgYWJvdmUgbWF5IHRvdWNoIHR5cGUtXHUwMDNlZnNfc3VwZXJzLCBzbyBkcm9wIGl0IGxhc3QuICovXG4rXHRcdHB1dF9maWxlc3lzdGVtKHR5cGUpO1xuIFx0fVxuIH1cbiBcbkBAIC01NTgsMTcgKzU2Miw2IEBAIHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRpZiAoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfREVBRClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Lypcbi1cdCAqIFJlbW92ZSBpdCBmcm9tIEBmc19zdXBlcnMgc28gaXQgaXNuJ3QgZm91bmQgYnkgbmV3XG4tXHQgKiBzZ2V0X2ZjKCkgd2Fsa2VycyBhbnltb3JlLiBBbnkgY29uY3VycmVudCBtb3VudGVyIHN0aWxsXG4tXHQgKiBtYW5hZ2luZyB0byBncmFiIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyBndWFyYW50ZWVkIHRvXG4tXHQgKiBhbHJlYWR5IHNlZSBTQl9EWUlORyBhbmQgd2lsbCB3YWl0IHVudGlsIHdlIG5vdGlmeSB0aGVtIGFib3V0XG4tXHQgKiBTQl9ERUFELlxuLVx0ICovXG4tXHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4tXHRobGlzdF9kZWxfaW5pdChcdTAwMjZzYi1cdTAwM2VzX2luc3RhbmNlcyk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbi1cbiBcdC8qIERyb3Agc2dldF9mYygpJ3MgY2xhaW07IGEgbmV2ZXItcmVnaXN0ZXJlZCBlbnRyeSBzdGF5cyB3aXRoIHRoZSBzYi4gKi9cbiBcdGlmIChzYi1cdTAwM2VzX3N1cGVyX2Rldi1cdTAwM2VzZF9kZXYpIHtcbiBcdFx0c3VwZXJfZGV2X3B1dChzYi1cdTAwM2VzX3N1cGVyX2Rldik7XG5AQCAtNTc3LDExICs1NzAsMTUgQEAgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcbiBcdC8qXG4gXHQgKiBMZXQgY29uY3VycmVudCBtb3VudHMga25vdyB0aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRlYWQuXG4tXHQgKiBXZSBkb24ndCBuZWVkIEBzYi1cdTAwM2VzX3Vtb3VudCBoZXJlIGFzIGV2ZXJ5IGNvbmN1cnJlbnQgY2FsbGVyXG4tXHQgKiB3aWxsIHNlZSBTQl9EWUlORyBhbmQgZWl0aGVyIGRpc2NhcmQgdGhlIHN1cGVyYmxvY2sgb3Igd2FpdFxuLVx0ICogZm9yIFNCX0RFQUQuXG4rXHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXG4rXHQgKiBzYl9sb2NrLCBzbyBzZXQgaXQgdW5kZXIgc2JfbG9jazogb25jZSB3ZSByZXR1cm4gbm8gdGVzdCgpXG4rXHQgKiBydW5zIG9uIHRoaXMgc3VwZXJibG9jayBhbnltb3JlIGFuZCBub25lIHdpbGwgc3RhcnQuIEV2ZXJ5b25lXG4rXHQgKiBlbHNlIGFscmVhZHkgc2F3IFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZGVkIHRoZSBzdXBlcmJsb2NrXG4rXHQgKiBvciB3YWl0cyBmb3IgU0JfREVBRC5cbiBcdCAqL1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0c3VwZXJfd2FrZShzYiwgU0JfREVBRCk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNjA4LDcgKzYwNSw2IEBAIHZvaWQgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxuIFx0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNnMtXHUwMDNlc19kZW50cnlfbHJ1KTtcbiBcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZzLVx1MDAzZXNfaW5vZGVfbHJ1KTtcbiBcbi1cdFx0cHV0X2ZpbGVzeXN0ZW0oZnMpO1xuIFx0XHRwdXRfc3VwZXIocyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdXBlcl91bmxvY2tfZXhjbChzKTtcbkBAIC03OTUsMTIgKzc5MSwxMiBAQCB2b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdH1cbiBcdC8qXG4gXHQgKiBCcm9hZGNhc3QgdG8gZXZlcnlvbmUgdGhhdCBncmFiYmVkIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSB0byB0aGlzXG4tXHQgKiBzdXBlcmJsb2NrIGJlZm9yZSB3ZSByZW1vdmVkIGl0IGZyb20gQGZzX3N1cGVycyB0aGF0IHRoZSBzdXBlcmJsb2NrXG4tXHQgKiBpcyBkeWluZy4gRXZlcnkgd2Fsa2VyIG9mIEBmc19zdXBlcnMgb3V0c2lkZSBvZiBzZ2V0X2ZjKCkgd2lsbCBub3dcbi1cdCAqIGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhcyBkZWFkLlxuK1x0ICogc3VwZXJibG9jayB0aGF0IGl0IGlzIGR5aW5nLiBFdmVyeSB3YWxrZXIgb2YgQGZzX3N1cGVycyBvdXRzaWRlXG4rXHQgKiBvZiBzZ2V0X2ZjKCkgd2lsbCBub3cgZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzXG4rXHQgKiBkZWFkLlxuIFx0ICpcbi1cdCAqIFdlIGxlYXZlIHRoZSBzdXBlcmJsb2NrIG9uIEBmc19zdXBlcnMgc28gaXQgY2FuIGJlIGZvdW5kIGJ5XG4tXHQgKiBzZ2V0X2ZjKCkgdW50aWwgd2UgcGFzc2VkIHNiLVx1MDAzZWtpbGxfc2IoKS5cbitcdCAqIHNnZXRfZmMoKSBrZWVwcyBmaW5kaW5nIHRoZSBzdXBlcmJsb2NrIHVudGlsIFNCX0RFQUQgaXMgc2V0LCBzb1xuK1x0ICogYSBjb25jdXJyZW50IG1vdW50ZXIgd2FpdHMgdW50aWwgd2UgcGFzc2VkIHNiLVx1MDAzZWtpbGxfc2IoKS5cbiBcdCAqL1xuIFx0c3VwZXJfd2FrZShzYiwgU0JfRFlJTkcpO1xuIFx0c3VwZXJfdW5sb2NrX2V4Y2woc2IpO1xuQEAgLTg3OSw2ICs4NzUsOSBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0aWYgKHRlc3QpIHtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCBcdTAwMjZmYy1cdTAwM2Vmc190eXBlLVx1MDAzZWZzX3N1cGVycywgc19pbnN0YW5jZXMpIHtcbitcdFx0XHQvKiBPbmx5IHVubGlua2VkIGF0IHRoZSBsYXN0IHBhc3NpdmUgcmVmZXJlbmNlLiAqL1xuK1x0XHRcdGlmIChzdXBlcl9mbGFncyhvbGQsIFNCX0RFQUQpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKHRlc3Qob2xkLCBmYykpXG4gXHRcdFx0XHRnb3RvIHNoYXJlX2V4dGFudF9zYjtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6MzYuMDE3MzMzMDQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI4OTg0NzUzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhIGZlbGxvdyBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgSW50ZWdyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBldmFsdWF0ZSBhIExpbnV4IGtlcm5lbCBwYXRjaC4gU3BlY2lmaWNhbGx5LCB0aGlzIG9uZSdzIGJlZW4gZmxhZ2dlZCBmb3IgdXNlIHdpdGggc3l6a2FsbGVyLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgaW50ZXJuYWwgcmVkIGZsYWdzLiBXZSdyZSBsb29raW5nIGZvciBwb3RlbnRpYWwgZnV6emluZyBzdXJmYWNlIGFuZCBlbnN1cmluZyBwcm9wZXIgY292ZXJhZ2UuXG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBkaXZlIGRlZXAgaW50byB0aGUgcGF0Y2ggaXRzZWxmIGFuZCBpdHMgc3Vycm91bmRpbmcgY29udGV4dC4gV2hlcmUgZGlkIGl0IGNvbWUgZnJvbT8gV2hhdCdzIHRoZSBjaGFuZ2UgdHJ5aW5nIHRvIGFjaGlldmU/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGFmZmVjdGVkIGZpbGVzLiBBIHF1aWNrIGxvb2sgYXQgdGhlIGBnaXRgIGhpc3RvcnkgYXJvdW5kIHRob3NlIGZpbGVzIGlzIGVzc2VudGlhbCwgdXNpbmcgdG9vbHMgbGlrZSBgZ2l0IGJsYW1lYCBvciBgZ2l0IGxvZ2Agd2l0aCB0aGUgcmVsZXZhbnQgYC0tZm9sbG93YCBhbmQgYC0tbmFtZS1vbmx5YCBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2ZWxvcG1lbnQgaGlzdG9yeSwgd2hvIGF1dGhvcmVkIHRoZSBjb2RlIGFuZCB0aGVpciBwcmlvciBjb250ZXh0LlxuXG5OZXh0IHN0ZXA6IEknbGwgbmVlZCB0byBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpcyBvbiBmaWxlIGNoYW5nZXMuIEknbGwgbmVlZCB0byAqYWN0dWFsbHkqIHJlYWQgdGhlIHBhdGNoLCBidXQgYmVmb3JlIEkgZ2V0IGJvZ2dlZCBkb3duIGluIGRldGFpbHMgSSBtYXkgdXNlIGBnaXQgZ3JlcGAgd2l0aGluIHRoZSBjaGFuZ2VkIGZpbGVzIHRvIHF1aWNrbHkgaWRlbnRpZnkga2V5IGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBpbnRlcmVzdGluZyB2YXJpYWJsZXMuIFRoaXMgbWlnaHQgcXVpY2tseSBoaWdobGlnaHQgYXJlYXMgb2YgaW50ZXJlc3QgYW5kIGhlbHAgdG8gZm9jdXMgdGhlIGluLWRlcHRoIHJldmlldywgc2F2aW5nIHRpbWUuIEFsdGVybmF0aXZlbHksIGlmIHRoZSBmaWxlIHNpemUgaXMgbWFuYWdlYWJsZSwgSSBjb3VsZCBqdXN0IHJlYWQgdGhlIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMjo0OC45MTU4MTE3NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4NzgxNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNnZXRfZmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzLzlwL3Zmc19zdXBlci5jPTgyPXN0YXRpYyBpbnQgdjlmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy85cC92ZnNfc3VwZXIuYy0xMDMtXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IHY5c2VzO1xcbmZzLzlwL3Zmc19zdXBlci5jOjEwNDpcXHRzYiA9IHNnZXRfZmMoZmMsIE5VTEwsIHNldF9hbm9uX3N1cGVyX2ZjKTtcXG5mcy85cC92ZnNfc3VwZXIuYy0xMDUtXFx0aWYgKElTX0VSUihzYikpIHtcXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTU0OD1zdGF0aWMgaW50IGFmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9hZnMvc3VwZXIuYy01NjgtXFx0LyogYWxsb2NhdGUgYSBkZXZpY2VsZXNzIHN1cGVyYmxvY2sgKi9cXG5mcy9hZnMvc3VwZXIuYzo1Njk6XFx0c2IgPSBzZ2V0X2ZjKGZjLFxcbmZzL2Fmcy9zdXBlci5jLTU3MC1cXHRcXHQgICAgIGFzLVxcdTAwM2VkeW5fcm9vdCA/IGFmc19keW5yb290X3Rlc3Rfc3VwZXIgOiBhZnNfdGVzdF9zdXBlcixcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmM9MTg2MT1zdGF0aWMgaW50IGJ0cmZzX2dldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmMtMTg4NS1cXHQvKlxcbmZzL2J0cmZzL3N1cGVyLmM6MTg4NjpcXHQgKiBXZSBjYW5ub3QgaG9sZCB1dWlkX211dGV4IGNhbGxpbmcgc2dldF9mYygpLCBpdCB3aWxsIGxlYWQgdG8gYVxcbmZzL2J0cmZzL3N1cGVyLmMtMTg4Ny1cXHQgKiBsb2NraW5nIG9yZGVyIHJldmVyc2FsIHdpdGggc191bW91bnQuXFxuLS1cXG5mcy9idHJmcy9zdXBlci5jLTE4OTctXFxuZnMvYnRyZnMvc3VwZXIuYzoxODk4OlxcdHNiID0gc2dldF9mYyhmYywgYnRyZnNfZmNfdGVzdF9zdXBlciwgc2V0X2Fub25fc3VwZXJfZmMpO1xcbmZzL2J0cmZzL3N1cGVyLmMtMTg5OS1cXHRpZiAoSVNfRVJSKHNiKSkge1xcbi0tXFxuZnMvYnRyZnMvc3VwZXIuYz0yMDYxPXN0YXRpYyBpbnQgYnRyZnNfZ2V0X3RyZWVfc3Vidm9sKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmMtMjA3NS1cXHQgKiBvZiB0aGUgZnNfaW5mbyAobG9ja3MgYW5kIHN1Y2gpIHRvIG1ha2UgY2xlYW51cCBlYXNpZXIgaWYgd2UgZmluZCBhXFxuZnMvYnRyZnMvc3VwZXIuYzoyMDc2OlxcdCAqIHN1cGVyYmxvY2sgd2l0aCBvdXIgZ2l2ZW4gZnNfZGV2aWNlcyBsYXRlciBvbiBhdCBzZ2V0X2ZjKCkgdGltZS5cXG5mcy9idHJmcy9zdXBlci5jLTIwNzctXFx0ICovXFxuLS1cXG5mcy9idHJmcy9zdXBlci5jLTIxMDItXFx0LypcXG5mcy9idHJmcy9zdXBlci5jOjIxMDM6XFx0ICogV2hlbiB3ZSBkbyB0aGUgc2dldF9mYyB0aGlzIGdldHMgdHJhbnNmZXJyZWQgdG8gdGhlIHNiLCBzbyB3ZSBvbmx5XFxuZnMvYnRyZnMvc3VwZXIuYy0yMTA0LVxcdCAqIG5lZWQgdG8gc2V0IGl0IG9uIHRoZSBkdXBfZmMgYXMgdGhpcyBpcyB3aGF0IGNyZWF0ZXMgdGhlIHN1cGVyIGJsb2NrLlxcbi0tXFxuZnMvYnRyZnMvdm9sdW1lcy5oPTM0MT1zdHJ1Y3QgYnRyZnNfZnNfZGV2aWNlcyB7XFxuLS1cXG5mcy9idHJmcy92b2x1bWVzLmgtNDI5LVxcdCAqIGFmdGVyIGEgc3VwZXIgYmxvY2sgaXMgY3JlYXRlZC4gIEJ1dCB3ZSBjYW5ub3QgdGFrZSB1dWlkX211dGV4XFxuZnMvYnRyZnMvdm9sdW1lcy5oOjQzMDpcXHQgKiBkdXJpbmcgc2dldF9mYygpLCB0aHVzIHdlIGhhdmUgdG8gaG9sZCB0aGUgZnNfZGV2aWNlcyAobWVhbmluZyBpdFxcbmZzL2J0cmZzL3ZvbHVtZXMuaC00MzEtXFx0ICogY2Fubm90IGJlIHJlbGVhc2VkKSB1bnRpbCBhIHN1cGVyIGJsb2NrIGlzIHJldHVybmVkLlxcbi0tXFxuZnMvY2VwaC9zdXBlci5jPTEzMDk9c3RhdGljIGludCBjZXBoX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2NlcGgvc3VwZXIuYy0xMzQzLVxcdGZjLVxcdTAwM2VzX2ZzX2luZm8gPSBmc2M7XFxuZnMvY2VwaC9zdXBlci5jOjEzNDQ6XFx0c2IgPSBzZ2V0X2ZjKGZjLCBjb21wYXJlX3N1cGVyLCBjZXBoX3NldF9zdXBlcik7XFxuZnMvY2VwaC9zdXBlci5jLTEzNDUtXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IE5VTEw7XFxuLS1cXG5mcy9lY3J5cHRmcy9tYWluLmM9NDM1PXN0YXRpYyBpbnQgZWNyeXB0ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZWNyeXB0ZnMvbWFpbi5jLTQ2NC1cXG5mcy9lY3J5cHRmcy9tYWluLmM6NDY1OlxcdHMgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBzZXRfYW5vbl9zdXBlcl9mYyk7XFxuZnMvZWNyeXB0ZnMvbWFpbi5jLTQ2Ni1cXHRpZiAoSVNfRVJSKHMpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jPTIyMj1zdGF0aWMgaW50IGV4dGVudHNfa3VuaXRfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTI0Mi1cXHR9XFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYzoyNDM6XFx0c2IgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBleHRfc2V0KTtcXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTI0NC1cXHRwdXRfZnNfY29udGV4dChmYyk7XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jPTEzNz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICptYnRfZXh0NF9hbGxvY19zdXBlcl9ibG9jayh2b2lkKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xNTEtXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoxNTI6XFx0c2IgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBtYnRfc2V0KTtcXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTE1My1cXHRwdXRfZnNfY29udGV4dChmYyk7XFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9MTY3Nj1zdGF0aWMgaW50IGZ1c2VfZ2V0X3RyZWVfc3VibW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZzYylcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNjg5LVxcdGZzYy1cXHUwMDNlc19mc19pbmZvID0gZm07XFxuZnMvZnVzZS9pbm9kZS5jOjE2OTA6XFx0c2IgPSBzZ2V0X2ZjKGZzYywgTlVMTCwgc2V0X2Fub25fc3VwZXJfZmMpO1xcbmZzL2Z1c2UvaW5vZGUuYy0xNjkxLVxcdGlmIChmc2MtXFx1MDAzZXNfZnNfaW5mbylcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz0xODUzPXN0YXRpYyBpbnQgZnVzZV9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZnNjKVxcbi0tXFxuZnMvZnVzZS9pbm9kZS5jLTE4OTctXFx0XFx0ZnNjLVxcdTAwM2VzZ2V0X2tleSA9IGN0eC1cXHUwMDNlZnVkO1xcbmZzL2Z1c2UvaW5vZGUuYzoxODk4OlxcdFxcdHNiID0gc2dldF9mYyhmc2MsIGZ1c2VfdGVzdF9zdXBlciwgZnVzZV9zZXRfbm9fc3VwZXIpO1xcbmZzL2Z1c2UvaW5vZGUuYy0xODk5LVxcdFxcdGVyciA9IFBUUl9FUlJfT1JfWkVSTyhzYik7XFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTE2ODE9c3RhdGljIGludCB2aXJ0aW9fZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZzYylcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTczMy1cXHRmc2MtXFx1MDAzZXNfZnNfaW5mbyA9IGZtO1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTczNDpcXHRzYiA9IHNnZXRfZmMoZnNjLCB2aXJ0aW9fZnNfdGVzdF9zdXBlciwgc2V0X2Fub25fc3VwZXJfZmMpO1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTczNS1cXHRpZiAoZnNjLVxcdTAwM2VzX2ZzX2luZm8pXFxuLS1cXG5mcy9nZnMyL29wc19mc3R5cGUuYz0xNjczPXN0YXRpYyBpbnQgZ2ZzMl9tZXRhX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2dmczIvb3BzX2ZzdHlwZS5jLTE2OTAtXFx0ZmMtXFx1MDAzZXNnZXRfa2V5ID0gcGF0aC5kZW50cnktXFx1MDAzZWRfc2ItXFx1MDAzZXNfYmRldjtcXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNjkxOlxcdHMgPSBzZ2V0X2ZjKGZjLCB0ZXN0X21ldGFfc3VwZXIsIHNldF9tZXRhX3N1cGVyKTtcXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNjkyLVxcdHBhdGhfcHV0KFxcdTAwMjZwYXRoKTtcXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jPTM2Nj1pbnQga2VybmZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jLTM4MS1cXHRmYy1cXHUwMDNlc19mc19pbmZvID0gaW5mbztcXG5mcy9rZXJuZnMvbW91bnQuYzozODI6XFx0c2IgPSBzZ2V0X2ZjKGZjLCBrZXJuZnNfdGVzdF9zdXBlciwga2VybmZzX3NldF9zdXBlcik7XFxuZnMva2VybmZzL21vdW50LmMtMzgzLVxcdGlmIChJU19FUlIoc2IpKVxcbi0tXFxuZnMva2VybmZzL21vdW50LmM9NDI3PXZvaWQga2VybmZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jLTQzNi1cXHQvKlxcbmZzL2tlcm5mcy9tb3VudC5jOjQzNzpcXHQgKiBNYXJrIHRoZSBzdXBlcmJsb2NrIGRlYWQgc28gc2dldF9mYygpIGNhbid0IGZpbmQgaXQsXFxuZnMva2VybmZzL21vdW50LmMtNDM4LVxcdCAqIGJlZm9yZSBmcmVlaW5nIGtlcm5mc19zdXBlcl9pbmZvLlxcbi0tXFxuZnMvbmZzL3N1cGVyLmM9MTI5Nj1pbnQgbmZzX2dldF90cmVlX2NvbW1vbihzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9uZnMvc3VwZXIuYy0xMzE2LVxcdGZjLVxcdTAwM2VzX2ZzX2luZm8gPSBzZXJ2ZXI7XFxuZnMvbmZzL3N1cGVyLmM6MTMxNzpcXHRzID0gc2dldF9mYyhmYywgY29tcGFyZV9zdXBlciwgbmZzX3NldF9zdXBlcik7XFxuZnMvbmZzL3N1cGVyLmMtMTMxOC1cXHRmYy1cXHUwMDNlc19mc19pbmZvID0gTlVMTDtcXG4tLVxcbmZzL29yYW5nZWZzL3N1cGVyLmM9NDU1PXN0YXRpYyBpbnQgb3JhbmdlZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvb3JhbmdlZnMvc3VwZXIuYy00ODktXFxuZnMvb3JhbmdlZnMvc3VwZXIuYzo0OTA6XFx0c2IgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBzZXRfYW5vbl9zdXBlcl9mYyk7XFxuZnMvb3JhbmdlZnMvc3VwZXIuYy00OTEtXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jPTk5MD1jaWZzX3NtYjNfZG9fbW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc21iM19mc19jb250ZXh0ICpvbGRfY3R4KVxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMDQyLVxcdCAqIGlnbm9yZWQgdGhlIGNhbGxlci1zdXBwbGllZCBTQl8qIGZsYWdzLiBQcmVzZXJ2ZSB0aGF0IGJlaGF2aW91ciBieVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTA0MzpcXHQgKiBvdmVycmlkaW5nIGZjLVxcdTAwM2VzYl9mbGFncyBhcm91bmQgdGhlIHNnZXRfZmMoKSBjYWxsLlxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTA0NC1cXHQgKlxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTA0NTpcXHQgKiBIYW5kIGNpZnNfc2IgdG8gc2dldF9mYygpIHZpYSBmYy1cXHUwMDNlc19mc19pbmZvOyBzZ2V0X2ZjKCkgY29waWVzIGl0XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMDQ2LVxcdCAqIG9udG8gc2ItXFx1MDAzZXNfZnNfaW5mbyBiZWZvcmUgcnVubmluZyBzZXQoKSBhbmQgY2xlYXJzIGZjLVxcdTAwM2VzX2ZzX2luZm9cXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTA1My1cXHRmYy1cXHUwMDNlc2dldF9rZXkgPSBcXHUwMDI2bW50X2RhdGE7XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxMDU0OlxcdHNiID0gc2dldF9mYyhmYywgY2lmc19tYXRjaF9zdXBlciwgc2V0X2Fub25fc3VwZXJfZmMpO1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTA1NS1cXHRmYy1cXHUwMDNlc2dldF9rZXkgPSBOVUxMO1xcbi0tXFxuZnMvc3VwZXIuYz0zMzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcXG4tLVxcbmZzL3N1cGVyLmMtMzUwLVxcdC8qXFxuZnMvc3VwZXIuYzozNTE6XFx0ICogc2dldF9mYygpIGNhbiBoYXZlIHNfdW1vdW50IHJlY3Vyc2lvbi5cXG5mcy9zdXBlci5jLTM1Mi1cXHQgKlxcbi0tXFxuZnMvc3VwZXIuYz01NTc9c3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3N1cGVyLmMtNTY0LVxcbmZzL3N1cGVyLmM6NTY1OlxcdC8qIERyb3Agc2dldF9mYygpJ3MgY2xhaW07IGEgbmV2ZXItcmVnaXN0ZXJlZCBlbnRyeSBzdGF5cyB3aXRoIHRoZSBzYi4gKi9cXG5mcy9zdXBlci5jLTU2Ni1cXHRpZiAoc2ItXFx1MDAzZXNfc3VwZXJfZGV2LVxcdTAwM2VzZF9kZXYpIHtcXG4tLVxcbmZzL3N1cGVyLmMtNTcyLVxcdCAqIExldCBjb25jdXJyZW50IG1vdW50cyBrbm93IHRoYXQgdGhpcyB0aGluZyBpcyByZWFsbHkgZGVhZC5cXG5mcy9zdXBlci5jOjU3MzpcXHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXFxuZnMvc3VwZXIuYy01NzQtXFx0ICogc2JfbG9jaywgc28gc2V0IGl0IHVuZGVyIHNiX2xvY2s6IG9uY2Ugd2UgcmV0dXJuIG5vIHRlc3QoKVxcbi0tXFxuZnMvc3VwZXIuYz02MzI9RVhQT1JUX1NZTUJPTChkZWFjdGl2YXRlX3N1cGVyKTtcXG4tLVxcbmZzL3N1cGVyLmMtNjM4LSAqIEFjcXVpcmUgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIG9uIGEgc3VwZXJibG9jayBhbmQgdHJ5IHRvIHRyYWRlIGl0IGZvclxcbmZzL3N1cGVyLmM6NjM5OiAqIGFuIGFjdGl2ZSByZWZlcmVuY2UuIFRoaXMgaXMgdXNlZCBpbiBzZ2V0X2ZjKCkgdG8gd2FpdCBmb3IgYVxcbmZzL3N1cGVyLmMtNjQwLSAqIHN1cGVyYmxvY2sgdG8gZWl0aGVyIGJlY29tZSBTQl9CT1JOIG9yIGZvciBpdCB0byBwYXNzIHRocm91Z2hcXG4tLVxcbmZzL3N1cGVyLmM9NzM3PXZvaWQgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvc3VwZXIuYy03OTQtXFx0ICogc3VwZXJibG9jayB0aGF0IGl0IGlzIGR5aW5nLiBFdmVyeSB3YWxrZXIgb2YgQGZzX3N1cGVycyBvdXRzaWRlXFxuZnMvc3VwZXIuYzo3OTU6XFx0ICogb2Ygc2dldF9mYygpIHdpbGwgbm93IGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhc1xcbmZzL3N1cGVyLmMtNzk2LVxcdCAqIGRlYWQuXFxuZnMvc3VwZXIuYy03OTctXFx0ICpcXG5mcy9zdXBlci5jOjc5ODpcXHQgKiBzZ2V0X2ZjKCkga2VlcHMgZmluZGluZyB0aGUgc3VwZXJibG9jayB1bnRpbCBTQl9ERUFEIGlzIHNldCwgc29cXG5mcy9zdXBlci5jLTc5OS1cXHQgKiBhIGNvbmN1cnJlbnQgbW91bnRlciB3YWl0cyB1bnRpbCB3ZSBwYXNzZWQgc2ItXFx1MDAzZWtpbGxfc2IoKS5cXG4tLVxcbmZzL3N1cGVyLmM9ODEzPWJvb2wgbW91bnRfY2FwYWJsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9zdXBlci5jLTgyMS0vKipcXG5mcy9zdXBlci5jOjgyMjogKiBzZ2V0X2ZjIC0gRmluZCBvciBjcmVhdGUgYSBzdXBlcmJsb2NrXFxuZnMvc3VwZXIuYy04MjMtICogQGZjOlxcdEZpbGVzeXN0ZW0gY29udGV4dC5cXG4tLVxcbmZzL3N1cGVyLmMtODUyLSAqL1xcbmZzL3N1cGVyLmM6ODUzOnN0cnVjdCBzdXBlcl9ibG9jayAqc2dldF9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuZnMvc3VwZXIuYy04NTQtXFx0XFx0XFx0ICAgIGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcXG4tLVxcbmZzL3N1cGVyLmMtOTM0LX1cXG5mcy9zdXBlci5jOjkzNTpFWFBPUlRfU1lNQk9MKHNnZXRfZmMpO1xcbmZzL3N1cGVyLmMtOTM2LVxcbi0tXFxuZnMvc3VwZXIuYz0xMzkxPXN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuLS1cXG5mcy9zdXBlci5jLTEzOTgtXFxuZnMvc3VwZXIuYzoxMzk5OlxcdHNiID0gc2dldF9mYyhmYywgdGVzdCwgc2V0X2Fub25fc3VwZXJfZmMpO1xcbmZzL3N1cGVyLmMtMTQwMC1cXHRpZiAoSVNfRVJSKHNiKSlcXG4tLVxcbmZzL3N1cGVyLmM9MTQ4Mj1zdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYywgZGV2X3QgZGV2KVxcbi0tXFxuZnMvc3VwZXIuYy0xNDg0LVxcdGZjLVxcdTAwM2VzZ2V0X2tleSA9IFxcdTAwMjZkZXY7XFxuZnMvc3VwZXIuYzoxNDg1OlxcdHJldHVybiBzZ2V0X2ZjKGZjLCBzdXBlcl9zX2Rldl90ZXN0LCBzdXBlcl9zX2Rldl9zZXQpO1xcbmZzL3N1cGVyLmMtMTQ4Ni19XFxuLS1cXG5mcy9zdXBlci5jPTE3OTg9aW50IHNldHVwX2JkZXZfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNiX2ZsYWdzLFxcbi0tXFxuZnMvc3VwZXIuYy0xODIyLVxcbmZzL3N1cGVyLmM6MTgyMzpcXHQvKiBUaGUgc2dldF9mYygpIGVudHJ5IGlzIGFscmVhZHkgcHVibGlzaGVkOyBwYWlycyB3aXRoIGJkZXZfZnJlZXplKCkuICovXFxuZnMvc3VwZXIuYy0xODI0LVxcdHNtcF9tYigpO1xcbi0tXFxuZnMvdWJpZnMvc3VwZXIuYz0yMjMyPXN0YXRpYyBpbnQgdWJpZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdWJpZnMvc3VwZXIuYy0yMjY2LVxcbmZzL3ViaWZzL3N1cGVyLmM6MjI2NzpcXHRzYiA9IHNnZXRfZmMoZmMsIHNiX3Rlc3QsIHNldF9hbm9uX3N1cGVyX2ZjKTtcXG5mcy91Ymlmcy9zdXBlci5jLTIyNjgtXFx0aWYgKElTX0VSUihzYikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6NDkuOTA0NjAwMjM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4MTI2Nzc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpbGVzeXN0ZW0gQ2hhbmdlcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGZpbGVzeXN0ZW0gbW9kaWZpY2F0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBkaWZmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZWxldmFudCBzZWN0aW9ucy4gTXkgZm9jdXMgaXMgb24gdGhlIGNoYW5nZXMgdG8gYGZzL3N1cGVyLmNgIGFuZCBgZnMva2VybmZzL21vdW50LmNgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgb2YgdGhpcyBsaWtlbHkgcmVzaWRlcy4gSSdsbCByZWFkIHRocm91Z2ggYGZzL3N1cGVyLmNgIGZpcnN0LCBzcGVjaWZpY2FsbHkgbGluZXMgNDIwLTYyMCBhbmQgdGhlbiBsaW5lcyA4NjAtOTQwLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZpbGUuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIHRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzIGluIHRoaXMgcmFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMjo1Mi4xODU4NzA5MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0fVxcbiA0MjY6XFx0XFxuIDQyNzpcXHQvKiBTdXBlcmJsb2NrIHJlZmNvdW50aW5nICAqL1xcbiA0Mjg6XFx0XFxuIDQyOTpcXHQvKlxcbiA0MzA6XFx0ICogRHJvcCBhIHN1cGVyYmxvY2sncyBwYXNzaXZlIHJlZmVyZW5jZS4gIE11c3QgYmUgY2FsbGVkIFdJVEhPVVQgc2JfbG9jayBoZWxkO1xcbiA0MzE6XFx0ICogcHV0X3N1cGVyKCkgYWNxdWlyZXMgc2JfbG9jayBpdHNlbGYgd2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIGRyb3BwZWQuXFxuIDQzMjpcXHQgKi9cXG4gNDMzOlxcdHZvaWQgcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG4gNDM0OlxcdHtcXG4gNDM1OlxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnMtXFx1MDAzZXNfcGFzc2l2ZSkpIHtcXG4gNDM2OlxcdFxcdFxcdHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlID0gcy1cXHUwMDNlc190eXBlO1xcbiA0Mzc6XFx0XFxuIDQzODpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiX2xvY2spO1xcbiA0Mzk6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cy1cXHUwMDNlc19saXN0KTtcXG4gNDQwOlxcdFxcdFxcdGhsaXN0X2RlbF9pbml0KFxcdTAwMjZzLVxcdTAwM2VzX2luc3RhbmNlcyk7XFxuIDQ0MTpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuIDQ0MjpcXHRcXG4gNDQzOlxcdFxcdFxcdFdBUk5fT04ocy1cXHUwMDNlc19kZW50cnlfbHJ1Lm5vZGUpO1xcbiA0NDQ6XFx0XFx0XFx0V0FSTl9PTihzLVxcdTAwM2VzX2lub2RlX2xydS5ub2RlKTtcXG4gNDQ1OlxcdFxcdFxcdFdBUk5fT04ocy1cXHUwMDNlc19tb3VudHMpO1xcbiA0NDY6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnMtXFx1MDAzZXJjdSwgZGVzdHJveV9zdXBlcl9yY3UpO1xcbiA0NDc6XFx0XFx0XFx0LyogVGhlIHVubGluayBhYm92ZSBtYXkgdG91Y2ggdHlwZS1cXHUwMDNlZnNfc3VwZXJzLCBzbyBkcm9wIGl0IGxhc3QuICovXFxuIDQ0ODpcXHRcXHRcXHRwdXRfZmlsZXN5c3RlbSh0eXBlKTtcXG4gNDQ5OlxcdFxcdH1cXG4gNDUwOlxcdH1cXG4gNDUxOlxcdFxcbiA0NTI6XFx0c3RydWN0IHN1cGVyX2RldiB7XFxuIDQ1MzpcXHRcXHRkZXZfdFxcdFxcdFxcdHNkX2RldjtcXG4gNDU0OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9ja1xcdCpzZF9zYjtcXG4gNDU1OlxcdFxcdHJlZmNvdW50X3RcXHRcXHRzZF9yZWY7XFxuIDQ1NjpcXHRcXHRzdHJ1Y3QgcmhsaXN0X2hlYWRcXHRzZF9ub2RlO1xcbiA0NTc6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0c2RfcmN1O1xcbiA0NTg6XFx0fTtcXG4gNDU5OlxcdFxcbiA0NjA6XFx0c3RhdGljIHN0cnVjdCByaGx0YWJsZSBzdXBlcl9kZXZfdGFibGU7XFxuIDQ2MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHN1cGVyX2Rldl9wYXJhbXMgPSB7XFxuIDQ2MjpcXHRcXHQua2V5X2xlblxcdD0gc2l6ZW9mKGRldl90KSxcXG4gNDYzOlxcdFxcdC5rZXlfb2Zmc2V0XFx0PSBvZmZzZXRvZihzdHJ1Y3Qgc3VwZXJfZGV2LCBzZF9kZXYpLFxcbiA0NjQ6XFx0XFx0LmhlYWRfb2Zmc2V0XFx0PSBvZmZzZXRvZihzdHJ1Y3Qgc3VwZXJfZGV2LCBzZF9ub2RlKSxcXG4gNDY1OlxcdH07XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfZGV2ICpzdXBlcl9kZXZfYWxsb2MoZGV2X3QgZGV2LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiA0Njg6XFx0e1xcbiA0Njk6XFx0XFx0c3RydWN0IHN1cGVyX2RldiAqZnNkO1xcbiA0NzA6XFx0XFxuIDQ3MTpcXHRcXHRmc2QgPSBremFsbG9jX29iaigqZnNkKTtcXG4gNDcyOlxcdFxcdGlmICghZnNkKVxcbiA0NzM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ3NDpcXHRcXHRmc2QtXFx1MDAzZXNkX2RldiA9IGRldjtcXG4gNDc1OlxcdFxcdGZzZC1cXHUwMDNlc2Rfc2IgPSBzYjtcXG4gNDc2OlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2ZnNkLVxcdTAwM2VzZF9yZWYsIDEpO1xcbiA0Nzc6XFx0XFx0cmV0dXJuIGZzZDtcXG4gNDc4OlxcdH1cXG4gNDc5OlxcdFxcbiA0ODA6XFx0c3RhdGljIHZvaWQgc3VwZXJfZGV2X3B1dChzdHJ1Y3Qgc3VwZXJfZGV2ICpmc2QpXFxuIDQ4MTpcXHR7XFxuIDQ4MjpcXHRcXHQvKiBVbmxpbmsgb25seSBvbmNlIHVucGlubmVkLCBzbyBhIGN1cnNvciBuZXZlciByZXN1bWVzIGZyb20gYSByZW1vdmVkIG5vZGUuICovXFxuIDQ4MzpcXHRcXHRpZiAoZnNkIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2ZnNkLVxcdTAwM2VzZF9yZWYpKSB7XFxuIDQ4NDpcXHRcXHRcXHRyaGx0YWJsZV9yZW1vdmUoXFx1MDAyNnN1cGVyX2Rldl90YWJsZSwgXFx1MDAyNmZzZC1cXHUwMDNlc2Rfbm9kZSwgc3VwZXJfZGV2X3BhcmFtcyk7XFxuIDQ4NTpcXHRcXHRcXHRwdXRfc3VwZXIoZnNkLVxcdTAwM2VzZF9zYik7XFxuIDQ4NjpcXHRcXHRcXHRrZnJlZV9yY3UoZnNkLCBzZF9yY3UpO1xcbiA0ODc6XFx0XFx0fVxcbiA0ODg6XFx0fVxcbiA0ODk6XFx0XFxuIDQ5MDpcXHR2b2lkIF9faW5pdCBzdXBlcl9kZXZfaW5pdCh2b2lkKVxcbiA0OTE6XFx0e1xcbiA0OTI6XFx0XFx0aWYgKHJobHRhYmxlX2luaXQoXFx1MDAyNnN1cGVyX2Rldl90YWJsZSwgXFx1MDAyNnN1cGVyX2Rldl9wYXJhbXMpKVxcbiA0OTM6XFx0XFx0XFx0cGFuaWMoXFxcIlZGUzogQ2Fubm90IGluaXRpYWxpc2Ugc3VwZXJfZGV2X3RhYmxlXFxcXG5cXFwiKTtcXG4gNDk0OlxcdH1cXG4gNDk1OlxcdFxcbiA0OTY6XFx0c3RhdGljIGludCBzdXBlcl9kZXZfaW5zZXJ0KHN0cnVjdCBzdXBlcl9kZXYgKmZzZClcXG4gNDk3OlxcdHtcXG4gNDk4OlxcdFxcdGludCBlcnI7XFxuIDQ5OTpcXHRcXG4gNTAwOlxcdFxcdGVyciA9IHJobHRhYmxlX2luc2VydChcXHUwMDI2c3VwZXJfZGV2X3RhYmxlLCBcXHUwMDI2ZnNkLVxcdTAwM2VzZF9ub2RlLCBzdXBlcl9kZXZfcGFyYW1zKTtcXG4gNTAxOlxcdFxcdGlmICghZXJyKVxcbiA1MDI6XFx0XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZmc2QtXFx1MDAzZXNkX3NiLVxcdTAwM2VzX3Bhc3NpdmUpO1xcbiA1MDM6XFx0XFx0cmV0dXJuIGVycjtcXG4gNTA0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6NTIuMTg2MDkxNTM4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI5Mzk3MTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHNlY3Rpb25zLCB0YWlsb3JlZCBmb3Igc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMga2VybmVsIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBmcy9zdXBlci5jYCBTZWN0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBmcy9zdXBlci5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gbGluZXMgNTUwIHRocm91Z2ggNjIwIGFuZCB0aGVuIGp1bXBpbmcgYWhlYWQgdG8gbGluZXMgODYwIHRocm91Z2ggOTIwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcyBiZWluZyBkaXNjdXNzZWQgaW4gdGhvc2UgcmFuZ2VzLiBHaXZlbiB0aGUgZmlsZSBhbmQgdGhlc2UgbGluZSBudW1iZXJzLCBJJ20gYW50aWNpcGF0aW5nIHRoYXQgSSdsbCBmaW5kIGNvZGUgcmVsYXRlZCB0byBzdXBlcmJsb2NrIG9wZXJhdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIGhvdyB0aGUgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXplZCwgcG90ZW50aWFsbHkgY292ZXJpbmcgYXNwZWN0cyBsaWtlIHJlYWRpbmcgaXQgZnJvbSBkaXNrLCB2YWxpZGF0aW5nIGl0cyBjb250ZW50cywgYW5kIGFueSBhc3NvY2lhdGVkIGVycm9yIGhhbmRsaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIHJlZ2FyZGluZyBkaWZmZXJlbnQgZmlsZXN5c3RlbSB0eXBlcy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQsIHNpbmNlIGBmcy9zdXBlci5jYCBpcyB0aGUgY29yZSBvZiBob3cgZmlsZXN5c3RlbXMgYXJlIG1vdW50ZWQgYW5kIG1hbmFnZWQuIEkgbmVlZCB0byBiZSBzdXJlIGFueSBsb2NraW5nIGlzIHVzZWQgY29ycmVjdGx5LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29kZSBkZWFscyB3aXRoIHNwZWNpZmljIHN1cGVyYmxvY2sgb3BlcmF0aW9ucywgYW5kIGlmIHNvLCBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaG9va2VkIGludG8gdGhlIGdlbmVyaWMgVkZTIGZyYW1ld29yay4gQW55IGludGVyYWN0aW9ucyB3aXRoIHVuZGVybHlpbmcgZGV2aWNlIGRyaXZlcnMgb3IgYmxvY2sgbGF5ZXIgY29tcG9uZW50cyB3aWxsIGJlIGNyaXRpY2FsLlxuXG5GdXJ0aGVybW9yZSwgSSdtIGFudGljaXBhdGluZyBwb3RlbnRpYWwgZGlzY3Vzc2lvbnMgb2YgZmlsZXN5c3RlbS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBvciBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgaWYgdGhvc2UgbGluZXMgY292ZXIgYXNwZWN0cyBsaWtlIHNldHRpbmcgdXAgdGhlIHJvb3QgaW5vZGUgb3IgbWFuYWdpbmcgdGhlIGZyZWUgc3BhY2Ugb24gdGhlIGZpbGVzeXN0ZW0uIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMgc3VwZXJibG9jayBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcywgYW5kIGhvdyB0aGV5IHdvdWxkIGJlIHJlc29sdmVkIG9yIGxvZ2dlZC4gSSBhbHNvIG1pZ2h0IHNlZSBhbiBhbmFseXNpcyBvZiBob3cgbWV0YWRhdGEgaXMgaGFuZGxlZCBhbmQgdHJhY2tlZC4gSSdsbCBhbHNvIHRyeSB0byB0cmFjayBob3cgdGhlIGZpbGUgc3lzdGVtJ3Mgb24tZGlzayBmb3JtYXQgaXMgZGVmaW5lZCBhbmQgdXRpbGl6ZWQgaW4gdGhpcyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMjo1NS40ODAwNjY4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1MDpcXHRcXHRzYl9kZXYgPSBzdXBlcl9kZXZfZ2V0KHJjdV9kZXJlZmVyZW5jZV9hbGwocHJldi1cXHUwMDNlc2Rfbm9kZS5uZXh0KSk7XFxuIDU1MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0c3VwZXJfZGV2X3B1dChwcmV2KTtcXG4gNTU0OlxcdFxcdHJldHVybiBzYl9kZXY7XFxuIDU1NTpcXHR9XFxuIDU1NjpcXHRcXG4gNTU3OlxcdHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIDU1ODpcXHR7XFxuIDU1OTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcXHUwMDI2c2ItXFx1MDAzZXNfdW1vdW50KTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0LyogYWxyZWFkeSBub3RpZmllZCBlYXJsaWVyICovXFxuIDU2MjpcXHRcXHRpZiAoc2ItXFx1MDAzZXNfZmxhZ3MgXFx1MDAyNiBTQl9ERUFEKVxcbiA1NjM6XFx0XFx0XFx0cmV0dXJuO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHQvKiBEcm9wIHNnZXRfZmMoKSdzIGNsYWltOyBhIG5ldmVyLXJlZ2lzdGVyZWQgZW50cnkgc3RheXMgd2l0aCB0aGUgc2IuICovXFxuIDU2NjpcXHRcXHRpZiAoc2ItXFx1MDAzZXNfc3VwZXJfZGV2LVxcdTAwM2VzZF9kZXYpIHtcXG4gNTY3OlxcdFxcdFxcdHN1cGVyX2Rldl9wdXQoc2ItXFx1MDAzZXNfc3VwZXJfZGV2KTtcXG4gNTY4OlxcdFxcdFxcdHNiLVxcdTAwM2VzX3N1cGVyX2RldiA9IE5VTEw7XFxuIDU2OTpcXHRcXHR9XFxuIDU3MDpcXHRcXG4gNTcxOlxcdFxcdC8qXFxuIDU3MjpcXHRcXHQgKiBMZXQgY29uY3VycmVudCBtb3VudHMga25vdyB0aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRlYWQuXFxuIDU3MzpcXHRcXHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXFxuIDU3NDpcXHRcXHQgKiBzYl9sb2NrLCBzbyBzZXQgaXQgdW5kZXIgc2JfbG9jazogb25jZSB3ZSByZXR1cm4gbm8gdGVzdCgpXFxuIDU3NTpcXHRcXHQgKiBydW5zIG9uIHRoaXMgc3VwZXJibG9jayBhbnltb3JlIGFuZCBub25lIHdpbGwgc3RhcnQuIEV2ZXJ5b25lXFxuIDU3NjpcXHRcXHQgKiBlbHNlIGFscmVhZHkgc2F3IFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZGVkIHRoZSBzdXBlcmJsb2NrXFxuIDU3NzpcXHRcXHQgKiBvciB3YWl0cyBmb3IgU0JfREVBRC5cXG4gNTc4OlxcdFxcdCAqL1xcbiA1Nzk6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gNTgwOlxcdFxcdHN1cGVyX3dha2Uoc2IsIFNCX0RFQUQpO1xcbiA1ODE6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiX2xvY2spO1xcbiA1ODI6XFx0fVxcbiA1ODM6XFx0XFxuIDU4NDpcXHQvKipcXG4gNTg1OlxcdCAqXFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJcXHQtXFx0ZHJvcCBhbiBhY3RpdmUgcmVmZXJlbmNlIHRvIHN1cGVyYmxvY2tcXG4gNTg2OlxcdCAqXFx0QHM6IHN1cGVyYmxvY2sgdG8gZGVhY3RpdmF0ZVxcbiA1ODc6XFx0ICpcXG4gNTg4OlxcdCAqXFx0RHJvcHMgYW4gYWN0aXZlIHJlZmVyZW5jZSB0byBzdXBlcmJsb2NrLCBjb252ZXJ0aW5nIGl0IGludG8gYSB0ZW1wb3JhcnlcXG4gNTg5OlxcdCAqXFx0b25lIGlmIHRoZXJlIGlzIG5vIG90aGVyIGFjdGl2ZSByZWZlcmVuY2VzIGxlZnQuICBJbiB0aGF0IGNhc2Ugd2VcXG4gNTkwOlxcdCAqXFx0dGVsbCBmcyBkcml2ZXIgdG8gc2h1dCBpdCBkb3duIGFuZCBkcm9wIHRoZSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHdlXFxuIDU5MTpcXHQgKlxcdGhhZCBqdXN0IGFjcXVpcmVkLlxcbiA1OTI6XFx0ICpcXG4gNTkzOlxcdCAqXFx0Q2FsbGVyIGhvbGRzIGV4Y2x1c2l2ZSBsb2NrIG9uIHN1cGVyYmxvY2s7IHRoYXQgbG9jayBpcyByZWxlYXNlZC5cXG4gNTk0OlxcdCAqL1xcbiA1OTU6XFx0dm9pZCBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXFxuIDU5NjpcXHR7XFxuIDU5NzpcXHRcXHRzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnMgPSBzLVxcdTAwM2VzX3R5cGU7XFxuIDU5ODpcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cy1cXHUwMDNlc19hY3RpdmUpKSB7XFxuIDU5OTpcXHRcXHRcXHRzaHJpbmtlcl9mcmVlKHMtXFx1MDAzZXNfc2hyaW5rKTtcXG4gNjAwOlxcdFxcdFxcdGZzLVxcdTAwM2VraWxsX3NiKHMpO1xcbiA2MDE6XFx0XFxuIDYwMjpcXHRcXHRcXHRraWxsX3N1cGVyX25vdGlmeShzKTtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0XFx0LyogbGlzdF9scnVfZGVzdHJveSgpIG1heSBzbGVlcDsgcHV0X3N1cGVyKCkgY2FsbGVycyBtYXkgbm90LiAqL1xcbiA2MDU6XFx0XFx0XFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2cy1cXHUwMDNlc19kZW50cnlfbHJ1KTtcXG4gNjA2OlxcdFxcdFxcdGxpc3RfbHJ1X2Rlc3Ryb3koXFx1MDAyNnMtXFx1MDAzZXNfaW5vZGVfbHJ1KTtcXG4gNjA3OlxcdFxcbiA2MDg6XFx0XFx0XFx0cHV0X3N1cGVyKHMpO1xcbiA2MDk6XFx0XFx0fSBlbHNlIHtcXG4gNjEwOlxcdFxcdFxcdHN1cGVyX3VubG9ja19leGNsKHMpO1xcbiA2MTE6XFx0XFx0fVxcbiA2MTI6XFx0fVxcbiA2MTM6XFx0XFxuIDYxNDpcXHRFWFBPUlRfU1lNQk9MKGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKTtcXG4gNjE1OlxcdFxcbiA2MTY6XFx0LyoqXFxuIDYxNzpcXHQgKlxcdGRlYWN0aXZhdGVfc3VwZXJcXHQtXFx0ZHJvcCBhbiBhY3RpdmUgcmVmZXJlbmNlIHRvIHN1cGVyYmxvY2tcXG4gNjE4OlxcdCAqXFx0QHM6IHN1cGVyYmxvY2sgdG8gZGVhY3RpdmF0ZVxcbiA2MTk6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6NTUuNDgwMjc0MTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzA1MDI1OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoYXQgc2VjdGlvbiBvZiBgZnMvc3VwZXIuY2AuXG5cbioqRGl2aW5nIGludG8gdGhlIFN1cGVyYmxvY2sgQ29kZSoqXG5cbkFscmlnaHQsIEknbSBmb2N1c2luZyBpbiBvbiBsaW5lcyA4NjAgdG8gOTM1IG9mIGBmcy9zdXBlci5jYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgc3VwZXJibG9jayBoYW5kbGluZyBpcyB0YWtpbmcgcGxhY2UuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uLCBtb3VudGluZywgdW5tb3VudGluZywgYW5kIHBvc3NpYmx5IHNvbWUgbWFuYWdlbWVudCBvZiB0aGUgc3VwZXJibG9jaydzIGluLW1lbW9yeSByZXByZXNlbnRhdGlvbi4gSSBrbm93IHRoaXMgYXJlYSBpbnRpbWF0ZWx5LCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIHRoZSBtYWluIGZ1bmN0aW9ucyBjYWxsZWQuIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGJlaW5nIHVzZWQuIEkgd2lsbCBiZSBsb29raW5nIG91dCBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEknbSBnb2luZyB0byBiZSBsb29raW5nIGZvciBob3cgdGhlIHN1cGVyYmxvY2sgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIG9yIHN0b3JhZ2UuIEFueSBpbnRlcmVzdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgd2lsbCBiZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LCBlc3BlY2lhbGx5IHJlYWQtd3JpdGUgbG9ja3Mgb3Igc3BpbmxvY2tzIHVzZWQgdG8gcHJvdGVjdCB0aGUgc3VwZXJibG9jayBkYXRhLiBJJ20gaG9waW5nIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhpcyBjb2RlIHdpdGggdGhlIFZGUyBsYXllciwgcGFydGljdWxhcmx5IGhvdyBzdXBlcmJsb2NrIGluZm9ybWF0aW9uIGlzIGNvbW11bmljYXRlZCB1cHdhcmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6NTguMTg1MzAyNDAyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHRpbnQgZXJyO1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHQvKlxcbiA4NjM6XFx0XFx0ICogTmV2ZXIgYWxsb3cgc191c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMgd2hlbiBGU19VU0VSTlNfTU9VTlQgb3JcXG4gODY0OlxcdFxcdCAqIEZTX1VTRVJOU19ERUxFR0FUQUJMRSBpcyBub3Qgc2V0LCBhcyB0aGUgZmlsZXN5c3RlbSBpcyBsaWtlbHlcXG4gODY1OlxcdFxcdCAqIHVucHJlcGFyZWQgdG8gaGFuZGxlIGl0LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBmc2NvbmZpZygpIGlzIGNhbGxlZFxcbiA4NjY6XFx0XFx0ICogZnJvbSBpbml0X3VzZXJfbnMgd2l0aCBhbiBmc19mZCBvcGVuZWQgaW4gYW5vdGhlciB1c2VyIG5hbWVzcGFjZS5cXG4gODY3OlxcdFxcdCAqL1xcbiA4Njg6XFx0XFx0aWYgKHVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucyBcXHUwMDI2XFx1MDAyNlxcbiA4Njk6XFx0XFx0ICAgICEoZmMtXFx1MDAzZWZzX3R5cGUtXFx1MDAzZWZzX2ZsYWdzIFxcdTAwMjYgKEZTX1VTRVJOU19NT1VOVCB8IEZTX1VTRVJOU19ERUxFR0FUQUJMRSkpKSB7XFxuIDg3MDpcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwiVkZTOiBNb3VudGluZyBmcm9tIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlIGlzIG5vdCBhbGxvd2VkXFxcIik7XFxuIDg3MTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRVBFUk0pO1xcbiA4NzI6XFx0XFx0fVxcbiA4NzM6XFx0XFxuIDg3NDpcXHRyZXRyeTpcXG4gODc1OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2JfbG9jayk7XFxuIDg3NjpcXHRcXHRpZiAodGVzdCkge1xcbiA4Nzc6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCBcXHUwMDI2ZmMtXFx1MDAzZWZzX3R5cGUtXFx1MDAzZWZzX3N1cGVycywgc19pbnN0YW5jZXMpIHtcXG4gODc4OlxcdFxcdFxcdFxcdC8qIE9ubHkgdW5saW5rZWQgYXQgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UuICovXFxuIDg3OTpcXHRcXHRcXHRcXHRpZiAoc3VwZXJfZmxhZ3Mob2xkLCBTQl9ERUFEKSlcXG4gODgwOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4ODE6XFx0XFx0XFx0XFx0aWYgKHRlc3Qob2xkLCBmYykpXFxuIDg4MjpcXHRcXHRcXHRcXHRcXHRnb3RvIHNoYXJlX2V4dGFudF9zYjtcXG4gODgzOlxcdFxcdFxcdH1cXG4gODg0OlxcdFxcdH1cXG4gODg1OlxcdFxcdGlmICghcykge1xcbiA4ODY6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiX2xvY2spO1xcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHRcXHRzID0gYWxsb2Nfc3VwZXIoZmMtXFx1MDAzZWZzX3R5cGUsIGZjLVxcdTAwM2VzYl9mbGFncywgdXNlcl9ucyk7XFxuIDg4OTpcXHRcXHRcXHRpZiAoIXMpXFxuIDg5MDpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gODkxOlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDg5MjpcXHRcXHR9XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdHMtXFx1MDAzZXNfZnNfaW5mbyA9IGZjLVxcdTAwM2VzX2ZzX2luZm87XFxuIDg5NTpcXHRcXHRlcnIgPSBzZXQocywgZmMpO1xcbiA4OTY6XFx0XFx0aWYgKGVycikge1xcbiA4OTc6XFx0XFx0XFx0VkZTX1dBUk5fT05fT05DRShzLVxcdTAwM2VzX3N1cGVyX2Rldi1cXHUwMDNlc2RfZGV2KTtcXG4gODk4OlxcdFxcdFxcdHMtXFx1MDAzZXNfZnNfaW5mbyA9IE5VTEw7XFxuIDg5OTpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuIDkwMDpcXHRcXHRcXHRkZXN0cm95X3VudXNlZF9zdXBlcihzKTtcXG4gOTAxOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIDkwMjpcXHRcXHR9XFxuIDkwMzpcXHRcXHRWRlNfV0FSTl9PTl9PTkNFKCFzLVxcdTAwM2VzX3N1cGVyX2Rldi1cXHUwMDNlc2RfZGV2KTtcXG4gOTA0OlxcdFxcdGZjLVxcdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xcbiA5MDU6XFx0XFx0cy1cXHUwMDNlc190eXBlID0gZmMtXFx1MDAzZWZzX3R5cGU7XFxuIDkwNjpcXHRcXHRzLVxcdTAwM2VzX2lmbGFncyB8PSBmYy1cXHUwMDNlc19pZmxhZ3M7XFxuIDkwNzpcXHRcXHRzdHJzY3B5KHMtXFx1MDAzZXNfaWQsIHMtXFx1MDAzZXNfdHlwZS1cXHUwMDNlbmFtZSwgc2l6ZW9mKHMtXFx1MDAzZXNfaWQpKTtcXG4gOTA4OlxcdFxcdC8qXFxuIDkwOTpcXHRcXHQgKiBNYWtlIHRoZSBzdXBlcmJsb2NrIHZpc2libGUgb24gQHN1cGVyX2Jsb2NrcyBhbmQgQGZzX3N1cGVycy5cXG4gOTEwOlxcdFxcdCAqIEl0J3MgaW4gYSBuYXNjZW50IHN0YXRlIGFuZCB1c2VycyBzaG91bGQgd2FpdCBvbiBTQl9CT1JOIG9yXFxuIDkxMTpcXHRcXHQgKiBTQl9EWUlORyB0byBiZSBzZXQuXFxuIDkxMjpcXHRcXHQgKi9cXG4gOTEzOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnMtXFx1MDAzZXNfbGlzdCwgXFx1MDAyNnN1cGVyX2Jsb2Nrcyk7XFxuIDkxNDpcXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2cy1cXHUwMDNlc19pbnN0YW5jZXMsIFxcdTAwMjZzLVxcdTAwM2VzX3R5cGUtXFx1MDAzZWZzX3N1cGVycyk7XFxuIDkxNTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuIDkxNjpcXHRcXHRnZXRfZmlsZXN5c3RlbShzLVxcdTAwM2VzX3R5cGUpO1xcbiA5MTc6XFx0XFx0c2hyaW5rZXJfcmVnaXN0ZXIocy1cXHUwMDNlc19zaHJpbmspO1xcbiA5MTg6XFx0XFx0cmV0dXJuIHM7XFxuIDkxOTpcXHRcXG4gOTIwOlxcdHNoYXJlX2V4dGFudF9zYjpcXG4gOTIxOlxcdFxcdGlmICh1c2VyX25zICE9IG9sZC1cXHUwMDNlc191c2VyX25zIHx8IGZjLVxcdTAwM2VleGNsdXNpdmUpIHtcXG4gOTIyOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gOTIzOlxcdFxcdFxcdGRlc3Ryb3lfdW51c2VkX3N1cGVyKHMpO1xcbiA5MjQ6XFx0XFx0XFx0aWYgKGZjLVxcdTAwM2VleGNsdXNpdmUpXFxuIDkyNTpcXHRcXHRcXHRcXHR3YXJuZmMoZmMsIFxcXCJyZXVzaW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW0gbm90IGFsbG93ZWRcXFwiKTtcXG4gOTI2OlxcdFxcdFxcdGVsc2VcXG4gOTI3OlxcdFxcdFxcdFxcdHdhcm5mYyhmYywgXFxcInJldXNpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbSBpbiBhbm90aGVyIG5hbWVzcGFjZSBub3QgYWxsb3dlZFxcXCIpO1xcbiA5Mjg6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVCVVNZKTtcXG4gOTI5OlxcdFxcdH1cXG4gOTMwOlxcdFxcdGlmICghZ3JhYl9zdXBlcihvbGQpKVxcbiA5MzE6XFx0XFx0XFx0Z290byByZXRyeTtcXG4gOTMyOlxcdFxcdGRlc3Ryb3lfdW51c2VkX3N1cGVyKHMpO1xcbiA5MzM6XFx0XFx0cmV0dXJuIG9sZDtcXG4gOTM0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6NTguMTg1NDQ3ODIyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0NTk0NTAzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGNvbW1pdCBoaXN0b3J5IHVzaW5nIGBnaXQgbG9nYCwgb3IgYXQgbGVhc3QgY2hlY2sgdGhlIGNvbW1pdCBjb250ZXh0IGlmIGEgZGlyZWN0IHRvb2wgaXNuJ3QgYXZhaWxhYmxlLiBVbmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UgaXMgY3J1Y2lhbC5cblxuQWxyaWdodCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBmcy9rZXJuZnMvbW91bnQuY2AgYW5kIGBmcy9zdXBlci5jYC4gVGhhdCdzIGFscmVhZHkgaW50ZXJlc3RpbmcsIGVzcGVjaWFsbHkgdGhlIGxhdHRlci4gTGV0J3MgYnJlYWsgZG93biB0aGUgYGZzL3N1cGVyLmNgIGNoYW5nZXM6XG5cbjEuICAqKmBwdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKWAqKjogVGhlIG9yaWdpbmFsIGNvZGUgcGxhY2VkIGBobGlzdF9kZWxfaW5pdChcdTAwMjZzYi1cdTAwM2VzX2luc3RhbmNlcylgIGFuZCBgcHV0X2ZpbGVzeXN0ZW0odHlwZSlgIGluIGBraWxsX3N1cGVyX25vdGlmeSgpYCBhbmQgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKClgLiBOb3csIHRoZXNlIGFyZSBtb3ZlZCB0byBgcHV0X3N1cGVyKClgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBwYXNzaXZlIHJlZmVyZW5jZSBjb3VudHMuXG4yLiAgKipga2lsbF9zdXBlcl9ub3RpZnkoKWAqKjogIFRoZSByZW1vdmFsIG9mIGBobGlzdF9kZWxfaW5pdGAgZnJvbSB0aGlzIGZ1bmN0aW9uIGlzIG5vdGV3b3J0aHkuIEl0IGFsc28gbG9va3MgbGlrZSBzZXR0aW5nIGBTQl9ERUFEYCBub3cgcmVxdWlyZXMgcHJvdGVjdGlvbiBmcm9tIGBzYl9sb2NrYCB3aGljaCBpcyBnb29kLlxuMy4gICoqYHNnZXRfZmMoKWAqKjogVGhlIGNoYW5nZWQgY29uZGl0aW9uYWwgZm9yIGBmc19zdXBlcnNgIGxpc3QgdHJhdmVyc2FsIGlzIGFsc28gd29ydGggZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBhcyBpdHMgcmVsYXRlZCB0byBmaW5kaW5nIGRlYWQgc3VwZXJibG9ja3MuXG40LiAgKipga2VybmZzX2tpbGxfc2IoKWAqKjogIEEgY29tbWVudCB1cGRhdGUgaGVyZSBpbmRpY2F0ZXMgYSBjaGFuZ2UgaW4gdGhlIHN1cGVyYmxvY2sgc3RhdGUgdG8gbWFyayBpdCBkZWFkLlxuXG5Fc3NlbnRpYWxseSwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIHJlZmFjdG9yaW5nIGhvdyBzdXBlcmJsb2NrcyBhcmUgbWFuYWdlZCBhbmQgY2xlYW5lZCB1cCwgZXNwZWNpYWxseSBpbiBjb25jdXJyZW50IHNjZW5hcmlvcy4gIEl0J3MgdG91Y2hpbmcgdGhlIGxpZmVjeWNsZSwgbG9ja2luZywgYW5kIGxpc3QgbWFuYWdlbWVudCBvZiB0aGVzZSBzdXBlcmJsb2Nrcy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogKipXb3J0aEZ1enppbmc/KipcblxuRGVmaW5pdGVseS4gYGZzL3N1cGVyLmNgIGlzIHRoZSBjb3JlIG9mIHRoZSBWRlMgc3VwZXJibG9jayBpbXBsZW1lbnRhdGlvbi4gIEl0J3MgaW52b2x2ZWQgaW4gc3VwZXJibG9jayBsaWZlY3ljbGUsIGNvbmN1cnJlbnQgbW91bnRpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgbG9ja2luZywgYW5kIGxpc3Qgb3BlcmF0aW9ucyBvbiBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgdG91Y2hlcyBzdHVmZiBsaWtlIGBzZ2V0X2ZjKClgLCBgZ3JhYl9zdXBlcigpYCwgYHB1dF9zdXBlcigpYCwgYGtpbGxfc3VwZXJfbm90aWZ5KClgLCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpYCwgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKClgIHdoaWNoIEkgcmVndWxhcmx5IHVzZSwgc28gdGhpcyBsb29rcyBsaWtlIGhpZ2gtY29uY3VycmVuY3ksIGNyaXRpY2FsIFZGUyBjb3JlIGxvZ2ljLiAgSXQncyBsaWtlbHkgcmVhY2hhYmxlIHRocm91Z2ggY29tbW9uIHN5c2NhbGxzIGxpa2UgYG1vdW50YCwgYHVtb3VudGAsIGBmc29wZW5gLCBgZnNtb3VudGAsIGBmc2NvbmZpZ2AsIGV0Yy4gWWVzLCB0aGlzIGlzIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgdGhlcmVmb3JlIGlzIGluZGVlZCB3b3J0aCBmdXp6aW5nLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgYEVuYWJsZUNvbmZpZ3NgOiBgZnMvc3VwZXIuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLiBgZnMva2VybmZzL21vdW50LmNgIHJlcXVpcmVzIGBDT05GSUdfS0VSTkZTYC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZnMvTWFrZWZpbGVgIGFuZCBgZnMva2VybmZzL01ha2VmaWxlYCAvIGBmcy9LY29uZmlnYCB0byBjb25maXJtIGFueSByZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzowNy42NDQ5MDA5NjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjk5OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtlcm5mc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT01NT1vYmotJChDT05GSUdfUFJPQ19GUylcXHRcXHQrPSBwcm9jL1xcbmZzL01ha2VmaWxlOjU2Om9iai0kKENPTkZJR19LRVJORlMpXFx0XFx0Kz0ga2VybmZzL1xcbmZzL01ha2VmaWxlLTU3LW9iai0kKENPTkZJR19TWVNGUylcXHRcXHQrPSBzeXNmcy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTM6MDcuNzE1MjA2NTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcxNTA2MDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdoYXRldmVyIGZpbGVzeXN0ZW0tcmVsYXRlZCB0YXNrIEknbSB3b3JraW5nIG9uIGFyZSBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiBgZnMva2VybmZzL0tjb25maWdgIG9yLCBtb3JlIGJyb2FkbHksIGBmcy9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgY29udGFpbmluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhleSdyZSBjZW50cmFsIHRvIGhvdyB3ZSBtYW5hZ2UgYW5kIGV4cG9zZSBmaWxlc3lzdGVtLXNwZWNpZmljIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXIgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSdsbCBzdGFydCB3aXRoIHRob3NlIGFuZCBzZWUgd2hhdCBJIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTA2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTM6MDkuNDMwMjY5OTU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2Njk4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtFUk5GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMva2VybmZzL0tjb25maWctNS1cXG5mcy9rZXJuZnMvS2NvbmZpZzo2OmNvbmZpZyBLRVJORlNcXG5mcy9rZXJuZnMvS2NvbmZpZy03LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTM6MDkuNTcyOTQ2MTE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NzQ3MjcxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZpbGVzeXN0ZW0gU3VwZXJibG9jayBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEtFUk5GUyBpcyBhIGJvb2xlYW4gY29uZmlnIG9wdGlvbiwgc2VsZWN0ZWQgYnkgdGhlIGxpa2VzIG9mIFNZU0ZTIGFuZCBDR1JPVVBTLCBidXQgYGZzL3N1cGVyLmNgIGlzIGFsd2F5cyBjb21waWxlZCBpbiDigJMgaXQncyB1bmNvbmRpdGlvbmFsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciwgYnV0IGl0IHNlZW1zIGxpa2UgYGZzL3N1cGVyLmNgIGlzIGNvcmUgVkZTLCBhbHdheXMgaW5jbHVkZWQgaW4gYHZtbGludXhgLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYCBmb3IgdGhpcyBhbmFseXNpcy4gSSBoYXZlIHRvIGF2b2lkIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgdGhlIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCBob3QgcGF0aHMgdGhhdCBhcmUgY2FsbGVkIGJ5IHByYWN0aWNhbGx5IGV2ZXJ5dGhpbmcuIEluc3RlYWQsIEknbSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgKnNwZWNpZmljYWxseSogaW1wbGVtZW50IHRoZSBjaGFuZ2VkIGxvZ2ljIG9yIGFjdCBhcyBBUEkgZW50cnkgcG9pbnRzIGZvciB0aGlzIHBhcnRpY3VsYXIgc3Vic3lzdGVtLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgSSBzZWUgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zOlxuXG4xLiAgYHNnZXRfZmNgOiBJdCdzIHN1cHBvc2VkIHRvIGZpbmQgb3IgY3JlYXRlIGEgc3VwZXJibG9jayB1c2luZyBgZnNfY29udGV4dGAsIGFuZCB0aGUgbG9naWMgc2VlbXMgdG8gc2tpcCBkZWFkIHN1cGVyYmxvY2tzLlxuMi4gIGBraWxsX3N1cGVyX25vdGlmeWA6IFRoaXMgaXMgYSBub3RpZmljYXRpb24gZnVuY3Rpb24gZm9yIHN1cGVyYmxvY2sgdGVhcmRvd24uIEl0J3MgbW9kaWZpZWQgd2l0aCBgc3VwZXJfd2FrZShzYiwgU0JfREVBRClgLiBJdCdzIHN0YXRpYywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBpbmxpbmVkLlxuMy4gIGBwdXRfc3VwZXJgOiBBIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYGZzL3N1cGVyLmNgLiBJdCdzIGRlY2xhcmVkIHNvbWV3aGVyZSBpbiBgaW5jbHVkZS9saW51eC9mcy5oYCBvciBgZnMvaW50ZXJuYWwuaGAsIHNvIEknbGwgZG91YmxlLWNoZWNrIHRoYXQuXG40LiAgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYDogQW5vdGhlciBub24tc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9uIGluIGBmcy9zdXBlci5jYC5cbjUuICBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmA6IEFsc28gYSBub24tc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9uIGluIGBmcy9zdXBlci5jYC4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzaHV0ZG93biBwYXRoLlxuNi4gIGBrZXJuZnNfa2lsbF9zYmA6IE5vbi1zdGF0aWMsIGJ1dCBpbiBgZnMva2VybmZzL21vdW50LmNgLlxuXG5Ob3csIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjYWxsZXJzIGFuZCBkZWNsYXJhdGlvbnMgb2YgdGhlc2Ugc3ltYm9scyB0byBjb25maXJtIHdoaWNoIGFyZSB2YWxpZCwgbm9uLXViaXF1aXRvdXMgc3ltYm9scyB3aXRoaW4gdGhlIHZtbGludXgga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDczMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzoxNS4wNDc2NzU4NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MTcxMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1dF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2MjMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmZzL2FkZnMvc3VwZXIuYz01ND1zdGF0aWMgaW50IGFkZnNfY2hlY2tkaXNjcmVjb3JkKHN0cnVjdCBhZGZzX2Rpc2NyZWNvcmQgKmRyKVxcbi0tXFxuZnMvYWRmcy9zdXBlci5jLTkyLVxcbmZzL2FkZnMvc3VwZXIuYzo5MzpzdGF0aWMgdm9pZCBhZGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2FkZnMvc3VwZXIuYy05NC17XFxuLS1cXG5mcy9hZGZzL3N1cGVyLmM9MjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZGZzX3NvcHMgPSB7XFxuLS1cXG5mcy9hZGZzL3N1cGVyLmMtMjQ4LVxcdC53cml0ZV9pbm9kZVxcdD0gYWRmc193cml0ZV9pbm9kZSxcXG5mcy9hZGZzL3N1cGVyLmM6MjQ5OlxcdC5wdXRfc3VwZXJcXHQ9IGFkZnNfcHV0X3N1cGVyLFxcbmZzL2FkZnMvc3VwZXIuYy0yNTAtXFx0LnN0YXRmc1xcdFxcdD0gYWRmc19zdGF0ZnMsXFxuLS1cXG5mcy9hZmZzL3N1cGVyLmM9NDk9c3RhdGljIHZvaWRcXG5mcy9hZmZzL3N1cGVyLmM6NTA6YWZmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9hZmZzL3N1cGVyLmMtNTEte1xcbi0tXFxuZnMvYWZmcy9zdXBlci5jPTE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYWZmc19zb3BzID0ge1xcbi0tXFxuZnMvYWZmcy9zdXBlci5jLTE1NC1cXHQuZXZpY3RfaW5vZGVcXHQ9IGFmZnNfZXZpY3RfaW5vZGUsXFxuZnMvYWZmcy9zdXBlci5jOjE1NTpcXHQucHV0X3N1cGVyXFx0PSBhZmZzX3B1dF9zdXBlcixcXG5mcy9hZmZzL3N1cGVyLmMtMTU2LVxcdC5zeW5jX2ZzXFx0PSBhZmZzX3N5bmNfZnMsXFxuLS1cXG5mcy9iZWZzL0NoYW5nZUxvZz0xNzY9VmVyc2lvbiAwLjQ1ICgyMDAxLTEwLTI5KVxcbi0tXFxuZnMvYmVmcy9DaGFuZ2VMb2ctMTgzLVxcdHN0cnVjdHVyZXMgaW50byB0aGUgZ2VuZXJpYyBwb2ludGVyIGZpZWxkcyBvZiB0aGUgcHVibGljIHN0cnVjdHVyZXMgXFxuZnMvYmVmcy9DaGFuZ2VMb2c6MTg0OlxcdHdpdGgga21hbGxvYygpLiBwdXRfc3VwZXIgYW5kIHB1dF9pbm9kZSBmcmVlIHRoZW0uIFRoaXMgYWxsb3dzIHVzIG5vdCBcXG5mcy9iZWZzL0NoYW5nZUxvZy0xODUtXFx0dG8gaGF2ZSB0byB0b3VjaCB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIHB1YmxpYyBzdHJ1Y3R1cmVzIGluIFxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTU2PXN0YXRpYyBpbnQgYmVmc19ubHMydXRmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmluLCBpbnQgaW5fbGVuLFxcbmZzL2JlZnMvbGludXh2ZnMuYy01Ny1cXHRcXHRcXHRjaGFyICoqb3V0LCBpbnQgKm91dF9sZW4pO1xcbmZzL2JlZnMvbGludXh2ZnMuYzo1ODpzdGF0aWMgdm9pZCBiZWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XFxuZnMvYmVmcy9saW51eHZmcy5jLTU5LXN0YXRpYyBpbnQgYmVmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTtcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz02OD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmVmc19zb3BzID0ge1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jLTcwLVxcdC5mcmVlX2lub2RlXFx0PSBiZWZzX2ZyZWVfaW5vZGUsIC8qIGRlYWxsb2NhdGUgYW4gaW5vZGUgKi9cXG5mcy9iZWZzL2xpbnV4dmZzLmM6NzE6XFx0LnB1dF9zdXBlclxcdD0gYmVmc19wdXRfc3VwZXIsXFx0LyogdW5pbml0IHN1cGVyICovXFxuZnMvYmVmcy9saW51eHZmcy5jLTcyLVxcdC5zdGF0ZnNcXHRcXHQ9IGJlZnNfc3RhdGZzLFxcdC8qIHN0YXRmcyAqL1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTc0OD1zdGF0aWMgdm9pZFxcbmZzL2JlZnMvbGludXh2ZnMuYzo3NDk6YmVmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9iZWZzL2xpbnV4dmZzLmMtNzUwLXtcXG4tLVxcbmZzL2Jmcy9pbm9kZS5jPTE5NT1zdGF0aWMgdm9pZCBiZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2Jmcy9pbm9kZS5jLTI0Mi1cXG5mcy9iZnMvaW5vZGUuYzoyNDM6c3RhdGljIHZvaWQgYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXFxuZnMvYmZzL2lub2RlLmMtMjQ0LXtcXG4tLVxcbmZzL2Jmcy9pbm9kZS5jPTMxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmZzX3NvcHMgPSB7XFxuLS1cXG5mcy9iZnMvaW5vZGUuYy0zMjMtXFx0LmV2aWN0X2lub2RlXFx0PSBiZnNfZXZpY3RfaW5vZGUsXFxuZnMvYmZzL2lub2RlLmM6MzI0OlxcdC5wdXRfc3VwZXJcXHQ9IGJmc19wdXRfc3VwZXIsXFxuZnMvYmZzL2lub2RlLmMtMzI1LVxcdC5zdGF0ZnNcXHRcXHQ9IGJmc19zdGF0ZnMsXFxuLS1cXG5mcy9idHJmcy9zdXBlci5jPTY5PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBidHJmc19mc190eXBlO1xcbmZzL2J0cmZzL3N1cGVyLmMtNzAtXFxuZnMvYnRyZnMvc3VwZXIuYzo3MTpzdGF0aWMgdm9pZCBidHJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9idHJmcy9zdXBlci5jLTcyLXtcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmM9MjUyNj1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYnRyZnNfc3VwZXJfb3BzID0ge1xcbi0tXFxuZnMvYnRyZnMvc3VwZXIuYy0yNTI4LVxcdC5ldmljdF9pbm9kZVxcdD0gYnRyZnNfZXZpY3RfaW5vZGUsXFxuZnMvYnRyZnMvc3VwZXIuYzoyNTI5OlxcdC5wdXRfc3VwZXJcXHQ9IGJ0cmZzX3B1dF9zdXBlcixcXG5mcy9idHJmcy9zdXBlci5jLTI1MzAtXFx0LnN5bmNfZnNcXHQ9IGJ0cmZzX3N5bmNfZnMsXFxuLS1cXG5mcy9jZXBoL3N1cGVyLmM9Mzg9c3RhdGljIExJU1RfSEVBRChjZXBoX2ZzY19saXN0KTtcXG4tLVxcbmZzL2NlcGgvc3VwZXIuYy00OC0gKi9cXG5mcy9jZXBoL3N1cGVyLmM6NDk6c3RhdGljIHZvaWQgY2VwaF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxcbmZzL2NlcGgvc3VwZXIuYy01MC17XFxuLS1cXG5mcy9jZXBoL3N1cGVyLmM9MTA0OD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2VwaF9zdXBlcl9vcHMgPSB7XFxuLS1cXG5mcy9jZXBoL3N1cGVyLmMtMTA1NC1cXHQuc3luY19mcyAgICAgICAgPSBjZXBoX3N5bmNfZnMsXFxuZnMvY2VwaC9zdXBlci5jOjEwNTU6XFx0LnB1dF9zdXBlclxcdD0gY2VwaF9wdXRfc3VwZXIsXFxuZnMvY2VwaC9zdXBlci5jLTEwNTYtXFx0LnNob3dfb3B0aW9ucyAgID0gY2VwaF9zaG93X29wdGlvbnMsXFxuLS1cXG5mcy9jb2RhL2lub2RlLmM9Mzk9c3RhdGljIHZvaWQgY29kYV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XFxuZnMvY29kYS9pbm9kZS5jOjQwOnN0YXRpYyB2b2lkIGNvZGFfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcXG5mcy9jb2RhL2lub2RlLmMtNDEtc3RhdGljIGludCBjb2RhX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpO1xcbi0tXFxuZnMvY29kYS9pbm9kZS5jPTEwMD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY29kYV9zdXBlcl9vcGVyYXRpb25zID1cXG4tLVxcbmZzL2NvZGEvaW5vZGUuYy0xMDQtXFx0LmV2aWN0X2lub2RlXFx0PSBjb2RhX2V2aWN0X2lub2RlLFxcbmZzL2NvZGEvaW5vZGUuYzoxMDU6XFx0LnB1dF9zdXBlclxcdD0gY29kYV9wdXRfc3VwZXIsXFxuZnMvY29kYS9pbm9kZS5jLTEwNi1cXHQuc3RhdGZzXFx0XFx0PSBjb2RhX3N0YXRmcyxcXG4tLVxcbmZzL2NvZGEvaW5vZGUuYz0xOTk9c3RhdGljIGludCBjb2RhX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvY29kYS9pbm9kZS5jLTI3Ny1cXG5mcy9jb2RhL2lub2RlLmM6Mjc4OnN0YXRpYyB2b2lkIGNvZGFfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvY29kYS9pbm9kZS5jLTI3OS17XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTk0Nj1zdGF0aWMgdm9pZCBlcm9mc19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTk1OS1cXG5mcy9lcm9mcy9zdXBlci5jOjk2MDpzdGF0aWMgdm9pZCBlcm9mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9lcm9mcy9zdXBlci5jLTk2MS17XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTExMzI9Y29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXJvZnNfc29wcyA9IHtcXG5mcy9lcm9mcy9zdXBlci5jOjExMzM6XFx0LnB1dF9zdXBlciA9IGVyb2ZzX3B1dF9zdXBlcixcXG5mcy9lcm9mcy9zdXBlci5jLTExMzQtXFx0LmFsbG9jX2lub2RlID0gZXJvZnNfYWxsb2NfaW5vZGUsXFxuLS1cXG5mcy9leGZhdC9zdXBlci5jPTM0PXN0YXRpYyB2b2lkIGV4ZmF0X3NldF9pb2NoYXJzZXQoc3RydWN0IGV4ZmF0X21vdW50X29wdGlvbnMgKm9wdHMsXFxuLS1cXG5mcy9leGZhdC9zdXBlci5jLTQzLVxcbmZzL2V4ZmF0L3N1cGVyLmM6NDQ6c3RhdGljIHZvaWQgZXhmYXRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXhmYXQvc3VwZXIuYy00NS17XFxuLS1cXG5mcy9leGZhdC9zdXBlci5jPTIwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXhmYXRfc29wcyA9IHtcXG4tLVxcbmZzL2V4ZmF0L3N1cGVyLmMtMjEwLVxcdC5ldmljdF9pbm9kZVxcdD0gZXhmYXRfZXZpY3RfaW5vZGUsXFxuZnMvZXhmYXQvc3VwZXIuYzoyMTE6XFx0LnB1dF9zdXBlclxcdD0gZXhmYXRfcHV0X3N1cGVyLFxcbmZzL2V4ZmF0L3N1cGVyLmMtMjEyLVxcdC5zdGF0ZnNcXHRcXHQ9IGV4ZmF0X3N0YXRmcyxcXG4tLVxcbmZzL2V4dDIvc3VwZXIuYz0xNjU9c3RhdGljIGlubGluZSB2b2lkIGV4dDJfcXVvdGFfb2ZmX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0Mi9zdXBlci5jLTE2OS1cXG5mcy9leHQyL3N1cGVyLmM6MTcwOnN0YXRpYyB2b2lkIGV4dDJfcHV0X3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYilcXG5mcy9leHQyL3N1cGVyLmMtMTcxLXtcXG4tLVxcbmZzL2V4dDIvc3VwZXIuYz0zNjE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDJfc29wcyA9IHtcXG4tLVxcbmZzL2V4dDIvc3VwZXIuYy0zNjYtXFx0LmV2aWN0X2lub2RlXFx0PSBleHQyX2V2aWN0X2lub2RlLFxcbmZzL2V4dDIvc3VwZXIuYzozNjc6XFx0LnB1dF9zdXBlclxcdD0gZXh0Ml9wdXRfc3VwZXIsXFxuZnMvZXh0Mi9zdXBlci5jLTM2OC1cXHQuc3luY19mc1xcdD0gZXh0Ml9zeW5jX2ZzLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTEyNjk9c3RhdGljIHZvaWQgZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMjgxLVxcbmZzL2V4dDQvc3VwZXIuYzoxMjgyOnN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTEyODMte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE2Nzc9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDRfc29wcyA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNjg1LVxcdC5ldmljdF9pbm9kZVxcdD0gZXh0NF9ldmljdF9pbm9kZSxcXG5mcy9leHQ0L3N1cGVyLmM6MTY4NjpcXHQucHV0X3N1cGVyXFx0PSBleHQ0X3B1dF9zdXBlcixcXG5mcy9leHQ0L3N1cGVyLmMtMTY4Ny1cXHQuc3luY19mc1xcdD0gZXh0NF9zeW5jX2ZzLFxcbi0tXFxuZnMvZjJmcy9mMmZzLmg9NTExPXN0cnVjdCBkaXNjYXJkX3BvbGljeSB7XFxuLS1cXG5mcy9mMmZzL2YyZnMuaC01MjAtXFx0Ym9vbCBvcmRlcmVkO1xcdFxcdFxcdC8qIGlzc3VlIGRpc2NhcmQgYnkgbGJhIG9yZGVyICovXFxuZnMvZjJmcy9mMmZzLmg6NTIxOlxcdGJvb2wgdGltZW91dDtcXHRcXHRcXHQvKiBkaXNjYXJkIHRpbWVvdXQgZm9yIHB1dF9zdXBlciAqL1xcbmZzL2YyZnMvZjJmcy5oLTUyMi1cXHR1bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHk7XFx0LyogZGlzY2FyZCBncmFudWxhcml0eSAqL1xcbi0tXFxuZnMvZjJmcy9zaHJpbmtlci5jPTQwPXVuc2lnbmVkIGxvbmcgZjJmc19zaHJpbmtfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5mcy9mMmZzL3Nocmlua2VyLmMtNTEtXFxuZnMvZjJmcy9zaHJpbmtlci5jOjUyOlxcdFxcdC8qIHN0b3AgZjJmc19wdXRfc3VwZXIgKi9cXG5mcy9mMmZzL3Nocmlua2VyLmMtNTMtXFx0XFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZzYmktXFx1MDAzZXVtb3VudF9tdXRleCkpIHtcXG4tLVxcbmZzL2YyZnMvc2hyaW5rZXIuYz03OT11bnNpZ25lZCBsb25nIGYyZnNfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5mcy9mMmZzL3Nocmlua2VyLmMtOTgtXFxuZnMvZjJmcy9zaHJpbmtlci5jOjk5OlxcdFxcdC8qIHN0b3AgZjJmc19wdXRfc3VwZXIgKi9cXG5mcy9mMmZzL3Nocmlua2VyLmMtMTAwLVxcdFxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2c2JpLVxcdTAwM2V1bW91bnRfbXV0ZXgpKSB7XFxuLS1cXG5mcy9mMmZzL3Nocmlua2VyLmM9MTM0PXVuc2lnbmVkIGludCBmMmZzX2RvbmF0ZV9maWxlcyh2b2lkKVxcbi0tXFxuZnMvZjJmcy9zaHJpbmtlci5jLTE0NC1cXG5mcy9mMmZzL3Nocmlua2VyLmM6MTQ1OlxcdFxcdC8qIHN0b3AgZjJmc19wdXRfc3VwZXIgKi9cXG5mcy9mMmZzL3Nocmlua2VyLmMtMTQ2LVxcdFxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2c2JpLVxcdTAwM2V1bW91bnRfbXV0ZXgpKSB7XFxuLS1cXG5mcy9mMmZzL3Nocmlua2VyLmM9MjA1PXZvaWQgZjJmc19yZWNsYWltX2NhY2hlcyh1bnNpZ25lZCBpbnQgcmVjbGFpbV9jYWNoZXNfa2IpXFxuLS1cXG5mcy9mMmZzL3Nocmlua2VyLmMtMjE0LVxcbmZzL2YyZnMvc2hyaW5rZXIuYzoyMTU6XFx0XFx0Lyogc3RvcCBmMmZzX3B1dF9zdXBlciAqL1xcbmZzL2YyZnMvc2hyaW5rZXIuYy0yMTYtXFx0XFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZzYmktXFx1MDAzZXVtb3VudF9tdXRleCkpIHtcXG4tLVxcbmZzL2YyZnMvc3VwZXIuYz0xOTk2PXN0YXRpYyB2b2lkIGRlc3Ryb3lfZGV2aWNlX2xpc3Qoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKVxcbi0tXFxuZnMvZjJmcy9zdXBlci5jLTIwMDktXFxuZnMvZjJmcy9zdXBlci5jOjIwMTA6c3RhdGljIHZvaWQgZjJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9mMmZzL3N1cGVyLmMtMjAxMS17XFxuLS1cXG5mcy9mMmZzL3N1cGVyLmM9MzU5MT12b2lkIGYyZnNfcXVvdGFfb2ZmX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZjJmcy9zdXBlci5jLTM2MDgtXFx0ICogVGhpcyBjYW4gY2F1c2UgTlVMTCBleGNlcHRpb24gZm9yIG5vZGVfaW5vZGUgaW4gZW5kX2lvLCBzaW5jZVxcbmZzL2YyZnMvc3VwZXIuYzozNjA5OlxcdCAqIHB1dF9zdXBlciBhbHJlYWR5IGRyb3BwZWQgaXQuXFxuZnMvZjJmcy9zdXBlci5jLTM2MTAtXFx0ICovXFxuLS1cXG5mcy9mMmZzL3N1cGVyLmM9MzczMD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZjJmc19zb3BzID0ge1xcbi0tXFxuZnMvZjJmcy9zdXBlci5jLTM3NDItXFx0LmV2aWN0X2lub2RlXFx0PSBmMmZzX2V2aWN0X2lub2RlLFxcbmZzL2YyZnMvc3VwZXIuYzozNzQzOlxcdC5wdXRfc3VwZXJcXHQ9IGYyZnNfcHV0X3N1cGVyLFxcbmZzL2YyZnMvc3VwZXIuYy0zNzQ0LVxcdC5zeW5jX2ZzXFx0PSBmMmZzX3N5bmNfZnMsXFxuLS1cXG5mcy9mYXQvaW5vZGUuYz03NjE9c3RhdGljIHZvaWQgZGVsYXllZF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcClcXG4tLVxcbmZzL2ZhdC9pbm9kZS5jLTc2OS1cXG5mcy9mYXQvaW5vZGUuYzo3NzA6c3RhdGljIHZvaWQgZmF0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2ZhdC9pbm9kZS5jLTc3MS17XFxuLS1cXG5mcy9mYXQvaW5vZGUuYz05Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGZhdF9zb3BzID0ge1xcbi0tXFxuZnMvZmF0L2lub2RlLmMtOTc0LVxcdC5ldmljdF9pbm9kZVxcdD0gZmF0X2V2aWN0X2lub2RlLFxcbmZzL2ZhdC9pbm9kZS5jOjk3NTpcXHQucHV0X3N1cGVyXFx0PSBmYXRfcHV0X3N1cGVyLFxcbmZzL2ZhdC9pbm9kZS5jLTk3Ni1cXHQuc3RhdGZzXFx0XFx0PSBmYXRfc3RhdGZzLFxcbi0tXFxuZnMvZ2ZzMi9zdXBlci5jPTUzOT12b2lkIGdmczJfbWFrZV9mc19ybyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcClcXG4tLVxcbmZzL2dmczIvc3VwZXIuYy01NzEtLyoqXFxuZnMvZ2ZzMi9zdXBlci5jOjU3MjogKiBnZnMyX3B1dF9zdXBlciAtIFVubW91bnQgdGhlIGZpbGVzeXN0ZW1cXG5mcy9nZnMyL3N1cGVyLmMtNTczLSAqIEBzYjogVGhlIFZGUyBzdXBlcmJsb2NrXFxuLS1cXG5mcy9nZnMyL3N1cGVyLmMtNTc2LVxcbmZzL2dmczIvc3VwZXIuYzo1Nzc6c3RhdGljIHZvaWQgZ2ZzMl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9nZnMyL3N1cGVyLmMtNTc4LXtcXG4tLVxcbmZzL2dmczIvc3VwZXIuYz0xNTY5PWNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdmczJfc3VwZXJfb3BzID0ge1xcbi0tXFxuZnMvZ2ZzMi9zdXBlci5jLTE1NzQtXFx0LmV2aWN0X2lub2RlXFx0XFx0PSBnZnMyX2V2aWN0X2lub2RlLFxcbmZzL2dmczIvc3VwZXIuYzoxNTc1OlxcdC5wdXRfc3VwZXJcXHRcXHQ9IGdmczJfcHV0X3N1cGVyLFxcbmZzL2dmczIvc3VwZXIuYy0xNTc2LVxcdC5zeW5jX2ZzXFx0XFx0PSBnZnMyX3N5bmNfZnMsXFxuLS1cXG5mcy9oZnMvc3VwZXIuYz0zNT1zdGF0aWMgaW50IGhmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KVxcbi0tXFxuZnMvaGZzL3N1cGVyLmMtNDctLypcXG5mcy9oZnMvc3VwZXIuYzo0ODogKiBoZnNfcHV0X3N1cGVyKClcXG5mcy9oZnMvc3VwZXIuYy00OS0gKlxcbmZzL2hmcy9zdXBlci5jOjUwOiAqIFRoaXMgaXMgdGhlIHB1dF9zdXBlcigpIGVudHJ5IGluIHRoZSBzdXBlcl9vcGVyYXRpb25zIHN0cnVjdHVyZSBmb3JcXG5mcy9oZnMvc3VwZXIuYy01MS0gKiBIRlMgZmlsZXN5c3RlbXMuICBUaGUgcHVycG9zZSBpcyB0byByZWxlYXNlIHRoZSByZXNvdXJjZXNcXG4tLVxcbmZzL2hmcy9zdXBlci5jLTUzLSAqL1xcbmZzL2hmcy9zdXBlci5jOjU0OnN0YXRpYyB2b2lkIGhmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9oZnMvc3VwZXIuYy01NS17XFxuLS1cXG5mcy9oZnMvc3VwZXIuYz0xODg9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGhmc19zdXBlcl9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvaGZzL3N1cGVyLmMtMTkyLVxcdC5ldmljdF9pbm9kZVxcdD0gaGZzX2V2aWN0X2lub2RlLFxcbmZzL2hmcy9zdXBlci5jOjE5MzpcXHQucHV0X3N1cGVyXFx0PSBoZnNfcHV0X3N1cGVyLFxcbmZzL2hmcy9zdXBlci5jLTE5NC1cXHQuc3luY19mc1xcdD0gaGZzX3N5bmNfZnMsXFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmM9MzIxPXN0YXRpYyB2b2lkIGRlbGF5ZWRfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnApXFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmMtMzI4LVxcbmZzL2hmc3BsdXMvc3VwZXIuYzozMjk6c3RhdGljIHZvaWQgaGZzcGx1c19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9oZnNwbHVzL3N1cGVyLmMtMzMwLXtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYz00MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGhmc3BsdXNfc29wcyA9IHtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy00MTItXFx0LmV2aWN0X2lub2RlXFx0PSBoZnNwbHVzX2V2aWN0X2lub2RlLFxcbmZzL2hmc3BsdXMvc3VwZXIuYzo0MTM6XFx0LnB1dF9zdXBlclxcdD0gaGZzcGx1c19wdXRfc3VwZXIsXFxuZnMvaGZzcGx1cy9zdXBlci5jLTQxNC1cXHQuc3luY19mc1xcdD0gaGZzcGx1c19zeW5jX2ZzLFxcbi0tXFxuZnMvaHBmcy9zdXBlci5jPTEyMj1zdGF0aWMgdm9pZCBsYXp5X2ZyZWVfc2JpKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbi0tXFxuZnMvaHBmcy9zdXBlci5jLTEyNi1cXG5mcy9ocGZzL3N1cGVyLmM6MTI3OnN0YXRpYyB2b2lkIGhwZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG5mcy9ocGZzL3N1cGVyLmMtMTI4LXtcXG4tLVxcbmZzL2hwZnMvc3VwZXIuYz00OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGhwZnNfc29wcyA9XFxuLS1cXG5mcy9ocGZzL3N1cGVyLmMtNDk1LVxcdC5ldmljdF9pbm9kZVxcdD0gaHBmc19ldmljdF9pbm9kZSxcXG5mcy9ocGZzL3N1cGVyLmM6NDk2OlxcdC5wdXRfc3VwZXJcXHQ9IGhwZnNfcHV0X3N1cGVyLFxcbmZzL2hwZnMvc3VwZXIuYy00OTctXFx0LnN0YXRmc1xcdFxcdD0gaHBmc19zdGF0ZnMsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMDk0PXN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTI0LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExMjU6c3RhdGljIHZvaWQgaHVnZXRsYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExMjYte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTIzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaHVnZXRsYmZzX29wcyA9IHtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNDAtXFx0LnN0YXRmc1xcdFxcdD0gaHVnZXRsYmZzX3N0YXRmcyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQxOlxcdC5wdXRfc3VwZXJcXHQ9IGh1Z2V0bGJmc19wdXRfc3VwZXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI0Mi1cXHQuc2hvd19vcHRpb25zXFx0PSBodWdldGxiZnNfc2hvd19vcHRpb25zLFxcbi0tXFxuZnMvaW50ZXJuYWwuaD0xMzg9c3RydWN0IHN1cGVyX2Jsb2NrICp1c2VyX2dldF9zdXBlcihkZXZfdCwgYm9vbCBleGNsKTtcXG5mcy9pbnRlcm5hbC5oOjEzOTp2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9pbnRlcm5hbC5oLTE0MC12b2lkIF9faW5pdCBzdXBlcl9kZXZfaW5pdCh2b2lkKTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9NDg9c3RhdGljIGludCBpc29mc19kZW50cnlfY21wX21zKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNTEtXFxuZnMvaXNvZnMvaW5vZGUuYzo1MjpzdGF0aWMgdm9pZCBpc29mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9pc29mcy9pbm9kZS5jLTUzLXtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9MTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBpc29mc19zb3BzID0ge1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xMjQtXFx0LmZyZWVfaW5vZGVcXHQ9IGlzb2ZzX2ZyZWVfaW5vZGUsXFxuZnMvaXNvZnMvaW5vZGUuYzoxMjU6XFx0LnB1dF9zdXBlclxcdD0gaXNvZnNfcHV0X3N1cGVyLFxcbmZzL2lzb2ZzL2lub2RlLmMtMTI2LVxcdC5zdGF0ZnNcXHRcXHQ9IGlzb2ZzX3N0YXRmcyxcXG4tLVxcbmZzL2pmZnMyL3N1cGVyLmMtMzMtXFxuZnMvamZmczIvc3VwZXIuYzozNDpzdGF0aWMgdm9pZCBqZmZzMl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xcbmZzL2pmZnMyL3N1cGVyLmMtMzUtXFxuLS1cXG5mcy9qZmZzMi9zdXBlci5jPTI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgamZmczJfc3VwZXJfb3BlcmF0aW9ucyA9XFxuLS1cXG5mcy9qZmZzMi9zdXBlci5jLTI0Ny1cXHQuZnJlZV9pbm9kZSA9XFx0amZmczJfZnJlZV9pbm9kZSxcXG5mcy9qZmZzMi9zdXBlci5jOjI0ODpcXHQucHV0X3N1cGVyID1cXHRqZmZzMl9wdXRfc3VwZXIsXFxuZnMvamZmczIvc3VwZXIuYy0yNDktXFx0LnN0YXRmcyA9XFx0amZmczJfc3RhdGZzLFxcbi0tXFxuZnMvamZmczIvc3VwZXIuYz0zMTA9c3RhdGljIGludCBqZmZzMl9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvamZmczIvc3VwZXIuYy0zMjItXFxuZnMvamZmczIvc3VwZXIuYzozMjM6c3RhdGljIHZvaWQgamZmczJfcHV0X3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2pmZnMyL3N1cGVyLmMtMzI0LXtcXG4tLVxcbmZzL2pmcy9zdXBlci5jPTE4MD1zdGF0aWMgaW5saW5lIHZvaWQgamZzX3F1b3RhX29mZl91bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2pmcy9zdXBlci5jLTE4NC1cXG5mcy9qZnMvc3VwZXIuYzoxODU6c3RhdGljIHZvaWQgamZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2pmcy9zdXBlci5jLTE4Ni17XFxuLS1cXG5mcy9qZnMvc3VwZXIuYy0xODktXFxuZnMvamZzL3N1cGVyLmM6MTkwOlxcdGpmc19pbmZvKFxcXCJJbiBqZnNfcHV0X3N1cGVyXFxcIik7XFxuZnMvamZzL3N1cGVyLmMtMTkxLVxcbi0tXFxuZnMvamZzL3N1cGVyLmM9ODQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBqZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2pmcy9zdXBlci5jLTg0OS1cXHQuZXZpY3RfaW5vZGVcXHQ9IGpmc19ldmljdF9pbm9kZSxcXG5mcy9qZnMvc3VwZXIuYzo4NTA6XFx0LnB1dF9zdXBlclxcdD0gamZzX3B1dF9zdXBlcixcXG5mcy9qZnMvc3VwZXIuYy04NTEtXFx0LnN5bmNfZnNcXHQ9IGpmc19zeW5jX2ZzLFxcbi0tXFxuZnMvbWluaXgvaW5vZGUuYz00Nz1zdGF0aWMgdm9pZCBtaW5peF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy02MS1cXG5mcy9taW5peC9pbm9kZS5jOjYyOnN0YXRpYyB2b2lkIG1pbml4X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL21pbml4L2lub2RlLmMtNjMte1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYz0xMjk9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1pbml4X3NvcHMgPSB7XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTEzNC1cXHQuZXZpY3RfaW5vZGVcXHQ9IG1pbml4X2V2aWN0X2lub2RlLFxcbmZzL21pbml4L2lub2RlLmM6MTM1OlxcdC5wdXRfc3VwZXJcXHQ9IG1pbml4X3B1dF9zdXBlcixcXG5mcy9taW5peC9pbm9kZS5jLTEzNi1cXHQuc3RhdGZzXFx0XFx0PSBtaW5peF9zdGF0ZnMsXFxuLS1cXG5mcy9uaWxmczIvc3VwZXIuYz00MzA9aW50IG5pbGZzX3Jlc2l6ZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3U2NCBuZXdzaXplKVxcbi0tXFxuZnMvbmlsZnMyL3N1cGVyLmMtNTA0LVxcbmZzL25pbGZzMi9zdXBlci5jOjUwNTpzdGF0aWMgdm9pZCBuaWxmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9uaWxmczIvc3VwZXIuYy01MDYte1xcbi0tXFxuZnMvbmlsZnMyL3N1cGVyLmM9NzA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBuaWxmc19zb3BzID0ge1xcbi0tXFxuZnMvbmlsZnMyL3N1cGVyLmMtNzA5LVxcdC5ldmljdF9pbm9kZSAgICA9IG5pbGZzX2V2aWN0X2lub2RlLFxcbmZzL25pbGZzMi9zdXBlci5jOjcxMDpcXHQucHV0X3N1cGVyICAgICAgPSBuaWxmc19wdXRfc3VwZXIsXFxuZnMvbmlsZnMyL3N1cGVyLmMtNzExLVxcdC5zeW5jX2ZzICAgICAgICA9IG5pbGZzX3N5bmNfZnMsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MTY2OD1zdGF0aWMgdm9pZCBudGZzX3ZvbHVtZV9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE3MDctLypcXG5mcy9udGZzL3N1cGVyLmM6MTcwODogKiBudGZzX3B1dF9zdXBlciAtIGNhbGxlZCBieSB0aGUgdmZzIHRvIHVubW91bnQgYSB2b2x1bWVcXG5mcy9udGZzL3N1cGVyLmMtMTcwOS0gKiBAc2I6XFx0XFx0dmZzIHN1cGVyYmxvY2sgb2Ygdm9sdW1lIHRvIHVubW91bnRcXG5mcy9udGZzL3N1cGVyLmMtMTcxMC0gKi9cXG5mcy9udGZzL3N1cGVyLmM6MTcxMTpzdGF0aWMgdm9pZCBudGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL250ZnMvc3VwZXIuYy0xNzEyLXtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0yMTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBudGZzX3NvcHMgPSB7XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjE2NC1cXHQud3JpdGVfaW5vZGVcXHQ9IG50ZnNfd3JpdGVfaW5vZGUsXFx0LyogVkZTOiBXcml0ZSBkaXJ0eSBpbm9kZSB0byBkaXNrLiAqL1xcbmZzL250ZnMvc3VwZXIuYzoyMTY1OlxcdC5wdXRfc3VwZXJcXHQ9IG50ZnNfcHV0X3N1cGVyLFxcdC8qIFN5c2NhbGw6IHVtb3VudC4gKi9cXG5mcy9udGZzL3N1cGVyLmMtMjE2Ni1cXHQuc2h1dGRvd25cXHQ9IG50ZnNfc2h1dGRvd24sXFxuLS1cXG5mcy9udGZzMy9zdXBlci5jPTcwOT1zdGF0aWMgdm9pZCBudGZzM19mcmVlX3NiaShzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmkpXFxuLS1cXG5mcy9udGZzMy9zdXBlci5jLTcyMS1cXG5mcy9udGZzMy9zdXBlci5jOjcyMjpzdGF0aWMgdm9pZCBudGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL250ZnMzL3N1cGVyLmMtNzIzLXtcXG4tLVxcbmZzL250ZnMzL3N1cGVyLmM9ODcwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBudGZzX3NvcHMgPSB7XFxuLS1cXG5mcy9udGZzMy9zdXBlci5jLTg3My1cXHQuZXZpY3RfaW5vZGUgPSBudGZzX2V2aWN0X2lub2RlLFxcbmZzL250ZnMzL3N1cGVyLmM6ODc0OlxcdC5wdXRfc3VwZXIgPSBudGZzX3B1dF9zdXBlcixcXG5mcy9udGZzMy9zdXBlci5jLTg3NS1cXHQuc3RhdGZzID0gbnRmc19zdGF0ZnMsXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTE2NzM9VFJBQ0VfRVZFTlQob2NmczJfcGFyc2Vfb3B0aW9ucyxcXG4tLVxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTY4Ni1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE2ODc6REVGSU5FX09DRlMyX1BPSU5URVJfRVZFTlQob2NmczJfcHV0X3N1cGVyKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE2ODgtXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTg5PXN0YXRpYyBpbnQgb2NmczJfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRlbnRyeSAqcm9vdCk7XFxuZnMvb2NmczIvc3VwZXIuYzo5MDpzdGF0aWMgdm9pZCBvY2ZzMl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvb2NmczIvc3VwZXIuYy05MS1zdGF0aWMgaW50IG9jZnMyX21vdW50X3ZvbHVtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9MTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvY2ZzMl9zb3BzID0ge1xcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMzQtXFx0LnN5bmNfZnNcXHQ9IG9jZnMyX3N5bmNfZnMsXFxuZnMvb2NmczIvc3VwZXIuYzoxMzU6XFx0LnB1dF9zdXBlclxcdD0gb2NmczJfcHV0X3N1cGVyLFxcbmZzL29jZnMyL3N1cGVyLmMtMTM2LVxcdC5zaG93X29wdGlvbnMgICA9IG9jZnMyX3Nob3dfb3B0aW9ucyxcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9MTUzND1zdGF0aWMgdm9pZCBfX2V4aXQgb2NmczJfZXhpdCh2b2lkKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xNTQ2LVxcbmZzL29jZnMyL3N1cGVyLmM6MTU0NzpzdGF0aWMgdm9pZCBvY2ZzMl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9vY2ZzMi9zdXBlci5jLTE1NDgte1xcbmZzL29jZnMyL3N1cGVyLmM6MTU0OTpcXHR0cmFjZV9vY2ZzMl9wdXRfc3VwZXIoc2IpO1xcbmZzL29jZnMyL3N1cGVyLmMtMTU1MC1cXG4tLVxcbmZzL29tZnMvaW5vZGUuYz0yMDQ9c3RydWN0IGlub2RlICpvbWZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW5vKVxcbi0tXFxuZnMvb21mcy9pbm9kZS5jLTI2NC1cXG5mcy9vbWZzL2lub2RlLmM6MjY1OnN0YXRpYyB2b2lkIG9tZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvb21mcy9pbm9kZS5jLTI2Ni17XFxuLS1cXG5mcy9vbWZzL2lub2RlLmM9MzIwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvbWZzX3NvcHMgPSB7XFxuLS1cXG5mcy9vbWZzL2lub2RlLmMtMzIyLVxcdC5ldmljdF9pbm9kZVxcdD0gb21mc19ldmljdF9pbm9kZSxcXG5mcy9vbWZzL2lub2RlLmM6MzIzOlxcdC5wdXRfc3VwZXJcXHQ9IG9tZnNfcHV0X3N1cGVyLFxcbmZzL29tZnMvaW5vZGUuYy0zMjQtXFx0LnN0YXRmc1xcdFxcdD0gb21mc19zdGF0ZnMsXFxuLS1cXG5mcy9vdmVybGF5ZnMvc3VwZXIuYz0yMTM9c3RhdGljIHZvaWQgb3ZsX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL292ZXJsYXlmcy9zdXBlci5jLTIyNC1cXG5mcy9vdmVybGF5ZnMvc3VwZXIuYzoyMjU6c3RhdGljIHZvaWQgb3ZsX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL292ZXJsYXlmcy9zdXBlci5jLTIyNi17XFxuLS1cXG5mcy9vdmVybGF5ZnMvc3VwZXIuYz0yOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG92bF9zdXBlcl9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvb3ZlcmxheWZzL3N1cGVyLmMtMzAxLVxcdC5kcm9wX2lub2RlXFx0PSBpbm9kZV9qdXN0X2Ryb3AsXFxuZnMvb3ZlcmxheWZzL3N1cGVyLmM6MzAyOlxcdC5wdXRfc3VwZXJcXHQ9IG92bF9wdXRfc3VwZXIsXFxuZnMvb3ZlcmxheWZzL3N1cGVyLmMtMzAzLVxcdC5zeW5jX2ZzXFx0PSBvdmxfc3luY19mcyxcXG4tLVxcbmZzL3FueDYvaW5vZGUuYz0yOT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgcW54Nl9zb3BzO1xcbmZzL3FueDYvaW5vZGUuYy0zMC1cXG5mcy9xbng2L2lub2RlLmM6MzE6c3RhdGljIHZvaWQgcW54Nl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvcW54Ni9pbm9kZS5jLTMyLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKnFueDZfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuLS1cXG5mcy9xbng2L2lub2RlLmM9Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHFueDZfc29wcyA9IHtcXG4tLVxcbmZzL3FueDYvaW5vZGUuYy00MC1cXHQuZnJlZV9pbm9kZVxcdD0gcW54Nl9mcmVlX2lub2RlLFxcbmZzL3FueDYvaW5vZGUuYzo0MTpcXHQucHV0X3N1cGVyXFx0PSBxbng2X3B1dF9zdXBlcixcXG5mcy9xbng2L2lub2RlLmMtNDItXFx0LnN0YXRmc1xcdFxcdD0gcW54Nl9zdGF0ZnMsXFxuLS1cXG5mcy9xbng2L2lub2RlLmM9MjkxPXN0YXRpYyBpbnQgcW54Nl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvcW54Ni9pbm9kZS5jLTQ3My1cXG5mcy9xbng2L2lub2RlLmM6NDc0OnN0YXRpYyB2b2lkIHFueDZfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvcW54Ni9pbm9kZS5jLTQ3NS17XFxuLS1cXG5mcy9xdW90YS9xdW90YS5jPTg2Nj1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpxdW90YWN0bF9ibG9jayhjb25zdCBjaGFyIF9fdXNlciAqc3BlY2lhbCwgaW50IGNtZClcXG4tLVxcbmZzL3F1b3RhL3F1b3RhLmMtODk5LVxcdFxcdHNiX2VuZF93cml0ZShzYik7XFxuZnMvcXVvdGEvcXVvdGEuYzo5MDA6XFx0XFx0cHV0X3N1cGVyKHNiKTtcXG5mcy9xdW90YS9xdW90YS5jLTkwMS1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jPTg5OT1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpfX2NpZnNfZ2V0X3N1cGVyKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkyNS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYzo5MjY6c3RhdGljIHZvaWQgX19jaWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkyNy17XFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYz05NDM9dm9pZCBjaWZzX3B1dF90Y3Bfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05NDQte1xcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjk0NTpcXHRfX2NpZnNfcHV0X3N1cGVyKHNiKTtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05NDYtfVxcbi0tXFxuZnMvc3F1YXNoZnMvc3VwZXIuYz01NzE9c3RhdGljIGludCBzcXVhc2hmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxcbi0tXFxuZnMvc3F1YXNoZnMvc3VwZXIuYy01OTAtXFxuZnMvc3F1YXNoZnMvc3VwZXIuYzo1OTE6c3RhdGljIHZvaWQgc3F1YXNoZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvc3F1YXNoZnMvc3VwZXIuYy01OTIte1xcbi0tXFxuZnMvc3F1YXNoZnMvc3VwZXIuYz02OTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNxdWFzaGZzX3N1cGVyX29wcyA9IHtcXG4tLVxcbmZzL3NxdWFzaGZzL3N1cGVyLmMtNjk3LVxcdC5zdGF0ZnMgPSBzcXVhc2hmc19zdGF0ZnMsXFxuZnMvc3F1YXNoZnMvc3VwZXIuYzo2OTg6XFx0LnB1dF9zdXBlciA9IHNxdWFzaGZzX3B1dF9zdXBlcixcXG5mcy9zcXVhc2hmcy9zdXBlci5jLTY5OS1cXHQuc2hvd19vcHRpb25zID0gc3F1YXNoZnNfc2hvd19vcHRpb25zLFxcbi0tXFxuZnMvc3VwZXIuYz0zMzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcXG4tLVxcbmZzL3N1cGVyLmMtNDMwLSAqIERyb3AgYSBzdXBlcmJsb2NrJ3MgcGFzc2l2ZSByZWZlcmVuY2UuICBNdXN0IGJlIGNhbGxlZCBXSVRIT1VUIHNiX2xvY2sgaGVsZDtcXG5mcy9zdXBlci5jOjQzMTogKiBwdXRfc3VwZXIoKSBhY3F1aXJlcyBzYl9sb2NrIGl0c2VsZiB3aGVuIHRoZSBmaW5hbCByZWZlcmVuY2UgaXMgZHJvcHBlZC5cXG5mcy9zdXBlci5jLTQzMi0gKi9cXG5mcy9zdXBlci5jOjQzMzp2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXFxuZnMvc3VwZXIuYy00MzQte1xcbi0tXFxuZnMvc3VwZXIuYz00ODA9c3RhdGljIHZvaWQgc3VwZXJfZGV2X3B1dChzdHJ1Y3Qgc3VwZXJfZGV2ICpmc2QpXFxuLS1cXG5mcy9zdXBlci5jLTQ4NC1cXHRcXHRyaGx0YWJsZV9yZW1vdmUoXFx1MDAyNnN1cGVyX2Rldl90YWJsZSwgXFx1MDAyNmZzZC1cXHUwMDNlc2Rfbm9kZSwgc3VwZXJfZGV2X3BhcmFtcyk7XFxuZnMvc3VwZXIuYzo0ODU6XFx0XFx0cHV0X3N1cGVyKGZzZC1cXHUwMDNlc2Rfc2IpO1xcbmZzL3N1cGVyLmMtNDg2LVxcdFxcdGtmcmVlX3JjdShmc2QsIHNkX3JjdSk7XFxuLS1cXG5mcy9zdXBlci5jPTU5NT12b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG4tLVxcbmZzL3N1cGVyLmMtNjAzLVxcbmZzL3N1cGVyLmM6NjA0OlxcdFxcdC8qIGxpc3RfbHJ1X2Rlc3Ryb3koKSBtYXkgc2xlZXA7IHB1dF9zdXBlcigpIGNhbGxlcnMgbWF5IG5vdC4gKi9cXG5mcy9zdXBlci5jLTYwNS1cXHRcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZzLVxcdTAwM2VzX2RlbnRyeV9scnUpO1xcbi0tXFxuZnMvc3VwZXIuYy02MDctXFxuZnMvc3VwZXIuYzo2MDg6XFx0XFx0cHV0X3N1cGVyKHMpO1xcbmZzL3N1cGVyLmMtNjA5LVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9zdXBlci5jPTY0Nj1zdGF0aWMgYm9vbCBncmFiX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9zdXBlci5jLTY1NC1cXHRcXHRpZiAoYXRvbWljX2luY19ub3RfemVybyhcXHUwMDI2c2ItXFx1MDAzZXNfYWN0aXZlKSkge1xcbmZzL3N1cGVyLmM6NjU1OlxcdFxcdFxcdHB1dF9zdXBlcihzYik7XFxuZnMvc3VwZXIuYy02NTYtXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5mcy9zdXBlci5jLTY2MC1cXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2c2ItXFx1MDAzZXNfZmxhZ3MsIHN1cGVyX2ZsYWdzKHNiLCBTQl9ERUFEKSk7XFxuZnMvc3VwZXIuYzo2NjE6XFx0cHV0X3N1cGVyKHNiKTtcXG5mcy9zdXBlci5jLTY2Mi1cXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5mcy9zdXBlci5jPTczNz12b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3N1cGVyLmMtNzYzLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzoxNS4yMDI4ODQ2NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NDA2NzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNodXRkb3duIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBrZXJuZWwgc2h1dGRvd24gc2VxdWVuY2UsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgc3VwZXJibG9ja3MgYXJlIGhhbmRsZWQuIEkgc2VlIGEgY2hhaW4gb2YgZnVuY3Rpb25zIGludm9sdmVkOiBgc2dldF9mY2AsIGBwdXRfc3VwZXJgLCBgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJgLCBga2lsbF9zdXBlcl9ub3RpZnlgLCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAsIGFuZCBga2VybmZzX2tpbGxfc2JgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGlzIHN0ZXAgYnkgc3RlcC4gSSdtIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBga2lsbF9zdXBlcl9ub3RpZnlgLiBJIHZhZ3VlbHkgcmVjYWxsIGl0cyBwdXJwb3NlIGFuZCBJIHdhbnQgdG8gY29uZmlybSBpZiBteSBtZW1vcnkgaXMgY29ycmVjdC5cblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IGlmIGBraWxsX3N1cGVyX25vdGlmeWAgaXMgaW5kZWVkIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBZZXMsIGNvbmZpcm1lZDogYHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpYCB3aXRoaW4gYGZzL3N1cGVyLmNgLiBQZXJmZWN0LCB0aGF0IHJlaW5mb3JjZXMgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nLiBOb3csIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsIHNpdGVzLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGludm9rZWQgd2l0aGluIHRoaXMgc2h1dGRvd24gcHJvY2Vzcz8gSXMgaXQganVzdCBjYWxsZWQgYnkgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHMpYCBvciBvdGhlciBzdXBlcmJsb2NrIGNsZWFuaW5nIHJvdXRpbmVzIGxpa2UgYGtpbGxfYW5vbl9zdXBlcihzYilgLCBvciBhcmUgdGhlcmUgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSB0aGF0IHJlbHkgb24gaXQ/IFRvIGJlIHN1cmUsIEknbGwgbmVlZCB0byBydW4gYSBicm9hZCBzZWFyY2ggZm9yIGBraWxsX3N1cGVyX25vdGlmeWAgdGhyb3VnaG91dCB0aGUgZW50aXJlIGNvZGViYXNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYW5kIGludGVyYWN0aW9ucy4gVGhpcyBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN1cGVyYmxvY2sgdGVhcmRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODU1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIxOjEzOjE4LjA2Njk1NTExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ2MTA4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2lsbF9zdXBlcl9ub3RpZnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N1cGVyLmM9NTQ1PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfZGV2ICpzdXBlcl9kZXZfbmV4dChzdHJ1Y3Qgc3VwZXJfZGV2ICpwcmV2KVxcbi0tXFxuZnMvc3VwZXIuYy01NTYtXFxuZnMvc3VwZXIuYzo1NTc6c3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9zdXBlci5jLTU1OC17XFxuLS1cXG5mcy9zdXBlci5jPTU5NT12b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG4tLVxcbmZzL3N1cGVyLmMtNjAxLVxcbmZzL3N1cGVyLmM6NjAyOlxcdFxcdGtpbGxfc3VwZXJfbm90aWZ5KHMpO1xcbmZzL3N1cGVyLmMtNjAzLVxcbi0tXFxuZnMvc3VwZXIuYz0xMzY2PXZvaWQga2lsbF9hbm9uX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9zdXBlci5jLTEzNjktXFx0Z2VuZXJpY19zaHV0ZG93bl9zdXBlcihzYik7XFxuZnMvc3VwZXIuYzoxMzcwOlxcdGtpbGxfc3VwZXJfbm90aWZ5KHNiKTtcXG5mcy9zdXBlci5jLTEzNzEtXFx0ZnJlZV9hbm9uX2JkZXYoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTM6MTguMjAxNjEwMTY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzU4ODUzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEaWdnaW5nIERlZXBlciBmb3IgSW1wYWN0KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBga2lsbF9zdXBlcl9ub3RpZnlgLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBsaWtlbHkgb24gYSBzcGVjaWZpYyBhcmVhLCBidXQgSSdtIHRoaW5raW5nIHdlIHNob3VsZCBicm9hZGVuIHRoZSBzY29wZSBvZiBvdXIgc2VhcmNoLiBKdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgd2UgZG9uJ3QgbWlzcyBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMsIEknbSBnb2luZyB0byBydW4gYSBmdWxsLXRyZWUgc2VhcmNoIGZvciBga2lsbF9zdXBlcl9ub3RpZnlgLiBUaGlzIHdpbGwgbGV0IG1lIHNlZSBpZiBpdCdzIHJlZmVyZW5jZWQgYW55d2hlcmUgdW5leHBlY3RlZCwgYW5kIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBhY3Qgb2YgdGhpcyBmdW5jdGlvbiBhY3Jvc3MgdGhlIGNvZGViYXNlLCBub3QganVzdCBpbiB0aGUgaW1tZWRpYXRlIGFyZWEgSSBzdGFydGVkIGludmVzdGlnYXRpbmcuIEJldHRlciB0byBjYXN0IGEgd2lkZSBuZXQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1ODQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzoyMC4yMzc0OTg4OTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjk5MjkyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2lsbF9zdXBlcl9ub3RpZnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3VwZXIuYz01NDU9c3RhdGljIHN0cnVjdCBzdXBlcl9kZXYgKnN1cGVyX2Rldl9uZXh0KHN0cnVjdCBzdXBlcl9kZXYgKnByZXYpXFxuLS1cXG5mcy9zdXBlci5jLTU1Ni1cXG5mcy9zdXBlci5jOjU1NzpzdGF0aWMgdm9pZCBraWxsX3N1cGVyX25vdGlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL3N1cGVyLmMtNTU4LXtcXG4tLVxcbmZzL3N1cGVyLmM9NTk1PXZvaWQgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxcbi0tXFxuZnMvc3VwZXIuYy02MDEtXFxuZnMvc3VwZXIuYzo2MDI6XFx0XFx0a2lsbF9zdXBlcl9ub3RpZnkocyk7XFxuZnMvc3VwZXIuYy02MDMtXFxuLS1cXG5mcy9zdXBlci5jPTEzNjY9dm9pZCBraWxsX2Fub25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3N1cGVyLmMtMTM2OS1cXHRnZW5lcmljX3NodXRkb3duX3N1cGVyKHNiKTtcXG5mcy9zdXBlci5jOjEzNzA6XFx0a2lsbF9zdXBlcl9ub3RpZnkoc2IpO1xcbmZzL3N1cGVyLmMtMTM3MS1cXHRmcmVlX2Fub25fYmRldihkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzoyMi42MDc0MzI1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTMyMzU3NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IFN1cGVyYmxvY2sgTGlmZWN5Y2xlIGFuZCBTeW5jaHJvbml6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYCwgYGRlYWN0aXZhdGVfc3VwZXJgLCBga2lsbF9hbm9uX3N1cGVyYCwgYHB1dF9zdXBlcmAsIGBzZ2V0X2ZjYCwgYW5kIGBrZXJuZnNfa2lsbF9zYmAuIEknbSBpbnRlcmVzdGVkIGluIGhvdyBgcHV0X3N1cGVyYCBpcyB1c2VkOyBpcyBpdCBhIHViaXF1aXRvdXMgZnVuY3Rpb24sIG9yIGlzIGl0cyB1c2FnZSBtb3JlIHNwZWNpZmljPyBJdCBsb29rcyBsaWtlIGBwdXRfc3VwZXJgIGlzIG9ubHkgY2FsbGVkIHdoZW4gcGFzc2l2ZWx5IHJlbGVhc2luZyBhIHN1cGVyYmxvY2ssIGxpa2UgZHVyaW5nIHVubW91bnQgb3Igd2hlbiBgc2dldF9mY2Agb3IgYHN1cGVyX2Rldl9wdXRgIGZhaWwsIHdoaWNoIG1ha2VzIGl0IGxlc3MgdWJpcXVpdG91cy4gIFRoZSBrZXkgZnVuY3Rpb24gZm9yIGZpbHRlcmluZyBhbmQgaGFuZGxpbmcgYFNCX0RFQURgIHN1cGVyYmxvY2tzIHNlZW1zIHRvIGJlIGBzZ2V0X2ZjYC4gSSdtIGFsc28gbm90aW5nIHRoYXQgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYCBpcyB0aGUgcG9pbnQgd2hlcmUgYWN0aXZlIHJlZmVyZW5jZXMgZHJvcCB0byB6ZXJvLCB0cmlnZ2VyaW5nIGBraWxsX3NiYC4gYGtpbGxfYW5vbl9zdXBlcmAgY2FsbHMgYGtpbGxfc3VwZXJfbm90aWZ5YCwgd2hpY2ggaXMgYWxzbyBpbXBvcnRhbnQsIGFzIGlzIGBrZXJuZnNfa2lsbF9zYmAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGtpbGxfYW5vbl9zdXBlcmAuXG5cbk5vdywgSSB3YW50IHRvIG1hcCBvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gIFdlIGhhdmUgYHNnZXRfZmNgIGZvciBzdXBlcmJsb2NrIGxvb2t1cCBhbmQgY3JlYXRpb24sIGBwdXRfc3VwZXJgIGZvciBwYXNzaXZlIHJlZmNvdW50IGRyb3BzIGFuZCBkZWxldGlvbiwgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYCBmb3IgZGVhY3RpdmF0aW9uLCBga2lsbF9hbm9uX3N1cGVyYCBmb3IgdGVhcmRvd24sIGFuZCBga2VybmZzX2tpbGxfc2JgIGZvciBrZXJuZnMtc3BlY2lmaWMgc2h1dGRvd24uIEknbGwgYWxzbyBjb25zaWRlciBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAgaW4gdGhpcyBjb250ZXh0LlxuXG5DaGVja2luZyB0aGUgcGF0Y2gsIEkgc2VlIHRoZXNlIHN5bWJvbHM6IGBmcy9rZXJuZnMvbW91bnQuYzprZXJuZnNfa2lsbF9zYmAsIGBmcy9zdXBlci5jOnB1dF9zdXBlcmAsIGBmcy9zdXBlci5jOmtpbGxfc3VwZXJfbm90aWZ5YCwgYGZzL3N1cGVyLmM6ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJgLCBgZnMvc3VwZXIuYzpnZW5lcmljX3NodXRkb3duX3N1cGVyYCwgYW5kIGBmcy9zdXBlci5jOnNnZXRfZmNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYGZzL3N1cGVyLmNgIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgYnV0IGBmcy9rZXJuZnMvbW91bnQuY2AgaXMgY29tcGlsZWQgd2hlbiBgS0VSTkZTYCBpcyBzZXQuIFNvLCBgS0VSTkZTYCBpcyBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gdG8gY29uc2lkZXIuIEl0J3MgYm9vbGVhbiwgb2Z0ZW4gc2VsZWN0ZWQsIGFuZCBuZWVkcyB0byBiZSBpbmNsdWRlZC4gIGBmcy9zdXBlci5jYCBpdHNlbGYgZG9lc24ndCBkZXBlbmQgb24gYW55IGNvbmZpZyBvcHRpb25zLlxuXG5MZXQncyByZXZpZXcgdGhlIHJlcXVpcmVkIG91dHB1dHMuIFdlIGhhdmUgYFdvcnRoRnV6emluZ2AsIGBSZWFzb25pbmdgLCBgRm9jdXNTeW1ib2xzYCwgYW5kIGBFbmFibGVDb25maWdzYC5cblxuRm9yIGBGb2N1c1N5bWJvbHNgLCBJJ3ZlIGRlY2lkZWQgb246IGBzZ2V0X2ZjYCwgYHB1dF9zdXBlcmAsIGBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcmAsIGBnZW5lcmljX3NodXRkb3duX3N1cGVyYCwgYGtpbGxfc3VwZXJfbm90aWZ5YCAoaW1wb3J0YW50LCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYyDigJMgdGhlIGNvbXBpbGVyIG1heSByZXRhaW4gaXQgb3Igd2UgY2FuIGNvbnNpZGVyIGl0cyBjYWxsZXJzKSwgYGtpbGxfYW5vbl9zdXBlcmAsIGFuZCBga2VybmZzX2tpbGxfc2JgLiBUaGlzIHNlbGVjdGlvbiBjb3ZlcnMgYm90aCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIG9mIHRoZSBzdGF0aWMgaGVscGVycy5cblxuRm9yIGBFbmFibGVDb25maWdzYCwgaXQncyBqdXN0IGBLRVJORlNgLlxuXG5IZXJlJ3MgbXkgY29uY2lzZSByZWFzb25pbmc6IFRoZSBwYXRjaCB0b3VjaGVzIGNvcmUgVkZTIHN1cGVyYmxvY2sgbGlmZWN5Y2xlIGFuZCBzeW5jaHJvbml6YXRpb24gZHVyaW5nIG1vdW50L3VubW91bnQuIEl0IGNoYW5nZXMgaG93IHN1cGVyYmxvY2tzIGFyZSB1bmxpbmtlZCwgc3luY2hyb25pemVzIGBTQl9ERUFEYCBzdGF0dXMgdW5kZXIgYHNiX2xvY2tgLCBtb3ZlcyBgcHV0X2ZpbGVzeXN0ZW0oKWAgdG8gYHB1dF9zdXBlcigpYCwgYW5kIHVwZGF0ZXMgYHNnZXRfZmMoKWAgdG8gYXZvaWQgYFNCX0RFQURgIHN1cGVyYmxvY2tzLiAgVGhpcyBpbnZvbHZlcyBjb21wbGV4IGNvbmN1cnJlbmN5IGJldHdlZW4gbW91bnRpbmcgYW5kIHVubW91bnRpbmcgcHJvY2Vzc2VzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgYXNzZXJ0aW9uIGZhaWx1cmVzLlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYwMjIsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzozMS43Mzk3OTI1MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2Mzc3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktFUk5GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNnZXRfZmNcIixcbiAgICBcInB1dF9zdXBlclwiLFxuICAgIFwiZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJcIixcbiAgICBcImdlbmVyaWNfc2h1dGRvd25fc3VwZXJcIixcbiAgICBcImtpbGxfYW5vbl9zdXBlclwiLFxuICAgIFwia2VybmZzX2tpbGxfc2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCBhY3Jvc3MgbW91bnQgYW5kIHVubW91bnQgcGF0aHMgKGluIGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKS4gSXQgZGVmZXJzIHVubGlua2luZyBzdXBlcmJsb2NrcyBmcm9tIGZzX3N1cGVycyB1bnRpbCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZSBkcm9wcyBpbiBwdXRfc3VwZXIoKSwgc2V0cyBTQl9ERUFEIHVuZGVyIHNiX2xvY2sgaW4ga2lsbF9zdXBlcl9ub3RpZnkoKSwgYW5kIHNraXBzIFNCX0RFQUQgc3VwZXJibG9ja3MgZHVyaW5nIHNnZXRfZmMoKSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29uY3VycmVuY3kgaW52YXJpYW50cyBiZXR3ZWVuIGNvbmN1cnJlbnQgbW91bnQgKHNnZXRfZmMpIGFuZCBzaHV0ZG93bi9kZWFjdGl2YXRpb24gcm91dGluZXMsIG1ha2luZyB0aGlzIGNvcmUgc3Vic3lzdGVtIGNvZGUgd2VsbCB3b3J0aCBmdXp6aW5nIGZvciBzeW5jaHJvbml6YXRpb24gYW5kIHJlZmVyZW5jZSBjb3VudGluZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLRVJORlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ2V0X2ZjXCIsXG4gICAgXCJwdXRfc3VwZXJcIixcbiAgICBcImRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyXCIsXG4gICAgXCJnZW5lcmljX3NodXRkb3duX3N1cGVyXCIsXG4gICAgXCJraWxsX2Fub25fc3VwZXJcIixcbiAgICBcImtlcm5mc19raWxsX3NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYWNyb3NzIG1vdW50IGFuZCB1bm1vdW50IHBhdGhzIChpbiBmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykuIEl0IGRlZmVycyB1bmxpbmtpbmcgc3VwZXJibG9ja3MgZnJvbSBmc19zdXBlcnMgdW50aWwgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UgZHJvcHMgaW4gcHV0X3N1cGVyKCksIHNldHMgU0JfREVBRCB1bmRlciBzYl9sb2NrIGluIGtpbGxfc3VwZXJfbm90aWZ5KCksIGFuZCBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGR1cmluZyBzZ2V0X2ZjKCkgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYmV0d2VlbiBjb25jdXJyZW50IG1vdW50IChzZ2V0X2ZjKSBhbmQgc2h1dGRvd24vZGVhY3RpdmF0aW9uIHJvdXRpbmVzLCBtYWtpbmcgdGhpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIHdlbGwgd29ydGggZnV6emluZyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIxOjEzOjMxLjg4MTQzOTg5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MTcxMjc3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzozMS44ODMyOTMzOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwODE1MjcwMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBzdXBlcmJsb2NrIGluc3RhbmNlcyAoZnMvc3VwZXIuYyBhbmQgZnMva2VybmZzL21vdW50LmMpIGFjcm9zcyBtb3VudCBhbmQgc2h1dGRvd24gcGF0aHMgKHNnZXRfZmMsIGtpbGxfc3VwZXJfbm90aWZ5LCBwdXRfc3VwZXIpLiBJdCBkZWZlcnMgdW5saW5raW5nIHNiLVxcdTAwM2VzX2luc3RhbmNlcyBhbmQgcHV0X2ZpbGVzeXN0ZW0gdG8gcHV0X3N1cGVyLCB3aGlsZSBob2xkaW5nIHNiX2xvY2sgd2hlbiBzZXR0aW5nIFNCX0RFQUQgc28gY29uY3VycmVudCBzZ2V0X2ZjKCkgY2FsbHMgc2tpcCBkeWluZyBzdXBlcmJsb2Nrcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcgKHNiX2xvY2spLCBsaXN0IG1hbmFnZW1lbnQsIGFuZCBvYmplY3QgbGlmZWN5Y2xlIHN5bmNocm9uaXphdGlvbi4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgaGVyZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb25zLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRyYWNrZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgcGFyc2luZywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3B5aW5nIGlzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzljN2YwMzNlMTc0M2UzM2ViZGViOGI4OTZkYjI3YmFmNTRkNzBhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjE6MTI6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9rZXJuZnMvbW91bnQuYyBiL2ZzL2tlcm5mcy9tb3VudC5jXG5pbmRleCBmMTgzYTk2Nzc4YjlhLi5hNTczOTkwMjFjOGIwIDEwMDY0NFxuLS0tIGEvZnMva2VybmZzL21vdW50LmNcbisrKyBiL2ZzL2tlcm5mcy9tb3VudC5jXG5AQCAtNDM0LDggKzQzNCw4IEBAIHZvaWQga2VybmZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHVwX3dyaXRlKFx1MDAyNnJvb3QtXHUwMDNla2VybmZzX3N1cGVyc19yd3NlbSk7XG4gXG4gXHQvKlxuLVx0ICogUmVtb3ZlIHRoZSBzdXBlcmJsb2NrIGZyb20gZnNfc3VwZXJzL3NfaW5zdGFuY2VzXG4tXHQgKiBzbyB3ZSBjYW4ndCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cbitcdCAqIE1hcmsgdGhlIHN1cGVyYmxvY2sgZGVhZCBzbyBzZ2V0X2ZjKCkgY2FuJ3QgZmluZCBpdCxcbitcdCAqIGJlZm9yZSBmcmVlaW5nIGtlcm5mc19zdXBlcl9pbmZvLlxuIFx0ICovXG4gXHRraWxsX2Fub25fc3VwZXIoc2IpO1xuIFx0a2ZyZWUoaW5mbyk7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLjBmOWUxM2VlZGI0ZmIgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtNDMzLDE1ICs0MzMsMTkgQEAgc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcbiB2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG4ge1xuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZzLVx1MDAzZXNfcGFzc2l2ZSkpIHtcbitcdFx0c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUgPSBzLVx1MDAzZXNfdHlwZTtcbiBcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnMtXHUwMDNlc19saXN0KTtcbitcdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2cy1cdTAwM2VzX2luc3RhbmNlcyk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFxuIFx0XHRXQVJOX09OKHMtXHUwMDNlc19kZW50cnlfbHJ1Lm5vZGUpO1xuIFx0XHRXQVJOX09OKHMtXHUwMDNlc19pbm9kZV9scnUubm9kZSk7XG4gXHRcdFdBUk5fT04ocy1cdTAwM2VzX21vdW50cyk7XG4gXHRcdGNhbGxfcmN1KFx1MDAyNnMtXHUwMDNlcmN1LCBkZXN0cm95X3N1cGVyX3JjdSk7XG4rXHRcdC8qIFRoZSB1bmxpbmsgYWJvdmUgbWF5IHRvdWNoIHR5cGUtXHUwMDNlZnNfc3VwZXJzLCBzbyBkcm9wIGl0IGxhc3QuICovXG4rXHRcdHB1dF9maWxlc3lzdGVtKHR5cGUpO1xuIFx0fVxuIH1cbiBcbkBAIC01NTgsMTcgKzU2Miw2IEBAIHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRpZiAoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfREVBRClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Lypcbi1cdCAqIFJlbW92ZSBpdCBmcm9tIEBmc19zdXBlcnMgc28gaXQgaXNuJ3QgZm91bmQgYnkgbmV3XG4tXHQgKiBzZ2V0X2ZjKCkgd2Fsa2VycyBhbnltb3JlLiBBbnkgY29uY3VycmVudCBtb3VudGVyIHN0aWxsXG4tXHQgKiBtYW5hZ2luZyB0byBncmFiIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyBndWFyYW50ZWVkIHRvXG4tXHQgKiBhbHJlYWR5IHNlZSBTQl9EWUlORyBhbmQgd2lsbCB3YWl0IHVudGlsIHdlIG5vdGlmeSB0aGVtIGFib3V0XG4tXHQgKiBTQl9ERUFELlxuLVx0ICovXG4tXHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4tXHRobGlzdF9kZWxfaW5pdChcdTAwMjZzYi1cdTAwM2VzX2luc3RhbmNlcyk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbi1cbiBcdC8qIERyb3Agc2dldF9mYygpJ3MgY2xhaW07IGEgbmV2ZXItcmVnaXN0ZXJlZCBlbnRyeSBzdGF5cyB3aXRoIHRoZSBzYi4gKi9cbiBcdGlmIChzYi1cdTAwM2VzX3N1cGVyX2Rldi1cdTAwM2VzZF9kZXYpIHtcbiBcdFx0c3VwZXJfZGV2X3B1dChzYi1cdTAwM2VzX3N1cGVyX2Rldik7XG5AQCAtNTc3LDExICs1NzAsMTUgQEAgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcbiBcdC8qXG4gXHQgKiBMZXQgY29uY3VycmVudCBtb3VudHMga25vdyB0aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRlYWQuXG4tXHQgKiBXZSBkb24ndCBuZWVkIEBzYi1cdTAwM2VzX3Vtb3VudCBoZXJlIGFzIGV2ZXJ5IGNvbmN1cnJlbnQgY2FsbGVyXG4tXHQgKiB3aWxsIHNlZSBTQl9EWUlORyBhbmQgZWl0aGVyIGRpc2NhcmQgdGhlIHN1cGVyYmxvY2sgb3Igd2FpdFxuLVx0ICogZm9yIFNCX0RFQUQuXG4rXHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXG4rXHQgKiBzYl9sb2NrLCBzbyBzZXQgaXQgdW5kZXIgc2JfbG9jazogb25jZSB3ZSByZXR1cm4gbm8gdGVzdCgpXG4rXHQgKiBydW5zIG9uIHRoaXMgc3VwZXJibG9jayBhbnltb3JlIGFuZCBub25lIHdpbGwgc3RhcnQuIEV2ZXJ5b25lXG4rXHQgKiBlbHNlIGFscmVhZHkgc2F3IFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZGVkIHRoZSBzdXBlcmJsb2NrXG4rXHQgKiBvciB3YWl0cyBmb3IgU0JfREVBRC5cbiBcdCAqL1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0c3VwZXJfd2FrZShzYiwgU0JfREVBRCk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNjA4LDcgKzYwNSw2IEBAIHZvaWQgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxuIFx0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNnMtXHUwMDNlc19kZW50cnlfbHJ1KTtcbiBcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZzLVx1MDAzZXNfaW5vZGVfbHJ1KTtcbiBcbi1cdFx0cHV0X2ZpbGVzeXN0ZW0oZnMpO1xuIFx0XHRwdXRfc3VwZXIocyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdXBlcl91bmxvY2tfZXhjbChzKTtcbkBAIC03OTUsMTIgKzc5MSwxMiBAQCB2b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdH1cbiBcdC8qXG4gXHQgKiBCcm9hZGNhc3QgdG8gZXZlcnlvbmUgdGhhdCBncmFiYmVkIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSB0byB0aGlzXG4tXHQgKiBzdXBlcmJsb2NrIGJlZm9yZSB3ZSByZW1vdmVkIGl0IGZyb20gQGZzX3N1cGVycyB0aGF0IHRoZSBzdXBlcmJsb2NrXG4tXHQgKiBpcyBkeWluZy4gRXZlcnkgd2Fsa2VyIG9mIEBmc19zdXBlcnMgb3V0c2lkZSBvZiBzZ2V0X2ZjKCkgd2lsbCBub3dcbi1cdCAqIGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhcyBkZWFkLlxuK1x0ICogc3VwZXJibG9jayB0aGF0IGl0IGlzIGR5aW5nLiBFdmVyeSB3YWxrZXIgb2YgQGZzX3N1cGVycyBvdXRzaWRlXG4rXHQgKiBvZiBzZ2V0X2ZjKCkgd2lsbCBub3cgZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzXG4rXHQgKiBkZWFkLlxuIFx0ICpcbi1cdCAqIFdlIGxlYXZlIHRoZSBzdXBlcmJsb2NrIG9uIEBmc19zdXBlcnMgc28gaXQgY2FuIGJlIGZvdW5kIGJ5XG4tXHQgKiBzZ2V0X2ZjKCkgdW50aWwgd2UgcGFzc2VkIHNiLVx1MDAzZWtpbGxfc2IoKS5cbitcdCAqIHNnZXRfZmMoKSBrZWVwcyBmaW5kaW5nIHRoZSBzdXBlcmJsb2NrIHVudGlsIFNCX0RFQUQgaXMgc2V0LCBzb1xuK1x0ICogYSBjb25jdXJyZW50IG1vdW50ZXIgd2FpdHMgdW50aWwgd2UgcGFzc2VkIHNiLVx1MDAzZWtpbGxfc2IoKS5cbiBcdCAqL1xuIFx0c3VwZXJfd2FrZShzYiwgU0JfRFlJTkcpO1xuIFx0c3VwZXJfdW5sb2NrX2V4Y2woc2IpO1xuQEAgLTg3OSw2ICs4NzUsOSBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0aWYgKHRlc3QpIHtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCBcdTAwMjZmYy1cdTAwM2Vmc190eXBlLVx1MDAzZWZzX3N1cGVycywgc19pbnN0YW5jZXMpIHtcbitcdFx0XHQvKiBPbmx5IHVubGlua2VkIGF0IHRoZSBsYXN0IHBhc3NpdmUgcmVmZXJlbmNlLiAqL1xuK1x0XHRcdGlmIChzdXBlcl9mbGFncyhvbGQsIFNCX0RFQUQpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKHRlc3Qob2xkLCBmYykpXG4gXHRcdFx0XHRnb3RvIHNoYXJlX2V4dGFudF9zYjtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTM6MzEuODgzMjk1MTFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4MTUyNDU4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBhIEtNU0FOIGZ1enppbmcgcnVuLiBUaGUgY2hhbmdlcyB0b3VjaCBgZnMva2VybmZzL21vdW50LmNgIGFuZCBgZnMvc3VwZXIuY2AsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzdXBlcmJsb2NrIHN0dWZmLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyBsaWtlIGEgcmV3b3JrIG9mIHRoZSBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBzZ2V0X2ZjYCwgYGtpbGxfc3VwZXJfbm90aWZ5YCwgYHB1dF9zdXBlcmAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGRlZmVycyBgaGxpc3RfZGVsX2luaXRgIG9mIGBzX2luc3RhbmNlc2AgYW5kIGFkZHMgYSBgU0JfREVBRGAgY2hlY2sgaW4gYHNnZXRfZmNgLiBUaGVyZSBhcmUgYWxzbyBzb21lIGBwdXRfZmlsZXN5c3RlbWAgY2FsbHMgYmVpbmcgbW92ZWQuIEl0J3MgYSBzeW5jaHJvbml6YXRpb24gYW5kIGxpZmVjeWNsZSByZWZhY3RvciwgZXNzZW50aWFsbHkuXG5cbk5vdywgZm9yIEtNU0FOLCB3ZSBuZWVkIHRvIGFzaywgZG9lcyB0aGlzIGludHJvZHVjZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBEb2VzIGl0IGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2Ugd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24/IE5vLCB0aGUgcGF0Y2ggZG9lc24ndCBzZWVtIHRvIHRvdWNoIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBJdCdzIG5vdCBjb3B5aW5nIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgaXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgaW52b2x2ZWQgaW4gYW55IG5ldyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgdGhlIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgYWRkcmVzc2luZyBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2VzLCBhbmQgbWF5YmUgcmVmY291bnQgcHJvYmxlbXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGxpc3QgY29ycnVwdGlvbi5cblxuTm93LCBsZXQncyBjaGVjayB0aGUgZ3VpZGVsaW5lcy4gVGhlIGd1aWRlbGluZXMgbWFrZSBpdCB2ZXJ5IGNsZWFyOiBpZiBhIGJ1ZyBjYW4gYmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGRldGVjdG9ycywgYSBLTVNBTiBzZXNzaW9uIGlzIHBvaW50bGVzcy4gS0FTQU4gaXMgYnVpbHQgdG8gY2F0Y2ggb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgaW52YWxpZCBmcmVlcy4gTG9ja2RlcCBpcyBnb29kIGZvciBsb2NraW5nIGJ1Z3MuIFRoaXMgcGF0Y2ggZGVhbHMgd2l0aCBzeW5jaHJvbml6YXRpb24sIGNvbmN1cnJlbmN5LCBsaXN0IG1hbmlwdWxhdGlvbiwgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJdCdzIGFib3V0IHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGxpc3QgY29ycnVwdGlvbi4gVGhlIHBhdGNoIGRvZXMgbm90IGRlYWwgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHJlZmFjdG9yaW5nIHRvdWNoZXMgc3luY2hyb25pemF0aW9uLCBsaXN0IG1hbmlwdWxhdGlvbiwgYW5kIHN1cGVyYmxvY2sgbGlmZWN5Y2xlLCB0aGUgcmlza3MgYXJlIGFyb3VuZCBjb25jdXJyZW5jeSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxpc3QgY29ycnVwdGlvbiwgYWxsIG9mIHdoaWNoIGZhbGwgZmlybWx5IHVuZGVyIEtBU0FOL0xPQ0tERVAuIFRoZXJlJ3Mgbm8gS01TQU4gcmlzayBoZXJlLlxuXG5TbywgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFRpbWUgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTksIk91dHB1dFRva2VucyI6MjEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIxOjEzOjQyLjY5ODU0NDIxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpbnN0YW5jZXMgKGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKSBhY3Jvc3MgbW91bnQgYW5kIHNodXRkb3duIHBhdGhzIChzZ2V0X2ZjLCBraWxsX3N1cGVyX25vdGlmeSwgcHV0X3N1cGVyKS4gSXQgZGVmZXJzIHVubGlua2luZyBzYi1cXHUwMDNlc19pbnN0YW5jZXMgYW5kIHB1dF9maWxlc3lzdGVtIHRvIHB1dF9zdXBlciwgd2hpbGUgaG9sZGluZyBzYl9sb2NrIHdoZW4gc2V0dGluZyBTQl9ERUFEIHNvIGNvbmN1cnJlbnQgc2dldF9mYygpIGNhbGxzIHNraXAgZHlpbmcgc3VwZXJibG9ja3MuXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIChzYl9sb2NrKSwgbGlzdCBtYW5hZ2VtZW50LCBhbmQgb2JqZWN0IGxpZmVjeWNsZSBzeW5jaHJvbml6YXRpb24uIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0cmFja2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIHBhcnNpbmcsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29weWluZyBpcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgc3luY2hyb25pemF0aW9uIG9mIHN1cGVyYmxvY2sgaW5zdGFuY2VzIChmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykgYWNyb3NzIG1vdW50IGFuZCBzaHV0ZG93biBwYXRocyAoc2dldF9mYywga2lsbF9zdXBlcl9ub3RpZnksIHB1dF9zdXBlcikuIEl0IGRlZmVycyB1bmxpbmtpbmcgc2ItXFx1MDAzZXNfaW5zdGFuY2VzIGFuZCBwdXRfZmlsZXN5c3RlbSB0byBwdXRfc3VwZXIsIHdoaWxlIGhvbGRpbmcgc2JfbG9jayB3aGVuIHNldHRpbmcgU0JfREVBRCBzbyBjb25jdXJyZW50IHNnZXRfZmMoKSBjYWxscyBza2lwIGR5aW5nIHN1cGVyYmxvY2tzLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHJlZmVyZW5jZSBjb3VudGluZywgbG9ja2luZyAoc2JfbG9jayksIGxpc3QgbWFuYWdlbWVudCwgYW5kIG9iamVjdCBsaWZlY3ljbGUgc3luY2hyb25pemF0aW9uLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBoZXJlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgdHJhY2tlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1ZmZlciBwYXJzaW5nLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGNvcHlpbmcgaXMgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbpb8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 20:22:37 +0000 UTC FinishedAt: 2026-09-09 21:13:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KERNFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KERNFS" ], "series_id": "571c4630-8faa-4b81-a463-2ecc63efb449" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "sget_fc", "put_super", "deactivate_locked_super", "generic_shutdown_super", "kill_anon_super", "kernfs_kill_sb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tFUk5GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NnZXRfZmMmIzM0OywKICAgICYjMzQ7cHV0X3N1cGVyJiMzNDssCiAgICAmIzM0O2RlYWN0aXZhdGVfbG9ja2VkX3N1cGVyJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfc2h1dGRvd25fc3VwZXImIzM0OywKICAgICYjMzQ7a2lsbF9hbm9uX3N1cGVyJiMzNDssCiAgICAmIzM0O2tlcm5mc19raWxsX3NiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpbnN0YW5jZXMgKGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKSBhY3Jvc3MgbW91bnQgYW5kIHNodXRkb3duIHBhdGhzIChzZ2V0X2ZjLCBraWxsX3N1cGVyX25vdGlmeSwgcHV0X3N1cGVyKS4gSXQgZGVmZXJzIHVubGlua2luZyBzYi1cdTAwM2VzX2luc3RhbmNlcyBhbmQgcHV0X2ZpbGVzeXN0ZW0gdG8gcHV0X3N1cGVyLCB3aGlsZSBob2xkaW5nIHNiX2xvY2sgd2hlbiBzZXR0aW5nIFNCX0RFQUQgc28gY29uY3VycmVudCBzZ2V0X2ZjKCkgY2FsbHMgc2tpcCBkeWluZyBzdXBlcmJsb2Nrcy5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIChzYl9sb2NrKSwgbGlzdCBtYW5hZ2VtZW50LCBhbmQgb2JqZWN0IGxpZmVjeWNsZSBzeW5jaHJvbml6YXRpb24uIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0cmFja2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIHBhcnNpbmcsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29weWluZyBpcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCBhY3Jvc3MgbW91bnQgYW5kIHVubW91bnQgcGF0aHMgKGluIGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKS4gSXQgZGVmZXJzIHVubGlua2luZyBzdXBlcmJsb2NrcyBmcm9tIGZzX3N1cGVycyB1bnRpbCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZSBkcm9wcyBpbiBwdXRfc3VwZXIoKSwgc2V0cyBTQl9ERUFEIHVuZGVyIHNiX2xvY2sgaW4ga2lsbF9zdXBlcl9ub3RpZnkoKSwgYW5kIHNraXBzIFNCX0RFQUQgc3VwZXJibG9ja3MgZHVyaW5nIHNnZXRfZmMoKSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29uY3VycmVuY3kgaW52YXJpYW50cyBiZXR3ZWVuIGNvbmN1cnJlbnQgbW91bnQgKHNnZXRfZmMpIGFuZCBzaHV0ZG93bi9kZWFjdGl2YXRpb24gcm91dGluZXMsIG1ha2luZyB0aGlzIGNvcmUgc3Vic3lzdGVtIGNvZGUgd2VsbCB3b3J0aCBmdXp6aW5nIGZvciBzeW5jaHJvbml6YXRpb24gYW5kIHJlZmVyZW5jZSBjb3VudGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM5YzdmMDMzZTE3NDNlMzNlYmRlYjhiODk2ZGIyN2JhZjU0ZDcwYThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDIxOjEyOjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2tlcm5mcy9tb3VudC5jIGIvZnMva2VybmZzL21vdW50LmNcbmluZGV4IGYxODNhOTY3NzhiOWEuLmE1NzM5OTAyMWM4YjAgMTAwNjQ0XG4tLS0gYS9mcy9rZXJuZnMvbW91bnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMva2VybmZzL21vdW50LmNcbkBAIC00MzQsOCAmIzQzOzQzNCw4IEBAIHZvaWQga2VybmZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHVwX3dyaXRlKFx1MDAyNnJvb3QtXHUwMDNla2VybmZzX3N1cGVyc19yd3NlbSk7XG4gXG4gXHQvKlxuLVx0ICogUmVtb3ZlIHRoZSBzdXBlcmJsb2NrIGZyb20gZnNfc3VwZXJzL3NfaW5zdGFuY2VzXG4tXHQgKiBzbyB3ZSBjYW4mIzM5O3QgZmluZCBpdCwgYmVmb3JlIGZyZWVpbmcga2VybmZzX3N1cGVyX2luZm8uXG4mIzQzO1x0ICogTWFyayB0aGUgc3VwZXJibG9jayBkZWFkIHNvIHNnZXRfZmMoKSBjYW4mIzM5O3QgZmluZCBpdCxcbiYjNDM7XHQgKiBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cbiBcdCAqL1xuIFx0a2lsbF9hbm9uX3N1cGVyKHNiKTtcbiBcdGtmcmVlKGluZm8pO1xuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCAwNWU0NDMxNzMwMzg3Li4wZjllMTNlZWRiNGZiIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuY1xuQEAgLTQzMywxNSAmIzQzOzQzMywxOSBAQCBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxuIHZvaWQgcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbiB7XG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnMtXHUwMDNlc19wYXNzaXZlKSkge1xuJiM0MztcdFx0c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUgPSBzLVx1MDAzZXNfdHlwZTtcbiBcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnMtXHUwMDNlc19saXN0KTtcbiYjNDM7XHRcdGhsaXN0X2RlbF9pbml0KFx1MDAyNnMtXHUwMDNlc19pbnN0YW5jZXMpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbiBcbiBcdFx0V0FSTl9PTihzLVx1MDAzZXNfZGVudHJ5X2xydS5ub2RlKTtcbiBcdFx0V0FSTl9PTihzLVx1MDAzZXNfaW5vZGVfbHJ1Lm5vZGUpO1xuIFx0XHRXQVJOX09OKHMtXHUwMDNlc19tb3VudHMpO1xuIFx0XHRjYWxsX3JjdShcdTAwMjZzLVx1MDAzZXJjdSwgZGVzdHJveV9zdXBlcl9yY3UpO1xuJiM0MztcdFx0LyogVGhlIHVubGluayBhYm92ZSBtYXkgdG91Y2ggdHlwZS1cdTAwM2Vmc19zdXBlcnMsIHNvIGRyb3AgaXQgbGFzdC4gKi9cbiYjNDM7XHRcdHB1dF9maWxlc3lzdGVtKHR5cGUpO1xuIFx0fVxuIH1cbiBcbkBAIC01NTgsMTcgJiM0Mzs1NjIsNiBAQCBzdGF0aWMgdm9pZCBraWxsX3N1cGVyX25vdGlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0aWYgKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IFNCX0RFQUQpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qXG4tXHQgKiBSZW1vdmUgaXQgZnJvbSBAZnNfc3VwZXJzIHNvIGl0IGlzbiYjMzk7dCBmb3VuZCBieSBuZXdcbi1cdCAqIHNnZXRfZmMoKSB3YWxrZXJzIGFueW1vcmUuIEFueSBjb25jdXJyZW50IG1vdW50ZXIgc3RpbGxcbi1cdCAqIG1hbmFnaW5nIHRvIGdyYWIgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIGlzIGd1YXJhbnRlZWQgdG9cbi1cdCAqIGFscmVhZHkgc2VlIFNCX0RZSU5HIGFuZCB3aWxsIHdhaXQgdW50aWwgd2Ugbm90aWZ5IHRoZW0gYWJvdXRcbi1cdCAqIFNCX0RFQUQuXG4tXHQgKi9cbi1cdHNwaW5fbG9jayhcdTAwMjZzYl9sb2NrKTtcbi1cdGhsaXN0X2RlbF9pbml0KFx1MDAyNnNiLVx1MDAzZXNfaW5zdGFuY2VzKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuLVxuIFx0LyogRHJvcCBzZ2V0X2ZjKCkmIzM5O3MgY2xhaW07IGEgbmV2ZXItcmVnaXN0ZXJlZCBlbnRyeSBzdGF5cyB3aXRoIHRoZSBzYi4gKi9cbiBcdGlmIChzYi1cdTAwM2VzX3N1cGVyX2Rldi1cdTAwM2VzZF9kZXYpIHtcbiBcdFx0c3VwZXJfZGV2X3B1dChzYi1cdTAwM2VzX3N1cGVyX2Rldik7XG5AQCAtNTc3LDExICYjNDM7NTcwLDE1IEBAIHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXG4gXHQvKlxuIFx0ICogTGV0IGNvbmN1cnJlbnQgbW91bnRzIGtub3cgdGhhdCB0aGlzIHRoaW5nIGlzIHJlYWxseSBkZWFkLlxuLVx0ICogV2UgZG9uJiMzOTt0IG5lZWQgQHNiLVx1MDAzZXNfdW1vdW50IGhlcmUgYXMgZXZlcnkgY29uY3VycmVudCBjYWxsZXJcbi1cdCAqIHdpbGwgc2VlIFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZCB0aGUgc3VwZXJibG9jayBvciB3YWl0XG4tXHQgKiBmb3IgU0JfREVBRC5cbiYjNDM7XHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXG4mIzQzO1x0ICogc2JfbG9jaywgc28gc2V0IGl0IHVuZGVyIHNiX2xvY2s6IG9uY2Ugd2UgcmV0dXJuIG5vIHRlc3QoKVxuJiM0MztcdCAqIHJ1bnMgb24gdGhpcyBzdXBlcmJsb2NrIGFueW1vcmUgYW5kIG5vbmUgd2lsbCBzdGFydC4gRXZlcnlvbmVcbiYjNDM7XHQgKiBlbHNlIGFscmVhZHkgc2F3IFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZGVkIHRoZSBzdXBlcmJsb2NrXG4mIzQzO1x0ICogb3Igd2FpdHMgZm9yIFNCX0RFQUQuXG4gXHQgKi9cbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4gXHRzdXBlcl93YWtlKHNiLCBTQl9ERUFEKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNjA4LDcgJiM0Mzs2MDUsNiBAQCB2b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbiBcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZzLVx1MDAzZXNfZGVudHJ5X2xydSk7XG4gXHRcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2cy1cdTAwM2VzX2lub2RlX2xydSk7XG4gXG4tXHRcdHB1dF9maWxlc3lzdGVtKGZzKTtcbiBcdFx0cHV0X3N1cGVyKHMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3VwZXJfdW5sb2NrX2V4Y2wocyk7XG5AQCAtNzk1LDEyICYjNDM7NzkxLDEyIEBAIHZvaWQgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0fVxuIFx0LypcbiBcdCAqIEJyb2FkY2FzdCB0byBldmVyeW9uZSB0aGF0IGdyYWJiZWQgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHRvIHRoaXNcbi1cdCAqIHN1cGVyYmxvY2sgYmVmb3JlIHdlIHJlbW92ZWQgaXQgZnJvbSBAZnNfc3VwZXJzIHRoYXQgdGhlIHN1cGVyYmxvY2tcbi1cdCAqIGlzIGR5aW5nLiBFdmVyeSB3YWxrZXIgb2YgQGZzX3N1cGVycyBvdXRzaWRlIG9mIHNnZXRfZmMoKSB3aWxsIG5vd1xuLVx0ICogZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzIGRlYWQuXG4mIzQzO1x0ICogc3VwZXJibG9jayB0aGF0IGl0IGlzIGR5aW5nLiBFdmVyeSB3YWxrZXIgb2YgQGZzX3N1cGVycyBvdXRzaWRlXG4mIzQzO1x0ICogb2Ygc2dldF9mYygpIHdpbGwgbm93IGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhc1xuJiM0MztcdCAqIGRlYWQuXG4gXHQgKlxuLVx0ICogV2UgbGVhdmUgdGhlIHN1cGVyYmxvY2sgb24gQGZzX3N1cGVycyBzbyBpdCBjYW4gYmUgZm91bmQgYnlcbi1cdCAqIHNnZXRfZmMoKSB1bnRpbCB3ZSBwYXNzZWQgc2ItXHUwMDNla2lsbF9zYigpLlxuJiM0MztcdCAqIHNnZXRfZmMoKSBrZWVwcyBmaW5kaW5nIHRoZSBzdXBlcmJsb2NrIHVudGlsIFNCX0RFQUQgaXMgc2V0LCBzb1xuJiM0MztcdCAqIGEgY29uY3VycmVudCBtb3VudGVyIHdhaXRzIHVudGlsIHdlIHBhc3NlZCBzYi1cdTAwM2VraWxsX3NiKCkuXG4gXHQgKi9cbiBcdHN1cGVyX3dha2Uoc2IsIFNCX0RZSU5HKTtcbiBcdHN1cGVyX3VubG9ja19leGNsKHNiKTtcbkBAIC04NzksNiAmIzQzOzg3NSw5IEBAIHN0cnVjdCBzdXBlcl9ibG9jayAqc2dldF9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4gXHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4gXHRpZiAodGVzdCkge1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShvbGQsIFx1MDAyNmZjLVx1MDAzZWZzX3R5cGUtXHUwMDNlZnNfc3VwZXJzLCBzX2luc3RhbmNlcykge1xuJiM0MztcdFx0XHQvKiBPbmx5IHVubGlua2VkIGF0IHRoZSBsYXN0IHBhc3NpdmUgcmVmZXJlbmNlLiAqL1xuJiM0MztcdFx0XHRpZiAoc3VwZXJfZmxhZ3Mob2xkLCBTQl9ERUFEKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRpZiAodGVzdChvbGQsIGZjKSlcbiBcdFx0XHRcdGdvdG8gc2hhcmVfZXh0YW50X3NiO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S0VSTkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2dldF9mYyYjMzQ7LAogICAgJiMzNDtwdXRfc3VwZXImIzM0OywKICAgICYjMzQ7ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXImIzM0OywKICAgICYjMzQ7Z2VuZXJpY19zaHV0ZG93bl9zdXBlciYjMzQ7LAogICAgJiMzNDtraWxsX2Fub25fc3VwZXImIzM0OywKICAgICYjMzQ7a2VybmZzX2tpbGxfc2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYWNyb3NzIG1vdW50IGFuZCB1bm1vdW50IHBhdGhzIChpbiBmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykuIEl0IGRlZmVycyB1bmxpbmtpbmcgc3VwZXJibG9ja3MgZnJvbSBmc19zdXBlcnMgdW50aWwgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UgZHJvcHMgaW4gcHV0X3N1cGVyKCksIHNldHMgU0JfREVBRCB1bmRlciBzYl9sb2NrIGluIGtpbGxfc3VwZXJfbm90aWZ5KCksIGFuZCBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGR1cmluZyBzZ2V0X2ZjKCkgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYmV0d2VlbiBjb25jdXJyZW50IG1vdW50IChzZ2V0X2ZjKSBhbmQgc2h1dGRvd24vZGVhY3RpdmF0aW9uIHJvdXRpbmVzLCBtYWtpbmcgdGhpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIHdlbGwgd29ydGggZnV6emluZyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjOWM3ZjAzM2UxNzQzZTMzZWJkZWI4Yjg5NmRiMjdiYWY1NGQ3MGE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMToxMjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2tlcm5mcy9tb3VudC5jIGIvZnMva2VybmZzL21vdW50LmMKaW5kZXggZjE4M2E5Njc3OGI5YS4uYTU3Mzk5MDIxYzhiMCAxMDA2NDQKLS0tIGEvZnMva2VybmZzL21vdW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMva2VybmZzL21vdW50LmMKQEAgLTQzNCw4ICYjNDM7NDM0LDggQEAgdm9pZCBrZXJuZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCXVwX3dyaXRlKCZhbXA7cm9vdC0mZ3Q7a2VybmZzX3N1cGVyc19yd3NlbSk7CiAKIAkvKgotCSAqIFJlbW92ZSB0aGUgc3VwZXJibG9jayBmcm9tIGZzX3N1cGVycy9zX2luc3RhbmNlcwotCSAqIHNvIHdlIGNhbiYjMzk7dCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby4KJiM0MzsJICogTWFyayB0aGUgc3VwZXJibG9jayBkZWFkIHNvIHNnZXRfZmMoKSBjYW4mIzM5O3QgZmluZCBpdCwKJiM0MzsJICogYmVmb3JlIGZyZWVpbmcga2VybmZzX3N1cGVyX2luZm8uCiAJICovCiAJa2lsbF9hbm9uX3N1cGVyKHNiKTsKIAlrZnJlZShpbmZvKTsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDA1ZTQ0MzE3MzAzODcuLjBmOWUxM2VlZGI0ZmIgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtNDMzLDE1ICYjNDM7NDMzLDE5IEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCiB2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiB7CiAJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3MtJmd0O3NfcGFzc2l2ZSkpIHsKJiM0MzsJCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlID0gcy0mZ3Q7c190eXBlOwogCiAJCXNwaW5fbG9jaygmYW1wO3NiX2xvY2spOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cy0mZ3Q7c19saXN0KTsKJiM0MzsJCWhsaXN0X2RlbF9pbml0KCZhbXA7cy0mZ3Q7c19pbnN0YW5jZXMpOwogCQlzcGluX3VubG9jaygmYW1wO3NiX2xvY2spOwogCiAJCVdBUk5fT04ocy0mZ3Q7c19kZW50cnlfbHJ1Lm5vZGUpOwogCQlXQVJOX09OKHMtJmd0O3NfaW5vZGVfbHJ1Lm5vZGUpOwogCQlXQVJOX09OKHMtJmd0O3NfbW91bnRzKTsKIAkJY2FsbF9yY3UoJmFtcDtzLSZndDtyY3UsIGRlc3Ryb3lfc3VwZXJfcmN1KTsKJiM0MzsJCS8qIFRoZSB1bmxpbmsgYWJvdmUgbWF5IHRvdWNoIHR5cGUtJmd0O2ZzX3N1cGVycywgc28gZHJvcCBpdCBsYXN0LiAqLwomIzQzOwkJcHV0X2ZpbGVzeXN0ZW0odHlwZSk7CiAJfQogfQogCkBAIC01NTgsMTcgJiM0Mzs1NjIsNiBAQCBzdGF0aWMgdm9pZCBraWxsX3N1cGVyX25vdGlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCWlmIChzYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9ERUFEKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIFJlbW92ZSBpdCBmcm9tIEBmc19zdXBlcnMgc28gaXQgaXNuJiMzOTt0IGZvdW5kIGJ5IG5ldwotCSAqIHNnZXRfZmMoKSB3YWxrZXJzIGFueW1vcmUuIEFueSBjb25jdXJyZW50IG1vdW50ZXIgc3RpbGwKLQkgKiBtYW5hZ2luZyB0byBncmFiIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyBndWFyYW50ZWVkIHRvCi0JICogYWxyZWFkeSBzZWUgU0JfRFlJTkcgYW5kIHdpbGwgd2FpdCB1bnRpbCB3ZSBub3RpZnkgdGhlbSBhYm91dAotCSAqIFNCX0RFQUQuCi0JICovCi0Jc3Bpbl9sb2NrKCZhbXA7c2JfbG9jayk7Ci0JaGxpc3RfZGVsX2luaXQoJmFtcDtzYi0mZ3Q7c19pbnN0YW5jZXMpOwotCXNwaW5fdW5sb2NrKCZhbXA7c2JfbG9jayk7Ci0KIAkvKiBEcm9wIHNnZXRfZmMoKSYjMzk7cyBjbGFpbTsgYSBuZXZlci1yZWdpc3RlcmVkIGVudHJ5IHN0YXlzIHdpdGggdGhlIHNiLiAqLwogCWlmIChzYi0mZ3Q7c19zdXBlcl9kZXYtJmd0O3NkX2RldikgewogCQlzdXBlcl9kZXZfcHV0KHNiLSZndDtzX3N1cGVyX2Rldik7CkBAIC01NzcsMTEgJiM0Mzs1NzAsMTUgQEAgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAogCS8qCiAJICogTGV0IGNvbmN1cnJlbnQgbW91bnRzIGtub3cgdGhhdCB0aGlzIHRoaW5nIGlzIHJlYWxseSBkZWFkLgotCSAqIFdlIGRvbiYjMzk7dCBuZWVkIEBzYi0mZ3Q7c191bW91bnQgaGVyZSBhcyBldmVyeSBjb25jdXJyZW50IGNhbGxlcgotCSAqIHdpbGwgc2VlIFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZCB0aGUgc3VwZXJibG9jayBvciB3YWl0Ci0JICogZm9yIFNCX0RFQUQuCiYjNDM7CSAqIHNnZXRfZmMoKSBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGFuZCBjYWxscyB0ZXN0KCkgdW5kZXIKJiM0MzsJICogc2JfbG9jaywgc28gc2V0IGl0IHVuZGVyIHNiX2xvY2s6IG9uY2Ugd2UgcmV0dXJuIG5vIHRlc3QoKQomIzQzOwkgKiBydW5zIG9uIHRoaXMgc3VwZXJibG9jayBhbnltb3JlIGFuZCBub25lIHdpbGwgc3RhcnQuIEV2ZXJ5b25lCiYjNDM7CSAqIGVsc2UgYWxyZWFkeSBzYXcgU0JfRFlJTkcgYW5kIGVpdGhlciBkaXNjYXJkZWQgdGhlIHN1cGVyYmxvY2sKJiM0MzsJICogb3Igd2FpdHMgZm9yIFNCX0RFQUQuCiAJICovCiYjNDM7CXNwaW5fbG9jaygmYW1wO3NiX2xvY2spOwogCXN1cGVyX3dha2Uoc2IsIFNCX0RFQUQpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3NiX2xvY2spOwogfQogCiAvKioKQEAgLTYwOCw3ICYjNDM7NjA1LDYgQEAgdm9pZCBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiAJCWxpc3RfbHJ1X2Rlc3Ryb3koJmFtcDtzLSZndDtzX2RlbnRyeV9scnUpOwogCQlsaXN0X2xydV9kZXN0cm95KCZhbXA7cy0mZ3Q7c19pbm9kZV9scnUpOwogCi0JCXB1dF9maWxlc3lzdGVtKGZzKTsKIAkJcHV0X3N1cGVyKHMpOwogCX0gZWxzZSB7CiAJCXN1cGVyX3VubG9ja19leGNsKHMpOwpAQCAtNzk1LDEyICYjNDM7NzkxLDEyIEBAIHZvaWQgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCX0KIAkvKgogCSAqIEJyb2FkY2FzdCB0byBldmVyeW9uZSB0aGF0IGdyYWJiZWQgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHRvIHRoaXMKLQkgKiBzdXBlcmJsb2NrIGJlZm9yZSB3ZSByZW1vdmVkIGl0IGZyb20gQGZzX3N1cGVycyB0aGF0IHRoZSBzdXBlcmJsb2NrCi0JICogaXMgZHlpbmcuIEV2ZXJ5IHdhbGtlciBvZiBAZnNfc3VwZXJzIG91dHNpZGUgb2Ygc2dldF9mYygpIHdpbGwgbm93Ci0JICogZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzIGRlYWQuCiYjNDM7CSAqIHN1cGVyYmxvY2sgdGhhdCBpdCBpcyBkeWluZy4gRXZlcnkgd2Fsa2VyIG9mIEBmc19zdXBlcnMgb3V0c2lkZQomIzQzOwkgKiBvZiBzZ2V0X2ZjKCkgd2lsbCBub3cgZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzCiYjNDM7CSAqIGRlYWQuCiAJICoKLQkgKiBXZSBsZWF2ZSB0aGUgc3VwZXJibG9jayBvbiBAZnNfc3VwZXJzIHNvIGl0IGNhbiBiZSBmb3VuZCBieQotCSAqIHNnZXRfZmMoKSB1bnRpbCB3ZSBwYXNzZWQgc2ItJmd0O2tpbGxfc2IoKS4KJiM0MzsJICogc2dldF9mYygpIGtlZXBzIGZpbmRpbmcgdGhlIHN1cGVyYmxvY2sgdW50aWwgU0JfREVBRCBpcyBzZXQsIHNvCiYjNDM7CSAqIGEgY29uY3VycmVudCBtb3VudGVyIHdhaXRzIHVudGlsIHdlIHBhc3NlZCBzYi0mZ3Q7a2lsbF9zYigpLgogCSAqLwogCXN1cGVyX3dha2Uoc2IsIFNCX0RZSU5HKTsKIAlzdXBlcl91bmxvY2tfZXhjbChzYik7CkBAIC04NzksNiAmIzQzOzg3NSw5IEBAIHN0cnVjdCBzdXBlcl9ibG9jayAqc2dldF9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJc3Bpbl9sb2NrKCZhbXA7c2JfbG9jayk7CiAJaWYgKHRlc3QpIHsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCAmYW1wO2ZjLSZndDtmc190eXBlLSZndDtmc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7CiYjNDM7CQkJLyogT25seSB1bmxpbmtlZCBhdCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZS4gKi8KJiM0MzsJCQlpZiAoc3VwZXJfZmxhZ3Mob2xkLCBTQl9ERUFEKSkKJiM0MzsJCQkJY29udGludWU7CiAJCQlpZiAodGVzdChvbGQsIGZjKSkKIAkJCQlnb3RvIHNoYXJlX2V4dGFudF9zYjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTg3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipBbmFseXppbmcgYSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBldmFsdWF0ZSBhIExpbnV4IGtlcm5lbCBwYXRjaC4gU3BlY2lmaWNhbGx5LCB0aGlzIG9uZSYjMzk7cyBiZWVuIGZsYWdnZWQgZm9yIHVzZSB3aXRoIHN5emthbGxlciwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIG15IGludGVybmFsIHJlZCBmbGFncy4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBmdXp6aW5nIHN1cmZhY2UgYW5kIGVuc3VyaW5nIHByb3BlciBjb3ZlcmFnZS4KCk15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBkaXZlIGRlZXAgaW50byB0aGUgcGF0Y2ggaXRzZWxmIGFuZCBpdHMgc3Vycm91bmRpbmcgY29udGV4dC4gV2hlcmUgZGlkIGl0IGNvbWUgZnJvbT8gV2hhdCYjMzk7cyB0aGUgY2hhbmdlIHRyeWluZyB0byBhY2hpZXZlPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyB0aGUgYWZmZWN0ZWQgZmlsZXMuIEEgcXVpY2sgbG9vayBhdCB0aGUgYGdpdGAgaGlzdG9yeSBhcm91bmQgdGhvc2UgZmlsZXMgaXMgZXNzZW50aWFsLCB1c2luZyB0b29scyBsaWtlIGBnaXQgYmxhbWVgIG9yIGBnaXQgbG9nYCB3aXRoIHRoZSByZWxldmFudCBgLS1mb2xsb3dgIGFuZCBgLS1uYW1lLW9ubHlgIG9wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXZlbG9wbWVudCBoaXN0b3J5LCB3aG8gYXV0aG9yZWQgdGhlIGNvZGUgYW5kIHRoZWlyIHByaW9yIGNvbnRleHQuCgpOZXh0IHN0ZXA6IEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMgb24gZmlsZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvICphY3R1YWxseSogcmVhZCB0aGUgcGF0Y2gsIGJ1dCBiZWZvcmUgSSBnZXQgYm9nZ2VkIGRvd24gaW4gZGV0YWlscyBJIG1heSB1c2UgYGdpdCBncmVwYCB3aXRoaW4gdGhlIGNoYW5nZWQgZmlsZXMgdG8gcXVpY2tseSBpZGVudGlmeSBrZXkgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGludGVyZXN0aW5nIHZhcmlhYmxlcy4gVGhpcyBtaWdodCBxdWlja2x5IGhpZ2hsaWdodCBhcmVhcyBvZiBpbnRlcmVzdCBhbmQgaGVscCB0byBmb2N1cyB0aGUgaW4tZGVwdGggcmV2aWV3LCBzYXZpbmcgdGltZS4gQWx0ZXJuYXRpdmVseSwgaWYgdGhlIGZpbGUgc2l6ZSBpcyBtYW5hZ2VhYmxlLCBJIGNvdWxkIGp1c3QgcmVhZCB0aGUgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2dldF9mYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy85cC92ZnNfc3VwZXIuYz04Mj1zdGF0aWMgaW50IHY5ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzLzlwL3Zmc19zdXBlci5jLTEwMy1cdGZjLVx1MDAzZXNfZnNfaW5mbyA9IHY5c2VzO1xuZnMvOXAvdmZzX3N1cGVyLmM6MTA0Olx0c2IgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBzZXRfYW5vbl9zdXBlcl9mYyk7XG5mcy85cC92ZnNfc3VwZXIuYy0xMDUtXHRpZiAoSVNfRVJSKHNiKSkge1xuLS1cbmZzL2Fmcy9zdXBlci5jPTU0OD1zdGF0aWMgaW50IGFmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvYWZzL3N1cGVyLmMtNTY4LVx0LyogYWxsb2NhdGUgYSBkZXZpY2VsZXNzIHN1cGVyYmxvY2sgKi9cbmZzL2Fmcy9zdXBlci5jOjU2OTpcdHNiID0gc2dldF9mYyhmYyxcbmZzL2Fmcy9zdXBlci5jLTU3MC1cdFx0ICAgICBhcy1cdTAwM2VkeW5fcm9vdCA/IGFmc19keW5yb290X3Rlc3Rfc3VwZXIgOiBhZnNfdGVzdF9zdXBlcixcbi0tXG5mcy9idHJmcy9zdXBlci5jPTE4NjE9c3RhdGljIGludCBidHJmc19nZXRfdHJlZV9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0xODg1LVx0LypcbmZzL2J0cmZzL3N1cGVyLmM6MTg4NjpcdCAqIFdlIGNhbm5vdCBob2xkIHV1aWRfbXV0ZXggY2FsbGluZyBzZ2V0X2ZjKCksIGl0IHdpbGwgbGVhZCB0byBhXG5mcy9idHJmcy9zdXBlci5jLTE4ODctXHQgKiBsb2NraW5nIG9yZGVyIHJldmVyc2FsIHdpdGggc191bW91bnQuXG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0xODk3LVxuZnMvYnRyZnMvc3VwZXIuYzoxODk4Olx0c2IgPSBzZ2V0X2ZjKGZjLCBidHJmc19mY190ZXN0X3N1cGVyLCBzZXRfYW5vbl9zdXBlcl9mYyk7XG5mcy9idHJmcy9zdXBlci5jLTE4OTktXHRpZiAoSVNfRVJSKHNiKSkge1xuLS1cbmZzL2J0cmZzL3N1cGVyLmM9MjA2MT1zdGF0aWMgaW50IGJ0cmZzX2dldF90cmVlX3N1YnZvbChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0yMDc1LVx0ICogb2YgdGhlIGZzX2luZm8gKGxvY2tzIGFuZCBzdWNoKSB0byBtYWtlIGNsZWFudXAgZWFzaWVyIGlmIHdlIGZpbmQgYVxuZnMvYnRyZnMvc3VwZXIuYzoyMDc2Olx0ICogc3VwZXJibG9jayB3aXRoIG91ciBnaXZlbiBmc19kZXZpY2VzIGxhdGVyIG9uIGF0IHNnZXRfZmMoKSB0aW1lLlxuZnMvYnRyZnMvc3VwZXIuYy0yMDc3LVx0ICovXG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0yMTAyLVx0LypcbmZzL2J0cmZzL3N1cGVyLmM6MjEwMzpcdCAqIFdoZW4gd2UgZG8gdGhlIHNnZXRfZmMgdGhpcyBnZXRzIHRyYW5zZmVycmVkIHRvIHRoZSBzYiwgc28gd2Ugb25seVxuZnMvYnRyZnMvc3VwZXIuYy0yMTA0LVx0ICogbmVlZCB0byBzZXQgaXQgb24gdGhlIGR1cF9mYyBhcyB0aGlzIGlzIHdoYXQgY3JlYXRlcyB0aGUgc3VwZXIgYmxvY2suXG4tLVxuZnMvYnRyZnMvdm9sdW1lcy5oPTM0MT1zdHJ1Y3QgYnRyZnNfZnNfZGV2aWNlcyB7XG4tLVxuZnMvYnRyZnMvdm9sdW1lcy5oLTQyOS1cdCAqIGFmdGVyIGEgc3VwZXIgYmxvY2sgaXMgY3JlYXRlZC4gIEJ1dCB3ZSBjYW5ub3QgdGFrZSB1dWlkX211dGV4XG5mcy9idHJmcy92b2x1bWVzLmg6NDMwOlx0ICogZHVyaW5nIHNnZXRfZmMoKSwgdGh1cyB3ZSBoYXZlIHRvIGhvbGQgdGhlIGZzX2RldmljZXMgKG1lYW5pbmcgaXRcbmZzL2J0cmZzL3ZvbHVtZXMuaC00MzEtXHQgKiBjYW5ub3QgYmUgcmVsZWFzZWQpIHVudGlsIGEgc3VwZXIgYmxvY2sgaXMgcmV0dXJuZWQuXG4tLVxuZnMvY2VwaC9zdXBlci5jPTEzMDk9c3RhdGljIGludCBjZXBoX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9jZXBoL3N1cGVyLmMtMTM0My1cdGZjLVx1MDAzZXNfZnNfaW5mbyA9IGZzYztcbmZzL2NlcGgvc3VwZXIuYzoxMzQ0Olx0c2IgPSBzZ2V0X2ZjKGZjLCBjb21wYXJlX3N1cGVyLCBjZXBoX3NldF9zdXBlcik7XG5mcy9jZXBoL3N1cGVyLmMtMTM0NS1cdGZjLVx1MDAzZXNfZnNfaW5mbyA9IE5VTEw7XG4tLVxuZnMvZWNyeXB0ZnMvbWFpbi5jPTQzNT1zdGF0aWMgaW50IGVjcnlwdGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9lY3J5cHRmcy9tYWluLmMtNDY0LVxuZnMvZWNyeXB0ZnMvbWFpbi5jOjQ2NTpcdHMgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBzZXRfYW5vbl9zdXBlcl9mYyk7XG5mcy9lY3J5cHRmcy9tYWluLmMtNDY2LVx0aWYgKElTX0VSUihzKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MjIyPXN0YXRpYyBpbnQgZXh0ZW50c19rdW5pdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTI0Mi1cdH1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6MjQzOlx0c2IgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBleHRfc2V0KTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMjQ0LVx0cHV0X2ZzX2NvbnRleHQoZmMpO1xuLS1cbmZzL2V4dDQvbWJhbGxvYy10ZXN0LmM9MTM3PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm1idF9leHQ0X2FsbG9jX3N1cGVyX2Jsb2NrKHZvaWQpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xNTEtXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jOjE1MjpcdHNiID0gc2dldF9mYyhmYywgTlVMTCwgbWJ0X3NldCk7XG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTE1My1cdHB1dF9mc19jb250ZXh0KGZjKTtcbi0tXG5mcy9mdXNlL2lub2RlLmM9MTY3Nj1zdGF0aWMgaW50IGZ1c2VfZ2V0X3RyZWVfc3VibW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZzYylcbi0tXG5mcy9mdXNlL2lub2RlLmMtMTY4OS1cdGZzYy1cdTAwM2VzX2ZzX2luZm8gPSBmbTtcbmZzL2Z1c2UvaW5vZGUuYzoxNjkwOlx0c2IgPSBzZ2V0X2ZjKGZzYywgTlVMTCwgc2V0X2Fub25fc3VwZXJfZmMpO1xuZnMvZnVzZS9pbm9kZS5jLTE2OTEtXHRpZiAoZnNjLVx1MDAzZXNfZnNfaW5mbylcbi0tXG5mcy9mdXNlL2lub2RlLmM9MTg1Mz1zdGF0aWMgaW50IGZ1c2VfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZzYylcbi0tXG5mcy9mdXNlL2lub2RlLmMtMTg5Ny1cdFx0ZnNjLVx1MDAzZXNnZXRfa2V5ID0gY3R4LVx1MDAzZWZ1ZDtcbmZzL2Z1c2UvaW5vZGUuYzoxODk4Olx0XHRzYiA9IHNnZXRfZmMoZnNjLCBmdXNlX3Rlc3Rfc3VwZXIsIGZ1c2Vfc2V0X25vX3N1cGVyKTtcbmZzL2Z1c2UvaW5vZGUuYy0xODk5LVx0XHRlcnIgPSBQVFJfRVJSX09SX1pFUk8oc2IpO1xuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTY4MT1zdGF0aWMgaW50IHZpcnRpb19mc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZnNjKVxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTczMy1cdGZzYy1cdTAwM2VzX2ZzX2luZm8gPSBmbTtcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTczNDpcdHNiID0gc2dldF9mYyhmc2MsIHZpcnRpb19mc190ZXN0X3N1cGVyLCBzZXRfYW5vbl9zdXBlcl9mYyk7XG5mcy9mdXNlL3ZpcnRpb19mcy5jLTE3MzUtXHRpZiAoZnNjLVx1MDAzZXNfZnNfaW5mbylcbi0tXG5mcy9nZnMyL29wc19mc3R5cGUuYz0xNjczPXN0YXRpYyBpbnQgZ2ZzMl9tZXRhX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNjkwLVx0ZmMtXHUwMDNlc2dldF9rZXkgPSBwYXRoLmRlbnRyeS1cdTAwM2VkX3NiLVx1MDAzZXNfYmRldjtcbmZzL2dmczIvb3BzX2ZzdHlwZS5jOjE2OTE6XHRzID0gc2dldF9mYyhmYywgdGVzdF9tZXRhX3N1cGVyLCBzZXRfbWV0YV9zdXBlcik7XG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNjkyLVx0cGF0aF9wdXQoXHUwMDI2cGF0aCk7XG4tLVxuZnMva2VybmZzL21vdW50LmM9MzY2PWludCBrZXJuZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2tlcm5mcy9tb3VudC5jLTM4MS1cdGZjLVx1MDAzZXNfZnNfaW5mbyA9IGluZm87XG5mcy9rZXJuZnMvbW91bnQuYzozODI6XHRzYiA9IHNnZXRfZmMoZmMsIGtlcm5mc190ZXN0X3N1cGVyLCBrZXJuZnNfc2V0X3N1cGVyKTtcbmZzL2tlcm5mcy9tb3VudC5jLTM4My1cdGlmIChJU19FUlIoc2IpKVxuLS1cbmZzL2tlcm5mcy9tb3VudC5jPTQyNz12b2lkIGtlcm5mc19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMva2VybmZzL21vdW50LmMtNDM2LVx0LypcbmZzL2tlcm5mcy9tb3VudC5jOjQzNzpcdCAqIE1hcmsgdGhlIHN1cGVyYmxvY2sgZGVhZCBzbyBzZ2V0X2ZjKCkgY2FuJiMzOTt0IGZpbmQgaXQsXG5mcy9rZXJuZnMvbW91bnQuYy00MzgtXHQgKiBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cbi0tXG5mcy9uZnMvc3VwZXIuYz0xMjk2PWludCBuZnNfZ2V0X3RyZWVfY29tbW9uKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9uZnMvc3VwZXIuYy0xMzE2LVx0ZmMtXHUwMDNlc19mc19pbmZvID0gc2VydmVyO1xuZnMvbmZzL3N1cGVyLmM6MTMxNzpcdHMgPSBzZ2V0X2ZjKGZjLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyKTtcbmZzL25mcy9zdXBlci5jLTEzMTgtXHRmYy1cdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xuLS1cbmZzL29yYW5nZWZzL3N1cGVyLmM9NDU1PXN0YXRpYyBpbnQgb3JhbmdlZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL29yYW5nZWZzL3N1cGVyLmMtNDg5LVxuZnMvb3JhbmdlZnMvc3VwZXIuYzo0OTA6XHRzYiA9IHNnZXRfZmMoZmMsIE5VTEwsIHNldF9hbm9uX3N1cGVyX2ZjKTtcbmZzL29yYW5nZWZzL3N1cGVyLmMtNDkxLVxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9OTkwPWNpZnNfc21iM19kb19tb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzbWIzX2ZzX2NvbnRleHQgKm9sZF9jdHgpXG4tLVxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMDQyLVx0ICogaWdub3JlZCB0aGUgY2FsbGVyLXN1cHBsaWVkIFNCXyogZmxhZ3MuIFByZXNlcnZlIHRoYXQgYmVoYXZpb3VyIGJ5XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEwNDM6XHQgKiBvdmVycmlkaW5nIGZjLVx1MDAzZXNiX2ZsYWdzIGFyb3VuZCB0aGUgc2dldF9mYygpIGNhbGwuXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEwNDQtXHQgKlxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxMDQ1Olx0ICogSGFuZCBjaWZzX3NiIHRvIHNnZXRfZmMoKSB2aWEgZmMtXHUwMDNlc19mc19pbmZvOyBzZ2V0X2ZjKCkgY29waWVzIGl0XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEwNDYtXHQgKiBvbnRvIHNiLVx1MDAzZXNfZnNfaW5mbyBiZWZvcmUgcnVubmluZyBzZXQoKSBhbmQgY2xlYXJzIGZjLVx1MDAzZXNfZnNfaW5mb1xuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTA1My1cdGZjLVx1MDAzZXNnZXRfa2V5ID0gXHUwMDI2bW50X2RhdGE7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEwNTQ6XHRzYiA9IHNnZXRfZmMoZmMsIGNpZnNfbWF0Y2hfc3VwZXIsIHNldF9hbm9uX3N1cGVyX2ZjKTtcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTA1NS1cdGZjLVx1MDAzZXNnZXRfa2V5ID0gTlVMTDtcbi0tXG5mcy9zdXBlci5jPTMzNz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLFxuLS1cbmZzL3N1cGVyLmMtMzUwLVx0LypcbmZzL3N1cGVyLmM6MzUxOlx0ICogc2dldF9mYygpIGNhbiBoYXZlIHNfdW1vdW50IHJlY3Vyc2lvbi5cbmZzL3N1cGVyLmMtMzUyLVx0ICpcbi0tXG5mcy9zdXBlci5jPTU1Nz1zdGF0aWMgdm9pZCBraWxsX3N1cGVyX25vdGlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtNTY0LVxuZnMvc3VwZXIuYzo1NjU6XHQvKiBEcm9wIHNnZXRfZmMoKSYjMzk7cyBjbGFpbTsgYSBuZXZlci1yZWdpc3RlcmVkIGVudHJ5IHN0YXlzIHdpdGggdGhlIHNiLiAqL1xuZnMvc3VwZXIuYy01NjYtXHRpZiAoc2ItXHUwMDNlc19zdXBlcl9kZXYtXHUwMDNlc2RfZGV2KSB7XG4tLVxuZnMvc3VwZXIuYy01NzItXHQgKiBMZXQgY29uY3VycmVudCBtb3VudHMga25vdyB0aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRlYWQuXG5mcy9zdXBlci5jOjU3MzpcdCAqIHNnZXRfZmMoKSBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGFuZCBjYWxscyB0ZXN0KCkgdW5kZXJcbmZzL3N1cGVyLmMtNTc0LVx0ICogc2JfbG9jaywgc28gc2V0IGl0IHVuZGVyIHNiX2xvY2s6IG9uY2Ugd2UgcmV0dXJuIG5vIHRlc3QoKVxuLS1cbmZzL3N1cGVyLmM9NjMyPUVYUE9SVF9TWU1CT0woZGVhY3RpdmF0ZV9zdXBlcik7XG4tLVxuZnMvc3VwZXIuYy02MzgtICogQWNxdWlyZSBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugb24gYSBzdXBlcmJsb2NrIGFuZCB0cnkgdG8gdHJhZGUgaXQgZm9yXG5mcy9zdXBlci5jOjYzOTogKiBhbiBhY3RpdmUgcmVmZXJlbmNlLiBUaGlzIGlzIHVzZWQgaW4gc2dldF9mYygpIHRvIHdhaXQgZm9yIGFcbmZzL3N1cGVyLmMtNjQwLSAqIHN1cGVyYmxvY2sgdG8gZWl0aGVyIGJlY29tZSBTQl9CT1JOIG9yIGZvciBpdCB0byBwYXNzIHRocm91Z2hcbi0tXG5mcy9zdXBlci5jPTczNz12b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTc5NC1cdCAqIHN1cGVyYmxvY2sgdGhhdCBpdCBpcyBkeWluZy4gRXZlcnkgd2Fsa2VyIG9mIEBmc19zdXBlcnMgb3V0c2lkZVxuZnMvc3VwZXIuYzo3OTU6XHQgKiBvZiBzZ2V0X2ZjKCkgd2lsbCBub3cgZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzXG5mcy9zdXBlci5jLTc5Ni1cdCAqIGRlYWQuXG5mcy9zdXBlci5jLTc5Ny1cdCAqXG5mcy9zdXBlci5jOjc5ODpcdCAqIHNnZXRfZmMoKSBrZWVwcyBmaW5kaW5nIHRoZSBzdXBlcmJsb2NrIHVudGlsIFNCX0RFQUQgaXMgc2V0LCBzb1xuZnMvc3VwZXIuYy03OTktXHQgKiBhIGNvbmN1cnJlbnQgbW91bnRlciB3YWl0cyB1bnRpbCB3ZSBwYXNzZWQgc2ItXHUwMDNla2lsbF9zYigpLlxuLS1cbmZzL3N1cGVyLmM9ODEzPWJvb2wgbW91bnRfY2FwYWJsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvc3VwZXIuYy04MjEtLyoqXG5mcy9zdXBlci5jOjgyMjogKiBzZ2V0X2ZjIC0gRmluZCBvciBjcmVhdGUgYSBzdXBlcmJsb2NrXG5mcy9zdXBlci5jLTgyMy0gKiBAZmM6XHRGaWxlc3lzdGVtIGNvbnRleHQuXG4tLVxuZnMvc3VwZXIuYy04NTItICovXG5mcy9zdXBlci5jOjg1MzpzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuZnMvc3VwZXIuYy04NTQtXHRcdFx0ICAgIGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcbi0tXG5mcy9zdXBlci5jLTkzNC19XG5mcy9zdXBlci5jOjkzNTpFWFBPUlRfU1lNQk9MKHNnZXRfZmMpO1xuZnMvc3VwZXIuYy05MzYtXG4tLVxuZnMvc3VwZXIuYz0xMzkxPXN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXG4tLVxuZnMvc3VwZXIuYy0xMzk4LVxuZnMvc3VwZXIuYzoxMzk5Olx0c2IgPSBzZ2V0X2ZjKGZjLCB0ZXN0LCBzZXRfYW5vbl9zdXBlcl9mYyk7XG5mcy9zdXBlci5jLTE0MDAtXHRpZiAoSVNfRVJSKHNiKSlcbi0tXG5mcy9zdXBlci5jPTE0ODI9c3RydWN0IHN1cGVyX2Jsb2NrICpzZ2V0X2RldihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIGRldl90IGRldilcbi0tXG5mcy9zdXBlci5jLTE0ODQtXHRmYy1cdTAwM2VzZ2V0X2tleSA9IFx1MDAyNmRldjtcbmZzL3N1cGVyLmM6MTQ4NTpcdHJldHVybiBzZ2V0X2ZjKGZjLCBzdXBlcl9zX2Rldl90ZXN0LCBzdXBlcl9zX2Rldl9zZXQpO1xuZnMvc3VwZXIuYy0xNDg2LX1cbi0tXG5mcy9zdXBlci5jPTE3OTg9aW50IHNldHVwX2JkZXZfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNiX2ZsYWdzLFxuLS1cbmZzL3N1cGVyLmMtMTgyMi1cbmZzL3N1cGVyLmM6MTgyMzpcdC8qIFRoZSBzZ2V0X2ZjKCkgZW50cnkgaXMgYWxyZWFkeSBwdWJsaXNoZWQ7IHBhaXJzIHdpdGggYmRldl9mcmVlemUoKS4gKi9cbmZzL3N1cGVyLmMtMTgyNC1cdHNtcF9tYigpO1xuLS1cbmZzL3ViaWZzL3N1cGVyLmM9MjIzMj1zdGF0aWMgaW50IHViaWZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy91Ymlmcy9zdXBlci5jLTIyNjYtXG5mcy91Ymlmcy9zdXBlci5jOjIyNjc6XHRzYiA9IHNnZXRfZmMoZmMsIHNiX3Rlc3QsIHNldF9hbm9uX3N1cGVyX2ZjKTtcbmZzL3ViaWZzL3N1cGVyLmMtMjI2OC1cdGlmIChJU19FUlIoc2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlsZXN5c3RlbSBDaGFuZ2VzKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGZpbGVzeXN0ZW0gbW9kaWZpY2F0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgZGlmZiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbnMuIE15IGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2VzIHRvIGBmcy9zdXBlci5jYCBhbmQgYGZzL2tlcm5mcy9tb3VudC5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBvZiB0aGlzIGxpa2VseSByZXNpZGVzLiBJJiMzOTtsbCByZWFkIHRocm91Z2ggYGZzL3N1cGVyLmNgIGZpcnN0LCBzcGVjaWZpY2FsbHkgbGluZXMgNDIwLTYyMCBhbmQgdGhlbiBsaW5lcyA4NjAtOTQwLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmaWxlLiBJIGV4cGVjdCB0aGVyZSB0byBiZSB0aGUgbWVhdCBvZiB0aGUgY2hhbmdlcyBpbiB0aGlzIHJhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0fVxuIDQyNjpcdFxuIDQyNzpcdC8qIFN1cGVyYmxvY2sgcmVmY291bnRpbmcgICovXG4gNDI4Olx0XG4gNDI5Olx0LypcbiA0MzA6XHQgKiBEcm9wIGEgc3VwZXJibG9jayYjMzk7cyBwYXNzaXZlIHJlZmVyZW5jZS4gIE11c3QgYmUgY2FsbGVkIFdJVEhPVVQgc2JfbG9jayBoZWxkO1xuIDQzMTpcdCAqIHB1dF9zdXBlcigpIGFjcXVpcmVzIHNiX2xvY2sgaXRzZWxmIHdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyBkcm9wcGVkLlxuIDQzMjpcdCAqL1xuIDQzMzpcdHZvaWQgcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbiA0MzQ6XHR7XG4gNDM1Olx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnMtXHUwMDNlc19wYXNzaXZlKSkge1xuIDQzNjpcdFx0XHRzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSA9IHMtXHUwMDNlc190eXBlO1xuIDQzNzpcdFxuIDQzODpcdFx0XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4gNDM5Olx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cy1cdTAwM2VzX2xpc3QpO1xuIDQ0MDpcdFx0XHRobGlzdF9kZWxfaW5pdChcdTAwMjZzLVx1MDAzZXNfaW5zdGFuY2VzKTtcbiA0NDE6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4gNDQyOlx0XG4gNDQzOlx0XHRcdFdBUk5fT04ocy1cdTAwM2VzX2RlbnRyeV9scnUubm9kZSk7XG4gNDQ0Olx0XHRcdFdBUk5fT04ocy1cdTAwM2VzX2lub2RlX2xydS5ub2RlKTtcbiA0NDU6XHRcdFx0V0FSTl9PTihzLVx1MDAzZXNfbW91bnRzKTtcbiA0NDY6XHRcdFx0Y2FsbF9yY3UoXHUwMDI2cy1cdTAwM2VyY3UsIGRlc3Ryb3lfc3VwZXJfcmN1KTtcbiA0NDc6XHRcdFx0LyogVGhlIHVubGluayBhYm92ZSBtYXkgdG91Y2ggdHlwZS1cdTAwM2Vmc19zdXBlcnMsIHNvIGRyb3AgaXQgbGFzdC4gKi9cbiA0NDg6XHRcdFx0cHV0X2ZpbGVzeXN0ZW0odHlwZSk7XG4gNDQ5Olx0XHR9XG4gNDUwOlx0fVxuIDQ1MTpcdFxuIDQ1MjpcdHN0cnVjdCBzdXBlcl9kZXYge1xuIDQ1MzpcdFx0ZGV2X3RcdFx0XHRzZF9kZXY7XG4gNDU0Olx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2tcdCpzZF9zYjtcbiA0NTU6XHRcdHJlZmNvdW50X3RcdFx0c2RfcmVmO1xuIDQ1NjpcdFx0c3RydWN0IHJobGlzdF9oZWFkXHRzZF9ub2RlO1xuIDQ1NzpcdFx0c3RydWN0IHJjdV9oZWFkXHRcdHNkX3JjdTtcbiA0NTg6XHR9O1xuIDQ1OTpcdFxuIDQ2MDpcdHN0YXRpYyBzdHJ1Y3QgcmhsdGFibGUgc3VwZXJfZGV2X3RhYmxlO1xuIDQ2MTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgc3VwZXJfZGV2X3BhcmFtcyA9IHtcbiA0NjI6XHRcdC5rZXlfbGVuXHQ9IHNpemVvZihkZXZfdCksXG4gNDYzOlx0XHQua2V5X29mZnNldFx0PSBvZmZzZXRvZihzdHJ1Y3Qgc3VwZXJfZGV2LCBzZF9kZXYpLFxuIDQ2NDpcdFx0LmhlYWRfb2Zmc2V0XHQ9IG9mZnNldG9mKHN0cnVjdCBzdXBlcl9kZXYsIHNkX25vZGUpLFxuIDQ2NTpcdH07XG4gNDY2Olx0XG4gNDY3Olx0c3RhdGljIHN0cnVjdCBzdXBlcl9kZXYgKnN1cGVyX2Rldl9hbGxvYyhkZXZfdCBkZXYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gNDY4Olx0e1xuIDQ2OTpcdFx0c3RydWN0IHN1cGVyX2RldiAqZnNkO1xuIDQ3MDpcdFxuIDQ3MTpcdFx0ZnNkID0ga3phbGxvY19vYmooKmZzZCk7XG4gNDcyOlx0XHRpZiAoIWZzZClcbiA0NzM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDc0Olx0XHRmc2QtXHUwMDNlc2RfZGV2ID0gZGV2O1xuIDQ3NTpcdFx0ZnNkLVx1MDAzZXNkX3NiID0gc2I7XG4gNDc2Olx0XHRyZWZjb3VudF9zZXQoXHUwMDI2ZnNkLVx1MDAzZXNkX3JlZiwgMSk7XG4gNDc3Olx0XHRyZXR1cm4gZnNkO1xuIDQ3ODpcdH1cbiA0Nzk6XHRcbiA0ODA6XHRzdGF0aWMgdm9pZCBzdXBlcl9kZXZfcHV0KHN0cnVjdCBzdXBlcl9kZXYgKmZzZClcbiA0ODE6XHR7XG4gNDgyOlx0XHQvKiBVbmxpbmsgb25seSBvbmNlIHVucGlubmVkLCBzbyBhIGN1cnNvciBuZXZlciByZXN1bWVzIGZyb20gYSByZW1vdmVkIG5vZGUuICovXG4gNDgzOlx0XHRpZiAoZnNkIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZnNkLVx1MDAzZXNkX3JlZikpIHtcbiA0ODQ6XHRcdFx0cmhsdGFibGVfcmVtb3ZlKFx1MDAyNnN1cGVyX2Rldl90YWJsZSwgXHUwMDI2ZnNkLVx1MDAzZXNkX25vZGUsIHN1cGVyX2Rldl9wYXJhbXMpO1xuIDQ4NTpcdFx0XHRwdXRfc3VwZXIoZnNkLVx1MDAzZXNkX3NiKTtcbiA0ODY6XHRcdFx0a2ZyZWVfcmN1KGZzZCwgc2RfcmN1KTtcbiA0ODc6XHRcdH1cbiA0ODg6XHR9XG4gNDg5Olx0XG4gNDkwOlx0dm9pZCBfX2luaXQgc3VwZXJfZGV2X2luaXQodm9pZClcbiA0OTE6XHR7XG4gNDkyOlx0XHRpZiAocmhsdGFibGVfaW5pdChcdTAwMjZzdXBlcl9kZXZfdGFibGUsIFx1MDAyNnN1cGVyX2Rldl9wYXJhbXMpKVxuIDQ5MzpcdFx0XHRwYW5pYyhcJiMzNDtWRlM6IENhbm5vdCBpbml0aWFsaXNlIHN1cGVyX2Rldl90YWJsZVxcblwmIzM0Oyk7XG4gNDk0Olx0fVxuIDQ5NTpcdFxuIDQ5NjpcdHN0YXRpYyBpbnQgc3VwZXJfZGV2X2luc2VydChzdHJ1Y3Qgc3VwZXJfZGV2ICpmc2QpXG4gNDk3Olx0e1xuIDQ5ODpcdFx0aW50IGVycjtcbiA0OTk6XHRcbiA1MDA6XHRcdGVyciA9IHJobHRhYmxlX2luc2VydChcdTAwMjZzdXBlcl9kZXZfdGFibGUsIFx1MDAyNmZzZC1cdTAwM2VzZF9ub2RlLCBzdXBlcl9kZXZfcGFyYW1zKTtcbiA1MDE6XHRcdGlmICghZXJyKVxuIDUwMjpcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2ZnNkLVx1MDAzZXNkX3NiLVx1MDAzZXNfcGFzc2l2ZSk7XG4gNTAzOlx0XHRyZXR1cm4gZXJyO1xuIDUwNDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2Ugc2VjdGlvbnMsIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyB1bmRlcnN0YW5kcyBrZXJuZWwgY29kZToKCioqQW5hbHl6aW5nIGBmcy9zdXBlci5jYCBTZWN0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgZnMvc3VwZXIuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBsaW5lcyA1NTAgdGhyb3VnaCA2MjAgYW5kIHRoZW4ganVtcGluZyBhaGVhZCB0byBsaW5lcyA4NjAgdGhyb3VnaCA5MjAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0aWVzIGJlaW5nIGRpc2N1c3NlZCBpbiB0aG9zZSByYW5nZXMuIEdpdmVuIHRoZSBmaWxlIGFuZCB0aGVzZSBsaW5lIG51bWJlcnMsIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgSSYjMzk7bGwgZmluZCBjb2RlIHJlbGF0ZWQgdG8gc3VwZXJibG9jayBvcGVyYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBnZXQgYW4gb3ZlcnZpZXcgb2YgaG93IHRoZSBzdXBlcmJsb2NrIGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkLCBwb3RlbnRpYWxseSBjb3ZlcmluZyBhc3BlY3RzIGxpa2UgcmVhZGluZyBpdCBmcm9tIGRpc2ssIHZhbGlkYXRpbmcgaXRzIGNvbnRlbnRzLCBhbmQgYW55IGFzc29jaWF0ZWQgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIHJlZ2FyZGluZyBkaWZmZXJlbnQgZmlsZXN5c3RlbSB0eXBlcy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZCwgc2luY2UgYGZzL3N1cGVyLmNgIGlzIHRoZSBjb3JlIG9mIGhvdyBmaWxlc3lzdGVtcyBhcmUgbW91bnRlZCBhbmQgbWFuYWdlZC4gSSBuZWVkIHRvIGJlIHN1cmUgYW55IGxvY2tpbmcgaXMgdXNlZCBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29kZSBkZWFscyB3aXRoIHNwZWNpZmljIHN1cGVyYmxvY2sgb3BlcmF0aW9ucywgYW5kIGlmIHNvLCBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaG9va2VkIGludG8gdGhlIGdlbmVyaWMgVkZTIGZyYW1ld29yay4gQW55IGludGVyYWN0aW9ucyB3aXRoIHVuZGVybHlpbmcgZGV2aWNlIGRyaXZlcnMgb3IgYmxvY2sgbGF5ZXIgY29tcG9uZW50cyB3aWxsIGJlIGNyaXRpY2FsLgoKRnVydGhlcm1vcmUsIEkmIzM5O20gYW50aWNpcGF0aW5nIHBvdGVudGlhbCBkaXNjdXNzaW9ucyBvZiBmaWxlc3lzdGVtLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIG9yIGRhdGEgc3RydWN0dXJlcywgZXNwZWNpYWxseSBpZiB0aG9zZSBsaW5lcyBjb3ZlciBhc3BlY3RzIGxpa2Ugc2V0dGluZyB1cCB0aGUgcm9vdCBpbm9kZSBvciBtYW5hZ2luZyB0aGUgZnJlZSBzcGFjZSBvbiB0aGUgZmlsZXN5c3RlbS4gSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMgc3VwZXJibG9jayBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcywgYW5kIGhvdyB0aGV5IHdvdWxkIGJlIHJlc29sdmVkIG9yIGxvZ2dlZC4gSSBhbHNvIG1pZ2h0IHNlZSBhbiBhbmFseXNpcyBvZiBob3cgbWV0YWRhdGEgaXMgaGFuZGxlZCBhbmQgdHJhY2tlZC4gSSYjMzk7bGwgYWxzbyB0cnkgdG8gdHJhY2sgaG93IHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBvbi1kaXNrIGZvcm1hdCBpcyBkZWZpbmVkIGFuZCB1dGlsaXplZCBpbiB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NTA6XHRcdHNiX2RldiA9IHN1cGVyX2Rldl9nZXQocmN1X2RlcmVmZXJlbmNlX2FsbChwcmV2LVx1MDAzZXNkX25vZGUubmV4dCkpO1xuIDU1MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNTUyOlx0XG4gNTUzOlx0XHRzdXBlcl9kZXZfcHV0KHByZXYpO1xuIDU1NDpcdFx0cmV0dXJuIHNiX2RldjtcbiA1NTU6XHR9XG4gNTU2Olx0XG4gNTU3Olx0c3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiA1NTg6XHR7XG4gNTU5Olx0XHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcdTAwMjZzYi1cdTAwM2VzX3Vtb3VudCk7XG4gNTYwOlx0XG4gNTYxOlx0XHQvKiBhbHJlYWR5IG5vdGlmaWVkIGVhcmxpZXIgKi9cbiA1NjI6XHRcdGlmIChzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9ERUFEKVxuIDU2MzpcdFx0XHRyZXR1cm47XG4gNTY0Olx0XG4gNTY1Olx0XHQvKiBEcm9wIHNnZXRfZmMoKSYjMzk7cyBjbGFpbTsgYSBuZXZlci1yZWdpc3RlcmVkIGVudHJ5IHN0YXlzIHdpdGggdGhlIHNiLiAqL1xuIDU2NjpcdFx0aWYgKHNiLVx1MDAzZXNfc3VwZXJfZGV2LVx1MDAzZXNkX2Rldikge1xuIDU2NzpcdFx0XHRzdXBlcl9kZXZfcHV0KHNiLVx1MDAzZXNfc3VwZXJfZGV2KTtcbiA1Njg6XHRcdFx0c2ItXHUwMDNlc19zdXBlcl9kZXYgPSBOVUxMO1xuIDU2OTpcdFx0fVxuIDU3MDpcdFxuIDU3MTpcdFx0LypcbiA1NzI6XHRcdCAqIExldCBjb25jdXJyZW50IG1vdW50cyBrbm93IHRoYXQgdGhpcyB0aGluZyBpcyByZWFsbHkgZGVhZC5cbiA1NzM6XHRcdCAqIHNnZXRfZmMoKSBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGFuZCBjYWxscyB0ZXN0KCkgdW5kZXJcbiA1NzQ6XHRcdCAqIHNiX2xvY2ssIHNvIHNldCBpdCB1bmRlciBzYl9sb2NrOiBvbmNlIHdlIHJldHVybiBubyB0ZXN0KClcbiA1NzU6XHRcdCAqIHJ1bnMgb24gdGhpcyBzdXBlcmJsb2NrIGFueW1vcmUgYW5kIG5vbmUgd2lsbCBzdGFydC4gRXZlcnlvbmVcbiA1NzY6XHRcdCAqIGVsc2UgYWxyZWFkeSBzYXcgU0JfRFlJTkcgYW5kIGVpdGhlciBkaXNjYXJkZWQgdGhlIHN1cGVyYmxvY2tcbiA1Nzc6XHRcdCAqIG9yIHdhaXRzIGZvciBTQl9ERUFELlxuIDU3ODpcdFx0ICovXG4gNTc5Olx0XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4gNTgwOlx0XHRzdXBlcl93YWtlKHNiLCBTQl9ERUFEKTtcbiA1ODE6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuIDU4MjpcdH1cbiA1ODM6XHRcbiA1ODQ6XHQvKipcbiA1ODU6XHQgKlx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJcdC1cdGRyb3AgYW4gYWN0aXZlIHJlZmVyZW5jZSB0byBzdXBlcmJsb2NrXG4gNTg2Olx0ICpcdEBzOiBzdXBlcmJsb2NrIHRvIGRlYWN0aXZhdGVcbiA1ODc6XHQgKlxuIDU4ODpcdCAqXHREcm9wcyBhbiBhY3RpdmUgcmVmZXJlbmNlIHRvIHN1cGVyYmxvY2ssIGNvbnZlcnRpbmcgaXQgaW50byBhIHRlbXBvcmFyeVxuIDU4OTpcdCAqXHRvbmUgaWYgdGhlcmUgaXMgbm8gb3RoZXIgYWN0aXZlIHJlZmVyZW5jZXMgbGVmdC4gIEluIHRoYXQgY2FzZSB3ZVxuIDU5MDpcdCAqXHR0ZWxsIGZzIGRyaXZlciB0byBzaHV0IGl0IGRvd24gYW5kIGRyb3AgdGhlIHRlbXBvcmFyeSByZWZlcmVuY2Ugd2VcbiA1OTE6XHQgKlx0aGFkIGp1c3QgYWNxdWlyZWQuXG4gNTkyOlx0ICpcbiA1OTM6XHQgKlx0Q2FsbGVyIGhvbGRzIGV4Y2x1c2l2ZSBsb2NrIG9uIHN1cGVyYmxvY2s7IHRoYXQgbG9jayBpcyByZWxlYXNlZC5cbiA1OTQ6XHQgKi9cbiA1OTU6XHR2b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbiA1OTY6XHR7XG4gNTk3Olx0XHRzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnMgPSBzLVx1MDAzZXNfdHlwZTtcbiA1OTg6XHRcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnMtXHUwMDNlc19hY3RpdmUpKSB7XG4gNTk5Olx0XHRcdHNocmlua2VyX2ZyZWUocy1cdTAwM2VzX3Nocmluayk7XG4gNjAwOlx0XHRcdGZzLVx1MDAzZWtpbGxfc2Iocyk7XG4gNjAxOlx0XG4gNjAyOlx0XHRcdGtpbGxfc3VwZXJfbm90aWZ5KHMpO1xuIDYwMzpcdFxuIDYwNDpcdFx0XHQvKiBsaXN0X2xydV9kZXN0cm95KCkgbWF5IHNsZWVwOyBwdXRfc3VwZXIoKSBjYWxsZXJzIG1heSBub3QuICovXG4gNjA1Olx0XHRcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2cy1cdTAwM2VzX2RlbnRyeV9scnUpO1xuIDYwNjpcdFx0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNnMtXHUwMDNlc19pbm9kZV9scnUpO1xuIDYwNzpcdFxuIDYwODpcdFx0XHRwdXRfc3VwZXIocyk7XG4gNjA5Olx0XHR9IGVsc2Uge1xuIDYxMDpcdFx0XHRzdXBlcl91bmxvY2tfZXhjbChzKTtcbiA2MTE6XHRcdH1cbiA2MTI6XHR9XG4gNjEzOlx0XG4gNjE0Olx0RVhQT1JUX1NZTUJPTChkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcik7XG4gNjE1Olx0XG4gNjE2Olx0LyoqXG4gNjE3Olx0ICpcdGRlYWN0aXZhdGVfc3VwZXJcdC1cdGRyb3AgYW4gYWN0aXZlIHJlZmVyZW5jZSB0byBzdXBlcmJsb2NrXG4gNjE4Olx0ICpcdEBzOiBzdXBlcmJsb2NrIHRvIGRlYWN0aXZhdGVcbiA2MTk6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjg3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGF0IHNlY3Rpb24gb2YgYGZzL3N1cGVyLmNgLgoKKipEaXZpbmcgaW50byB0aGUgU3VwZXJibG9jayBDb2RlKioKCkFscmlnaHQsIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gbGluZXMgODYwIHRvIDkzNSBvZiBgZnMvc3VwZXIuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHN1cGVyYmxvY2sgaGFuZGxpbmcgaXMgdGFraW5nIHBsYWNlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHN1cGVyYmxvY2sgaW5pdGlhbGl6YXRpb24sIG1vdW50aW5nLCB1bm1vdW50aW5nLCBhbmQgcG9zc2libHkgc29tZSBtYW5hZ2VtZW50IG9mIHRoZSBzdXBlcmJsb2NrJiMzOTtzIGluLW1lbW9yeSByZXByZXNlbnRhdGlvbi4gSSBrbm93IHRoaXMgYXJlYSBpbnRpbWF0ZWx5LCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgdGhlIG1haW4gZnVuY3Rpb25zIGNhbGxlZC4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGJlaW5nIHVzZWQuIEkgd2lsbCBiZSBsb29raW5nIG91dCBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgaG93IHRoZSBzdXBlcmJsb2NrIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBvciBzdG9yYWdlLiBBbnkgaW50ZXJlc3RpbmcgbG9ja2luZyBtZWNoYW5pc21zIHdpbGwgYmUgb2YgcGFydGljdWxhciBpbnRlcmVzdCwgZXNwZWNpYWxseSByZWFkLXdyaXRlIGxvY2tzIG9yIHNwaW5sb2NrcyB1c2VkIHRvIHByb3RlY3QgdGhlIHN1cGVyYmxvY2sgZGF0YS4gSSYjMzk7bSBob3BpbmcgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB0aGlzIGNvZGUgd2l0aCB0aGUgVkZTIGxheWVyLCBwYXJ0aWN1bGFybHkgaG93IHN1cGVyYmxvY2sgaW5mb3JtYXRpb24gaXMgY29tbXVuaWNhdGVkIHVwd2FyZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODYwOlx0XHRpbnQgZXJyO1xuIDg2MTpcdFxuIDg2MjpcdFx0LypcbiA4NjM6XHRcdCAqIE5ldmVyIGFsbG93IHNfdXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMgd2hlbiBGU19VU0VSTlNfTU9VTlQgb3JcbiA4NjQ6XHRcdCAqIEZTX1VTRVJOU19ERUxFR0FUQUJMRSBpcyBub3Qgc2V0LCBhcyB0aGUgZmlsZXN5c3RlbSBpcyBsaWtlbHlcbiA4NjU6XHRcdCAqIHVucHJlcGFyZWQgdG8gaGFuZGxlIGl0LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBmc2NvbmZpZygpIGlzIGNhbGxlZFxuIDg2NjpcdFx0ICogZnJvbSBpbml0X3VzZXJfbnMgd2l0aCBhbiBmc19mZCBvcGVuZWQgaW4gYW5vdGhlciB1c2VyIG5hbWVzcGFjZS5cbiA4Njc6XHRcdCAqL1xuIDg2ODpcdFx0aWYgKHVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zIFx1MDAyNlx1MDAyNlxuIDg2OTpcdFx0ICAgICEoZmMtXHUwMDNlZnNfdHlwZS1cdTAwM2Vmc19mbGFncyBcdTAwMjYgKEZTX1VTRVJOU19NT1VOVCB8IEZTX1VTRVJOU19ERUxFR0FUQUJMRSkpKSB7XG4gODcwOlx0XHRcdGVycm9yZmMoZmMsIFwmIzM0O1ZGUzogTW91bnRpbmcgZnJvbSBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZSBpcyBub3QgYWxsb3dlZFwmIzM0Oyk7XG4gODcxOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FUEVSTSk7XG4gODcyOlx0XHR9XG4gODczOlx0XG4gODc0Olx0cmV0cnk6XG4gODc1Olx0XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4gODc2Olx0XHRpZiAodGVzdCkge1xuIDg3NzpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShvbGQsIFx1MDAyNmZjLVx1MDAzZWZzX3R5cGUtXHUwMDNlZnNfc3VwZXJzLCBzX2luc3RhbmNlcykge1xuIDg3ODpcdFx0XHRcdC8qIE9ubHkgdW5saW5rZWQgYXQgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UuICovXG4gODc5Olx0XHRcdFx0aWYgKHN1cGVyX2ZsYWdzKG9sZCwgU0JfREVBRCkpXG4gODgwOlx0XHRcdFx0XHRjb250aW51ZTtcbiA4ODE6XHRcdFx0XHRpZiAodGVzdChvbGQsIGZjKSlcbiA4ODI6XHRcdFx0XHRcdGdvdG8gc2hhcmVfZXh0YW50X3NiO1xuIDg4MzpcdFx0XHR9XG4gODg0Olx0XHR9XG4gODg1Olx0XHRpZiAoIXMpIHtcbiA4ODY6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4gODg3Olx0XG4gODg4Olx0XHRcdHMgPSBhbGxvY19zdXBlcihmYy1cdTAwM2Vmc190eXBlLCBmYy1cdTAwM2VzYl9mbGFncywgdXNlcl9ucyk7XG4gODg5Olx0XHRcdGlmICghcylcbiA4OTA6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiA4OTE6XHRcdFx0Z290byByZXRyeTtcbiA4OTI6XHRcdH1cbiA4OTM6XHRcbiA4OTQ6XHRcdHMtXHUwMDNlc19mc19pbmZvID0gZmMtXHUwMDNlc19mc19pbmZvO1xuIDg5NTpcdFx0ZXJyID0gc2V0KHMsIGZjKTtcbiA4OTY6XHRcdGlmIChlcnIpIHtcbiA4OTc6XHRcdFx0VkZTX1dBUk5fT05fT05DRShzLVx1MDAzZXNfc3VwZXJfZGV2LVx1MDAzZXNkX2Rldik7XG4gODk4Olx0XHRcdHMtXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbiA4OTk6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4gOTAwOlx0XHRcdGRlc3Ryb3lfdW51c2VkX3N1cGVyKHMpO1xuIDkwMTpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIDkwMjpcdFx0fVxuIDkwMzpcdFx0VkZTX1dBUk5fT05fT05DRSghcy1cdTAwM2VzX3N1cGVyX2Rldi1cdTAwM2VzZF9kZXYpO1xuIDkwNDpcdFx0ZmMtXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbiA5MDU6XHRcdHMtXHUwMDNlc190eXBlID0gZmMtXHUwMDNlZnNfdHlwZTtcbiA5MDY6XHRcdHMtXHUwMDNlc19pZmxhZ3MgfD0gZmMtXHUwMDNlc19pZmxhZ3M7XG4gOTA3Olx0XHRzdHJzY3B5KHMtXHUwMDNlc19pZCwgcy1cdTAwM2VzX3R5cGUtXHUwMDNlbmFtZSwgc2l6ZW9mKHMtXHUwMDNlc19pZCkpO1xuIDkwODpcdFx0LypcbiA5MDk6XHRcdCAqIE1ha2UgdGhlIHN1cGVyYmxvY2sgdmlzaWJsZSBvbiBAc3VwZXJfYmxvY2tzIGFuZCBAZnNfc3VwZXJzLlxuIDkxMDpcdFx0ICogSXQmIzM5O3MgaW4gYSBuYXNjZW50IHN0YXRlIGFuZCB1c2VycyBzaG91bGQgd2FpdCBvbiBTQl9CT1JOIG9yXG4gOTExOlx0XHQgKiBTQl9EWUlORyB0byBiZSBzZXQuXG4gOTEyOlx0XHQgKi9cbiA5MTM6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cy1cdTAwM2VzX2xpc3QsIFx1MDAyNnN1cGVyX2Jsb2Nrcyk7XG4gOTE0Olx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZzLVx1MDAzZXNfaW5zdGFuY2VzLCBcdTAwMjZzLVx1MDAzZXNfdHlwZS1cdTAwM2Vmc19zdXBlcnMpO1xuIDkxNTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4gOTE2Olx0XHRnZXRfZmlsZXN5c3RlbShzLVx1MDAzZXNfdHlwZSk7XG4gOTE3Olx0XHRzaHJpbmtlcl9yZWdpc3RlcihzLVx1MDAzZXNfc2hyaW5rKTtcbiA5MTg6XHRcdHJldHVybiBzO1xuIDkxOTpcdFxuIDkyMDpcdHNoYXJlX2V4dGFudF9zYjpcbiA5MjE6XHRcdGlmICh1c2VyX25zICE9IG9sZC1cdTAwM2VzX3VzZXJfbnMgfHwgZmMtXHUwMDNlZXhjbHVzaXZlKSB7XG4gOTIyOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuIDkyMzpcdFx0XHRkZXN0cm95X3VudXNlZF9zdXBlcihzKTtcbiA5MjQ6XHRcdFx0aWYgKGZjLVx1MDAzZWV4Y2x1c2l2ZSlcbiA5MjU6XHRcdFx0XHR3YXJuZmMoZmMsIFwmIzM0O3JldXNpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbSBub3QgYWxsb3dlZFwmIzM0Oyk7XG4gOTI2Olx0XHRcdGVsc2VcbiA5Mjc6XHRcdFx0XHR3YXJuZmMoZmMsIFwmIzM0O3JldXNpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbSBpbiBhbm90aGVyIG5hbWVzcGFjZSBub3QgYWxsb3dlZFwmIzM0Oyk7XG4gOTI4Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FQlVTWSk7XG4gOTI5Olx0XHR9XG4gOTMwOlx0XHRpZiAoIWdyYWJfc3VwZXIob2xkKSlcbiA5MzE6XHRcdFx0Z290byByZXRyeTtcbiA5MzI6XHRcdGRlc3Ryb3lfdW51c2VkX3N1cGVyKHMpO1xuIDkzMzpcdFx0cmV0dXJuIG9sZDtcbiA5MzQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODE2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgY29tbWl0IGhpc3RvcnkgdXNpbmcgYGdpdCBsb2dgLCBvciBhdCBsZWFzdCBjaGVjayB0aGUgY29tbWl0IGNvbnRleHQgaWYgYSBkaXJlY3QgdG9vbCBpc24mIzM5O3QgYXZhaWxhYmxlLiBVbmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UgaXMgY3J1Y2lhbC4KCkFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgZnMva2VybmZzL21vdW50LmNgIGFuZCBgZnMvc3VwZXIuY2AuIFRoYXQmIzM5O3MgYWxyZWFkeSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSB0aGUgbGF0dGVyLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYGZzL3N1cGVyLmNgIGNoYW5nZXM6CgoxLiAgKipgcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylgKio6IFRoZSBvcmlnaW5hbCBjb2RlIHBsYWNlZCBgaGxpc3RfZGVsX2luaXQoJmFtcDtzYi0mZ3Q7c19pbnN0YW5jZXMpYCBhbmQgYHB1dF9maWxlc3lzdGVtKHR5cGUpYCBpbiBga2lsbF9zdXBlcl9ub3RpZnkoKWAgYW5kIGBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcigpYC4gTm93LCB0aGVzZSBhcmUgbW92ZWQgdG8gYHB1dF9zdXBlcigpYCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zIHJlbGF0ZWQgdG8gcGFzc2l2ZSByZWZlcmVuY2UgY291bnRzLgoyLiAgKipga2lsbF9zdXBlcl9ub3RpZnkoKWAqKjogIFRoZSByZW1vdmFsIG9mIGBobGlzdF9kZWxfaW5pdGAgZnJvbSB0aGlzIGZ1bmN0aW9uIGlzIG5vdGV3b3J0aHkuIEl0IGFsc28gbG9va3MgbGlrZSBzZXR0aW5nIGBTQl9ERUFEYCBub3cgcmVxdWlyZXMgcHJvdGVjdGlvbiBmcm9tIGBzYl9sb2NrYCB3aGljaCBpcyBnb29kLgozLiAgKipgc2dldF9mYygpYCoqOiBUaGUgY2hhbmdlZCBjb25kaXRpb25hbCBmb3IgYGZzX3N1cGVyc2AgbGlzdCB0cmF2ZXJzYWwgaXMgYWxzbyB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGFzIGl0cyByZWxhdGVkIHRvIGZpbmRpbmcgZGVhZCBzdXBlcmJsb2Nrcy4KNC4gICoqYGtlcm5mc19raWxsX3NiKClgKio6ICBBIGNvbW1lbnQgdXBkYXRlIGhlcmUgaW5kaWNhdGVzIGEgY2hhbmdlIGluIHRoZSBzdXBlcmJsb2NrIHN0YXRlIHRvIG1hcmsgaXQgZGVhZC4KCkVzc2VudGlhbGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgaG93IHN1cGVyYmxvY2tzIGFyZSBtYW5hZ2VkIGFuZCBjbGVhbmVkIHVwLCBlc3BlY2lhbGx5IGluIGNvbmN1cnJlbnQgc2NlbmFyaW9zLiAgSXQmIzM5O3MgdG91Y2hpbmcgdGhlIGxpZmVjeWNsZSwgbG9ja2luZywgYW5kIGxpc3QgbWFuYWdlbWVudCBvZiB0aGVzZSBzdXBlcmJsb2Nrcy4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246ICoqV29ydGhGdXp6aW5nPyoqCgpEZWZpbml0ZWx5LiBgZnMvc3VwZXIuY2AgaXMgdGhlIGNvcmUgb2YgdGhlIFZGUyBzdXBlcmJsb2NrIGltcGxlbWVudGF0aW9uLiAgSXQmIzM5O3MgaW52b2x2ZWQgaW4gc3VwZXJibG9jayBsaWZlY3ljbGUsIGNvbmN1cnJlbnQgbW91bnRpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgbG9ja2luZywgYW5kIGxpc3Qgb3BlcmF0aW9ucyBvbiBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgdG91Y2hlcyBzdHVmZiBsaWtlIGBzZ2V0X2ZjKClgLCBgZ3JhYl9zdXBlcigpYCwgYHB1dF9zdXBlcigpYCwgYGtpbGxfc3VwZXJfbm90aWZ5KClgLCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpYCwgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKClgIHdoaWNoIEkgcmVndWxhcmx5IHVzZSwgc28gdGhpcyBsb29rcyBsaWtlIGhpZ2gtY29uY3VycmVuY3ksIGNyaXRpY2FsIFZGUyBjb3JlIGxvZ2ljLiAgSXQmIzM5O3MgbGlrZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGNvbW1vbiBzeXNjYWxscyBsaWtlIGBtb3VudGAsIGB1bW91bnRgLCBgZnNvcGVuYCwgYGZzbW91bnRgLCBgZnNjb25maWdgLCBldGMuIFllcywgdGhpcyBpcyBjb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZXJlZm9yZSBpcyBpbmRlZWQgd29ydGggZnV6emluZy4KCkZpbmFsbHksIHJlZ2FyZGluZyBgRW5hYmxlQ29uZmlnc2A6IGBmcy9zdXBlci5jYCBpcyBhbHdheXMgY29tcGlsZWQuIGBmcy9rZXJuZnMvbW91bnQuY2AgcmVxdWlyZXMgYENPTkZJR19LRVJORlNgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZnMvTWFrZWZpbGVgIGFuZCBgZnMva2VybmZzL01ha2VmaWxlYCAvIGBmcy9LY29uZmlnYCB0byBjb25maXJtIGFueSByZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2VybmZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9NTU9b2JqLSQoQ09ORklHX1BST0NfRlMpXHRcdCYjNDM7PSBwcm9jL1xuZnMvTWFrZWZpbGU6NTY6b2JqLSQoQ09ORklHX0tFUk5GUylcdFx0JiM0Mzs9IGtlcm5mcy9cbmZzL01ha2VmaWxlLTU3LW9iai0kKENPTkZJR19TWVNGUylcdFx0JiM0Mzs9IHN5c2ZzL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUwNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgZmlsZXN5c3RlbS1yZWxhdGVkIHRhc2sgSSYjMzk7bSB3b3JraW5nIG9uIGFyZSBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiBgZnMva2VybmZzL0tjb25maWdgIG9yLCBtb3JlIGJyb2FkbHksIGBmcy9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgY29udGFpbmluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhleSYjMzk7cmUgY2VudHJhbCB0byBob3cgd2UgbWFuYWdlIGFuZCBleHBvc2UgZmlsZXN5c3RlbS1zcGVjaWZpYyBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UgYW5kIHNlZSB3aGF0IEkgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtFUk5GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9rZXJuZnMvS2NvbmZpZy01LVxuZnMva2VybmZzL0tjb25maWc6Njpjb25maWcgS0VSTkZTXG5mcy9rZXJuZnMvS2NvbmZpZy03LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDczMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRmlsZXN5c3RlbSBTdXBlcmJsb2NrIEhhbmRsaW5nKioKCk9rYXksIHNvIEtFUk5GUyBpcyBhIGJvb2xlYW4gY29uZmlnIG9wdGlvbiwgc2VsZWN0ZWQgYnkgdGhlIGxpa2VzIG9mIFNZU0ZTIGFuZCBDR1JPVVBTLCBidXQgYGZzL3N1cGVyLmNgIGlzIGFsd2F5cyBjb21waWxlZCBpbiDigJMgaXQmIzM5O3MgdW5jb25kaXRpb25hbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIsIGJ1dCBpdCBzZWVtcyBsaWtlIGBmcy9zdXBlci5jYCBpcyBjb3JlIFZGUywgYWx3YXlzIGluY2x1ZGVkIGluIGB2bWxpbnV4YC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGBGb2N1c1N5bWJvbHNgIGZvciB0aGlzIGFuYWx5c2lzLiBJIGhhdmUgdG8gYXZvaWQgdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyB0aGUgdWJpcXVpdG91cyBmdW5jdGlvbnMgYW5kIGhvdCBwYXRocyB0aGF0IGFyZSBjYWxsZWQgYnkgcHJhY3RpY2FsbHkgZXZlcnl0aGluZy4gSW5zdGVhZCwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgKnNwZWNpZmljYWxseSogaW1wbGVtZW50IHRoZSBjaGFuZ2VkIGxvZ2ljIG9yIGFjdCBhcyBBUEkgZW50cnkgcG9pbnRzIGZvciB0aGlzIHBhcnRpY3VsYXIgc3Vic3lzdGVtLgoKTG9va2luZyBhdCB0aGUgcGF0Y2gsIEkgc2VlIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9uczoKCjEuICBgc2dldF9mY2A6IEl0JiMzOTtzIHN1cHBvc2VkIHRvIGZpbmQgb3IgY3JlYXRlIGEgc3VwZXJibG9jayB1c2luZyBgZnNfY29udGV4dGAsIGFuZCB0aGUgbG9naWMgc2VlbXMgdG8gc2tpcCBkZWFkIHN1cGVyYmxvY2tzLgoyLiAgYGtpbGxfc3VwZXJfbm90aWZ5YDogVGhpcyBpcyBhIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBmb3Igc3VwZXJibG9jayB0ZWFyZG93bi4gSXQmIzM5O3MgbW9kaWZpZWQgd2l0aCBgc3VwZXJfd2FrZShzYiwgU0JfREVBRClgLiBJdCYjMzk7cyBzdGF0aWMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgbm90IGlubGluZWQuCjMuICBgcHV0X3N1cGVyYDogQSBub24tc3RhdGljIGZ1bmN0aW9uIGluIGBmcy9zdXBlci5jYC4gSXQmIzM5O3MgZGVjbGFyZWQgc29tZXdoZXJlIGluIGBpbmNsdWRlL2xpbnV4L2ZzLmhgIG9yIGBmcy9pbnRlcm5hbC5oYCwgc28gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQuCjQuICBgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJgOiBBbm90aGVyIG5vbi1zdGF0aWMgZXhwb3J0ZWQgZnVuY3Rpb24gaW4gYGZzL3N1cGVyLmNgLgo1LiAgYGdlbmVyaWNfc2h1dGRvd25fc3VwZXJgOiBBbHNvIGEgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbiBpbiBgZnMvc3VwZXIuY2AuIFRoaXMgaXMgcGFydCBvZiB0aGUgc2h1dGRvd24gcGF0aC4KNi4gIGBrZXJuZnNfa2lsbF9zYmA6IE5vbi1zdGF0aWMsIGJ1dCBpbiBgZnMva2VybmZzL21vdW50LmNgLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNhbGxlcnMgYW5kIGRlY2xhcmF0aW9ucyBvZiB0aGVzZSBzeW1ib2xzIHRvIGNvbmZpcm0gd2hpY2ggYXJlIHZhbGlkLCBub24tdWJpcXVpdG91cyBzeW1ib2xzIHdpdGhpbiB0aGUgdm1saW51eCBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B1dF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjIzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5mcy9hZGZzL3N1cGVyLmM9NTQ9c3RhdGljIGludCBhZGZzX2NoZWNrZGlzY3JlY29yZChzdHJ1Y3QgYWRmc19kaXNjcmVjb3JkICpkcilcbi0tXG5mcy9hZGZzL3N1cGVyLmMtOTItXG5mcy9hZGZzL3N1cGVyLmM6OTM6c3RhdGljIHZvaWQgYWRmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2FkZnMvc3VwZXIuYy05NC17XG4tLVxuZnMvYWRmcy9zdXBlci5jPTI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYWRmc19zb3BzID0ge1xuLS1cbmZzL2FkZnMvc3VwZXIuYy0yNDgtXHQud3JpdGVfaW5vZGVcdD0gYWRmc193cml0ZV9pbm9kZSxcbmZzL2FkZnMvc3VwZXIuYzoyNDk6XHQucHV0X3N1cGVyXHQ9IGFkZnNfcHV0X3N1cGVyLFxuZnMvYWRmcy9zdXBlci5jLTI1MC1cdC5zdGF0ZnNcdFx0PSBhZGZzX3N0YXRmcyxcbi0tXG5mcy9hZmZzL3N1cGVyLmM9NDk9c3RhdGljIHZvaWRcbmZzL2FmZnMvc3VwZXIuYzo1MDphZmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYWZmcy9zdXBlci5jLTUxLXtcbi0tXG5mcy9hZmZzL3N1cGVyLmM9MTUwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZmZzX3NvcHMgPSB7XG4tLVxuZnMvYWZmcy9zdXBlci5jLTE1NC1cdC5ldmljdF9pbm9kZVx0PSBhZmZzX2V2aWN0X2lub2RlLFxuZnMvYWZmcy9zdXBlci5jOjE1NTpcdC5wdXRfc3VwZXJcdD0gYWZmc19wdXRfc3VwZXIsXG5mcy9hZmZzL3N1cGVyLmMtMTU2LVx0LnN5bmNfZnNcdD0gYWZmc19zeW5jX2ZzLFxuLS1cbmZzL2JlZnMvQ2hhbmdlTG9nPTE3Nj1WZXJzaW9uIDAuNDUgKDIwMDEtMTAtMjkpXG4tLVxuZnMvYmVmcy9DaGFuZ2VMb2ctMTgzLVx0c3RydWN0dXJlcyBpbnRvIHRoZSBnZW5lcmljIHBvaW50ZXIgZmllbGRzIG9mIHRoZSBwdWJsaWMgc3RydWN0dXJlcyBcbmZzL2JlZnMvQ2hhbmdlTG9nOjE4NDpcdHdpdGgga21hbGxvYygpLiBwdXRfc3VwZXIgYW5kIHB1dF9pbm9kZSBmcmVlIHRoZW0uIFRoaXMgYWxsb3dzIHVzIG5vdCBcbmZzL2JlZnMvQ2hhbmdlTG9nLTE4NS1cdHRvIGhhdmUgdG8gdG91Y2ggdGhlIGRlZmluaXRpb25zIG9mIHRoZSBwdWJsaWMgc3RydWN0dXJlcyBpbiBcbi0tXG5mcy9iZWZzL2xpbnV4dmZzLmM9NTY9c3RhdGljIGludCBiZWZzX25sczJ1dGYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqaW4sIGludCBpbl9sZW4sXG5mcy9iZWZzL2xpbnV4dmZzLmMtNTctXHRcdFx0Y2hhciAqKm91dCwgaW50ICpvdXRfbGVuKTtcbmZzL2JlZnMvbGludXh2ZnMuYzo1ODpzdGF0aWMgdm9pZCBiZWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG5mcy9iZWZzL2xpbnV4dmZzLmMtNTktc3RhdGljIGludCBiZWZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdGZzICopO1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYz02OD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmVmc19zb3BzID0ge1xuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy03MC1cdC5mcmVlX2lub2RlXHQ9IGJlZnNfZnJlZV9pbm9kZSwgLyogZGVhbGxvY2F0ZSBhbiBpbm9kZSAqL1xuZnMvYmVmcy9saW51eHZmcy5jOjcxOlx0LnB1dF9zdXBlclx0PSBiZWZzX3B1dF9zdXBlcixcdC8qIHVuaW5pdCBzdXBlciAqL1xuZnMvYmVmcy9saW51eHZmcy5jLTcyLVx0LnN0YXRmc1x0XHQ9IGJlZnNfc3RhdGZzLFx0Lyogc3RhdGZzICovXG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTc0OD1zdGF0aWMgdm9pZFxuZnMvYmVmcy9saW51eHZmcy5jOjc0OTpiZWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYmVmcy9saW51eHZmcy5jLTc1MC17XG4tLVxuZnMvYmZzL2lub2RlLmM9MTk1PXN0YXRpYyB2b2lkIGJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2Jmcy9pbm9kZS5jLTI0Mi1cbmZzL2Jmcy9pbm9kZS5jOjI0MzpzdGF0aWMgdm9pZCBiZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbmZzL2Jmcy9pbm9kZS5jLTI0NC17XG4tLVxuZnMvYmZzL2lub2RlLmM9MzE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBiZnNfc29wcyA9IHtcbi0tXG5mcy9iZnMvaW5vZGUuYy0zMjMtXHQuZXZpY3RfaW5vZGVcdD0gYmZzX2V2aWN0X2lub2RlLFxuZnMvYmZzL2lub2RlLmM6MzI0Olx0LnB1dF9zdXBlclx0PSBiZnNfcHV0X3N1cGVyLFxuZnMvYmZzL2lub2RlLmMtMzI1LVx0LnN0YXRmc1x0XHQ9IGJmc19zdGF0ZnMsXG4tLVxuZnMvYnRyZnMvc3VwZXIuYz02OT1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYnRyZnNfZnNfdHlwZTtcbmZzL2J0cmZzL3N1cGVyLmMtNzAtXG5mcy9idHJmcy9zdXBlci5jOjcxOnN0YXRpYyB2b2lkIGJ0cmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYnRyZnMvc3VwZXIuYy03Mi17XG4tLVxuZnMvYnRyZnMvc3VwZXIuYz0yNTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBidHJmc19zdXBlcl9vcHMgPSB7XG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0yNTI4LVx0LmV2aWN0X2lub2RlXHQ9IGJ0cmZzX2V2aWN0X2lub2RlLFxuZnMvYnRyZnMvc3VwZXIuYzoyNTI5Olx0LnB1dF9zdXBlclx0PSBidHJmc19wdXRfc3VwZXIsXG5mcy9idHJmcy9zdXBlci5jLTI1MzAtXHQuc3luY19mc1x0PSBidHJmc19zeW5jX2ZzLFxuLS1cbmZzL2NlcGgvc3VwZXIuYz0zOD1zdGF0aWMgTElTVF9IRUFEKGNlcGhfZnNjX2xpc3QpO1xuLS1cbmZzL2NlcGgvc3VwZXIuYy00OC0gKi9cbmZzL2NlcGgvc3VwZXIuYzo0OTpzdGF0aWMgdm9pZCBjZXBoX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG5mcy9jZXBoL3N1cGVyLmMtNTAte1xuLS1cbmZzL2NlcGgvc3VwZXIuYz0xMDQ4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBjZXBoX3N1cGVyX29wcyA9IHtcbi0tXG5mcy9jZXBoL3N1cGVyLmMtMTA1NC1cdC5zeW5jX2ZzICAgICAgICA9IGNlcGhfc3luY19mcyxcbmZzL2NlcGgvc3VwZXIuYzoxMDU1Olx0LnB1dF9zdXBlclx0PSBjZXBoX3B1dF9zdXBlcixcbmZzL2NlcGgvc3VwZXIuYy0xMDU2LVx0LnNob3dfb3B0aW9ucyAgID0gY2VwaF9zaG93X29wdGlvbnMsXG4tLVxuZnMvY29kYS9pbm9kZS5jPTM5PXN0YXRpYyB2b2lkIGNvZGFfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopO1xuZnMvY29kYS9pbm9kZS5jOjQwOnN0YXRpYyB2b2lkIGNvZGFfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcbmZzL2NvZGEvaW5vZGUuYy00MS1zdGF0aWMgaW50IGNvZGFfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7XG4tLVxuZnMvY29kYS9pbm9kZS5jPTEwMD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY29kYV9zdXBlcl9vcGVyYXRpb25zID1cbi0tXG5mcy9jb2RhL2lub2RlLmMtMTA0LVx0LmV2aWN0X2lub2RlXHQ9IGNvZGFfZXZpY3RfaW5vZGUsXG5mcy9jb2RhL2lub2RlLmM6MTA1Olx0LnB1dF9zdXBlclx0PSBjb2RhX3B1dF9zdXBlcixcbmZzL2NvZGEvaW5vZGUuYy0xMDYtXHQuc3RhdGZzXHRcdD0gY29kYV9zdGF0ZnMsXG4tLVxuZnMvY29kYS9pbm9kZS5jPTE5OT1zdGF0aWMgaW50IGNvZGFfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvY29kYS9pbm9kZS5jLTI3Ny1cbmZzL2NvZGEvaW5vZGUuYzoyNzg6c3RhdGljIHZvaWQgY29kYV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2NvZGEvaW5vZGUuYy0yNzkte1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9OTQ2PXN0YXRpYyB2b2lkIGVyb2ZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTk1OS1cbmZzL2Vyb2ZzL3N1cGVyLmM6OTYwOnN0YXRpYyB2b2lkIGVyb2ZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXJvZnMvc3VwZXIuYy05NjEte1xuLS1cbmZzL2Vyb2ZzL3N1cGVyLmM9MTEzMj1jb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBlcm9mc19zb3BzID0ge1xuZnMvZXJvZnMvc3VwZXIuYzoxMTMzOlx0LnB1dF9zdXBlciA9IGVyb2ZzX3B1dF9zdXBlcixcbmZzL2Vyb2ZzL3N1cGVyLmMtMTEzNC1cdC5hbGxvY19pbm9kZSA9IGVyb2ZzX2FsbG9jX2lub2RlLFxuLS1cbmZzL2V4ZmF0L3N1cGVyLmM9MzQ9c3RhdGljIHZvaWQgZXhmYXRfc2V0X2lvY2hhcnNldChzdHJ1Y3QgZXhmYXRfbW91bnRfb3B0aW9ucyAqb3B0cyxcbi0tXG5mcy9leGZhdC9zdXBlci5jLTQzLVxuZnMvZXhmYXQvc3VwZXIuYzo0NDpzdGF0aWMgdm9pZCBleGZhdF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4ZmF0L3N1cGVyLmMtNDUte1xuLS1cbmZzL2V4ZmF0L3N1cGVyLmM9MjA2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleGZhdF9zb3BzID0ge1xuLS1cbmZzL2V4ZmF0L3N1cGVyLmMtMjEwLVx0LmV2aWN0X2lub2RlXHQ9IGV4ZmF0X2V2aWN0X2lub2RlLFxuZnMvZXhmYXQvc3VwZXIuYzoyMTE6XHQucHV0X3N1cGVyXHQ9IGV4ZmF0X3B1dF9zdXBlcixcbmZzL2V4ZmF0L3N1cGVyLmMtMjEyLVx0LnN0YXRmc1x0XHQ9IGV4ZmF0X3N0YXRmcyxcbi0tXG5mcy9leHQyL3N1cGVyLmM9MTY1PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQyX3F1b3RhX29mZl91bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQyL3N1cGVyLmMtMTY5LVxuZnMvZXh0Mi9zdXBlci5jOjE3MDpzdGF0aWMgdm9pZCBleHQyX3B1dF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpXG5mcy9leHQyL3N1cGVyLmMtMTcxLXtcbi0tXG5mcy9leHQyL3N1cGVyLmM9MzYxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQyX3NvcHMgPSB7XG4tLVxuZnMvZXh0Mi9zdXBlci5jLTM2Ni1cdC5ldmljdF9pbm9kZVx0PSBleHQyX2V2aWN0X2lub2RlLFxuZnMvZXh0Mi9zdXBlci5jOjM2NzpcdC5wdXRfc3VwZXJcdD0gZXh0Ml9wdXRfc3VwZXIsXG5mcy9leHQyL3N1cGVyLmMtMzY4LVx0LnN5bmNfZnNcdD0gZXh0Ml9zeW5jX2ZzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz0xMjY5PXN0YXRpYyB2b2lkIGV4dDRfZmxleF9ncm91cHNfZnJlZShzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTEyODEtXG5mcy9leHQ0L3N1cGVyLmM6MTI4MjpzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTEyODMte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNjc3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE2ODUtXHQuZXZpY3RfaW5vZGVcdD0gZXh0NF9ldmljdF9pbm9kZSxcbmZzL2V4dDQvc3VwZXIuYzoxNjg2Olx0LnB1dF9zdXBlclx0PSBleHQ0X3B1dF9zdXBlcixcbmZzL2V4dDQvc3VwZXIuYy0xNjg3LVx0LnN5bmNfZnNcdD0gZXh0NF9zeW5jX2ZzLFxuLS1cbmZzL2YyZnMvZjJmcy5oPTUxMT1zdHJ1Y3QgZGlzY2FyZF9wb2xpY3kge1xuLS1cbmZzL2YyZnMvZjJmcy5oLTUyMC1cdGJvb2wgb3JkZXJlZDtcdFx0XHQvKiBpc3N1ZSBkaXNjYXJkIGJ5IGxiYSBvcmRlciAqL1xuZnMvZjJmcy9mMmZzLmg6NTIxOlx0Ym9vbCB0aW1lb3V0O1x0XHRcdC8qIGRpc2NhcmQgdGltZW91dCBmb3IgcHV0X3N1cGVyICovXG5mcy9mMmZzL2YyZnMuaC01MjItXHR1bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHk7XHQvKiBkaXNjYXJkIGdyYW51bGFyaXR5ICovXG4tLVxuZnMvZjJmcy9zaHJpbmtlci5jPTQwPXVuc2lnbmVkIGxvbmcgZjJmc19zaHJpbmtfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxuZnMvZjJmcy9zaHJpbmtlci5jLTUxLVxuZnMvZjJmcy9zaHJpbmtlci5jOjUyOlx0XHQvKiBzdG9wIGYyZnNfcHV0X3N1cGVyICovXG5mcy9mMmZzL3Nocmlua2VyLmMtNTMtXHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZzYmktXHUwMDNldW1vdW50X211dGV4KSkge1xuLS1cbmZzL2YyZnMvc2hyaW5rZXIuYz03OT11bnNpZ25lZCBsb25nIGYyZnNfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxuZnMvZjJmcy9zaHJpbmtlci5jLTk4LVxuZnMvZjJmcy9zaHJpbmtlci5jOjk5Olx0XHQvKiBzdG9wIGYyZnNfcHV0X3N1cGVyICovXG5mcy9mMmZzL3Nocmlua2VyLmMtMTAwLVx0XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2c2JpLVx1MDAzZXVtb3VudF9tdXRleCkpIHtcbi0tXG5mcy9mMmZzL3Nocmlua2VyLmM9MTM0PXVuc2lnbmVkIGludCBmMmZzX2RvbmF0ZV9maWxlcyh2b2lkKVxuLS1cbmZzL2YyZnMvc2hyaW5rZXIuYy0xNDQtXG5mcy9mMmZzL3Nocmlua2VyLmM6MTQ1Olx0XHQvKiBzdG9wIGYyZnNfcHV0X3N1cGVyICovXG5mcy9mMmZzL3Nocmlua2VyLmMtMTQ2LVx0XHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2c2JpLVx1MDAzZXVtb3VudF9tdXRleCkpIHtcbi0tXG5mcy9mMmZzL3Nocmlua2VyLmM9MjA1PXZvaWQgZjJmc19yZWNsYWltX2NhY2hlcyh1bnNpZ25lZCBpbnQgcmVjbGFpbV9jYWNoZXNfa2IpXG4tLVxuZnMvZjJmcy9zaHJpbmtlci5jLTIxNC1cbmZzL2YyZnMvc2hyaW5rZXIuYzoyMTU6XHRcdC8qIHN0b3AgZjJmc19wdXRfc3VwZXIgKi9cbmZzL2YyZnMvc2hyaW5rZXIuYy0yMTYtXHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZzYmktXHUwMDNldW1vdW50X211dGV4KSkge1xuLS1cbmZzL2YyZnMvc3VwZXIuYz0xOTk2PXN0YXRpYyB2b2lkIGRlc3Ryb3lfZGV2aWNlX2xpc3Qoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKVxuLS1cbmZzL2YyZnMvc3VwZXIuYy0yMDA5LVxuZnMvZjJmcy9zdXBlci5jOjIwMTA6c3RhdGljIHZvaWQgZjJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2YyZnMvc3VwZXIuYy0yMDExLXtcbi0tXG5mcy9mMmZzL3N1cGVyLmM9MzU5MT12b2lkIGYyZnNfcXVvdGFfb2ZmX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2YyZnMvc3VwZXIuYy0zNjA4LVx0ICogVGhpcyBjYW4gY2F1c2UgTlVMTCBleGNlcHRpb24gZm9yIG5vZGVfaW5vZGUgaW4gZW5kX2lvLCBzaW5jZVxuZnMvZjJmcy9zdXBlci5jOjM2MDk6XHQgKiBwdXRfc3VwZXIgYWxyZWFkeSBkcm9wcGVkIGl0LlxuZnMvZjJmcy9zdXBlci5jLTM2MTAtXHQgKi9cbi0tXG5mcy9mMmZzL3N1cGVyLmM9MzczMD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZjJmc19zb3BzID0ge1xuLS1cbmZzL2YyZnMvc3VwZXIuYy0zNzQyLVx0LmV2aWN0X2lub2RlXHQ9IGYyZnNfZXZpY3RfaW5vZGUsXG5mcy9mMmZzL3N1cGVyLmM6Mzc0MzpcdC5wdXRfc3VwZXJcdD0gZjJmc19wdXRfc3VwZXIsXG5mcy9mMmZzL3N1cGVyLmMtMzc0NC1cdC5zeW5jX2ZzXHQ9IGYyZnNfc3luY19mcyxcbi0tXG5mcy9mYXQvaW5vZGUuYz03NjE9c3RhdGljIHZvaWQgZGVsYXllZF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcClcbi0tXG5mcy9mYXQvaW5vZGUuYy03NjktXG5mcy9mYXQvaW5vZGUuYzo3NzA6c3RhdGljIHZvaWQgZmF0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZmF0L2lub2RlLmMtNzcxLXtcbi0tXG5mcy9mYXQvaW5vZGUuYz05Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGZhdF9zb3BzID0ge1xuLS1cbmZzL2ZhdC9pbm9kZS5jLTk3NC1cdC5ldmljdF9pbm9kZVx0PSBmYXRfZXZpY3RfaW5vZGUsXG5mcy9mYXQvaW5vZGUuYzo5NzU6XHQucHV0X3N1cGVyXHQ9IGZhdF9wdXRfc3VwZXIsXG5mcy9mYXQvaW5vZGUuYy05NzYtXHQuc3RhdGZzXHRcdD0gZmF0X3N0YXRmcyxcbi0tXG5mcy9nZnMyL3N1cGVyLmM9NTM5PXZvaWQgZ2ZzMl9tYWtlX2ZzX3JvKHN0cnVjdCBnZnMyX3NiZCAqc2RwKVxuLS1cbmZzL2dmczIvc3VwZXIuYy01NzEtLyoqXG5mcy9nZnMyL3N1cGVyLmM6NTcyOiAqIGdmczJfcHV0X3N1cGVyIC0gVW5tb3VudCB0aGUgZmlsZXN5c3RlbVxuZnMvZ2ZzMi9zdXBlci5jLTU3My0gKiBAc2I6IFRoZSBWRlMgc3VwZXJibG9ja1xuLS1cbmZzL2dmczIvc3VwZXIuYy01NzYtXG5mcy9nZnMyL3N1cGVyLmM6NTc3OnN0YXRpYyB2b2lkIGdmczJfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9nZnMyL3N1cGVyLmMtNTc4LXtcbi0tXG5mcy9nZnMyL3N1cGVyLmM9MTU2OT1jb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBnZnMyX3N1cGVyX29wcyA9IHtcbi0tXG5mcy9nZnMyL3N1cGVyLmMtMTU3NC1cdC5ldmljdF9pbm9kZVx0XHQ9IGdmczJfZXZpY3RfaW5vZGUsXG5mcy9nZnMyL3N1cGVyLmM6MTU3NTpcdC5wdXRfc3VwZXJcdFx0PSBnZnMyX3B1dF9zdXBlcixcbmZzL2dmczIvc3VwZXIuYy0xNTc2LVx0LnN5bmNfZnNcdFx0PSBnZnMyX3N5bmNfZnMsXG4tLVxuZnMvaGZzL3N1cGVyLmM9MzU9c3RhdGljIGludCBoZnNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdClcbi0tXG5mcy9oZnMvc3VwZXIuYy00Ny0vKlxuZnMvaGZzL3N1cGVyLmM6NDg6ICogaGZzX3B1dF9zdXBlcigpXG5mcy9oZnMvc3VwZXIuYy00OS0gKlxuZnMvaGZzL3N1cGVyLmM6NTA6ICogVGhpcyBpcyB0aGUgcHV0X3N1cGVyKCkgZW50cnkgaW4gdGhlIHN1cGVyX29wZXJhdGlvbnMgc3RydWN0dXJlIGZvclxuZnMvaGZzL3N1cGVyLmMtNTEtICogSEZTIGZpbGVzeXN0ZW1zLiAgVGhlIHB1cnBvc2UgaXMgdG8gcmVsZWFzZSB0aGUgcmVzb3VyY2VzXG4tLVxuZnMvaGZzL3N1cGVyLmMtNTMtICovXG5mcy9oZnMvc3VwZXIuYzo1NDpzdGF0aWMgdm9pZCBoZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9oZnMvc3VwZXIuYy01NS17XG4tLVxuZnMvaGZzL3N1cGVyLmM9MTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBoZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9oZnMvc3VwZXIuYy0xOTItXHQuZXZpY3RfaW5vZGVcdD0gaGZzX2V2aWN0X2lub2RlLFxuZnMvaGZzL3N1cGVyLmM6MTkzOlx0LnB1dF9zdXBlclx0PSBoZnNfcHV0X3N1cGVyLFxuZnMvaGZzL3N1cGVyLmMtMTk0LVx0LnN5bmNfZnNcdD0gaGZzX3N5bmNfZnMsXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jPTMyMT1zdGF0aWMgdm9pZCBkZWxheWVkX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpwKVxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy0zMjgtXG5mcy9oZnNwbHVzL3N1cGVyLmM6MzI5OnN0YXRpYyB2b2lkIGhmc3BsdXNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9oZnNwbHVzL3N1cGVyLmMtMzMwLXtcbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmM9NDA4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBoZnNwbHVzX3NvcHMgPSB7XG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jLTQxMi1cdC5ldmljdF9pbm9kZVx0PSBoZnNwbHVzX2V2aWN0X2lub2RlLFxuZnMvaGZzcGx1cy9zdXBlci5jOjQxMzpcdC5wdXRfc3VwZXJcdD0gaGZzcGx1c19wdXRfc3VwZXIsXG5mcy9oZnNwbHVzL3N1cGVyLmMtNDE0LVx0LnN5bmNfZnNcdD0gaGZzcGx1c19zeW5jX2ZzLFxuLS1cbmZzL2hwZnMvc3VwZXIuYz0xMjI9c3RhdGljIHZvaWQgbGF6eV9mcmVlX3NiaShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5mcy9ocGZzL3N1cGVyLmMtMTI2LVxuZnMvaHBmcy9zdXBlci5jOjEyNzpzdGF0aWMgdm9pZCBocGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG5mcy9ocGZzL3N1cGVyLmMtMTI4LXtcbi0tXG5mcy9ocGZzL3N1cGVyLmM9NDkxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBocGZzX3NvcHMgPVxuLS1cbmZzL2hwZnMvc3VwZXIuYy00OTUtXHQuZXZpY3RfaW5vZGVcdD0gaHBmc19ldmljdF9pbm9kZSxcbmZzL2hwZnMvc3VwZXIuYzo0OTY6XHQucHV0X3N1cGVyXHQ9IGhwZnNfcHV0X3N1cGVyLFxuZnMvaHBmcy9zdXBlci5jLTQ5Ny1cdC5zdGF0ZnNcdFx0PSBocGZzX3N0YXRmcyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMDk0PXN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTEyNC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExMjU6c3RhdGljIHZvaWQgaHVnZXRsYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTEyNi17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTIzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaHVnZXRsYmZzX29wcyA9IHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjQwLVx0LnN0YXRmc1x0XHQ9IGh1Z2V0bGJmc19zdGF0ZnMsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQxOlx0LnB1dF9zdXBlclx0PSBodWdldGxiZnNfcHV0X3N1cGVyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI0Mi1cdC5zaG93X29wdGlvbnNcdD0gaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyxcbi0tXG5mcy9pbnRlcm5hbC5oPTEzOD1zdHJ1Y3Qgc3VwZXJfYmxvY2sgKnVzZXJfZ2V0X3N1cGVyKGRldl90LCBib29sIGV4Y2wpO1xuZnMvaW50ZXJuYWwuaDoxMzk6dm9pZCBwdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9pbnRlcm5hbC5oLTE0MC12b2lkIF9faW5pdCBzdXBlcl9kZXZfaW5pdCh2b2lkKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTQ4PXN0YXRpYyBpbnQgaXNvZnNfZGVudHJ5X2NtcF9tcyhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy01MS1cbmZzL2lzb2ZzL2lub2RlLmM6NTI6c3RhdGljIHZvaWQgaXNvZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9pc29mcy9pbm9kZS5jLTUzLXtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTEyMj1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaXNvZnNfc29wcyA9IHtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEyNC1cdC5mcmVlX2lub2RlXHQ9IGlzb2ZzX2ZyZWVfaW5vZGUsXG5mcy9pc29mcy9pbm9kZS5jOjEyNTpcdC5wdXRfc3VwZXJcdD0gaXNvZnNfcHV0X3N1cGVyLFxuZnMvaXNvZnMvaW5vZGUuYy0xMjYtXHQuc3RhdGZzXHRcdD0gaXNvZnNfc3RhdGZzLFxuLS1cbmZzL2pmZnMyL3N1cGVyLmMtMzMtXG5mcy9qZmZzMi9zdXBlci5jOjM0OnN0YXRpYyB2b2lkIGpmZnMyX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG5mcy9qZmZzMi9zdXBlci5jLTM1LVxuLS1cbmZzL2pmZnMyL3N1cGVyLmM9MjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBqZmZzMl9zdXBlcl9vcGVyYXRpb25zID1cbi0tXG5mcy9qZmZzMi9zdXBlci5jLTI0Ny1cdC5mcmVlX2lub2RlID1cdGpmZnMyX2ZyZWVfaW5vZGUsXG5mcy9qZmZzMi9zdXBlci5jOjI0ODpcdC5wdXRfc3VwZXIgPVx0amZmczJfcHV0X3N1cGVyLFxuZnMvamZmczIvc3VwZXIuYy0yNDktXHQuc3RhdGZzID1cdGpmZnMyX3N0YXRmcyxcbi0tXG5mcy9qZmZzMi9zdXBlci5jPTMxMD1zdGF0aWMgaW50IGpmZnMyX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvamZmczIvc3VwZXIuYy0zMjItXG5mcy9qZmZzMi9zdXBlci5jOjMyMzpzdGF0aWMgdm9pZCBqZmZzMl9wdXRfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9qZmZzMi9zdXBlci5jLTMyNC17XG4tLVxuZnMvamZzL3N1cGVyLmM9MTgwPXN0YXRpYyBpbmxpbmUgdm9pZCBqZnNfcXVvdGFfb2ZmX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2pmcy9zdXBlci5jLTE4NC1cbmZzL2pmcy9zdXBlci5jOjE4NTpzdGF0aWMgdm9pZCBqZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9qZnMvc3VwZXIuYy0xODYte1xuLS1cbmZzL2pmcy9zdXBlci5jLTE4OS1cbmZzL2pmcy9zdXBlci5jOjE5MDpcdGpmc19pbmZvKFwmIzM0O0luIGpmc19wdXRfc3VwZXJcJiMzNDspO1xuZnMvamZzL3N1cGVyLmMtMTkxLVxuLS1cbmZzL2pmcy9zdXBlci5jPTg0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgamZzX3N1cGVyX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvamZzL3N1cGVyLmMtODQ5LVx0LmV2aWN0X2lub2RlXHQ9IGpmc19ldmljdF9pbm9kZSxcbmZzL2pmcy9zdXBlci5jOjg1MDpcdC5wdXRfc3VwZXJcdD0gamZzX3B1dF9zdXBlcixcbmZzL2pmcy9zdXBlci5jLTg1MS1cdC5zeW5jX2ZzXHQ9IGpmc19zeW5jX2ZzLFxuLS1cbmZzL21pbml4L2lub2RlLmM9NDc9c3RhdGljIHZvaWQgbWluaXhfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9taW5peC9pbm9kZS5jLTYxLVxuZnMvbWluaXgvaW5vZGUuYzo2MjpzdGF0aWMgdm9pZCBtaW5peF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL21pbml4L2lub2RlLmMtNjMte1xuLS1cbmZzL21pbml4L2lub2RlLmM9MTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtaW5peF9zb3BzID0ge1xuLS1cbmZzL21pbml4L2lub2RlLmMtMTM0LVx0LmV2aWN0X2lub2RlXHQ9IG1pbml4X2V2aWN0X2lub2RlLFxuZnMvbWluaXgvaW5vZGUuYzoxMzU6XHQucHV0X3N1cGVyXHQ9IG1pbml4X3B1dF9zdXBlcixcbmZzL21pbml4L2lub2RlLmMtMTM2LVx0LnN0YXRmc1x0XHQ9IG1pbml4X3N0YXRmcyxcbi0tXG5mcy9uaWxmczIvc3VwZXIuYz00MzA9aW50IG5pbGZzX3Jlc2l6ZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3U2NCBuZXdzaXplKVxuLS1cbmZzL25pbGZzMi9zdXBlci5jLTUwNC1cbmZzL25pbGZzMi9zdXBlci5jOjUwNTpzdGF0aWMgdm9pZCBuaWxmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL25pbGZzMi9zdXBlci5jLTUwNi17XG4tLVxuZnMvbmlsZnMyL3N1cGVyLmM9NzA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBuaWxmc19zb3BzID0ge1xuLS1cbmZzL25pbGZzMi9zdXBlci5jLTcwOS1cdC5ldmljdF9pbm9kZSAgICA9IG5pbGZzX2V2aWN0X2lub2RlLFxuZnMvbmlsZnMyL3N1cGVyLmM6NzEwOlx0LnB1dF9zdXBlciAgICAgID0gbmlsZnNfcHV0X3N1cGVyLFxuZnMvbmlsZnMyL3N1cGVyLmMtNzExLVx0LnN5bmNfZnMgICAgICAgID0gbmlsZnNfc3luY19mcyxcbi0tXG5mcy9udGZzL3N1cGVyLmM9MTY2OD1zdGF0aWMgdm9pZCBudGZzX3ZvbHVtZV9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0xNzA3LS8qXG5mcy9udGZzL3N1cGVyLmM6MTcwODogKiBudGZzX3B1dF9zdXBlciAtIGNhbGxlZCBieSB0aGUgdmZzIHRvIHVubW91bnQgYSB2b2x1bWVcbmZzL250ZnMvc3VwZXIuYy0xNzA5LSAqIEBzYjpcdFx0dmZzIHN1cGVyYmxvY2sgb2Ygdm9sdW1lIHRvIHVubW91bnRcbmZzL250ZnMvc3VwZXIuYy0xNzEwLSAqL1xuZnMvbnRmcy9zdXBlci5jOjE3MTE6c3RhdGljIHZvaWQgbnRmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL250ZnMvc3VwZXIuYy0xNzEyLXtcbi0tXG5mcy9udGZzL3N1cGVyLmM9MjE2MD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbnRmc19zb3BzID0ge1xuLS1cbmZzL250ZnMvc3VwZXIuYy0yMTY0LVx0LndyaXRlX2lub2RlXHQ9IG50ZnNfd3JpdGVfaW5vZGUsXHQvKiBWRlM6IFdyaXRlIGRpcnR5IGlub2RlIHRvIGRpc2suICovXG5mcy9udGZzL3N1cGVyLmM6MjE2NTpcdC5wdXRfc3VwZXJcdD0gbnRmc19wdXRfc3VwZXIsXHQvKiBTeXNjYWxsOiB1bW91bnQuICovXG5mcy9udGZzL3N1cGVyLmMtMjE2Ni1cdC5zaHV0ZG93blx0PSBudGZzX3NodXRkb3duLFxuLS1cbmZzL250ZnMzL3N1cGVyLmM9NzA5PXN0YXRpYyB2b2lkIG50ZnMzX2ZyZWVfc2JpKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSlcbi0tXG5mcy9udGZzMy9zdXBlci5jLTcyMS1cbmZzL250ZnMzL3N1cGVyLmM6NzIyOnN0YXRpYyB2b2lkIG50ZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9udGZzMy9zdXBlci5jLTcyMy17XG4tLVxuZnMvbnRmczMvc3VwZXIuYz04NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG50ZnNfc29wcyA9IHtcbi0tXG5mcy9udGZzMy9zdXBlci5jLTg3My1cdC5ldmljdF9pbm9kZSA9IG50ZnNfZXZpY3RfaW5vZGUsXG5mcy9udGZzMy9zdXBlci5jOjg3NDpcdC5wdXRfc3VwZXIgPSBudGZzX3B1dF9zdXBlcixcbmZzL250ZnMzL3N1cGVyLmMtODc1LVx0LnN0YXRmcyA9IG50ZnNfc3RhdGZzLFxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MTY3Mz1UUkFDRV9FVkVOVChvY2ZzMl9wYXJzZV9vcHRpb25zLFxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTY4Ni1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MTY4NzpERUZJTkVfT0NGUzJfUE9JTlRFUl9FVkVOVChvY2ZzMl9wdXRfc3VwZXIpO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xNjg4LVxuLS1cbmZzL29jZnMyL3N1cGVyLmM9ODk9c3RhdGljIGludCBvY2ZzMl9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZGVudHJ5ICpyb290KTtcbmZzL29jZnMyL3N1cGVyLmM6OTA6c3RhdGljIHZvaWQgb2NmczJfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuZnMvb2NmczIvc3VwZXIuYy05MS1zdGF0aWMgaW50IG9jZnMyX21vdW50X3ZvbHVtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbi0tXG5mcy9vY2ZzMi9zdXBlci5jPTEyOD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb2NmczJfc29wcyA9IHtcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTEzNC1cdC5zeW5jX2ZzXHQ9IG9jZnMyX3N5bmNfZnMsXG5mcy9vY2ZzMi9zdXBlci5jOjEzNTpcdC5wdXRfc3VwZXJcdD0gb2NmczJfcHV0X3N1cGVyLFxuZnMvb2NmczIvc3VwZXIuYy0xMzYtXHQuc2hvd19vcHRpb25zICAgPSBvY2ZzMl9zaG93X29wdGlvbnMsXG4tLVxuZnMvb2NmczIvc3VwZXIuYz0xNTM0PXN0YXRpYyB2b2lkIF9fZXhpdCBvY2ZzMl9leGl0KHZvaWQpXG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xNTQ2LVxuZnMvb2NmczIvc3VwZXIuYzoxNTQ3OnN0YXRpYyB2b2lkIG9jZnMyX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvb2NmczIvc3VwZXIuYy0xNTQ4LXtcbmZzL29jZnMyL3N1cGVyLmM6MTU0OTpcdHRyYWNlX29jZnMyX3B1dF9zdXBlcihzYik7XG5mcy9vY2ZzMi9zdXBlci5jLTE1NTAtXG4tLVxuZnMvb21mcy9pbm9kZS5jPTIwND1zdHJ1Y3QgaW5vZGUgKm9tZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8pXG4tLVxuZnMvb21mcy9pbm9kZS5jLTI2NC1cbmZzL29tZnMvaW5vZGUuYzoyNjU6c3RhdGljIHZvaWQgb21mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL29tZnMvaW5vZGUuYy0yNjYte1xuLS1cbmZzL29tZnMvaW5vZGUuYz0zMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG9tZnNfc29wcyA9IHtcbi0tXG5mcy9vbWZzL2lub2RlLmMtMzIyLVx0LmV2aWN0X2lub2RlXHQ9IG9tZnNfZXZpY3RfaW5vZGUsXG5mcy9vbWZzL2lub2RlLmM6MzIzOlx0LnB1dF9zdXBlclx0PSBvbWZzX3B1dF9zdXBlcixcbmZzL29tZnMvaW5vZGUuYy0zMjQtXHQuc3RhdGZzXHRcdD0gb21mc19zdGF0ZnMsXG4tLVxuZnMvb3ZlcmxheWZzL3N1cGVyLmM9MjEzPXN0YXRpYyB2b2lkIG92bF9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvb3ZlcmxheWZzL3N1cGVyLmMtMjI0LVxuZnMvb3ZlcmxheWZzL3N1cGVyLmM6MjI1OnN0YXRpYyB2b2lkIG92bF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL292ZXJsYXlmcy9zdXBlci5jLTIyNi17XG4tLVxuZnMvb3ZlcmxheWZzL3N1cGVyLmM9Mjk3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvdmxfc3VwZXJfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9vdmVybGF5ZnMvc3VwZXIuYy0zMDEtXHQuZHJvcF9pbm9kZVx0PSBpbm9kZV9qdXN0X2Ryb3AsXG5mcy9vdmVybGF5ZnMvc3VwZXIuYzozMDI6XHQucHV0X3N1cGVyXHQ9IG92bF9wdXRfc3VwZXIsXG5mcy9vdmVybGF5ZnMvc3VwZXIuYy0zMDMtXHQuc3luY19mc1x0PSBvdmxfc3luY19mcyxcbi0tXG5mcy9xbng2L2lub2RlLmM9Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHFueDZfc29wcztcbmZzL3FueDYvaW5vZGUuYy0zMC1cbmZzL3FueDYvaW5vZGUuYzozMTpzdGF0aWMgdm9pZCBxbng2X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbmZzL3FueDYvaW5vZGUuYy0zMi1zdGF0aWMgc3RydWN0IGlub2RlICpxbng2X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuLS1cbmZzL3FueDYvaW5vZGUuYz0zOD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgcW54Nl9zb3BzID0ge1xuLS1cbmZzL3FueDYvaW5vZGUuYy00MC1cdC5mcmVlX2lub2RlXHQ9IHFueDZfZnJlZV9pbm9kZSxcbmZzL3FueDYvaW5vZGUuYzo0MTpcdC5wdXRfc3VwZXJcdD0gcW54Nl9wdXRfc3VwZXIsXG5mcy9xbng2L2lub2RlLmMtNDItXHQuc3RhdGZzXHRcdD0gcW54Nl9zdGF0ZnMsXG4tLVxuZnMvcW54Ni9pbm9kZS5jPTI5MT1zdGF0aWMgaW50IHFueDZfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9xbng2L2lub2RlLmMtNDczLVxuZnMvcW54Ni9pbm9kZS5jOjQ3NDpzdGF0aWMgdm9pZCBxbng2X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvcW54Ni9pbm9kZS5jLTQ3NS17XG4tLVxuZnMvcXVvdGEvcXVvdGEuYz04NjY9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqcXVvdGFjdGxfYmxvY2soY29uc3QgY2hhciBfX3VzZXIgKnNwZWNpYWwsIGludCBjbWQpXG4tLVxuZnMvcXVvdGEvcXVvdGEuYy04OTktXHRcdHNiX2VuZF93cml0ZShzYik7XG5mcy9xdW90YS9xdW90YS5jOjkwMDpcdFx0cHV0X3N1cGVyKHNiKTtcbmZzL3F1b3RhL3F1b3RhLmMtOTAxLVx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYz04OTk9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmMtOTI1LVxuZnMvc21iL2NsaWVudC9taXNjLmM6OTI2OnN0YXRpYyB2b2lkIF9fY2lmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkyNy17XG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmM9OTQzPXZvaWQgY2lmc19wdXRfdGNwX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9zbWIvY2xpZW50L21pc2MuYy05NDQte1xuZnMvc21iL2NsaWVudC9taXNjLmM6OTQ1Olx0X19jaWZzX3B1dF9zdXBlcihzYik7XG5mcy9zbWIvY2xpZW50L21pc2MuYy05NDYtfVxuLS1cbmZzL3NxdWFzaGZzL3N1cGVyLmM9NTcxPXN0YXRpYyBpbnQgc3F1YXNoZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zilcbi0tXG5mcy9zcXVhc2hmcy9zdXBlci5jLTU5MC1cbmZzL3NxdWFzaGZzL3N1cGVyLmM6NTkxOnN0YXRpYyB2b2lkIHNxdWFzaGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvc3F1YXNoZnMvc3VwZXIuYy01OTIte1xuLS1cbmZzL3NxdWFzaGZzL3N1cGVyLmM9Njk0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzcXVhc2hmc19zdXBlcl9vcHMgPSB7XG4tLVxuZnMvc3F1YXNoZnMvc3VwZXIuYy02OTctXHQuc3RhdGZzID0gc3F1YXNoZnNfc3RhdGZzLFxuZnMvc3F1YXNoZnMvc3VwZXIuYzo2OTg6XHQucHV0X3N1cGVyID0gc3F1YXNoZnNfcHV0X3N1cGVyLFxuZnMvc3F1YXNoZnMvc3VwZXIuYy02OTktXHQuc2hvd19vcHRpb25zID0gc3F1YXNoZnNfc2hvd19vcHRpb25zLFxuLS1cbmZzL3N1cGVyLmM9MzM3PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsXG4tLVxuZnMvc3VwZXIuYy00MzAtICogRHJvcCBhIHN1cGVyYmxvY2smIzM5O3MgcGFzc2l2ZSByZWZlcmVuY2UuICBNdXN0IGJlIGNhbGxlZCBXSVRIT1VUIHNiX2xvY2sgaGVsZDtcbmZzL3N1cGVyLmM6NDMxOiAqIHB1dF9zdXBlcigpIGFjcXVpcmVzIHNiX2xvY2sgaXRzZWxmIHdoZW4gdGhlIGZpbmFsIHJlZmVyZW5jZSBpcyBkcm9wcGVkLlxuZnMvc3VwZXIuYy00MzItICovXG5mcy9zdXBlci5jOjQzMzp2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG5mcy9zdXBlci5jLTQzNC17XG4tLVxuZnMvc3VwZXIuYz00ODA9c3RhdGljIHZvaWQgc3VwZXJfZGV2X3B1dChzdHJ1Y3Qgc3VwZXJfZGV2ICpmc2QpXG4tLVxuZnMvc3VwZXIuYy00ODQtXHRcdHJobHRhYmxlX3JlbW92ZShcdTAwMjZzdXBlcl9kZXZfdGFibGUsIFx1MDAyNmZzZC1cdTAwM2VzZF9ub2RlLCBzdXBlcl9kZXZfcGFyYW1zKTtcbmZzL3N1cGVyLmM6NDg1Olx0XHRwdXRfc3VwZXIoZnNkLVx1MDAzZXNkX3NiKTtcbmZzL3N1cGVyLmMtNDg2LVx0XHRrZnJlZV9yY3UoZnNkLCBzZF9yY3UpO1xuLS1cbmZzL3N1cGVyLmM9NTk1PXZvaWQgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxuLS1cbmZzL3N1cGVyLmMtNjAzLVxuZnMvc3VwZXIuYzo2MDQ6XHRcdC8qIGxpc3RfbHJ1X2Rlc3Ryb3koKSBtYXkgc2xlZXA7IHB1dF9zdXBlcigpIGNhbGxlcnMgbWF5IG5vdC4gKi9cbmZzL3N1cGVyLmMtNjA1LVx0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNnMtXHUwMDNlc19kZW50cnlfbHJ1KTtcbi0tXG5mcy9zdXBlci5jLTYwNy1cbmZzL3N1cGVyLmM6NjA4Olx0XHRwdXRfc3VwZXIocyk7XG5mcy9zdXBlci5jLTYwOS1cdH0gZWxzZSB7XG4tLVxuZnMvc3VwZXIuYz02NDY9c3RhdGljIGJvb2wgZ3JhYl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtNjU0LVx0XHRpZiAoYXRvbWljX2luY19ub3RfemVybyhcdTAwMjZzYi1cdTAwM2VzX2FjdGl2ZSkpIHtcbmZzL3N1cGVyLmM6NjU1Olx0XHRcdHB1dF9zdXBlcihzYik7XG5mcy9zdXBlci5jLTY1Ni1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5mcy9zdXBlci5jLTY2MC1cdHdhaXRfdmFyX2V2ZW50KFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MsIHN1cGVyX2ZsYWdzKHNiLCBTQl9ERUFEKSk7XG5mcy9zdXBlci5jOjY2MTpcdHB1dF9zdXBlcihzYik7XG5mcy9zdXBlci5jLTY2Mi1cdHJldHVybiBmYWxzZTtcbi0tXG5mcy9zdXBlci5jPTczNz12b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTc2My1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg1NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNodXRkb3duIFNlcXVlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGtlcm5lbCBzaHV0ZG93biBzZXF1ZW5jZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBzdXBlcmJsb2NrcyBhcmUgaGFuZGxlZC4gSSBzZWUgYSBjaGFpbiBvZiBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBzZ2V0X2ZjYCwgYHB1dF9zdXBlcmAsIGBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcmAsIGBraWxsX3N1cGVyX25vdGlmeWAsIGBnZW5lcmljX3NodXRkb3duX3N1cGVyYCwgYW5kIGBrZXJuZnNfa2lsbF9zYmAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IHRoaXMgc3RlcCBieSBzdGVwLiBJJiMzOTttIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBga2lsbF9zdXBlcl9ub3RpZnlgLiBJIHZhZ3VlbHkgcmVjYWxsIGl0cyBwdXJwb3NlIGFuZCBJIHdhbnQgdG8gY29uZmlybSBpZiBteSBtZW1vcnkgaXMgY29ycmVjdC4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgaWYgYGtpbGxfc3VwZXJfbm90aWZ5YCBpcyBpbmRlZWQgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFllcywgY29uZmlybWVkOiBgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilgIHdpdGhpbiBgZnMvc3VwZXIuY2AuIFBlcmZlY3QsIHRoYXQgcmVpbmZvcmNlcyBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcuIE5vdywgSSBuZWVkIHRvIGtub3cgdGhlIGNhbGwgc2l0ZXMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgaW52b2tlZCB3aXRoaW4gdGhpcyBzaHV0ZG93biBwcm9jZXNzPyBJcyBpdCBqdXN0IGNhbGxlZCBieSBgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocylgIG9yIG90aGVyIHN1cGVyYmxvY2sgY2xlYW5pbmcgcm91dGluZXMgbGlrZSBga2lsbF9hbm9uX3N1cGVyKHNiKWAsIG9yIGFyZSB0aGVyZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIHRoYXQgcmVseSBvbiBpdD8gVG8gYmUgc3VyZSwgSSYjMzk7bGwgbmVlZCB0byBydW4gYSBicm9hZCBzZWFyY2ggZm9yIGBraWxsX3N1cGVyX25vdGlmeWAgdGhyb3VnaG91dCB0aGUgZW50aXJlIGNvZGViYXNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYW5kIGludGVyYWN0aW9ucy4gVGhpcyBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN1cGVyYmxvY2sgdGVhcmRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tpbGxfc3VwZXJfbm90aWZ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9NTQ1PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfZGV2ICpzdXBlcl9kZXZfbmV4dChzdHJ1Y3Qgc3VwZXJfZGV2ICpwcmV2KVxuLS1cbmZzL3N1cGVyLmMtNTU2LVxuZnMvc3VwZXIuYzo1NTc6c3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3N1cGVyLmMtNTU4LXtcbi0tXG5mcy9zdXBlci5jPTU5NT12b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbi0tXG5mcy9zdXBlci5jLTYwMS1cbmZzL3N1cGVyLmM6NjAyOlx0XHRraWxsX3N1cGVyX25vdGlmeShzKTtcbmZzL3N1cGVyLmMtNjAzLVxuLS1cbmZzL3N1cGVyLmM9MTM2Nj12b2lkIGtpbGxfYW5vbl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtMTM2OS1cdGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc2IpO1xuZnMvc3VwZXIuYzoxMzcwOlx0a2lsbF9zdXBlcl9ub3RpZnkoc2IpO1xuZnMvc3VwZXIuYy0xMzcxLVx0ZnJlZV9hbm9uX2JkZXYoZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1ODQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRGlnZ2luZyBEZWVwZXIgZm9yIEltcGFjdCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBga2lsbF9zdXBlcl9ub3RpZnlgLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBsaWtlbHkgb24gYSBzcGVjaWZpYyBhcmVhLCBidXQgSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgYnJvYWRlbiB0aGUgc2NvcGUgb2Ygb3VyIHNlYXJjaC4gSnVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIHdlIGRvbiYjMzk7dCBtaXNzIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcywgSSYjMzk7bSBnb2luZyB0byBydW4gYSBmdWxsLXRyZWUgc2VhcmNoIGZvciBga2lsbF9zdXBlcl9ub3RpZnlgLiBUaGlzIHdpbGwgbGV0IG1lIHNlZSBpZiBpdCYjMzk7cyByZWZlcmVuY2VkIGFueXdoZXJlIHVuZXhwZWN0ZWQsIGFuZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wYWN0IG9mIHRoaXMgZnVuY3Rpb24gYWNyb3NzIHRoZSBjb2RlYmFzZSwgbm90IGp1c3QgaW4gdGhlIGltbWVkaWF0ZSBhcmVhIEkgc3RhcnRlZCBpbnZlc3RpZ2F0aW5nLiBCZXR0ZXIgdG8gY2FzdCBhIHdpZGUgbmV0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tpbGxfc3VwZXJfbm90aWZ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9NTQ1PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfZGV2ICpzdXBlcl9kZXZfbmV4dChzdHJ1Y3Qgc3VwZXJfZGV2ICpwcmV2KVxuLS1cbmZzL3N1cGVyLmMtNTU2LVxuZnMvc3VwZXIuYzo1NTc6c3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3N1cGVyLmMtNTU4LXtcbi0tXG5mcy9zdXBlci5jPTU5NT12b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcbi0tXG5mcy9zdXBlci5jLTYwMS1cbmZzL3N1cGVyLmM6NjAyOlx0XHRraWxsX3N1cGVyX25vdGlmeShzKTtcbmZzL3N1cGVyLmMtNjAzLVxuLS1cbmZzL3N1cGVyLmM9MTM2Nj12b2lkIGtpbGxfYW5vbl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtMTM2OS1cdGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc2IpO1xuZnMvc3VwZXIuYzoxMzcwOlx0a2lsbF9zdXBlcl9ub3RpZnkoc2IpO1xuZnMvc3VwZXIuYy0xMzcxLVx0ZnJlZV9hbm9uX2JkZXYoZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwMjIKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogMTE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBTdXBlcmJsb2NrIExpZmVjeWNsZSBhbmQgU3luY2hyb25pemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYCwgYGRlYWN0aXZhdGVfc3VwZXJgLCBga2lsbF9hbm9uX3N1cGVyYCwgYHB1dF9zdXBlcmAsIGBzZ2V0X2ZjYCwgYW5kIGBrZXJuZnNfa2lsbF9zYmAuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgYHB1dF9zdXBlcmAgaXMgdXNlZDsgaXMgaXQgYSB1YmlxdWl0b3VzIGZ1bmN0aW9uLCBvciBpcyBpdHMgdXNhZ2UgbW9yZSBzcGVjaWZpYz8gSXQgbG9va3MgbGlrZSBgcHV0X3N1cGVyYCBpcyBvbmx5IGNhbGxlZCB3aGVuIHBhc3NpdmVseSByZWxlYXNpbmcgYSBzdXBlcmJsb2NrLCBsaWtlIGR1cmluZyB1bm1vdW50IG9yIHdoZW4gYHNnZXRfZmNgIG9yIGBzdXBlcl9kZXZfcHV0YCBmYWlsLCB3aGljaCBtYWtlcyBpdCBsZXNzIHViaXF1aXRvdXMuICBUaGUga2V5IGZ1bmN0aW9uIGZvciBmaWx0ZXJpbmcgYW5kIGhhbmRsaW5nIGBTQl9ERUFEYCBzdXBlcmJsb2NrcyBzZWVtcyB0byBiZSBgc2dldF9mY2AuIEkmIzM5O20gYWxzbyBub3RpbmcgdGhhdCBgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJgIGlzIHRoZSBwb2ludCB3aGVyZSBhY3RpdmUgcmVmZXJlbmNlcyBkcm9wIHRvIHplcm8sIHRyaWdnZXJpbmcgYGtpbGxfc2JgLiBga2lsbF9hbm9uX3N1cGVyYCBjYWxscyBga2lsbF9zdXBlcl9ub3RpZnlgLCB3aGljaCBpcyBhbHNvIGltcG9ydGFudCwgYXMgaXMgYGtlcm5mc19raWxsX3NiYCwgd2hpY2ggaW4gdHVybiBjYWxscyBga2lsbF9hbm9uX3N1cGVyYC4KCk5vdywgSSB3YW50IHRvIG1hcCBvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gIFdlIGhhdmUgYHNnZXRfZmNgIGZvciBzdXBlcmJsb2NrIGxvb2t1cCBhbmQgY3JlYXRpb24sIGBwdXRfc3VwZXJgIGZvciBwYXNzaXZlIHJlZmNvdW50IGRyb3BzIGFuZCBkZWxldGlvbiwgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYCBmb3IgZGVhY3RpdmF0aW9uLCBga2lsbF9hbm9uX3N1cGVyYCBmb3IgdGVhcmRvd24sIGFuZCBga2VybmZzX2tpbGxfc2JgIGZvciBrZXJuZnMtc3BlY2lmaWMgc2h1dGRvd24uIEkmIzM5O2xsIGFsc28gY29uc2lkZXIgYGdlbmVyaWNfc2h1dGRvd25fc3VwZXJgIGluIHRoaXMgY29udGV4dC4KCkNoZWNraW5nIHRoZSBwYXRjaCwgSSBzZWUgdGhlc2Ugc3ltYm9sczogYGZzL2tlcm5mcy9tb3VudC5jOmtlcm5mc19raWxsX3NiYCwgYGZzL3N1cGVyLmM6cHV0X3N1cGVyYCwgYGZzL3N1cGVyLmM6a2lsbF9zdXBlcl9ub3RpZnlgLCBgZnMvc3VwZXIuYzpkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcmAsIGBmcy9zdXBlci5jOmdlbmVyaWNfc2h1dGRvd25fc3VwZXJgLCBhbmQgYGZzL3N1cGVyLmM6c2dldF9mY2AuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYGZzL3N1cGVyLmNgIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgYnV0IGBmcy9rZXJuZnMvbW91bnQuY2AgaXMgY29tcGlsZWQgd2hlbiBgS0VSTkZTYCBpcyBzZXQuIFNvLCBgS0VSTkZTYCBpcyBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gdG8gY29uc2lkZXIuIEl0JiMzOTtzIGJvb2xlYW4sIG9mdGVuIHNlbGVjdGVkLCBhbmQgbmVlZHMgdG8gYmUgaW5jbHVkZWQuICBgZnMvc3VwZXIuY2AgaXRzZWxmIGRvZXNuJiMzOTt0IGRlcGVuZCBvbiBhbnkgY29uZmlnIG9wdGlvbnMuCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSByZXF1aXJlZCBvdXRwdXRzLiBXZSBoYXZlIGBXb3J0aEZ1enppbmdgLCBgUmVhc29uaW5nYCwgYEZvY3VzU3ltYm9sc2AsIGFuZCBgRW5hYmxlQ29uZmlnc2AuCgpGb3IgYEZvY3VzU3ltYm9sc2AsIEkmIzM5O3ZlIGRlY2lkZWQgb246IGBzZ2V0X2ZjYCwgYHB1dF9zdXBlcmAsIGBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcmAsIGBnZW5lcmljX3NodXRkb3duX3N1cGVyYCwgYGtpbGxfc3VwZXJfbm90aWZ5YCAoaW1wb3J0YW50LCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMg4oCTIHRoZSBjb21waWxlciBtYXkgcmV0YWluIGl0IG9yIHdlIGNhbiBjb25zaWRlciBpdHMgY2FsbGVycyksIGBraWxsX2Fub25fc3VwZXJgLCBhbmQgYGtlcm5mc19raWxsX3NiYC4gVGhpcyBzZWxlY3Rpb24gY292ZXJzIGJvdGggdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBvZiB0aGUgc3RhdGljIGhlbHBlcnMuCgpGb3IgYEVuYWJsZUNvbmZpZ3NgLCBpdCYjMzk7cyBqdXN0IGBLRVJORlNgLgoKSGVyZSYjMzk7cyBteSBjb25jaXNlIHJlYXNvbmluZzogVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgbW91bnQvdW5tb3VudC4gSXQgY2hhbmdlcyBob3cgc3VwZXJibG9ja3MgYXJlIHVubGlua2VkLCBzeW5jaHJvbml6ZXMgYFNCX0RFQURgIHN0YXR1cyB1bmRlciBgc2JfbG9ja2AsIG1vdmVzIGBwdXRfZmlsZXN5c3RlbSgpYCB0byBgcHV0X3N1cGVyKClgLCBhbmQgdXBkYXRlcyBgc2dldF9mYygpYCB0byBhdm9pZCBgU0JfREVBRGAgc3VwZXJibG9ja3MuICBUaGlzIGludm9sdmVzIGNvbXBsZXggY29uY3VycmVuY3kgYmV0d2VlbiBtb3VudGluZyBhbmQgdW5tb3VudGluZyBwcm9jZXNzZXMsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBhc3NlcnRpb24gZmFpbHVyZXMuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLRVJORlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZ2V0X2ZjJiMzNDssCiAgICAmIzM0O3B1dF9zdXBlciYjMzQ7LAogICAgJiMzNDtkZWFjdGl2YXRlX2xvY2tlZF9zdXBlciYjMzQ7LAogICAgJiMzNDtnZW5lcmljX3NodXRkb3duX3N1cGVyJiMzNDssCiAgICAmIzM0O2tpbGxfYW5vbl9zdXBlciYjMzQ7LAogICAgJiMzNDtrZXJuZnNfa2lsbF9zYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCBhY3Jvc3MgbW91bnQgYW5kIHVubW91bnQgcGF0aHMgKGluIGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKS4gSXQgZGVmZXJzIHVubGlua2luZyBzdXBlcmJsb2NrcyBmcm9tIGZzX3N1cGVycyB1bnRpbCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZSBkcm9wcyBpbiBwdXRfc3VwZXIoKSwgc2V0cyBTQl9ERUFEIHVuZGVyIHNiX2xvY2sgaW4ga2lsbF9zdXBlcl9ub3RpZnkoKSwgYW5kIHNraXBzIFNCX0RFQUQgc3VwZXJibG9ja3MgZHVyaW5nIHNnZXRfZmMoKSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29uY3VycmVuY3kgaW52YXJpYW50cyBiZXR3ZWVuIGNvbmN1cnJlbnQgbW91bnQgKHNnZXRfZmMpIGFuZCBzaHV0ZG93bi9kZWFjdGl2YXRpb24gcm91dGluZXMsIG1ha2luZyB0aGlzIGNvcmUgc3Vic3lzdGVtIGNvZGUgd2VsbCB3b3J0aCBmdXp6aW5nIGZvciBzeW5jaHJvbml6YXRpb24gYW5kIHJlZmVyZW5jZSBjb3VudGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S0VSTkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2dldF9mYyYjMzQ7LAogICAgJiMzNDtwdXRfc3VwZXImIzM0OywKICAgICYjMzQ7ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXImIzM0OywKICAgICYjMzQ7Z2VuZXJpY19zaHV0ZG93bl9zdXBlciYjMzQ7LAogICAgJiMzNDtraWxsX2Fub25fc3VwZXImIzM0OywKICAgICYjMzQ7a2VybmZzX2tpbGxfc2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYWNyb3NzIG1vdW50IGFuZCB1bm1vdW50IHBhdGhzIChpbiBmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykuIEl0IGRlZmVycyB1bmxpbmtpbmcgc3VwZXJibG9ja3MgZnJvbSBmc19zdXBlcnMgdW50aWwgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UgZHJvcHMgaW4gcHV0X3N1cGVyKCksIHNldHMgU0JfREVBRCB1bmRlciBzYl9sb2NrIGluIGtpbGxfc3VwZXJfbm90aWZ5KCksIGFuZCBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGR1cmluZyBzZ2V0X2ZjKCkgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYmV0d2VlbiBjb25jdXJyZW50IG1vdW50IChzZ2V0X2ZjKSBhbmQgc2h1dGRvd24vZGVhY3RpdmF0aW9uIHJvdXRpbmVzLCBtYWtpbmcgdGhpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIHdlbGwgd29ydGggZnV6emluZyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDIxOjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBzdXBlcmJsb2NrIGluc3RhbmNlcyAoZnMvc3VwZXIuYyBhbmQgZnMva2VybmZzL21vdW50LmMpIGFjcm9zcyBtb3VudCBhbmQgc2h1dGRvd24gcGF0aHMgKHNnZXRfZmMsIGtpbGxfc3VwZXJfbm90aWZ5LCBwdXRfc3VwZXIpLiBJdCBkZWZlcnMgdW5saW5raW5nIHNiLVx1MDAzZXNfaW5zdGFuY2VzIGFuZCBwdXRfZmlsZXN5c3RlbSB0byBwdXRfc3VwZXIsIHdoaWxlIGhvbGRpbmcgc2JfbG9jayB3aGVuIHNldHRpbmcgU0JfREVBRCBzbyBjb25jdXJyZW50IHNnZXRfZmMoKSBjYWxscyBza2lwIGR5aW5nIHN1cGVyYmxvY2tzLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcgKHNiX2xvY2spLCBsaXN0IG1hbmFnZW1lbnQsIGFuZCBvYmplY3QgbGlmZWN5Y2xlIHN5bmNocm9uaXphdGlvbi4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgaGVyZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb25zLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRyYWNrZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgcGFyc2luZywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3B5aW5nIGlzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjOWM3ZjAzM2UxNzQzZTMzZWJkZWI4Yjg5NmRiMjdiYWY1NGQ3MGE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAyMToxMjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2tlcm5mcy9tb3VudC5jIGIvZnMva2VybmZzL21vdW50LmMKaW5kZXggZjE4M2E5Njc3OGI5YS4uYTU3Mzk5MDIxYzhiMCAxMDA2NDQKLS0tIGEvZnMva2VybmZzL21vdW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMva2VybmZzL21vdW50LmMKQEAgLTQzNCw4ICYjNDM7NDM0LDggQEAgdm9pZCBrZXJuZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCXVwX3dyaXRlKCZhbXA7cm9vdC0mZ3Q7a2VybmZzX3N1cGVyc19yd3NlbSk7CiAKIAkvKgotCSAqIFJlbW92ZSB0aGUgc3VwZXJibG9jayBmcm9tIGZzX3N1cGVycy9zX2luc3RhbmNlcwotCSAqIHNvIHdlIGNhbiYjMzk7dCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby4KJiM0MzsJICogTWFyayB0aGUgc3VwZXJibG9jayBkZWFkIHNvIHNnZXRfZmMoKSBjYW4mIzM5O3QgZmluZCBpdCwKJiM0MzsJICogYmVmb3JlIGZyZWVpbmcga2VybmZzX3N1cGVyX2luZm8uCiAJICovCiAJa2lsbF9hbm9uX3N1cGVyKHNiKTsKIAlrZnJlZShpbmZvKTsKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDA1ZTQ0MzE3MzAzODcuLjBmOWUxM2VlZGI0ZmIgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtNDMzLDE1ICYjNDM7NDMzLDE5IEBAIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFsbG9jX3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCiB2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiB7CiAJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3MtJmd0O3NfcGFzc2l2ZSkpIHsKJiM0MzsJCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlID0gcy0mZ3Q7c190eXBlOwogCiAJCXNwaW5fbG9jaygmYW1wO3NiX2xvY2spOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cy0mZ3Q7c19saXN0KTsKJiM0MzsJCWhsaXN0X2RlbF9pbml0KCZhbXA7cy0mZ3Q7c19pbnN0YW5jZXMpOwogCQlzcGluX3VubG9jaygmYW1wO3NiX2xvY2spOwogCiAJCVdBUk5fT04ocy0mZ3Q7c19kZW50cnlfbHJ1Lm5vZGUpOwogCQlXQVJOX09OKHMtJmd0O3NfaW5vZGVfbHJ1Lm5vZGUpOwogCQlXQVJOX09OKHMtJmd0O3NfbW91bnRzKTsKIAkJY2FsbF9yY3UoJmFtcDtzLSZndDtyY3UsIGRlc3Ryb3lfc3VwZXJfcmN1KTsKJiM0MzsJCS8qIFRoZSB1bmxpbmsgYWJvdmUgbWF5IHRvdWNoIHR5cGUtJmd0O2ZzX3N1cGVycywgc28gZHJvcCBpdCBsYXN0LiAqLwomIzQzOwkJcHV0X2ZpbGVzeXN0ZW0odHlwZSk7CiAJfQogfQogCkBAIC01NTgsMTcgJiM0Mzs1NjIsNiBAQCBzdGF0aWMgdm9pZCBraWxsX3N1cGVyX25vdGlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCWlmIChzYi0mZ3Q7c19mbGFncyAmYW1wOyBTQl9ERUFEKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIFJlbW92ZSBpdCBmcm9tIEBmc19zdXBlcnMgc28gaXQgaXNuJiMzOTt0IGZvdW5kIGJ5IG5ldwotCSAqIHNnZXRfZmMoKSB3YWxrZXJzIGFueW1vcmUuIEFueSBjb25jdXJyZW50IG1vdW50ZXIgc3RpbGwKLQkgKiBtYW5hZ2luZyB0byBncmFiIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyBndWFyYW50ZWVkIHRvCi0JICogYWxyZWFkeSBzZWUgU0JfRFlJTkcgYW5kIHdpbGwgd2FpdCB1bnRpbCB3ZSBub3RpZnkgdGhlbSBhYm91dAotCSAqIFNCX0RFQUQuCi0JICovCi0Jc3Bpbl9sb2NrKCZhbXA7c2JfbG9jayk7Ci0JaGxpc3RfZGVsX2luaXQoJmFtcDtzYi0mZ3Q7c19pbnN0YW5jZXMpOwotCXNwaW5fdW5sb2NrKCZhbXA7c2JfbG9jayk7Ci0KIAkvKiBEcm9wIHNnZXRfZmMoKSYjMzk7cyBjbGFpbTsgYSBuZXZlci1yZWdpc3RlcmVkIGVudHJ5IHN0YXlzIHdpdGggdGhlIHNiLiAqLwogCWlmIChzYi0mZ3Q7c19zdXBlcl9kZXYtJmd0O3NkX2RldikgewogCQlzdXBlcl9kZXZfcHV0KHNiLSZndDtzX3N1cGVyX2Rldik7CkBAIC01NzcsMTEgJiM0Mzs1NzAsMTUgQEAgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAogCS8qCiAJICogTGV0IGNvbmN1cnJlbnQgbW91bnRzIGtub3cgdGhhdCB0aGlzIHRoaW5nIGlzIHJlYWxseSBkZWFkLgotCSAqIFdlIGRvbiYjMzk7dCBuZWVkIEBzYi0mZ3Q7c191bW91bnQgaGVyZSBhcyBldmVyeSBjb25jdXJyZW50IGNhbGxlcgotCSAqIHdpbGwgc2VlIFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZCB0aGUgc3VwZXJibG9jayBvciB3YWl0Ci0JICogZm9yIFNCX0RFQUQuCiYjNDM7CSAqIHNnZXRfZmMoKSBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGFuZCBjYWxscyB0ZXN0KCkgdW5kZXIKJiM0MzsJICogc2JfbG9jaywgc28gc2V0IGl0IHVuZGVyIHNiX2xvY2s6IG9uY2Ugd2UgcmV0dXJuIG5vIHRlc3QoKQomIzQzOwkgKiBydW5zIG9uIHRoaXMgc3VwZXJibG9jayBhbnltb3JlIGFuZCBub25lIHdpbGwgc3RhcnQuIEV2ZXJ5b25lCiYjNDM7CSAqIGVsc2UgYWxyZWFkeSBzYXcgU0JfRFlJTkcgYW5kIGVpdGhlciBkaXNjYXJkZWQgdGhlIHN1cGVyYmxvY2sKJiM0MzsJICogb3Igd2FpdHMgZm9yIFNCX0RFQUQuCiAJICovCiYjNDM7CXNwaW5fbG9jaygmYW1wO3NiX2xvY2spOwogCXN1cGVyX3dha2Uoc2IsIFNCX0RFQUQpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3NiX2xvY2spOwogfQogCiAvKioKQEAgLTYwOCw3ICYjNDM7NjA1LDYgQEAgdm9pZCBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiAJCWxpc3RfbHJ1X2Rlc3Ryb3koJmFtcDtzLSZndDtzX2RlbnRyeV9scnUpOwogCQlsaXN0X2xydV9kZXN0cm95KCZhbXA7cy0mZ3Q7c19pbm9kZV9scnUpOwogCi0JCXB1dF9maWxlc3lzdGVtKGZzKTsKIAkJcHV0X3N1cGVyKHMpOwogCX0gZWxzZSB7CiAJCXN1cGVyX3VubG9ja19leGNsKHMpOwpAQCAtNzk1LDEyICYjNDM7NzkxLDEyIEBAIHZvaWQgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCX0KIAkvKgogCSAqIEJyb2FkY2FzdCB0byBldmVyeW9uZSB0aGF0IGdyYWJiZWQgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHRvIHRoaXMKLQkgKiBzdXBlcmJsb2NrIGJlZm9yZSB3ZSByZW1vdmVkIGl0IGZyb20gQGZzX3N1cGVycyB0aGF0IHRoZSBzdXBlcmJsb2NrCi0JICogaXMgZHlpbmcuIEV2ZXJ5IHdhbGtlciBvZiBAZnNfc3VwZXJzIG91dHNpZGUgb2Ygc2dldF9mYygpIHdpbGwgbm93Ci0JICogZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzIGRlYWQuCiYjNDM7CSAqIHN1cGVyYmxvY2sgdGhhdCBpdCBpcyBkeWluZy4gRXZlcnkgd2Fsa2VyIG9mIEBmc19zdXBlcnMgb3V0c2lkZQomIzQzOwkgKiBvZiBzZ2V0X2ZjKCkgd2lsbCBub3cgZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzCiYjNDM7CSAqIGRlYWQuCiAJICoKLQkgKiBXZSBsZWF2ZSB0aGUgc3VwZXJibG9jayBvbiBAZnNfc3VwZXJzIHNvIGl0IGNhbiBiZSBmb3VuZCBieQotCSAqIHNnZXRfZmMoKSB1bnRpbCB3ZSBwYXNzZWQgc2ItJmd0O2tpbGxfc2IoKS4KJiM0MzsJICogc2dldF9mYygpIGtlZXBzIGZpbmRpbmcgdGhlIHN1cGVyYmxvY2sgdW50aWwgU0JfREVBRCBpcyBzZXQsIHNvCiYjNDM7CSAqIGEgY29uY3VycmVudCBtb3VudGVyIHdhaXRzIHVudGlsIHdlIHBhc3NlZCBzYi0mZ3Q7a2lsbF9zYigpLgogCSAqLwogCXN1cGVyX3dha2Uoc2IsIFNCX0RZSU5HKTsKIAlzdXBlcl91bmxvY2tfZXhjbChzYik7CkBAIC04NzksNiAmIzQzOzg3NSw5IEBAIHN0cnVjdCBzdXBlcl9ibG9jayAqc2dldF9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsCiAJc3Bpbl9sb2NrKCZhbXA7c2JfbG9jayk7CiAJaWYgKHRlc3QpIHsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCAmYW1wO2ZjLSZndDtmc190eXBlLSZndDtmc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7CiYjNDM7CQkJLyogT25seSB1bmxpbmtlZCBhdCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZS4gKi8KJiM0MzsJCQlpZiAoc3VwZXJfZmxhZ3Mob2xkLCBTQl9ERUFEKSkKJiM0MzsJCQkJY29udGludWU7CiAJCQlpZiAodGVzdChvbGQsIGZjKSkKIAkJCQlnb3RvIHNoYXJlX2V4dGFudF9zYjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5OQoJCQkJCQkJb3V0cHV0OiAyMTIKCQkJCQkJCXRob3VnaHRzOiAxMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggYSBLTVNBTiBmdXp6aW5nIHJ1bi4gVGhlIGNoYW5nZXMgdG91Y2ggYGZzL2tlcm5mcy9tb3VudC5jYCBhbmQgYGZzL3N1cGVyLmNgLCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHN1cGVyYmxvY2sgc3R1ZmYuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyBsaWtlIGEgcmV3b3JrIG9mIHRoZSBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBzZ2V0X2ZjYCwgYGtpbGxfc3VwZXJfbm90aWZ5YCwgYHB1dF9zdXBlcmAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGRlZmVycyBgaGxpc3RfZGVsX2luaXRgIG9mIGBzX2luc3RhbmNlc2AgYW5kIGFkZHMgYSBgU0JfREVBRGAgY2hlY2sgaW4gYHNnZXRfZmNgLiBUaGVyZSBhcmUgYWxzbyBzb21lIGBwdXRfZmlsZXN5c3RlbWAgY2FsbHMgYmVpbmcgbW92ZWQuIEl0JiMzOTtzIGEgc3luY2hyb25pemF0aW9uIGFuZCBsaWZlY3ljbGUgcmVmYWN0b3IsIGVzc2VudGlhbGx5LgoKTm93LCBmb3IgS01TQU4sIHdlIG5lZWQgdG8gYXNrLCBkb2VzIHRoaXMgaW50cm9kdWNlIHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IERvZXMgaXQgZXhwb3NlIGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbj8gTm8sIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBzZWVtIHRvIHRvdWNoIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBJdCYjMzk7cyBub3QgY29weWluZyBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBpbnZvbHZlZCBpbiBhbnkgbmV3IG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhYm91dCBhZGRyZXNzaW5nIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZXMsIGFuZCBtYXliZSByZWZjb3VudCBwcm9ibGVtcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgbGlzdCBjb3JydXB0aW9uLgoKTm93LCBsZXQmIzM5O3MgY2hlY2sgdGhlIGd1aWRlbGluZXMuIFRoZSBndWlkZWxpbmVzIG1ha2UgaXQgdmVyeSBjbGVhcjogaWYgYSBidWcgY2FuIGJlIGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCBkZXRlY3RvcnMsIGEgS01TQU4gc2Vzc2lvbiBpcyBwb2ludGxlc3MuIEtBU0FOIGlzIGJ1aWx0IHRvIGNhdGNoIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIGludmFsaWQgZnJlZXMuIExvY2tkZXAgaXMgZ29vZCBmb3IgbG9ja2luZyBidWdzLiBUaGlzIHBhdGNoIGRlYWxzIHdpdGggc3luY2hyb25pemF0aW9uLCBjb25jdXJyZW5jeSwgbGlzdCBtYW5pcHVsYXRpb24sIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gSXQmIzM5O3MgYWJvdXQgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBhbmQgbGlzdCBjb3JydXB0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgZGVhbCB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHJlZmFjdG9yaW5nIHRvdWNoZXMgc3luY2hyb25pemF0aW9uLCBsaXN0IG1hbmlwdWxhdGlvbiwgYW5kIHN1cGVyYmxvY2sgbGlmZWN5Y2xlLCB0aGUgcmlza3MgYXJlIGFyb3VuZCBjb25jdXJyZW5jeSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxpc3QgY29ycnVwdGlvbiwgYWxsIG9mIHdoaWNoIGZhbGwgZmlybWx5IHVuZGVyIEtBU0FOL0xPQ0tERVAuIFRoZXJlJiMzOTtzIG5vIEtNU0FOIHJpc2sgaGVyZS4KClNvLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGltZSB0byBwcmVwYXJlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpbnN0YW5jZXMgKGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKSBhY3Jvc3MgbW91bnQgYW5kIHNodXRkb3duIHBhdGhzIChzZ2V0X2ZjLCBraWxsX3N1cGVyX25vdGlmeSwgcHV0X3N1cGVyKS4gSXQgZGVmZXJzIHVubGlua2luZyBzYi1cdTAwM2VzX2luc3RhbmNlcyBhbmQgcHV0X2ZpbGVzeXN0ZW0gdG8gcHV0X3N1cGVyLCB3aGlsZSBob2xkaW5nIHNiX2xvY2sgd2hlbiBzZXR0aW5nIFNCX0RFQUQgc28gY29uY3VycmVudCBzZ2V0X2ZjKCkgY2FsbHMgc2tpcCBkeWluZyBzdXBlcmJsb2Nrcy5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIChzYl9sb2NrKSwgbGlzdCBtYW5hZ2VtZW50LCBhbmQgb2JqZWN0IGxpZmVjeWNsZSBzeW5jaHJvbml6YXRpb24uIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0cmFja2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIHBhcnNpbmcsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29weWluZyBpcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpbnN0YW5jZXMgKGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKSBhY3Jvc3MgbW91bnQgYW5kIHNodXRkb3duIHBhdGhzIChzZ2V0X2ZjLCBraWxsX3N1cGVyX25vdGlmeSwgcHV0X3N1cGVyKS4gSXQgZGVmZXJzIHVubGlua2luZyBzYi1cdTAwM2VzX2luc3RhbmNlcyBhbmQgcHV0X2ZpbGVzeXN0ZW0gdG8gcHV0X3N1cGVyLCB3aGlsZSBob2xkaW5nIHNiX2xvY2sgd2hlbiBzZXR0aW5nIFNCX0RFQUQgc28gY29uY3VycmVudCBzZ2V0X2ZjKCkgY2FsbHMgc2tpcCBkeWluZyBzdXBlcmJsb2Nrcy5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIChzYl9sb2NrKSwgbGlzdCBtYW5hZ2VtZW50LCBhbmQgb2JqZWN0IGxpZmVjeWNsZSBzeW5jaHJvbml6YXRpb24uIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0cmFja2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIHBhcnNpbmcsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29weWluZyBpcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMjozNC4zNTQyMzc2ODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODM0NDMzNzYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLRVJORlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ2V0X2ZjXCIsXG4gICAgXCJwdXRfc3VwZXJcIixcbiAgICBcImRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyXCIsXG4gICAgXCJnZW5lcmljX3NodXRkb3duX3N1cGVyXCIsXG4gICAgXCJraWxsX2Fub25fc3VwZXJcIixcbiAgICBcImtlcm5mc19raWxsX3NiXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBzdXBlcmJsb2NrIGluc3RhbmNlcyAoZnMvc3VwZXIuYyBhbmQgZnMva2VybmZzL21vdW50LmMpIGFjcm9zcyBtb3VudCBhbmQgc2h1dGRvd24gcGF0aHMgKHNnZXRfZmMsIGtpbGxfc3VwZXJfbm90aWZ5LCBwdXRfc3VwZXIpLiBJdCBkZWZlcnMgdW5saW5raW5nIHNiLVxcdTAwM2VzX2luc3RhbmNlcyBhbmQgcHV0X2ZpbGVzeXN0ZW0gdG8gcHV0X3N1cGVyLCB3aGlsZSBob2xkaW5nIHNiX2xvY2sgd2hlbiBzZXR0aW5nIFNCX0RFQUQgc28gY29uY3VycmVudCBzZ2V0X2ZjKCkgY2FsbHMgc2tpcCBkeWluZyBzdXBlcmJsb2Nrcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcgKHNiX2xvY2spLCBsaXN0IG1hbmFnZW1lbnQsIGFuZCBvYmplY3QgbGlmZWN5Y2xlIHN5bmNocm9uaXphdGlvbi4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgaGVyZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb25zLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRyYWNrZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgcGFyc2luZywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3B5aW5nIGlzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYWNyb3NzIG1vdW50IGFuZCB1bm1vdW50IHBhdGhzIChpbiBmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykuIEl0IGRlZmVycyB1bmxpbmtpbmcgc3VwZXJibG9ja3MgZnJvbSBmc19zdXBlcnMgdW50aWwgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UgZHJvcHMgaW4gcHV0X3N1cGVyKCksIHNldHMgU0JfREVBRCB1bmRlciBzYl9sb2NrIGluIGtpbGxfc3VwZXJfbm90aWZ5KCksIGFuZCBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGR1cmluZyBzZ2V0X2ZjKCkgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYmV0d2VlbiBjb25jdXJyZW50IG1vdW50IChzZ2V0X2ZjKSBhbmQgc2h1dGRvd24vZGVhY3RpdmF0aW9uIHJvdXRpbmVzLCBtYWtpbmcgdGhpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIHdlbGwgd29ydGggZnV6emluZyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIxOjEyOjM0LjM1NDI0MzA1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MjAyODM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM5YzdmMDMzZTE3NDNlMzNlYmRlYjhiODk2ZGIyN2JhZjU0ZDcwYThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAyMToxMjozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9rZXJuZnMvbW91bnQuYyBiL2ZzL2tlcm5mcy9tb3VudC5jXFxuaW5kZXggZjE4M2E5Njc3OGI5YS4uYTU3Mzk5MDIxYzhiMCAxMDA2NDRcXG4tLS0gYS9mcy9rZXJuZnMvbW91bnQuY1xcbisrKyBiL2ZzL2tlcm5mcy9tb3VudC5jXFxuQEAgLTQzNCw4ICs0MzQsOCBAQCB2b2lkIGtlcm5mc19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZyb290LVxcdTAwM2VrZXJuZnNfc3VwZXJzX3J3c2VtKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFJlbW92ZSB0aGUgc3VwZXJibG9jayBmcm9tIGZzX3N1cGVycy9zX2luc3RhbmNlc1xcbi1cXHQgKiBzbyB3ZSBjYW4ndCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cXG4rXFx0ICogTWFyayB0aGUgc3VwZXJibG9jayBkZWFkIHNvIHNnZXRfZmMoKSBjYW4ndCBmaW5kIGl0LFxcbitcXHQgKiBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cXG4gXFx0ICovXFxuIFxcdGtpbGxfYW5vbl9zdXBlcihzYik7XFxuIFxcdGtmcmVlKGluZm8pO1xcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLjBmOWUxM2VlZGI0ZmIgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtNDMzLDE1ICs0MzMsMTkgQEAgc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcXG4gdm9pZCBwdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxcbiB7XFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnMtXFx1MDAzZXNfcGFzc2l2ZSkpIHtcXG4rXFx0XFx0c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUgPSBzLVxcdTAwM2VzX3R5cGU7XFxuIFxcbiBcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiX2xvY2spO1xcbiBcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzLVxcdTAwM2VzX2xpc3QpO1xcbitcXHRcXHRobGlzdF9kZWxfaW5pdChcXHUwMDI2cy1cXHUwMDNlc19pbnN0YW5jZXMpO1xcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuIFxcbiBcXHRcXHRXQVJOX09OKHMtXFx1MDAzZXNfZGVudHJ5X2xydS5ub2RlKTtcXG4gXFx0XFx0V0FSTl9PTihzLVxcdTAwM2VzX2lub2RlX2xydS5ub2RlKTtcXG4gXFx0XFx0V0FSTl9PTihzLVxcdTAwM2VzX21vdW50cyk7XFxuIFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZzLVxcdTAwM2VyY3UsIGRlc3Ryb3lfc3VwZXJfcmN1KTtcXG4rXFx0XFx0LyogVGhlIHVubGluayBhYm92ZSBtYXkgdG91Y2ggdHlwZS1cXHUwMDNlZnNfc3VwZXJzLCBzbyBkcm9wIGl0IGxhc3QuICovXFxuK1xcdFxcdHB1dF9maWxlc3lzdGVtKHR5cGUpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTU1OCwxNyArNTYyLDYgQEAgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0aWYgKHNiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgU0JfREVBRClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogUmVtb3ZlIGl0IGZyb20gQGZzX3N1cGVycyBzbyBpdCBpc24ndCBmb3VuZCBieSBuZXdcXG4tXFx0ICogc2dldF9mYygpIHdhbGtlcnMgYW55bW9yZS4gQW55IGNvbmN1cnJlbnQgbW91bnRlciBzdGlsbFxcbi1cXHQgKiBtYW5hZ2luZyB0byBncmFiIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyBndWFyYW50ZWVkIHRvXFxuLVxcdCAqIGFscmVhZHkgc2VlIFNCX0RZSU5HIGFuZCB3aWxsIHdhaXQgdW50aWwgd2Ugbm90aWZ5IHRoZW0gYWJvdXRcXG4tXFx0ICogU0JfREVBRC5cXG4tXFx0ICovXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2c2JfbG9jayk7XFxuLVxcdGhsaXN0X2RlbF9pbml0KFxcdTAwMjZzYi1cXHUwMDNlc19pbnN0YW5jZXMpO1xcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuLVxcbiBcXHQvKiBEcm9wIHNnZXRfZmMoKSdzIGNsYWltOyBhIG5ldmVyLXJlZ2lzdGVyZWQgZW50cnkgc3RheXMgd2l0aCB0aGUgc2IuICovXFxuIFxcdGlmIChzYi1cXHUwMDNlc19zdXBlcl9kZXYtXFx1MDAzZXNkX2Rldikge1xcbiBcXHRcXHRzdXBlcl9kZXZfcHV0KHNiLVxcdTAwM2VzX3N1cGVyX2Rldik7XFxuQEAgLTU3NywxMSArNTcwLDE1IEBAIHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBMZXQgY29uY3VycmVudCBtb3VudHMga25vdyB0aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRlYWQuXFxuLVxcdCAqIFdlIGRvbid0IG5lZWQgQHNiLVxcdTAwM2VzX3Vtb3VudCBoZXJlIGFzIGV2ZXJ5IGNvbmN1cnJlbnQgY2FsbGVyXFxuLVxcdCAqIHdpbGwgc2VlIFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZCB0aGUgc3VwZXJibG9jayBvciB3YWl0XFxuLVxcdCAqIGZvciBTQl9ERUFELlxcbitcXHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXFxuK1xcdCAqIHNiX2xvY2ssIHNvIHNldCBpdCB1bmRlciBzYl9sb2NrOiBvbmNlIHdlIHJldHVybiBubyB0ZXN0KClcXG4rXFx0ICogcnVucyBvbiB0aGlzIHN1cGVyYmxvY2sgYW55bW9yZSBhbmQgbm9uZSB3aWxsIHN0YXJ0LiBFdmVyeW9uZVxcbitcXHQgKiBlbHNlIGFscmVhZHkgc2F3IFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZGVkIHRoZSBzdXBlcmJsb2NrXFxuK1xcdCAqIG9yIHdhaXRzIGZvciBTQl9ERUFELlxcbiBcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gXFx0c3VwZXJfd2FrZShzYiwgU0JfREVBRCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTYwOCw3ICs2MDUsNiBAQCB2b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG4gXFx0XFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2cy1cXHUwMDNlc19kZW50cnlfbHJ1KTtcXG4gXFx0XFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2cy1cXHUwMDNlc19pbm9kZV9scnUpO1xcbiBcXG4tXFx0XFx0cHV0X2ZpbGVzeXN0ZW0oZnMpO1xcbiBcXHRcXHRwdXRfc3VwZXIocyk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN1cGVyX3VubG9ja19leGNsKHMpO1xcbkBAIC03OTUsMTIgKzc5MSwxMiBAQCB2b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0fVxcbiBcXHQvKlxcbiBcXHQgKiBCcm9hZGNhc3QgdG8gZXZlcnlvbmUgdGhhdCBncmFiYmVkIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSB0byB0aGlzXFxuLVxcdCAqIHN1cGVyYmxvY2sgYmVmb3JlIHdlIHJlbW92ZWQgaXQgZnJvbSBAZnNfc3VwZXJzIHRoYXQgdGhlIHN1cGVyYmxvY2tcXG4tXFx0ICogaXMgZHlpbmcuIEV2ZXJ5IHdhbGtlciBvZiBAZnNfc3VwZXJzIG91dHNpZGUgb2Ygc2dldF9mYygpIHdpbGwgbm93XFxuLVxcdCAqIGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhcyBkZWFkLlxcbitcXHQgKiBzdXBlcmJsb2NrIHRoYXQgaXQgaXMgZHlpbmcuIEV2ZXJ5IHdhbGtlciBvZiBAZnNfc3VwZXJzIG91dHNpZGVcXG4rXFx0ICogb2Ygc2dldF9mYygpIHdpbGwgbm93IGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhc1xcbitcXHQgKiBkZWFkLlxcbiBcXHQgKlxcbi1cXHQgKiBXZSBsZWF2ZSB0aGUgc3VwZXJibG9jayBvbiBAZnNfc3VwZXJzIHNvIGl0IGNhbiBiZSBmb3VuZCBieVxcbi1cXHQgKiBzZ2V0X2ZjKCkgdW50aWwgd2UgcGFzc2VkIHNiLVxcdTAwM2VraWxsX3NiKCkuXFxuK1xcdCAqIHNnZXRfZmMoKSBrZWVwcyBmaW5kaW5nIHRoZSBzdXBlcmJsb2NrIHVudGlsIFNCX0RFQUQgaXMgc2V0LCBzb1xcbitcXHQgKiBhIGNvbmN1cnJlbnQgbW91bnRlciB3YWl0cyB1bnRpbCB3ZSBwYXNzZWQgc2ItXFx1MDAzZWtpbGxfc2IoKS5cXG4gXFx0ICovXFxuIFxcdHN1cGVyX3dha2Uoc2IsIFNCX0RZSU5HKTtcXG4gXFx0c3VwZXJfdW5sb2NrX2V4Y2woc2IpO1xcbkBAIC04NzksNiArODc1LDkgQEAgc3RydWN0IHN1cGVyX2Jsb2NrICpzZ2V0X2ZjKHN0cnVjdCBmc19jb250ZXh0ICpmYyxcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gXFx0aWYgKHRlc3QpIHtcXG4gXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCBcXHUwMDI2ZmMtXFx1MDAzZWZzX3R5cGUtXFx1MDAzZWZzX3N1cGVycywgc19pbnN0YW5jZXMpIHtcXG4rXFx0XFx0XFx0LyogT25seSB1bmxpbmtlZCBhdCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZS4gKi9cXG4rXFx0XFx0XFx0aWYgKHN1cGVyX2ZsYWdzKG9sZCwgU0JfREVBRCkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRpZiAodGVzdChvbGQsIGZjKSlcXG4gXFx0XFx0XFx0XFx0Z290byBzaGFyZV9leHRhbnRfc2I7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6MzYuMDE3MzMxMDc1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NTg2NDEwNDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLRVJORlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ2V0X2ZjXCIsXG4gICAgXCJwdXRfc3VwZXJcIixcbiAgICBcImRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyXCIsXG4gICAgXCJnZW5lcmljX3NodXRkb3duX3N1cGVyXCIsXG4gICAgXCJraWxsX2Fub25fc3VwZXJcIixcbiAgICBcImtlcm5mc19raWxsX3NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYWNyb3NzIG1vdW50IGFuZCB1bm1vdW50IHBhdGhzIChpbiBmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykuIEl0IGRlZmVycyB1bmxpbmtpbmcgc3VwZXJibG9ja3MgZnJvbSBmc19zdXBlcnMgdW50aWwgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UgZHJvcHMgaW4gcHV0X3N1cGVyKCksIHNldHMgU0JfREVBRCB1bmRlciBzYl9sb2NrIGluIGtpbGxfc3VwZXJfbm90aWZ5KCksIGFuZCBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGR1cmluZyBzZ2V0X2ZjKCkgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYmV0d2VlbiBjb25jdXJyZW50IG1vdW50IChzZ2V0X2ZjKSBhbmQgc2h1dGRvd24vZGVhY3RpdmF0aW9uIHJvdXRpbmVzLCBtYWtpbmcgdGhpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIHdlbGwgd29ydGggZnV6emluZyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzljN2YwMzNlMTc0M2UzM2ViZGViOGI4OTZkYjI3YmFmNTRkNzBhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjE6MTI6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9rZXJuZnMvbW91bnQuYyBiL2ZzL2tlcm5mcy9tb3VudC5jXG5pbmRleCBmMTgzYTk2Nzc4YjlhLi5hNTczOTkwMjFjOGIwIDEwMDY0NFxuLS0tIGEvZnMva2VybmZzL21vdW50LmNcbisrKyBiL2ZzL2tlcm5mcy9tb3VudC5jXG5AQCAtNDM0LDggKzQzNCw4IEBAIHZvaWQga2VybmZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHVwX3dyaXRlKFx1MDAyNnJvb3QtXHUwMDNla2VybmZzX3N1cGVyc19yd3NlbSk7XG4gXG4gXHQvKlxuLVx0ICogUmVtb3ZlIHRoZSBzdXBlcmJsb2NrIGZyb20gZnNfc3VwZXJzL3NfaW5zdGFuY2VzXG4tXHQgKiBzbyB3ZSBjYW4ndCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cbitcdCAqIE1hcmsgdGhlIHN1cGVyYmxvY2sgZGVhZCBzbyBzZ2V0X2ZjKCkgY2FuJ3QgZmluZCBpdCxcbitcdCAqIGJlZm9yZSBmcmVlaW5nIGtlcm5mc19zdXBlcl9pbmZvLlxuIFx0ICovXG4gXHRraWxsX2Fub25fc3VwZXIoc2IpO1xuIFx0a2ZyZWUoaW5mbyk7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLjBmOWUxM2VlZGI0ZmIgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtNDMzLDE1ICs0MzMsMTkgQEAgc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcbiB2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG4ge1xuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZzLVx1MDAzZXNfcGFzc2l2ZSkpIHtcbitcdFx0c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUgPSBzLVx1MDAzZXNfdHlwZTtcbiBcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnMtXHUwMDNlc19saXN0KTtcbitcdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2cy1cdTAwM2VzX2luc3RhbmNlcyk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFxuIFx0XHRXQVJOX09OKHMtXHUwMDNlc19kZW50cnlfbHJ1Lm5vZGUpO1xuIFx0XHRXQVJOX09OKHMtXHUwMDNlc19pbm9kZV9scnUubm9kZSk7XG4gXHRcdFdBUk5fT04ocy1cdTAwM2VzX21vdW50cyk7XG4gXHRcdGNhbGxfcmN1KFx1MDAyNnMtXHUwMDNlcmN1LCBkZXN0cm95X3N1cGVyX3JjdSk7XG4rXHRcdC8qIFRoZSB1bmxpbmsgYWJvdmUgbWF5IHRvdWNoIHR5cGUtXHUwMDNlZnNfc3VwZXJzLCBzbyBkcm9wIGl0IGxhc3QuICovXG4rXHRcdHB1dF9maWxlc3lzdGVtKHR5cGUpO1xuIFx0fVxuIH1cbiBcbkBAIC01NTgsMTcgKzU2Miw2IEBAIHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRpZiAoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfREVBRClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Lypcbi1cdCAqIFJlbW92ZSBpdCBmcm9tIEBmc19zdXBlcnMgc28gaXQgaXNuJ3QgZm91bmQgYnkgbmV3XG4tXHQgKiBzZ2V0X2ZjKCkgd2Fsa2VycyBhbnltb3JlLiBBbnkgY29uY3VycmVudCBtb3VudGVyIHN0aWxsXG4tXHQgKiBtYW5hZ2luZyB0byBncmFiIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyBndWFyYW50ZWVkIHRvXG4tXHQgKiBhbHJlYWR5IHNlZSBTQl9EWUlORyBhbmQgd2lsbCB3YWl0IHVudGlsIHdlIG5vdGlmeSB0aGVtIGFib3V0XG4tXHQgKiBTQl9ERUFELlxuLVx0ICovXG4tXHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4tXHRobGlzdF9kZWxfaW5pdChcdTAwMjZzYi1cdTAwM2VzX2luc3RhbmNlcyk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbi1cbiBcdC8qIERyb3Agc2dldF9mYygpJ3MgY2xhaW07IGEgbmV2ZXItcmVnaXN0ZXJlZCBlbnRyeSBzdGF5cyB3aXRoIHRoZSBzYi4gKi9cbiBcdGlmIChzYi1cdTAwM2VzX3N1cGVyX2Rldi1cdTAwM2VzZF9kZXYpIHtcbiBcdFx0c3VwZXJfZGV2X3B1dChzYi1cdTAwM2VzX3N1cGVyX2Rldik7XG5AQCAtNTc3LDExICs1NzAsMTUgQEAgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcbiBcdC8qXG4gXHQgKiBMZXQgY29uY3VycmVudCBtb3VudHMga25vdyB0aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRlYWQuXG4tXHQgKiBXZSBkb24ndCBuZWVkIEBzYi1cdTAwM2VzX3Vtb3VudCBoZXJlIGFzIGV2ZXJ5IGNvbmN1cnJlbnQgY2FsbGVyXG4tXHQgKiB3aWxsIHNlZSBTQl9EWUlORyBhbmQgZWl0aGVyIGRpc2NhcmQgdGhlIHN1cGVyYmxvY2sgb3Igd2FpdFxuLVx0ICogZm9yIFNCX0RFQUQuXG4rXHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXG4rXHQgKiBzYl9sb2NrLCBzbyBzZXQgaXQgdW5kZXIgc2JfbG9jazogb25jZSB3ZSByZXR1cm4gbm8gdGVzdCgpXG4rXHQgKiBydW5zIG9uIHRoaXMgc3VwZXJibG9jayBhbnltb3JlIGFuZCBub25lIHdpbGwgc3RhcnQuIEV2ZXJ5b25lXG4rXHQgKiBlbHNlIGFscmVhZHkgc2F3IFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZGVkIHRoZSBzdXBlcmJsb2NrXG4rXHQgKiBvciB3YWl0cyBmb3IgU0JfREVBRC5cbiBcdCAqL1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0c3VwZXJfd2FrZShzYiwgU0JfREVBRCk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNjA4LDcgKzYwNSw2IEBAIHZvaWQgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxuIFx0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNnMtXHUwMDNlc19kZW50cnlfbHJ1KTtcbiBcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZzLVx1MDAzZXNfaW5vZGVfbHJ1KTtcbiBcbi1cdFx0cHV0X2ZpbGVzeXN0ZW0oZnMpO1xuIFx0XHRwdXRfc3VwZXIocyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdXBlcl91bmxvY2tfZXhjbChzKTtcbkBAIC03OTUsMTIgKzc5MSwxMiBAQCB2b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdH1cbiBcdC8qXG4gXHQgKiBCcm9hZGNhc3QgdG8gZXZlcnlvbmUgdGhhdCBncmFiYmVkIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSB0byB0aGlzXG4tXHQgKiBzdXBlcmJsb2NrIGJlZm9yZSB3ZSByZW1vdmVkIGl0IGZyb20gQGZzX3N1cGVycyB0aGF0IHRoZSBzdXBlcmJsb2NrXG4tXHQgKiBpcyBkeWluZy4gRXZlcnkgd2Fsa2VyIG9mIEBmc19zdXBlcnMgb3V0c2lkZSBvZiBzZ2V0X2ZjKCkgd2lsbCBub3dcbi1cdCAqIGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhcyBkZWFkLlxuK1x0ICogc3VwZXJibG9jayB0aGF0IGl0IGlzIGR5aW5nLiBFdmVyeSB3YWxrZXIgb2YgQGZzX3N1cGVycyBvdXRzaWRlXG4rXHQgKiBvZiBzZ2V0X2ZjKCkgd2lsbCBub3cgZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzXG4rXHQgKiBkZWFkLlxuIFx0ICpcbi1cdCAqIFdlIGxlYXZlIHRoZSBzdXBlcmJsb2NrIG9uIEBmc19zdXBlcnMgc28gaXQgY2FuIGJlIGZvdW5kIGJ5XG4tXHQgKiBzZ2V0X2ZjKCkgdW50aWwgd2UgcGFzc2VkIHNiLVx1MDAzZWtpbGxfc2IoKS5cbitcdCAqIHNnZXRfZmMoKSBrZWVwcyBmaW5kaW5nIHRoZSBzdXBlcmJsb2NrIHVudGlsIFNCX0RFQUQgaXMgc2V0LCBzb1xuK1x0ICogYSBjb25jdXJyZW50IG1vdW50ZXIgd2FpdHMgdW50aWwgd2UgcGFzc2VkIHNiLVx1MDAzZWtpbGxfc2IoKS5cbiBcdCAqL1xuIFx0c3VwZXJfd2FrZShzYiwgU0JfRFlJTkcpO1xuIFx0c3VwZXJfdW5sb2NrX2V4Y2woc2IpO1xuQEAgLTg3OSw2ICs4NzUsOSBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0aWYgKHRlc3QpIHtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCBcdTAwMjZmYy1cdTAwM2Vmc190eXBlLVx1MDAzZWZzX3N1cGVycywgc19pbnN0YW5jZXMpIHtcbitcdFx0XHQvKiBPbmx5IHVubGlua2VkIGF0IHRoZSBsYXN0IHBhc3NpdmUgcmVmZXJlbmNlLiAqL1xuK1x0XHRcdGlmIChzdXBlcl9mbGFncyhvbGQsIFNCX0RFQUQpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKHRlc3Qob2xkLCBmYykpXG4gXHRcdFx0XHRnb3RvIHNoYXJlX2V4dGFudF9zYjtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6MzYuMDE3MzMzMDQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI4OTg0NzUzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhIGZlbGxvdyBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgSW50ZWdyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBldmFsdWF0ZSBhIExpbnV4IGtlcm5lbCBwYXRjaC4gU3BlY2lmaWNhbGx5LCB0aGlzIG9uZSdzIGJlZW4gZmxhZ2dlZCBmb3IgdXNlIHdpdGggc3l6a2FsbGVyLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgaW50ZXJuYWwgcmVkIGZsYWdzLiBXZSdyZSBsb29raW5nIGZvciBwb3RlbnRpYWwgZnV6emluZyBzdXJmYWNlIGFuZCBlbnN1cmluZyBwcm9wZXIgY292ZXJhZ2UuXG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBkaXZlIGRlZXAgaW50byB0aGUgcGF0Y2ggaXRzZWxmIGFuZCBpdHMgc3Vycm91bmRpbmcgY29udGV4dC4gV2hlcmUgZGlkIGl0IGNvbWUgZnJvbT8gV2hhdCdzIHRoZSBjaGFuZ2UgdHJ5aW5nIHRvIGFjaGlldmU/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGFmZmVjdGVkIGZpbGVzLiBBIHF1aWNrIGxvb2sgYXQgdGhlIGBnaXRgIGhpc3RvcnkgYXJvdW5kIHRob3NlIGZpbGVzIGlzIGVzc2VudGlhbCwgdXNpbmcgdG9vbHMgbGlrZSBgZ2l0IGJsYW1lYCBvciBgZ2l0IGxvZ2Agd2l0aCB0aGUgcmVsZXZhbnQgYC0tZm9sbG93YCBhbmQgYC0tbmFtZS1vbmx5YCBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2ZWxvcG1lbnQgaGlzdG9yeSwgd2hvIGF1dGhvcmVkIHRoZSBjb2RlIGFuZCB0aGVpciBwcmlvciBjb250ZXh0LlxuXG5OZXh0IHN0ZXA6IEknbGwgbmVlZCB0byBjb25maXJtIG15IGluaXRpYWwgaHlwb3RoZXNpcyBvbiBmaWxlIGNoYW5nZXMuIEknbGwgbmVlZCB0byAqYWN0dWFsbHkqIHJlYWQgdGhlIHBhdGNoLCBidXQgYmVmb3JlIEkgZ2V0IGJvZ2dlZCBkb3duIGluIGRldGFpbHMgSSBtYXkgdXNlIGBnaXQgZ3JlcGAgd2l0aGluIHRoZSBjaGFuZ2VkIGZpbGVzIHRvIHF1aWNrbHkgaWRlbnRpZnkga2V5IGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBpbnRlcmVzdGluZyB2YXJpYWJsZXMuIFRoaXMgbWlnaHQgcXVpY2tseSBoaWdobGlnaHQgYXJlYXMgb2YgaW50ZXJlc3QgYW5kIGhlbHAgdG8gZm9jdXMgdGhlIGluLWRlcHRoIHJldmlldywgc2F2aW5nIHRpbWUuIEFsdGVybmF0aXZlbHksIGlmIHRoZSBmaWxlIHNpemUgaXMgbWFuYWdlYWJsZSwgSSBjb3VsZCBqdXN0IHJlYWQgdGhlIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMjo0OC45MTU4MTE3NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4NzgxNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNnZXRfZmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzLzlwL3Zmc19zdXBlci5jPTgyPXN0YXRpYyBpbnQgdjlmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy85cC92ZnNfc3VwZXIuYy0xMDMtXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IHY5c2VzO1xcbmZzLzlwL3Zmc19zdXBlci5jOjEwNDpcXHRzYiA9IHNnZXRfZmMoZmMsIE5VTEwsIHNldF9hbm9uX3N1cGVyX2ZjKTtcXG5mcy85cC92ZnNfc3VwZXIuYy0xMDUtXFx0aWYgKElTX0VSUihzYikpIHtcXG4tLVxcbmZzL2Fmcy9zdXBlci5jPTU0OD1zdGF0aWMgaW50IGFmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9hZnMvc3VwZXIuYy01NjgtXFx0LyogYWxsb2NhdGUgYSBkZXZpY2VsZXNzIHN1cGVyYmxvY2sgKi9cXG5mcy9hZnMvc3VwZXIuYzo1Njk6XFx0c2IgPSBzZ2V0X2ZjKGZjLFxcbmZzL2Fmcy9zdXBlci5jLTU3MC1cXHRcXHQgICAgIGFzLVxcdTAwM2VkeW5fcm9vdCA/IGFmc19keW5yb290X3Rlc3Rfc3VwZXIgOiBhZnNfdGVzdF9zdXBlcixcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmM9MTg2MT1zdGF0aWMgaW50IGJ0cmZzX2dldF90cmVlX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmMtMTg4NS1cXHQvKlxcbmZzL2J0cmZzL3N1cGVyLmM6MTg4NjpcXHQgKiBXZSBjYW5ub3QgaG9sZCB1dWlkX211dGV4IGNhbGxpbmcgc2dldF9mYygpLCBpdCB3aWxsIGxlYWQgdG8gYVxcbmZzL2J0cmZzL3N1cGVyLmMtMTg4Ny1cXHQgKiBsb2NraW5nIG9yZGVyIHJldmVyc2FsIHdpdGggc191bW91bnQuXFxuLS1cXG5mcy9idHJmcy9zdXBlci5jLTE4OTctXFxuZnMvYnRyZnMvc3VwZXIuYzoxODk4OlxcdHNiID0gc2dldF9mYyhmYywgYnRyZnNfZmNfdGVzdF9zdXBlciwgc2V0X2Fub25fc3VwZXJfZmMpO1xcbmZzL2J0cmZzL3N1cGVyLmMtMTg5OS1cXHRpZiAoSVNfRVJSKHNiKSkge1xcbi0tXFxuZnMvYnRyZnMvc3VwZXIuYz0yMDYxPXN0YXRpYyBpbnQgYnRyZnNfZ2V0X3RyZWVfc3Vidm9sKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmMtMjA3NS1cXHQgKiBvZiB0aGUgZnNfaW5mbyAobG9ja3MgYW5kIHN1Y2gpIHRvIG1ha2UgY2xlYW51cCBlYXNpZXIgaWYgd2UgZmluZCBhXFxuZnMvYnRyZnMvc3VwZXIuYzoyMDc2OlxcdCAqIHN1cGVyYmxvY2sgd2l0aCBvdXIgZ2l2ZW4gZnNfZGV2aWNlcyBsYXRlciBvbiBhdCBzZ2V0X2ZjKCkgdGltZS5cXG5mcy9idHJmcy9zdXBlci5jLTIwNzctXFx0ICovXFxuLS1cXG5mcy9idHJmcy9zdXBlci5jLTIxMDItXFx0LypcXG5mcy9idHJmcy9zdXBlci5jOjIxMDM6XFx0ICogV2hlbiB3ZSBkbyB0aGUgc2dldF9mYyB0aGlzIGdldHMgdHJhbnNmZXJyZWQgdG8gdGhlIHNiLCBzbyB3ZSBvbmx5XFxuZnMvYnRyZnMvc3VwZXIuYy0yMTA0LVxcdCAqIG5lZWQgdG8gc2V0IGl0IG9uIHRoZSBkdXBfZmMgYXMgdGhpcyBpcyB3aGF0IGNyZWF0ZXMgdGhlIHN1cGVyIGJsb2NrLlxcbi0tXFxuZnMvYnRyZnMvdm9sdW1lcy5oPTM0MT1zdHJ1Y3QgYnRyZnNfZnNfZGV2aWNlcyB7XFxuLS1cXG5mcy9idHJmcy92b2x1bWVzLmgtNDI5LVxcdCAqIGFmdGVyIGEgc3VwZXIgYmxvY2sgaXMgY3JlYXRlZC4gIEJ1dCB3ZSBjYW5ub3QgdGFrZSB1dWlkX211dGV4XFxuZnMvYnRyZnMvdm9sdW1lcy5oOjQzMDpcXHQgKiBkdXJpbmcgc2dldF9mYygpLCB0aHVzIHdlIGhhdmUgdG8gaG9sZCB0aGUgZnNfZGV2aWNlcyAobWVhbmluZyBpdFxcbmZzL2J0cmZzL3ZvbHVtZXMuaC00MzEtXFx0ICogY2Fubm90IGJlIHJlbGVhc2VkKSB1bnRpbCBhIHN1cGVyIGJsb2NrIGlzIHJldHVybmVkLlxcbi0tXFxuZnMvY2VwaC9zdXBlci5jPTEzMDk9c3RhdGljIGludCBjZXBoX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2NlcGgvc3VwZXIuYy0xMzQzLVxcdGZjLVxcdTAwM2VzX2ZzX2luZm8gPSBmc2M7XFxuZnMvY2VwaC9zdXBlci5jOjEzNDQ6XFx0c2IgPSBzZ2V0X2ZjKGZjLCBjb21wYXJlX3N1cGVyLCBjZXBoX3NldF9zdXBlcik7XFxuZnMvY2VwaC9zdXBlci5jLTEzNDUtXFx0ZmMtXFx1MDAzZXNfZnNfaW5mbyA9IE5VTEw7XFxuLS1cXG5mcy9lY3J5cHRmcy9tYWluLmM9NDM1PXN0YXRpYyBpbnQgZWNyeXB0ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZWNyeXB0ZnMvbWFpbi5jLTQ2NC1cXG5mcy9lY3J5cHRmcy9tYWluLmM6NDY1OlxcdHMgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBzZXRfYW5vbl9zdXBlcl9mYyk7XFxuZnMvZWNyeXB0ZnMvbWFpbi5jLTQ2Ni1cXHRpZiAoSVNfRVJSKHMpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jPTIyMj1zdGF0aWMgaW50IGV4dGVudHNfa3VuaXRfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTI0Mi1cXHR9XFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYzoyNDM6XFx0c2IgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBleHRfc2V0KTtcXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTI0NC1cXHRwdXRfZnNfY29udGV4dChmYyk7XFxuLS1cXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jPTEzNz1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICptYnRfZXh0NF9hbGxvY19zdXBlcl9ibG9jayh2b2lkKVxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYy0xNTEtXFxuZnMvZXh0NC9tYmFsbG9jLXRlc3QuYzoxNTI6XFx0c2IgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBtYnRfc2V0KTtcXG5mcy9leHQ0L21iYWxsb2MtdGVzdC5jLTE1My1cXHRwdXRfZnNfY29udGV4dChmYyk7XFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9MTY3Nj1zdGF0aWMgaW50IGZ1c2VfZ2V0X3RyZWVfc3VibW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZzYylcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNjg5LVxcdGZzYy1cXHUwMDNlc19mc19pbmZvID0gZm07XFxuZnMvZnVzZS9pbm9kZS5jOjE2OTA6XFx0c2IgPSBzZ2V0X2ZjKGZzYywgTlVMTCwgc2V0X2Fub25fc3VwZXJfZmMpO1xcbmZzL2Z1c2UvaW5vZGUuYy0xNjkxLVxcdGlmIChmc2MtXFx1MDAzZXNfZnNfaW5mbylcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz0xODUzPXN0YXRpYyBpbnQgZnVzZV9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZnNjKVxcbi0tXFxuZnMvZnVzZS9pbm9kZS5jLTE4OTctXFx0XFx0ZnNjLVxcdTAwM2VzZ2V0X2tleSA9IGN0eC1cXHUwMDNlZnVkO1xcbmZzL2Z1c2UvaW5vZGUuYzoxODk4OlxcdFxcdHNiID0gc2dldF9mYyhmc2MsIGZ1c2VfdGVzdF9zdXBlciwgZnVzZV9zZXRfbm9fc3VwZXIpO1xcbmZzL2Z1c2UvaW5vZGUuYy0xODk5LVxcdFxcdGVyciA9IFBUUl9FUlJfT1JfWkVSTyhzYik7XFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTE2ODE9c3RhdGljIGludCB2aXJ0aW9fZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZzYylcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTczMy1cXHRmc2MtXFx1MDAzZXNfZnNfaW5mbyA9IGZtO1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTczNDpcXHRzYiA9IHNnZXRfZmMoZnNjLCB2aXJ0aW9fZnNfdGVzdF9zdXBlciwgc2V0X2Fub25fc3VwZXJfZmMpO1xcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTczNS1cXHRpZiAoZnNjLVxcdTAwM2VzX2ZzX2luZm8pXFxuLS1cXG5mcy9nZnMyL29wc19mc3R5cGUuYz0xNjczPXN0YXRpYyBpbnQgZ2ZzMl9tZXRhX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2dmczIvb3BzX2ZzdHlwZS5jLTE2OTAtXFx0ZmMtXFx1MDAzZXNnZXRfa2V5ID0gcGF0aC5kZW50cnktXFx1MDAzZWRfc2ItXFx1MDAzZXNfYmRldjtcXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNjkxOlxcdHMgPSBzZ2V0X2ZjKGZjLCB0ZXN0X21ldGFfc3VwZXIsIHNldF9tZXRhX3N1cGVyKTtcXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNjkyLVxcdHBhdGhfcHV0KFxcdTAwMjZwYXRoKTtcXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jPTM2Nj1pbnQga2VybmZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jLTM4MS1cXHRmYy1cXHUwMDNlc19mc19pbmZvID0gaW5mbztcXG5mcy9rZXJuZnMvbW91bnQuYzozODI6XFx0c2IgPSBzZ2V0X2ZjKGZjLCBrZXJuZnNfdGVzdF9zdXBlciwga2VybmZzX3NldF9zdXBlcik7XFxuZnMva2VybmZzL21vdW50LmMtMzgzLVxcdGlmIChJU19FUlIoc2IpKVxcbi0tXFxuZnMva2VybmZzL21vdW50LmM9NDI3PXZvaWQga2VybmZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jLTQzNi1cXHQvKlxcbmZzL2tlcm5mcy9tb3VudC5jOjQzNzpcXHQgKiBNYXJrIHRoZSBzdXBlcmJsb2NrIGRlYWQgc28gc2dldF9mYygpIGNhbid0IGZpbmQgaXQsXFxuZnMva2VybmZzL21vdW50LmMtNDM4LVxcdCAqIGJlZm9yZSBmcmVlaW5nIGtlcm5mc19zdXBlcl9pbmZvLlxcbi0tXFxuZnMvbmZzL3N1cGVyLmM9MTI5Nj1pbnQgbmZzX2dldF90cmVlX2NvbW1vbihzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9uZnMvc3VwZXIuYy0xMzE2LVxcdGZjLVxcdTAwM2VzX2ZzX2luZm8gPSBzZXJ2ZXI7XFxuZnMvbmZzL3N1cGVyLmM6MTMxNzpcXHRzID0gc2dldF9mYyhmYywgY29tcGFyZV9zdXBlciwgbmZzX3NldF9zdXBlcik7XFxuZnMvbmZzL3N1cGVyLmMtMTMxOC1cXHRmYy1cXHUwMDNlc19mc19pbmZvID0gTlVMTDtcXG4tLVxcbmZzL29yYW5nZWZzL3N1cGVyLmM9NDU1PXN0YXRpYyBpbnQgb3JhbmdlZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvb3JhbmdlZnMvc3VwZXIuYy00ODktXFxuZnMvb3JhbmdlZnMvc3VwZXIuYzo0OTA6XFx0c2IgPSBzZ2V0X2ZjKGZjLCBOVUxMLCBzZXRfYW5vbl9zdXBlcl9mYyk7XFxuZnMvb3JhbmdlZnMvc3VwZXIuYy00OTEtXFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jPTk5MD1jaWZzX3NtYjNfZG9fbW91bnQoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc21iM19mc19jb250ZXh0ICpvbGRfY3R4KVxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMDQyLVxcdCAqIGlnbm9yZWQgdGhlIGNhbGxlci1zdXBwbGllZCBTQl8qIGZsYWdzLiBQcmVzZXJ2ZSB0aGF0IGJlaGF2aW91ciBieVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTA0MzpcXHQgKiBvdmVycmlkaW5nIGZjLVxcdTAwM2VzYl9mbGFncyBhcm91bmQgdGhlIHNnZXRfZmMoKSBjYWxsLlxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTA0NC1cXHQgKlxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTA0NTpcXHQgKiBIYW5kIGNpZnNfc2IgdG8gc2dldF9mYygpIHZpYSBmYy1cXHUwMDNlc19mc19pbmZvOyBzZ2V0X2ZjKCkgY29waWVzIGl0XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMDQ2LVxcdCAqIG9udG8gc2ItXFx1MDAzZXNfZnNfaW5mbyBiZWZvcmUgcnVubmluZyBzZXQoKSBhbmQgY2xlYXJzIGZjLVxcdTAwM2VzX2ZzX2luZm9cXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTA1My1cXHRmYy1cXHUwMDNlc2dldF9rZXkgPSBcXHUwMDI2bW50X2RhdGE7XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxMDU0OlxcdHNiID0gc2dldF9mYyhmYywgY2lmc19tYXRjaF9zdXBlciwgc2V0X2Fub25fc3VwZXJfZmMpO1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTA1NS1cXHRmYy1cXHUwMDNlc2dldF9rZXkgPSBOVUxMO1xcbi0tXFxuZnMvc3VwZXIuYz0zMzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcXG4tLVxcbmZzL3N1cGVyLmMtMzUwLVxcdC8qXFxuZnMvc3VwZXIuYzozNTE6XFx0ICogc2dldF9mYygpIGNhbiBoYXZlIHNfdW1vdW50IHJlY3Vyc2lvbi5cXG5mcy9zdXBlci5jLTM1Mi1cXHQgKlxcbi0tXFxuZnMvc3VwZXIuYz01NTc9c3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3N1cGVyLmMtNTY0LVxcbmZzL3N1cGVyLmM6NTY1OlxcdC8qIERyb3Agc2dldF9mYygpJ3MgY2xhaW07IGEgbmV2ZXItcmVnaXN0ZXJlZCBlbnRyeSBzdGF5cyB3aXRoIHRoZSBzYi4gKi9cXG5mcy9zdXBlci5jLTU2Ni1cXHRpZiAoc2ItXFx1MDAzZXNfc3VwZXJfZGV2LVxcdTAwM2VzZF9kZXYpIHtcXG4tLVxcbmZzL3N1cGVyLmMtNTcyLVxcdCAqIExldCBjb25jdXJyZW50IG1vdW50cyBrbm93IHRoYXQgdGhpcyB0aGluZyBpcyByZWFsbHkgZGVhZC5cXG5mcy9zdXBlci5jOjU3MzpcXHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXFxuZnMvc3VwZXIuYy01NzQtXFx0ICogc2JfbG9jaywgc28gc2V0IGl0IHVuZGVyIHNiX2xvY2s6IG9uY2Ugd2UgcmV0dXJuIG5vIHRlc3QoKVxcbi0tXFxuZnMvc3VwZXIuYz02MzI9RVhQT1JUX1NZTUJPTChkZWFjdGl2YXRlX3N1cGVyKTtcXG4tLVxcbmZzL3N1cGVyLmMtNjM4LSAqIEFjcXVpcmUgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIG9uIGEgc3VwZXJibG9jayBhbmQgdHJ5IHRvIHRyYWRlIGl0IGZvclxcbmZzL3N1cGVyLmM6NjM5OiAqIGFuIGFjdGl2ZSByZWZlcmVuY2UuIFRoaXMgaXMgdXNlZCBpbiBzZ2V0X2ZjKCkgdG8gd2FpdCBmb3IgYVxcbmZzL3N1cGVyLmMtNjQwLSAqIHN1cGVyYmxvY2sgdG8gZWl0aGVyIGJlY29tZSBTQl9CT1JOIG9yIGZvciBpdCB0byBwYXNzIHRocm91Z2hcXG4tLVxcbmZzL3N1cGVyLmM9NzM3PXZvaWQgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvc3VwZXIuYy03OTQtXFx0ICogc3VwZXJibG9jayB0aGF0IGl0IGlzIGR5aW5nLiBFdmVyeSB3YWxrZXIgb2YgQGZzX3N1cGVycyBvdXRzaWRlXFxuZnMvc3VwZXIuYzo3OTU6XFx0ICogb2Ygc2dldF9mYygpIHdpbGwgbm93IGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhc1xcbmZzL3N1cGVyLmMtNzk2LVxcdCAqIGRlYWQuXFxuZnMvc3VwZXIuYy03OTctXFx0ICpcXG5mcy9zdXBlci5jOjc5ODpcXHQgKiBzZ2V0X2ZjKCkga2VlcHMgZmluZGluZyB0aGUgc3VwZXJibG9jayB1bnRpbCBTQl9ERUFEIGlzIHNldCwgc29cXG5mcy9zdXBlci5jLTc5OS1cXHQgKiBhIGNvbmN1cnJlbnQgbW91bnRlciB3YWl0cyB1bnRpbCB3ZSBwYXNzZWQgc2ItXFx1MDAzZWtpbGxfc2IoKS5cXG4tLVxcbmZzL3N1cGVyLmM9ODEzPWJvb2wgbW91bnRfY2FwYWJsZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9zdXBlci5jLTgyMS0vKipcXG5mcy9zdXBlci5jOjgyMjogKiBzZ2V0X2ZjIC0gRmluZCBvciBjcmVhdGUgYSBzdXBlcmJsb2NrXFxuZnMvc3VwZXIuYy04MjMtICogQGZjOlxcdEZpbGVzeXN0ZW0gY29udGV4dC5cXG4tLVxcbmZzL3N1cGVyLmMtODUyLSAqL1xcbmZzL3N1cGVyLmM6ODUzOnN0cnVjdCBzdXBlcl9ibG9jayAqc2dldF9mYyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuZnMvc3VwZXIuYy04NTQtXFx0XFx0XFx0ICAgIGludCAoKnRlc3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfY29udGV4dCAqKSxcXG4tLVxcbmZzL3N1cGVyLmMtOTM0LX1cXG5mcy9zdXBlci5jOjkzNTpFWFBPUlRfU1lNQk9MKHNnZXRfZmMpO1xcbmZzL3N1cGVyLmMtOTM2LVxcbi0tXFxuZnMvc3VwZXIuYz0xMzkxPXN0YXRpYyBpbnQgdmZzX2dldF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsXFxuLS1cXG5mcy9zdXBlci5jLTEzOTgtXFxuZnMvc3VwZXIuYzoxMzk5OlxcdHNiID0gc2dldF9mYyhmYywgdGVzdCwgc2V0X2Fub25fc3VwZXJfZmMpO1xcbmZzL3N1cGVyLmMtMTQwMC1cXHRpZiAoSVNfRVJSKHNiKSlcXG4tLVxcbmZzL3N1cGVyLmM9MTQ4Mj1zdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZGV2KHN0cnVjdCBmc19jb250ZXh0ICpmYywgZGV2X3QgZGV2KVxcbi0tXFxuZnMvc3VwZXIuYy0xNDg0LVxcdGZjLVxcdTAwM2VzZ2V0X2tleSA9IFxcdTAwMjZkZXY7XFxuZnMvc3VwZXIuYzoxNDg1OlxcdHJldHVybiBzZ2V0X2ZjKGZjLCBzdXBlcl9zX2Rldl90ZXN0LCBzdXBlcl9zX2Rldl9zZXQpO1xcbmZzL3N1cGVyLmMtMTQ4Ni19XFxuLS1cXG5mcy9zdXBlci5jPTE3OTg9aW50IHNldHVwX2JkZXZfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNiX2ZsYWdzLFxcbi0tXFxuZnMvc3VwZXIuYy0xODIyLVxcbmZzL3N1cGVyLmM6MTgyMzpcXHQvKiBUaGUgc2dldF9mYygpIGVudHJ5IGlzIGFscmVhZHkgcHVibGlzaGVkOyBwYWlycyB3aXRoIGJkZXZfZnJlZXplKCkuICovXFxuZnMvc3VwZXIuYy0xODI0LVxcdHNtcF9tYigpO1xcbi0tXFxuZnMvdWJpZnMvc3VwZXIuYz0yMjMyPXN0YXRpYyBpbnQgdWJpZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdWJpZnMvc3VwZXIuYy0yMjY2LVxcbmZzL3ViaWZzL3N1cGVyLmM6MjI2NzpcXHRzYiA9IHNnZXRfZmMoZmMsIHNiX3Rlc3QsIHNldF9hbm9uX3N1cGVyX2ZjKTtcXG5mcy91Ymlmcy9zdXBlci5jLTIyNjgtXFx0aWYgKElTX0VSUihzYikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6NDkuOTA0NjAwMjM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4MTI2Nzc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpbGVzeXN0ZW0gQ2hhbmdlcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGZpbGVzeXN0ZW0gbW9kaWZpY2F0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBkaWZmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZWxldmFudCBzZWN0aW9ucy4gTXkgZm9jdXMgaXMgb24gdGhlIGNoYW5nZXMgdG8gYGZzL3N1cGVyLmNgIGFuZCBgZnMva2VybmZzL21vdW50LmNgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgb2YgdGhpcyBsaWtlbHkgcmVzaWRlcy4gSSdsbCByZWFkIHRocm91Z2ggYGZzL3N1cGVyLmNgIGZpcnN0LCBzcGVjaWZpY2FsbHkgbGluZXMgNDIwLTYyMCBhbmQgdGhlbiBsaW5lcyA4NjAtOTQwLCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZpbGUuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIHRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzIGluIHRoaXMgcmFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMjo1Mi4xODU4NzA5MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0fVxcbiA0MjY6XFx0XFxuIDQyNzpcXHQvKiBTdXBlcmJsb2NrIHJlZmNvdW50aW5nICAqL1xcbiA0Mjg6XFx0XFxuIDQyOTpcXHQvKlxcbiA0MzA6XFx0ICogRHJvcCBhIHN1cGVyYmxvY2sncyBwYXNzaXZlIHJlZmVyZW5jZS4gIE11c3QgYmUgY2FsbGVkIFdJVEhPVVQgc2JfbG9jayBoZWxkO1xcbiA0MzE6XFx0ICogcHV0X3N1cGVyKCkgYWNxdWlyZXMgc2JfbG9jayBpdHNlbGYgd2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIGRyb3BwZWQuXFxuIDQzMjpcXHQgKi9cXG4gNDMzOlxcdHZvaWQgcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG4gNDM0OlxcdHtcXG4gNDM1OlxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnMtXFx1MDAzZXNfcGFzc2l2ZSkpIHtcXG4gNDM2OlxcdFxcdFxcdHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlID0gcy1cXHUwMDNlc190eXBlO1xcbiA0Mzc6XFx0XFxuIDQzODpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiX2xvY2spO1xcbiA0Mzk6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cy1cXHUwMDNlc19saXN0KTtcXG4gNDQwOlxcdFxcdFxcdGhsaXN0X2RlbF9pbml0KFxcdTAwMjZzLVxcdTAwM2VzX2luc3RhbmNlcyk7XFxuIDQ0MTpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuIDQ0MjpcXHRcXG4gNDQzOlxcdFxcdFxcdFdBUk5fT04ocy1cXHUwMDNlc19kZW50cnlfbHJ1Lm5vZGUpO1xcbiA0NDQ6XFx0XFx0XFx0V0FSTl9PTihzLVxcdTAwM2VzX2lub2RlX2xydS5ub2RlKTtcXG4gNDQ1OlxcdFxcdFxcdFdBUk5fT04ocy1cXHUwMDNlc19tb3VudHMpO1xcbiA0NDY6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnMtXFx1MDAzZXJjdSwgZGVzdHJveV9zdXBlcl9yY3UpO1xcbiA0NDc6XFx0XFx0XFx0LyogVGhlIHVubGluayBhYm92ZSBtYXkgdG91Y2ggdHlwZS1cXHUwMDNlZnNfc3VwZXJzLCBzbyBkcm9wIGl0IGxhc3QuICovXFxuIDQ0ODpcXHRcXHRcXHRwdXRfZmlsZXN5c3RlbSh0eXBlKTtcXG4gNDQ5OlxcdFxcdH1cXG4gNDUwOlxcdH1cXG4gNDUxOlxcdFxcbiA0NTI6XFx0c3RydWN0IHN1cGVyX2RldiB7XFxuIDQ1MzpcXHRcXHRkZXZfdFxcdFxcdFxcdHNkX2RldjtcXG4gNDU0OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9ja1xcdCpzZF9zYjtcXG4gNDU1OlxcdFxcdHJlZmNvdW50X3RcXHRcXHRzZF9yZWY7XFxuIDQ1NjpcXHRcXHRzdHJ1Y3QgcmhsaXN0X2hlYWRcXHRzZF9ub2RlO1xcbiA0NTc6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0c2RfcmN1O1xcbiA0NTg6XFx0fTtcXG4gNDU5OlxcdFxcbiA0NjA6XFx0c3RhdGljIHN0cnVjdCByaGx0YWJsZSBzdXBlcl9kZXZfdGFibGU7XFxuIDQ2MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHN1cGVyX2Rldl9wYXJhbXMgPSB7XFxuIDQ2MjpcXHRcXHQua2V5X2xlblxcdD0gc2l6ZW9mKGRldl90KSxcXG4gNDYzOlxcdFxcdC5rZXlfb2Zmc2V0XFx0PSBvZmZzZXRvZihzdHJ1Y3Qgc3VwZXJfZGV2LCBzZF9kZXYpLFxcbiA0NjQ6XFx0XFx0LmhlYWRfb2Zmc2V0XFx0PSBvZmZzZXRvZihzdHJ1Y3Qgc3VwZXJfZGV2LCBzZF9ub2RlKSxcXG4gNDY1OlxcdH07XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfZGV2ICpzdXBlcl9kZXZfYWxsb2MoZGV2X3QgZGV2LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiA0Njg6XFx0e1xcbiA0Njk6XFx0XFx0c3RydWN0IHN1cGVyX2RldiAqZnNkO1xcbiA0NzA6XFx0XFxuIDQ3MTpcXHRcXHRmc2QgPSBremFsbG9jX29iaigqZnNkKTtcXG4gNDcyOlxcdFxcdGlmICghZnNkKVxcbiA0NzM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQ3NDpcXHRcXHRmc2QtXFx1MDAzZXNkX2RldiA9IGRldjtcXG4gNDc1OlxcdFxcdGZzZC1cXHUwMDNlc2Rfc2IgPSBzYjtcXG4gNDc2OlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2ZnNkLVxcdTAwM2VzZF9yZWYsIDEpO1xcbiA0Nzc6XFx0XFx0cmV0dXJuIGZzZDtcXG4gNDc4OlxcdH1cXG4gNDc5OlxcdFxcbiA0ODA6XFx0c3RhdGljIHZvaWQgc3VwZXJfZGV2X3B1dChzdHJ1Y3Qgc3VwZXJfZGV2ICpmc2QpXFxuIDQ4MTpcXHR7XFxuIDQ4MjpcXHRcXHQvKiBVbmxpbmsgb25seSBvbmNlIHVucGlubmVkLCBzbyBhIGN1cnNvciBuZXZlciByZXN1bWVzIGZyb20gYSByZW1vdmVkIG5vZGUuICovXFxuIDQ4MzpcXHRcXHRpZiAoZnNkIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2ZnNkLVxcdTAwM2VzZF9yZWYpKSB7XFxuIDQ4NDpcXHRcXHRcXHRyaGx0YWJsZV9yZW1vdmUoXFx1MDAyNnN1cGVyX2Rldl90YWJsZSwgXFx1MDAyNmZzZC1cXHUwMDNlc2Rfbm9kZSwgc3VwZXJfZGV2X3BhcmFtcyk7XFxuIDQ4NTpcXHRcXHRcXHRwdXRfc3VwZXIoZnNkLVxcdTAwM2VzZF9zYik7XFxuIDQ4NjpcXHRcXHRcXHRrZnJlZV9yY3UoZnNkLCBzZF9yY3UpO1xcbiA0ODc6XFx0XFx0fVxcbiA0ODg6XFx0fVxcbiA0ODk6XFx0XFxuIDQ5MDpcXHR2b2lkIF9faW5pdCBzdXBlcl9kZXZfaW5pdCh2b2lkKVxcbiA0OTE6XFx0e1xcbiA0OTI6XFx0XFx0aWYgKHJobHRhYmxlX2luaXQoXFx1MDAyNnN1cGVyX2Rldl90YWJsZSwgXFx1MDAyNnN1cGVyX2Rldl9wYXJhbXMpKVxcbiA0OTM6XFx0XFx0XFx0cGFuaWMoXFxcIlZGUzogQ2Fubm90IGluaXRpYWxpc2Ugc3VwZXJfZGV2X3RhYmxlXFxcXG5cXFwiKTtcXG4gNDk0OlxcdH1cXG4gNDk1OlxcdFxcbiA0OTY6XFx0c3RhdGljIGludCBzdXBlcl9kZXZfaW5zZXJ0KHN0cnVjdCBzdXBlcl9kZXYgKmZzZClcXG4gNDk3OlxcdHtcXG4gNDk4OlxcdFxcdGludCBlcnI7XFxuIDQ5OTpcXHRcXG4gNTAwOlxcdFxcdGVyciA9IHJobHRhYmxlX2luc2VydChcXHUwMDI2c3VwZXJfZGV2X3RhYmxlLCBcXHUwMDI2ZnNkLVxcdTAwM2VzZF9ub2RlLCBzdXBlcl9kZXZfcGFyYW1zKTtcXG4gNTAxOlxcdFxcdGlmICghZXJyKVxcbiA1MDI6XFx0XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZmc2QtXFx1MDAzZXNkX3NiLVxcdTAwM2VzX3Bhc3NpdmUpO1xcbiA1MDM6XFx0XFx0cmV0dXJuIGVycjtcXG4gNTA0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6NTIuMTg2MDkxNTM4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI5Mzk3MTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHNlY3Rpb25zLCB0YWlsb3JlZCBmb3Igc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMga2VybmVsIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBmcy9zdXBlci5jYCBTZWN0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBmcy9zdXBlci5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gbGluZXMgNTUwIHRocm91Z2ggNjIwIGFuZCB0aGVuIGp1bXBpbmcgYWhlYWQgdG8gbGluZXMgODYwIHRocm91Z2ggOTIwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcyBiZWluZyBkaXNjdXNzZWQgaW4gdGhvc2UgcmFuZ2VzLiBHaXZlbiB0aGUgZmlsZSBhbmQgdGhlc2UgbGluZSBudW1iZXJzLCBJJ20gYW50aWNpcGF0aW5nIHRoYXQgSSdsbCBmaW5kIGNvZGUgcmVsYXRlZCB0byBzdXBlcmJsb2NrIG9wZXJhdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIGhvdyB0aGUgc3VwZXJibG9jayBpcyBjcmVhdGVkIGFuZCBpbml0aWFsaXplZCwgcG90ZW50aWFsbHkgY292ZXJpbmcgYXNwZWN0cyBsaWtlIHJlYWRpbmcgaXQgZnJvbSBkaXNrLCB2YWxpZGF0aW5nIGl0cyBjb250ZW50cywgYW5kIGFueSBhc3NvY2lhdGVkIGVycm9yIGhhbmRsaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIHJlZ2FyZGluZyBkaWZmZXJlbnQgZmlsZXN5c3RlbSB0eXBlcy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQsIHNpbmNlIGBmcy9zdXBlci5jYCBpcyB0aGUgY29yZSBvZiBob3cgZmlsZXN5c3RlbXMgYXJlIG1vdW50ZWQgYW5kIG1hbmFnZWQuIEkgbmVlZCB0byBiZSBzdXJlIGFueSBsb2NraW5nIGlzIHVzZWQgY29ycmVjdGx5LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29kZSBkZWFscyB3aXRoIHNwZWNpZmljIHN1cGVyYmxvY2sgb3BlcmF0aW9ucywgYW5kIGlmIHNvLCBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaG9va2VkIGludG8gdGhlIGdlbmVyaWMgVkZTIGZyYW1ld29yay4gQW55IGludGVyYWN0aW9ucyB3aXRoIHVuZGVybHlpbmcgZGV2aWNlIGRyaXZlcnMgb3IgYmxvY2sgbGF5ZXIgY29tcG9uZW50cyB3aWxsIGJlIGNyaXRpY2FsLlxuXG5GdXJ0aGVybW9yZSwgSSdtIGFudGljaXBhdGluZyBwb3RlbnRpYWwgZGlzY3Vzc2lvbnMgb2YgZmlsZXN5c3RlbS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBvciBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgaWYgdGhvc2UgbGluZXMgY292ZXIgYXNwZWN0cyBsaWtlIHNldHRpbmcgdXAgdGhlIHJvb3QgaW5vZGUgb3IgbWFuYWdpbmcgdGhlIGZyZWUgc3BhY2Ugb24gdGhlIGZpbGVzeXN0ZW0uIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMgc3VwZXJibG9jayBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY2llcywgYW5kIGhvdyB0aGV5IHdvdWxkIGJlIHJlc29sdmVkIG9yIGxvZ2dlZC4gSSBhbHNvIG1pZ2h0IHNlZSBhbiBhbmFseXNpcyBvZiBob3cgbWV0YWRhdGEgaXMgaGFuZGxlZCBhbmQgdHJhY2tlZC4gSSdsbCBhbHNvIHRyeSB0byB0cmFjayBob3cgdGhlIGZpbGUgc3lzdGVtJ3Mgb24tZGlzayBmb3JtYXQgaXMgZGVmaW5lZCBhbmQgdXRpbGl6ZWQgaW4gdGhpcyBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMjo1NS40ODAwNjY4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU1MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1MDpcXHRcXHRzYl9kZXYgPSBzdXBlcl9kZXZfZ2V0KHJjdV9kZXJlZmVyZW5jZV9hbGwocHJldi1cXHUwMDNlc2Rfbm9kZS5uZXh0KSk7XFxuIDU1MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0c3VwZXJfZGV2X3B1dChwcmV2KTtcXG4gNTU0OlxcdFxcdHJldHVybiBzYl9kZXY7XFxuIDU1NTpcXHR9XFxuIDU1NjpcXHRcXG4gNTU3OlxcdHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIDU1ODpcXHR7XFxuIDU1OTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChcXHUwMDI2c2ItXFx1MDAzZXNfdW1vdW50KTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0LyogYWxyZWFkeSBub3RpZmllZCBlYXJsaWVyICovXFxuIDU2MjpcXHRcXHRpZiAoc2ItXFx1MDAzZXNfZmxhZ3MgXFx1MDAyNiBTQl9ERUFEKVxcbiA1NjM6XFx0XFx0XFx0cmV0dXJuO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHQvKiBEcm9wIHNnZXRfZmMoKSdzIGNsYWltOyBhIG5ldmVyLXJlZ2lzdGVyZWQgZW50cnkgc3RheXMgd2l0aCB0aGUgc2IuICovXFxuIDU2NjpcXHRcXHRpZiAoc2ItXFx1MDAzZXNfc3VwZXJfZGV2LVxcdTAwM2VzZF9kZXYpIHtcXG4gNTY3OlxcdFxcdFxcdHN1cGVyX2Rldl9wdXQoc2ItXFx1MDAzZXNfc3VwZXJfZGV2KTtcXG4gNTY4OlxcdFxcdFxcdHNiLVxcdTAwM2VzX3N1cGVyX2RldiA9IE5VTEw7XFxuIDU2OTpcXHRcXHR9XFxuIDU3MDpcXHRcXG4gNTcxOlxcdFxcdC8qXFxuIDU3MjpcXHRcXHQgKiBMZXQgY29uY3VycmVudCBtb3VudHMga25vdyB0aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRlYWQuXFxuIDU3MzpcXHRcXHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXFxuIDU3NDpcXHRcXHQgKiBzYl9sb2NrLCBzbyBzZXQgaXQgdW5kZXIgc2JfbG9jazogb25jZSB3ZSByZXR1cm4gbm8gdGVzdCgpXFxuIDU3NTpcXHRcXHQgKiBydW5zIG9uIHRoaXMgc3VwZXJibG9jayBhbnltb3JlIGFuZCBub25lIHdpbGwgc3RhcnQuIEV2ZXJ5b25lXFxuIDU3NjpcXHRcXHQgKiBlbHNlIGFscmVhZHkgc2F3IFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZGVkIHRoZSBzdXBlcmJsb2NrXFxuIDU3NzpcXHRcXHQgKiBvciB3YWl0cyBmb3IgU0JfREVBRC5cXG4gNTc4OlxcdFxcdCAqL1xcbiA1Nzk6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gNTgwOlxcdFxcdHN1cGVyX3dha2Uoc2IsIFNCX0RFQUQpO1xcbiA1ODE6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiX2xvY2spO1xcbiA1ODI6XFx0fVxcbiA1ODM6XFx0XFxuIDU4NDpcXHQvKipcXG4gNTg1OlxcdCAqXFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJcXHQtXFx0ZHJvcCBhbiBhY3RpdmUgcmVmZXJlbmNlIHRvIHN1cGVyYmxvY2tcXG4gNTg2OlxcdCAqXFx0QHM6IHN1cGVyYmxvY2sgdG8gZGVhY3RpdmF0ZVxcbiA1ODc6XFx0ICpcXG4gNTg4OlxcdCAqXFx0RHJvcHMgYW4gYWN0aXZlIHJlZmVyZW5jZSB0byBzdXBlcmJsb2NrLCBjb252ZXJ0aW5nIGl0IGludG8gYSB0ZW1wb3JhcnlcXG4gNTg5OlxcdCAqXFx0b25lIGlmIHRoZXJlIGlzIG5vIG90aGVyIGFjdGl2ZSByZWZlcmVuY2VzIGxlZnQuICBJbiB0aGF0IGNhc2Ugd2VcXG4gNTkwOlxcdCAqXFx0dGVsbCBmcyBkcml2ZXIgdG8gc2h1dCBpdCBkb3duIGFuZCBkcm9wIHRoZSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHdlXFxuIDU5MTpcXHQgKlxcdGhhZCBqdXN0IGFjcXVpcmVkLlxcbiA1OTI6XFx0ICpcXG4gNTkzOlxcdCAqXFx0Q2FsbGVyIGhvbGRzIGV4Y2x1c2l2ZSBsb2NrIG9uIHN1cGVyYmxvY2s7IHRoYXQgbG9jayBpcyByZWxlYXNlZC5cXG4gNTk0OlxcdCAqL1xcbiA1OTU6XFx0dm9pZCBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXFxuIDU5NjpcXHR7XFxuIDU5NzpcXHRcXHRzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnMgPSBzLVxcdTAwM2VzX3R5cGU7XFxuIDU5ODpcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cy1cXHUwMDNlc19hY3RpdmUpKSB7XFxuIDU5OTpcXHRcXHRcXHRzaHJpbmtlcl9mcmVlKHMtXFx1MDAzZXNfc2hyaW5rKTtcXG4gNjAwOlxcdFxcdFxcdGZzLVxcdTAwM2VraWxsX3NiKHMpO1xcbiA2MDE6XFx0XFxuIDYwMjpcXHRcXHRcXHRraWxsX3N1cGVyX25vdGlmeShzKTtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0XFx0LyogbGlzdF9scnVfZGVzdHJveSgpIG1heSBzbGVlcDsgcHV0X3N1cGVyKCkgY2FsbGVycyBtYXkgbm90LiAqL1xcbiA2MDU6XFx0XFx0XFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2cy1cXHUwMDNlc19kZW50cnlfbHJ1KTtcXG4gNjA2OlxcdFxcdFxcdGxpc3RfbHJ1X2Rlc3Ryb3koXFx1MDAyNnMtXFx1MDAzZXNfaW5vZGVfbHJ1KTtcXG4gNjA3OlxcdFxcbiA2MDg6XFx0XFx0XFx0cHV0X3N1cGVyKHMpO1xcbiA2MDk6XFx0XFx0fSBlbHNlIHtcXG4gNjEwOlxcdFxcdFxcdHN1cGVyX3VubG9ja19leGNsKHMpO1xcbiA2MTE6XFx0XFx0fVxcbiA2MTI6XFx0fVxcbiA2MTM6XFx0XFxuIDYxNDpcXHRFWFBPUlRfU1lNQk9MKGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKTtcXG4gNjE1OlxcdFxcbiA2MTY6XFx0LyoqXFxuIDYxNzpcXHQgKlxcdGRlYWN0aXZhdGVfc3VwZXJcXHQtXFx0ZHJvcCBhbiBhY3RpdmUgcmVmZXJlbmNlIHRvIHN1cGVyYmxvY2tcXG4gNjE4OlxcdCAqXFx0QHM6IHN1cGVyYmxvY2sgdG8gZGVhY3RpdmF0ZVxcbiA2MTk6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6NTUuNDgwMjc0MTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzA1MDI1OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoYXQgc2VjdGlvbiBvZiBgZnMvc3VwZXIuY2AuXG5cbioqRGl2aW5nIGludG8gdGhlIFN1cGVyYmxvY2sgQ29kZSoqXG5cbkFscmlnaHQsIEknbSBmb2N1c2luZyBpbiBvbiBsaW5lcyA4NjAgdG8gOTM1IG9mIGBmcy9zdXBlci5jYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgc3VwZXJibG9jayBoYW5kbGluZyBpcyB0YWtpbmcgcGxhY2UuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uLCBtb3VudGluZywgdW5tb3VudGluZywgYW5kIHBvc3NpYmx5IHNvbWUgbWFuYWdlbWVudCBvZiB0aGUgc3VwZXJibG9jaydzIGluLW1lbW9yeSByZXByZXNlbnRhdGlvbi4gSSBrbm93IHRoaXMgYXJlYSBpbnRpbWF0ZWx5LCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIHRoZSBtYWluIGZ1bmN0aW9ucyBjYWxsZWQuIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGJlaW5nIHVzZWQuIEkgd2lsbCBiZSBsb29raW5nIG91dCBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEknbSBnb2luZyB0byBiZSBsb29raW5nIGZvciBob3cgdGhlIHN1cGVyYmxvY2sgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIG9yIHN0b3JhZ2UuIEFueSBpbnRlcmVzdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgd2lsbCBiZSBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LCBlc3BlY2lhbGx5IHJlYWQtd3JpdGUgbG9ja3Mgb3Igc3BpbmxvY2tzIHVzZWQgdG8gcHJvdGVjdCB0aGUgc3VwZXJibG9jayBkYXRhLiBJJ20gaG9waW5nIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhpcyBjb2RlIHdpdGggdGhlIFZGUyBsYXllciwgcGFydGljdWxhcmx5IGhvdyBzdXBlcmJsb2NrIGluZm9ybWF0aW9uIGlzIGNvbW11bmljYXRlZCB1cHdhcmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6NTguMTg1MzAyNDAyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHRpbnQgZXJyO1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHQvKlxcbiA4NjM6XFx0XFx0ICogTmV2ZXIgYWxsb3cgc191c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMgd2hlbiBGU19VU0VSTlNfTU9VTlQgb3JcXG4gODY0OlxcdFxcdCAqIEZTX1VTRVJOU19ERUxFR0FUQUJMRSBpcyBub3Qgc2V0LCBhcyB0aGUgZmlsZXN5c3RlbSBpcyBsaWtlbHlcXG4gODY1OlxcdFxcdCAqIHVucHJlcGFyZWQgdG8gaGFuZGxlIGl0LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBmc2NvbmZpZygpIGlzIGNhbGxlZFxcbiA4NjY6XFx0XFx0ICogZnJvbSBpbml0X3VzZXJfbnMgd2l0aCBhbiBmc19mZCBvcGVuZWQgaW4gYW5vdGhlciB1c2VyIG5hbWVzcGFjZS5cXG4gODY3OlxcdFxcdCAqL1xcbiA4Njg6XFx0XFx0aWYgKHVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucyBcXHUwMDI2XFx1MDAyNlxcbiA4Njk6XFx0XFx0ICAgICEoZmMtXFx1MDAzZWZzX3R5cGUtXFx1MDAzZWZzX2ZsYWdzIFxcdTAwMjYgKEZTX1VTRVJOU19NT1VOVCB8IEZTX1VTRVJOU19ERUxFR0FUQUJMRSkpKSB7XFxuIDg3MDpcXHRcXHRcXHRlcnJvcmZjKGZjLCBcXFwiVkZTOiBNb3VudGluZyBmcm9tIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlIGlzIG5vdCBhbGxvd2VkXFxcIik7XFxuIDg3MTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRVBFUk0pO1xcbiA4NzI6XFx0XFx0fVxcbiA4NzM6XFx0XFxuIDg3NDpcXHRyZXRyeTpcXG4gODc1OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2JfbG9jayk7XFxuIDg3NjpcXHRcXHRpZiAodGVzdCkge1xcbiA4Nzc6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCBcXHUwMDI2ZmMtXFx1MDAzZWZzX3R5cGUtXFx1MDAzZWZzX3N1cGVycywgc19pbnN0YW5jZXMpIHtcXG4gODc4OlxcdFxcdFxcdFxcdC8qIE9ubHkgdW5saW5rZWQgYXQgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UuICovXFxuIDg3OTpcXHRcXHRcXHRcXHRpZiAoc3VwZXJfZmxhZ3Mob2xkLCBTQl9ERUFEKSlcXG4gODgwOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4ODE6XFx0XFx0XFx0XFx0aWYgKHRlc3Qob2xkLCBmYykpXFxuIDg4MjpcXHRcXHRcXHRcXHRcXHRnb3RvIHNoYXJlX2V4dGFudF9zYjtcXG4gODgzOlxcdFxcdFxcdH1cXG4gODg0OlxcdFxcdH1cXG4gODg1OlxcdFxcdGlmICghcykge1xcbiA4ODY6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiX2xvY2spO1xcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHRcXHRzID0gYWxsb2Nfc3VwZXIoZmMtXFx1MDAzZWZzX3R5cGUsIGZjLVxcdTAwM2VzYl9mbGFncywgdXNlcl9ucyk7XFxuIDg4OTpcXHRcXHRcXHRpZiAoIXMpXFxuIDg5MDpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gODkxOlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDg5MjpcXHRcXHR9XFxuIDg5MzpcXHRcXG4gODk0OlxcdFxcdHMtXFx1MDAzZXNfZnNfaW5mbyA9IGZjLVxcdTAwM2VzX2ZzX2luZm87XFxuIDg5NTpcXHRcXHRlcnIgPSBzZXQocywgZmMpO1xcbiA4OTY6XFx0XFx0aWYgKGVycikge1xcbiA4OTc6XFx0XFx0XFx0VkZTX1dBUk5fT05fT05DRShzLVxcdTAwM2VzX3N1cGVyX2Rldi1cXHUwMDNlc2RfZGV2KTtcXG4gODk4OlxcdFxcdFxcdHMtXFx1MDAzZXNfZnNfaW5mbyA9IE5VTEw7XFxuIDg5OTpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuIDkwMDpcXHRcXHRcXHRkZXN0cm95X3VudXNlZF9zdXBlcihzKTtcXG4gOTAxOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIDkwMjpcXHRcXHR9XFxuIDkwMzpcXHRcXHRWRlNfV0FSTl9PTl9PTkNFKCFzLVxcdTAwM2VzX3N1cGVyX2Rldi1cXHUwMDNlc2RfZGV2KTtcXG4gOTA0OlxcdFxcdGZjLVxcdTAwM2VzX2ZzX2luZm8gPSBOVUxMO1xcbiA5MDU6XFx0XFx0cy1cXHUwMDNlc190eXBlID0gZmMtXFx1MDAzZWZzX3R5cGU7XFxuIDkwNjpcXHRcXHRzLVxcdTAwM2VzX2lmbGFncyB8PSBmYy1cXHUwMDNlc19pZmxhZ3M7XFxuIDkwNzpcXHRcXHRzdHJzY3B5KHMtXFx1MDAzZXNfaWQsIHMtXFx1MDAzZXNfdHlwZS1cXHUwMDNlbmFtZSwgc2l6ZW9mKHMtXFx1MDAzZXNfaWQpKTtcXG4gOTA4OlxcdFxcdC8qXFxuIDkwOTpcXHRcXHQgKiBNYWtlIHRoZSBzdXBlcmJsb2NrIHZpc2libGUgb24gQHN1cGVyX2Jsb2NrcyBhbmQgQGZzX3N1cGVycy5cXG4gOTEwOlxcdFxcdCAqIEl0J3MgaW4gYSBuYXNjZW50IHN0YXRlIGFuZCB1c2VycyBzaG91bGQgd2FpdCBvbiBTQl9CT1JOIG9yXFxuIDkxMTpcXHRcXHQgKiBTQl9EWUlORyB0byBiZSBzZXQuXFxuIDkxMjpcXHRcXHQgKi9cXG4gOTEzOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnMtXFx1MDAzZXNfbGlzdCwgXFx1MDAyNnN1cGVyX2Jsb2Nrcyk7XFxuIDkxNDpcXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2cy1cXHUwMDNlc19pbnN0YW5jZXMsIFxcdTAwMjZzLVxcdTAwM2VzX3R5cGUtXFx1MDAzZWZzX3N1cGVycyk7XFxuIDkxNTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuIDkxNjpcXHRcXHRnZXRfZmlsZXN5c3RlbShzLVxcdTAwM2VzX3R5cGUpO1xcbiA5MTc6XFx0XFx0c2hyaW5rZXJfcmVnaXN0ZXIocy1cXHUwMDNlc19zaHJpbmspO1xcbiA5MTg6XFx0XFx0cmV0dXJuIHM7XFxuIDkxOTpcXHRcXG4gOTIwOlxcdHNoYXJlX2V4dGFudF9zYjpcXG4gOTIxOlxcdFxcdGlmICh1c2VyX25zICE9IG9sZC1cXHUwMDNlc191c2VyX25zIHx8IGZjLVxcdTAwM2VleGNsdXNpdmUpIHtcXG4gOTIyOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gOTIzOlxcdFxcdFxcdGRlc3Ryb3lfdW51c2VkX3N1cGVyKHMpO1xcbiA5MjQ6XFx0XFx0XFx0aWYgKGZjLVxcdTAwM2VleGNsdXNpdmUpXFxuIDkyNTpcXHRcXHRcXHRcXHR3YXJuZmMoZmMsIFxcXCJyZXVzaW5nIGV4aXN0aW5nIGZpbGVzeXN0ZW0gbm90IGFsbG93ZWRcXFwiKTtcXG4gOTI2OlxcdFxcdFxcdGVsc2VcXG4gOTI3OlxcdFxcdFxcdFxcdHdhcm5mYyhmYywgXFxcInJldXNpbmcgZXhpc3RpbmcgZmlsZXN5c3RlbSBpbiBhbm90aGVyIG5hbWVzcGFjZSBub3QgYWxsb3dlZFxcXCIpO1xcbiA5Mjg6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVCVVNZKTtcXG4gOTI5OlxcdFxcdH1cXG4gOTMwOlxcdFxcdGlmICghZ3JhYl9zdXBlcihvbGQpKVxcbiA5MzE6XFx0XFx0XFx0Z290byByZXRyeTtcXG4gOTMyOlxcdFxcdGRlc3Ryb3lfdW51c2VkX3N1cGVyKHMpO1xcbiA5MzM6XFx0XFx0cmV0dXJuIG9sZDtcXG4gOTM0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTI6NTguMTg1NDQ3ODIyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0NTk0NTAzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGNvbW1pdCBoaXN0b3J5IHVzaW5nIGBnaXQgbG9nYCwgb3IgYXQgbGVhc3QgY2hlY2sgdGhlIGNvbW1pdCBjb250ZXh0IGlmIGEgZGlyZWN0IHRvb2wgaXNuJ3QgYXZhaWxhYmxlLiBVbmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UgaXMgY3J1Y2lhbC5cblxuQWxyaWdodCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBmcy9rZXJuZnMvbW91bnQuY2AgYW5kIGBmcy9zdXBlci5jYC4gVGhhdCdzIGFscmVhZHkgaW50ZXJlc3RpbmcsIGVzcGVjaWFsbHkgdGhlIGxhdHRlci4gTGV0J3MgYnJlYWsgZG93biB0aGUgYGZzL3N1cGVyLmNgIGNoYW5nZXM6XG5cbjEuICAqKmBwdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKWAqKjogVGhlIG9yaWdpbmFsIGNvZGUgcGxhY2VkIGBobGlzdF9kZWxfaW5pdChcdTAwMjZzYi1cdTAwM2VzX2luc3RhbmNlcylgIGFuZCBgcHV0X2ZpbGVzeXN0ZW0odHlwZSlgIGluIGBraWxsX3N1cGVyX25vdGlmeSgpYCBhbmQgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKClgLiBOb3csIHRoZXNlIGFyZSBtb3ZlZCB0byBgcHV0X3N1cGVyKClgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBwYXNzaXZlIHJlZmVyZW5jZSBjb3VudHMuXG4yLiAgKipga2lsbF9zdXBlcl9ub3RpZnkoKWAqKjogIFRoZSByZW1vdmFsIG9mIGBobGlzdF9kZWxfaW5pdGAgZnJvbSB0aGlzIGZ1bmN0aW9uIGlzIG5vdGV3b3J0aHkuIEl0IGFsc28gbG9va3MgbGlrZSBzZXR0aW5nIGBTQl9ERUFEYCBub3cgcmVxdWlyZXMgcHJvdGVjdGlvbiBmcm9tIGBzYl9sb2NrYCB3aGljaCBpcyBnb29kLlxuMy4gICoqYHNnZXRfZmMoKWAqKjogVGhlIGNoYW5nZWQgY29uZGl0aW9uYWwgZm9yIGBmc19zdXBlcnNgIGxpc3QgdHJhdmVyc2FsIGlzIGFsc28gd29ydGggZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBhcyBpdHMgcmVsYXRlZCB0byBmaW5kaW5nIGRlYWQgc3VwZXJibG9ja3MuXG40LiAgKipga2VybmZzX2tpbGxfc2IoKWAqKjogIEEgY29tbWVudCB1cGRhdGUgaGVyZSBpbmRpY2F0ZXMgYSBjaGFuZ2UgaW4gdGhlIHN1cGVyYmxvY2sgc3RhdGUgdG8gbWFyayBpdCBkZWFkLlxuXG5Fc3NlbnRpYWxseSwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIHJlZmFjdG9yaW5nIGhvdyBzdXBlcmJsb2NrcyBhcmUgbWFuYWdlZCBhbmQgY2xlYW5lZCB1cCwgZXNwZWNpYWxseSBpbiBjb25jdXJyZW50IHNjZW5hcmlvcy4gIEl0J3MgdG91Y2hpbmcgdGhlIGxpZmVjeWNsZSwgbG9ja2luZywgYW5kIGxpc3QgbWFuYWdlbWVudCBvZiB0aGVzZSBzdXBlcmJsb2Nrcy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogKipXb3J0aEZ1enppbmc/KipcblxuRGVmaW5pdGVseS4gYGZzL3N1cGVyLmNgIGlzIHRoZSBjb3JlIG9mIHRoZSBWRlMgc3VwZXJibG9jayBpbXBsZW1lbnRhdGlvbi4gIEl0J3MgaW52b2x2ZWQgaW4gc3VwZXJibG9jayBsaWZlY3ljbGUsIGNvbmN1cnJlbnQgbW91bnRpbmcsIHJlZmVyZW5jZSBjb3VudGluZywgbG9ja2luZywgYW5kIGxpc3Qgb3BlcmF0aW9ucyBvbiBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgdG91Y2hlcyBzdHVmZiBsaWtlIGBzZ2V0X2ZjKClgLCBgZ3JhYl9zdXBlcigpYCwgYHB1dF9zdXBlcigpYCwgYGtpbGxfc3VwZXJfbm90aWZ5KClgLCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcigpYCwgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKClgIHdoaWNoIEkgcmVndWxhcmx5IHVzZSwgc28gdGhpcyBsb29rcyBsaWtlIGhpZ2gtY29uY3VycmVuY3ksIGNyaXRpY2FsIFZGUyBjb3JlIGxvZ2ljLiAgSXQncyBsaWtlbHkgcmVhY2hhYmxlIHRocm91Z2ggY29tbW9uIHN5c2NhbGxzIGxpa2UgYG1vdW50YCwgYHVtb3VudGAsIGBmc29wZW5gLCBgZnNtb3VudGAsIGBmc2NvbmZpZ2AsIGV0Yy4gWWVzLCB0aGlzIGlzIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgdGhlcmVmb3JlIGlzIGluZGVlZCB3b3J0aCBmdXp6aW5nLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgYEVuYWJsZUNvbmZpZ3NgOiBgZnMvc3VwZXIuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLiBgZnMva2VybmZzL21vdW50LmNgIHJlcXVpcmVzIGBDT05GSUdfS0VSTkZTYC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZnMvTWFrZWZpbGVgIGFuZCBgZnMva2VybmZzL01ha2VmaWxlYCAvIGBmcy9LY29uZmlnYCB0byBjb25maXJtIGFueSByZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzowNy42NDQ5MDA5NjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjk5OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtlcm5mc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT01NT1vYmotJChDT05GSUdfUFJPQ19GUylcXHRcXHQrPSBwcm9jL1xcbmZzL01ha2VmaWxlOjU2Om9iai0kKENPTkZJR19LRVJORlMpXFx0XFx0Kz0ga2VybmZzL1xcbmZzL01ha2VmaWxlLTU3LW9iai0kKENPTkZJR19TWVNGUylcXHRcXHQrPSBzeXNmcy9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTM6MDcuNzE1MjA2NTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcxNTA2MDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdoYXRldmVyIGZpbGVzeXN0ZW0tcmVsYXRlZCB0YXNrIEknbSB3b3JraW5nIG9uIGFyZSBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiBgZnMva2VybmZzL0tjb25maWdgIG9yLCBtb3JlIGJyb2FkbHksIGBmcy9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgY29udGFpbmluZyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhleSdyZSBjZW50cmFsIHRvIGhvdyB3ZSBtYW5hZ2UgYW5kIGV4cG9zZSBmaWxlc3lzdGVtLXNwZWNpZmljIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXIgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSdsbCBzdGFydCB3aXRoIHRob3NlIGFuZCBzZWUgd2hhdCBJIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTA2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTM6MDkuNDMwMjY5OTU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2Njk4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtFUk5GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMva2VybmZzL0tjb25maWctNS1cXG5mcy9rZXJuZnMvS2NvbmZpZzo2OmNvbmZpZyBLRVJORlNcXG5mcy9rZXJuZnMvS2NvbmZpZy03LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTM6MDkuNTcyOTQ2MTE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NzQ3MjcxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZpbGVzeXN0ZW0gU3VwZXJibG9jayBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEtFUk5GUyBpcyBhIGJvb2xlYW4gY29uZmlnIG9wdGlvbiwgc2VsZWN0ZWQgYnkgdGhlIGxpa2VzIG9mIFNZU0ZTIGFuZCBDR1JPVVBTLCBidXQgYGZzL3N1cGVyLmNgIGlzIGFsd2F5cyBjb21waWxlZCBpbiDigJMgaXQncyB1bmNvbmRpdGlvbmFsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciwgYnV0IGl0IHNlZW1zIGxpa2UgYGZzL3N1cGVyLmNgIGlzIGNvcmUgVkZTLCBhbHdheXMgaW5jbHVkZWQgaW4gYHZtbGludXhgLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYCBmb3IgdGhpcyBhbmFseXNpcy4gSSBoYXZlIHRvIGF2b2lkIHRoZSB1c3VhbCBzdXNwZWN0cyDigJMgdGhlIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCBob3QgcGF0aHMgdGhhdCBhcmUgY2FsbGVkIGJ5IHByYWN0aWNhbGx5IGV2ZXJ5dGhpbmcuIEluc3RlYWQsIEknbSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgKnNwZWNpZmljYWxseSogaW1wbGVtZW50IHRoZSBjaGFuZ2VkIGxvZ2ljIG9yIGFjdCBhcyBBUEkgZW50cnkgcG9pbnRzIGZvciB0aGlzIHBhcnRpY3VsYXIgc3Vic3lzdGVtLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgSSBzZWUgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zOlxuXG4xLiAgYHNnZXRfZmNgOiBJdCdzIHN1cHBvc2VkIHRvIGZpbmQgb3IgY3JlYXRlIGEgc3VwZXJibG9jayB1c2luZyBgZnNfY29udGV4dGAsIGFuZCB0aGUgbG9naWMgc2VlbXMgdG8gc2tpcCBkZWFkIHN1cGVyYmxvY2tzLlxuMi4gIGBraWxsX3N1cGVyX25vdGlmeWA6IFRoaXMgaXMgYSBub3RpZmljYXRpb24gZnVuY3Rpb24gZm9yIHN1cGVyYmxvY2sgdGVhcmRvd24uIEl0J3MgbW9kaWZpZWQgd2l0aCBgc3VwZXJfd2FrZShzYiwgU0JfREVBRClgLiBJdCdzIHN0YXRpYywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBpbmxpbmVkLlxuMy4gIGBwdXRfc3VwZXJgOiBBIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYGZzL3N1cGVyLmNgLiBJdCdzIGRlY2xhcmVkIHNvbWV3aGVyZSBpbiBgaW5jbHVkZS9saW51eC9mcy5oYCBvciBgZnMvaW50ZXJuYWwuaGAsIHNvIEknbGwgZG91YmxlLWNoZWNrIHRoYXQuXG40LiAgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYDogQW5vdGhlciBub24tc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9uIGluIGBmcy9zdXBlci5jYC5cbjUuICBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmA6IEFsc28gYSBub24tc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9uIGluIGBmcy9zdXBlci5jYC4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzaHV0ZG93biBwYXRoLlxuNi4gIGBrZXJuZnNfa2lsbF9zYmA6IE5vbi1zdGF0aWMsIGJ1dCBpbiBgZnMva2VybmZzL21vdW50LmNgLlxuXG5Ob3csIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjYWxsZXJzIGFuZCBkZWNsYXJhdGlvbnMgb2YgdGhlc2Ugc3ltYm9scyB0byBjb25maXJtIHdoaWNoIGFyZSB2YWxpZCwgbm9uLXViaXF1aXRvdXMgc3ltYm9scyB3aXRoaW4gdGhlIHZtbGludXgga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDczMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzoxNS4wNDc2NzU4NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MTcxMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1dF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2MjMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmZzL2FkZnMvc3VwZXIuYz01ND1zdGF0aWMgaW50IGFkZnNfY2hlY2tkaXNjcmVjb3JkKHN0cnVjdCBhZGZzX2Rpc2NyZWNvcmQgKmRyKVxcbi0tXFxuZnMvYWRmcy9zdXBlci5jLTkyLVxcbmZzL2FkZnMvc3VwZXIuYzo5MzpzdGF0aWMgdm9pZCBhZGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2FkZnMvc3VwZXIuYy05NC17XFxuLS1cXG5mcy9hZGZzL3N1cGVyLmM9MjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZGZzX3NvcHMgPSB7XFxuLS1cXG5mcy9hZGZzL3N1cGVyLmMtMjQ4LVxcdC53cml0ZV9pbm9kZVxcdD0gYWRmc193cml0ZV9pbm9kZSxcXG5mcy9hZGZzL3N1cGVyLmM6MjQ5OlxcdC5wdXRfc3VwZXJcXHQ9IGFkZnNfcHV0X3N1cGVyLFxcbmZzL2FkZnMvc3VwZXIuYy0yNTAtXFx0LnN0YXRmc1xcdFxcdD0gYWRmc19zdGF0ZnMsXFxuLS1cXG5mcy9hZmZzL3N1cGVyLmM9NDk9c3RhdGljIHZvaWRcXG5mcy9hZmZzL3N1cGVyLmM6NTA6YWZmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9hZmZzL3N1cGVyLmMtNTEte1xcbi0tXFxuZnMvYWZmcy9zdXBlci5jPTE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYWZmc19zb3BzID0ge1xcbi0tXFxuZnMvYWZmcy9zdXBlci5jLTE1NC1cXHQuZXZpY3RfaW5vZGVcXHQ9IGFmZnNfZXZpY3RfaW5vZGUsXFxuZnMvYWZmcy9zdXBlci5jOjE1NTpcXHQucHV0X3N1cGVyXFx0PSBhZmZzX3B1dF9zdXBlcixcXG5mcy9hZmZzL3N1cGVyLmMtMTU2LVxcdC5zeW5jX2ZzXFx0PSBhZmZzX3N5bmNfZnMsXFxuLS1cXG5mcy9iZWZzL0NoYW5nZUxvZz0xNzY9VmVyc2lvbiAwLjQ1ICgyMDAxLTEwLTI5KVxcbi0tXFxuZnMvYmVmcy9DaGFuZ2VMb2ctMTgzLVxcdHN0cnVjdHVyZXMgaW50byB0aGUgZ2VuZXJpYyBwb2ludGVyIGZpZWxkcyBvZiB0aGUgcHVibGljIHN0cnVjdHVyZXMgXFxuZnMvYmVmcy9DaGFuZ2VMb2c6MTg0OlxcdHdpdGgga21hbGxvYygpLiBwdXRfc3VwZXIgYW5kIHB1dF9pbm9kZSBmcmVlIHRoZW0uIFRoaXMgYWxsb3dzIHVzIG5vdCBcXG5mcy9iZWZzL0NoYW5nZUxvZy0xODUtXFx0dG8gaGF2ZSB0byB0b3VjaCB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIHB1YmxpYyBzdHJ1Y3R1cmVzIGluIFxcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTU2PXN0YXRpYyBpbnQgYmVmc19ubHMydXRmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmluLCBpbnQgaW5fbGVuLFxcbmZzL2JlZnMvbGludXh2ZnMuYy01Ny1cXHRcXHRcXHRjaGFyICoqb3V0LCBpbnQgKm91dF9sZW4pO1xcbmZzL2JlZnMvbGludXh2ZnMuYzo1ODpzdGF0aWMgdm9pZCBiZWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XFxuZnMvYmVmcy9saW51eHZmcy5jLTU5LXN0YXRpYyBpbnQgYmVmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTtcXG4tLVxcbmZzL2JlZnMvbGludXh2ZnMuYz02OD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmVmc19zb3BzID0ge1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jLTcwLVxcdC5mcmVlX2lub2RlXFx0PSBiZWZzX2ZyZWVfaW5vZGUsIC8qIGRlYWxsb2NhdGUgYW4gaW5vZGUgKi9cXG5mcy9iZWZzL2xpbnV4dmZzLmM6NzE6XFx0LnB1dF9zdXBlclxcdD0gYmVmc19wdXRfc3VwZXIsXFx0LyogdW5pbml0IHN1cGVyICovXFxuZnMvYmVmcy9saW51eHZmcy5jLTcyLVxcdC5zdGF0ZnNcXHRcXHQ9IGJlZnNfc3RhdGZzLFxcdC8qIHN0YXRmcyAqL1xcbi0tXFxuZnMvYmVmcy9saW51eHZmcy5jPTc0OD1zdGF0aWMgdm9pZFxcbmZzL2JlZnMvbGludXh2ZnMuYzo3NDk6YmVmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9iZWZzL2xpbnV4dmZzLmMtNzUwLXtcXG4tLVxcbmZzL2Jmcy9pbm9kZS5jPTE5NT1zdGF0aWMgdm9pZCBiZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2Jmcy9pbm9kZS5jLTI0Mi1cXG5mcy9iZnMvaW5vZGUuYzoyNDM6c3RhdGljIHZvaWQgYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXFxuZnMvYmZzL2lub2RlLmMtMjQ0LXtcXG4tLVxcbmZzL2Jmcy9pbm9kZS5jPTMxOD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmZzX3NvcHMgPSB7XFxuLS1cXG5mcy9iZnMvaW5vZGUuYy0zMjMtXFx0LmV2aWN0X2lub2RlXFx0PSBiZnNfZXZpY3RfaW5vZGUsXFxuZnMvYmZzL2lub2RlLmM6MzI0OlxcdC5wdXRfc3VwZXJcXHQ9IGJmc19wdXRfc3VwZXIsXFxuZnMvYmZzL2lub2RlLmMtMzI1LVxcdC5zdGF0ZnNcXHRcXHQ9IGJmc19zdGF0ZnMsXFxuLS1cXG5mcy9idHJmcy9zdXBlci5jPTY5PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBidHJmc19mc190eXBlO1xcbmZzL2J0cmZzL3N1cGVyLmMtNzAtXFxuZnMvYnRyZnMvc3VwZXIuYzo3MTpzdGF0aWMgdm9pZCBidHJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9idHJmcy9zdXBlci5jLTcyLXtcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmM9MjUyNj1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYnRyZnNfc3VwZXJfb3BzID0ge1xcbi0tXFxuZnMvYnRyZnMvc3VwZXIuYy0yNTI4LVxcdC5ldmljdF9pbm9kZVxcdD0gYnRyZnNfZXZpY3RfaW5vZGUsXFxuZnMvYnRyZnMvc3VwZXIuYzoyNTI5OlxcdC5wdXRfc3VwZXJcXHQ9IGJ0cmZzX3B1dF9zdXBlcixcXG5mcy9idHJmcy9zdXBlci5jLTI1MzAtXFx0LnN5bmNfZnNcXHQ9IGJ0cmZzX3N5bmNfZnMsXFxuLS1cXG5mcy9jZXBoL3N1cGVyLmM9Mzg9c3RhdGljIExJU1RfSEVBRChjZXBoX2ZzY19saXN0KTtcXG4tLVxcbmZzL2NlcGgvc3VwZXIuYy00OC0gKi9cXG5mcy9jZXBoL3N1cGVyLmM6NDk6c3RhdGljIHZvaWQgY2VwaF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxcbmZzL2NlcGgvc3VwZXIuYy01MC17XFxuLS1cXG5mcy9jZXBoL3N1cGVyLmM9MTA0OD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2VwaF9zdXBlcl9vcHMgPSB7XFxuLS1cXG5mcy9jZXBoL3N1cGVyLmMtMTA1NC1cXHQuc3luY19mcyAgICAgICAgPSBjZXBoX3N5bmNfZnMsXFxuZnMvY2VwaC9zdXBlci5jOjEwNTU6XFx0LnB1dF9zdXBlclxcdD0gY2VwaF9wdXRfc3VwZXIsXFxuZnMvY2VwaC9zdXBlci5jLTEwNTYtXFx0LnNob3dfb3B0aW9ucyAgID0gY2VwaF9zaG93X29wdGlvbnMsXFxuLS1cXG5mcy9jb2RhL2lub2RlLmM9Mzk9c3RhdGljIHZvaWQgY29kYV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7XFxuZnMvY29kYS9pbm9kZS5jOjQwOnN0YXRpYyB2b2lkIGNvZGFfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcXG5mcy9jb2RhL2lub2RlLmMtNDEtc3RhdGljIGludCBjb2RhX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpO1xcbi0tXFxuZnMvY29kYS9pbm9kZS5jPTEwMD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY29kYV9zdXBlcl9vcGVyYXRpb25zID1cXG4tLVxcbmZzL2NvZGEvaW5vZGUuYy0xMDQtXFx0LmV2aWN0X2lub2RlXFx0PSBjb2RhX2V2aWN0X2lub2RlLFxcbmZzL2NvZGEvaW5vZGUuYzoxMDU6XFx0LnB1dF9zdXBlclxcdD0gY29kYV9wdXRfc3VwZXIsXFxuZnMvY29kYS9pbm9kZS5jLTEwNi1cXHQuc3RhdGZzXFx0XFx0PSBjb2RhX3N0YXRmcyxcXG4tLVxcbmZzL2NvZGEvaW5vZGUuYz0xOTk9c3RhdGljIGludCBjb2RhX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvY29kYS9pbm9kZS5jLTI3Ny1cXG5mcy9jb2RhL2lub2RlLmM6Mjc4OnN0YXRpYyB2b2lkIGNvZGFfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvY29kYS9pbm9kZS5jLTI3OS17XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTk0Nj1zdGF0aWMgdm9pZCBlcm9mc19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTk1OS1cXG5mcy9lcm9mcy9zdXBlci5jOjk2MDpzdGF0aWMgdm9pZCBlcm9mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9lcm9mcy9zdXBlci5jLTk2MS17XFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTExMzI9Y29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXJvZnNfc29wcyA9IHtcXG5mcy9lcm9mcy9zdXBlci5jOjExMzM6XFx0LnB1dF9zdXBlciA9IGVyb2ZzX3B1dF9zdXBlcixcXG5mcy9lcm9mcy9zdXBlci5jLTExMzQtXFx0LmFsbG9jX2lub2RlID0gZXJvZnNfYWxsb2NfaW5vZGUsXFxuLS1cXG5mcy9leGZhdC9zdXBlci5jPTM0PXN0YXRpYyB2b2lkIGV4ZmF0X3NldF9pb2NoYXJzZXQoc3RydWN0IGV4ZmF0X21vdW50X29wdGlvbnMgKm9wdHMsXFxuLS1cXG5mcy9leGZhdC9zdXBlci5jLTQzLVxcbmZzL2V4ZmF0L3N1cGVyLmM6NDQ6c3RhdGljIHZvaWQgZXhmYXRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXhmYXQvc3VwZXIuYy00NS17XFxuLS1cXG5mcy9leGZhdC9zdXBlci5jPTIwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXhmYXRfc29wcyA9IHtcXG4tLVxcbmZzL2V4ZmF0L3N1cGVyLmMtMjEwLVxcdC5ldmljdF9pbm9kZVxcdD0gZXhmYXRfZXZpY3RfaW5vZGUsXFxuZnMvZXhmYXQvc3VwZXIuYzoyMTE6XFx0LnB1dF9zdXBlclxcdD0gZXhmYXRfcHV0X3N1cGVyLFxcbmZzL2V4ZmF0L3N1cGVyLmMtMjEyLVxcdC5zdGF0ZnNcXHRcXHQ9IGV4ZmF0X3N0YXRmcyxcXG4tLVxcbmZzL2V4dDIvc3VwZXIuYz0xNjU9c3RhdGljIGlubGluZSB2b2lkIGV4dDJfcXVvdGFfb2ZmX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0Mi9zdXBlci5jLTE2OS1cXG5mcy9leHQyL3N1cGVyLmM6MTcwOnN0YXRpYyB2b2lkIGV4dDJfcHV0X3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYilcXG5mcy9leHQyL3N1cGVyLmMtMTcxLXtcXG4tLVxcbmZzL2V4dDIvc3VwZXIuYz0zNjE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDJfc29wcyA9IHtcXG4tLVxcbmZzL2V4dDIvc3VwZXIuYy0zNjYtXFx0LmV2aWN0X2lub2RlXFx0PSBleHQyX2V2aWN0X2lub2RlLFxcbmZzL2V4dDIvc3VwZXIuYzozNjc6XFx0LnB1dF9zdXBlclxcdD0gZXh0Ml9wdXRfc3VwZXIsXFxuZnMvZXh0Mi9zdXBlci5jLTM2OC1cXHQuc3luY19mc1xcdD0gZXh0Ml9zeW5jX2ZzLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTEyNjk9c3RhdGljIHZvaWQgZXh0NF9mbGV4X2dyb3Vwc19mcmVlKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMjgxLVxcbmZzL2V4dDQvc3VwZXIuYzoxMjgyOnN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTEyODMte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE2Nzc9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4dDRfc29wcyA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xNjg1LVxcdC5ldmljdF9pbm9kZVxcdD0gZXh0NF9ldmljdF9pbm9kZSxcXG5mcy9leHQ0L3N1cGVyLmM6MTY4NjpcXHQucHV0X3N1cGVyXFx0PSBleHQ0X3B1dF9zdXBlcixcXG5mcy9leHQ0L3N1cGVyLmMtMTY4Ny1cXHQuc3luY19mc1xcdD0gZXh0NF9zeW5jX2ZzLFxcbi0tXFxuZnMvZjJmcy9mMmZzLmg9NTExPXN0cnVjdCBkaXNjYXJkX3BvbGljeSB7XFxuLS1cXG5mcy9mMmZzL2YyZnMuaC01MjAtXFx0Ym9vbCBvcmRlcmVkO1xcdFxcdFxcdC8qIGlzc3VlIGRpc2NhcmQgYnkgbGJhIG9yZGVyICovXFxuZnMvZjJmcy9mMmZzLmg6NTIxOlxcdGJvb2wgdGltZW91dDtcXHRcXHRcXHQvKiBkaXNjYXJkIHRpbWVvdXQgZm9yIHB1dF9zdXBlciAqL1xcbmZzL2YyZnMvZjJmcy5oLTUyMi1cXHR1bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHk7XFx0LyogZGlzY2FyZCBncmFudWxhcml0eSAqL1xcbi0tXFxuZnMvZjJmcy9zaHJpbmtlci5jPTQwPXVuc2lnbmVkIGxvbmcgZjJmc19zaHJpbmtfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5mcy9mMmZzL3Nocmlua2VyLmMtNTEtXFxuZnMvZjJmcy9zaHJpbmtlci5jOjUyOlxcdFxcdC8qIHN0b3AgZjJmc19wdXRfc3VwZXIgKi9cXG5mcy9mMmZzL3Nocmlua2VyLmMtNTMtXFx0XFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZzYmktXFx1MDAzZXVtb3VudF9tdXRleCkpIHtcXG4tLVxcbmZzL2YyZnMvc2hyaW5rZXIuYz03OT11bnNpZ25lZCBsb25nIGYyZnNfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5mcy9mMmZzL3Nocmlua2VyLmMtOTgtXFxuZnMvZjJmcy9zaHJpbmtlci5jOjk5OlxcdFxcdC8qIHN0b3AgZjJmc19wdXRfc3VwZXIgKi9cXG5mcy9mMmZzL3Nocmlua2VyLmMtMTAwLVxcdFxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2c2JpLVxcdTAwM2V1bW91bnRfbXV0ZXgpKSB7XFxuLS1cXG5mcy9mMmZzL3Nocmlua2VyLmM9MTM0PXVuc2lnbmVkIGludCBmMmZzX2RvbmF0ZV9maWxlcyh2b2lkKVxcbi0tXFxuZnMvZjJmcy9zaHJpbmtlci5jLTE0NC1cXG5mcy9mMmZzL3Nocmlua2VyLmM6MTQ1OlxcdFxcdC8qIHN0b3AgZjJmc19wdXRfc3VwZXIgKi9cXG5mcy9mMmZzL3Nocmlua2VyLmMtMTQ2LVxcdFxcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2c2JpLVxcdTAwM2V1bW91bnRfbXV0ZXgpKSB7XFxuLS1cXG5mcy9mMmZzL3Nocmlua2VyLmM9MjA1PXZvaWQgZjJmc19yZWNsYWltX2NhY2hlcyh1bnNpZ25lZCBpbnQgcmVjbGFpbV9jYWNoZXNfa2IpXFxuLS1cXG5mcy9mMmZzL3Nocmlua2VyLmMtMjE0LVxcbmZzL2YyZnMvc2hyaW5rZXIuYzoyMTU6XFx0XFx0Lyogc3RvcCBmMmZzX3B1dF9zdXBlciAqL1xcbmZzL2YyZnMvc2hyaW5rZXIuYy0yMTYtXFx0XFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZzYmktXFx1MDAzZXVtb3VudF9tdXRleCkpIHtcXG4tLVxcbmZzL2YyZnMvc3VwZXIuYz0xOTk2PXN0YXRpYyB2b2lkIGRlc3Ryb3lfZGV2aWNlX2xpc3Qoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKVxcbi0tXFxuZnMvZjJmcy9zdXBlci5jLTIwMDktXFxuZnMvZjJmcy9zdXBlci5jOjIwMTA6c3RhdGljIHZvaWQgZjJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9mMmZzL3N1cGVyLmMtMjAxMS17XFxuLS1cXG5mcy9mMmZzL3N1cGVyLmM9MzU5MT12b2lkIGYyZnNfcXVvdGFfb2ZmX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZjJmcy9zdXBlci5jLTM2MDgtXFx0ICogVGhpcyBjYW4gY2F1c2UgTlVMTCBleGNlcHRpb24gZm9yIG5vZGVfaW5vZGUgaW4gZW5kX2lvLCBzaW5jZVxcbmZzL2YyZnMvc3VwZXIuYzozNjA5OlxcdCAqIHB1dF9zdXBlciBhbHJlYWR5IGRyb3BwZWQgaXQuXFxuZnMvZjJmcy9zdXBlci5jLTM2MTAtXFx0ICovXFxuLS1cXG5mcy9mMmZzL3N1cGVyLmM9MzczMD1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZjJmc19zb3BzID0ge1xcbi0tXFxuZnMvZjJmcy9zdXBlci5jLTM3NDItXFx0LmV2aWN0X2lub2RlXFx0PSBmMmZzX2V2aWN0X2lub2RlLFxcbmZzL2YyZnMvc3VwZXIuYzozNzQzOlxcdC5wdXRfc3VwZXJcXHQ9IGYyZnNfcHV0X3N1cGVyLFxcbmZzL2YyZnMvc3VwZXIuYy0zNzQ0LVxcdC5zeW5jX2ZzXFx0PSBmMmZzX3N5bmNfZnMsXFxuLS1cXG5mcy9mYXQvaW5vZGUuYz03NjE9c3RhdGljIHZvaWQgZGVsYXllZF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcClcXG4tLVxcbmZzL2ZhdC9pbm9kZS5jLTc2OS1cXG5mcy9mYXQvaW5vZGUuYzo3NzA6c3RhdGljIHZvaWQgZmF0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2ZhdC9pbm9kZS5jLTc3MS17XFxuLS1cXG5mcy9mYXQvaW5vZGUuYz05Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGZhdF9zb3BzID0ge1xcbi0tXFxuZnMvZmF0L2lub2RlLmMtOTc0LVxcdC5ldmljdF9pbm9kZVxcdD0gZmF0X2V2aWN0X2lub2RlLFxcbmZzL2ZhdC9pbm9kZS5jOjk3NTpcXHQucHV0X3N1cGVyXFx0PSBmYXRfcHV0X3N1cGVyLFxcbmZzL2ZhdC9pbm9kZS5jLTk3Ni1cXHQuc3RhdGZzXFx0XFx0PSBmYXRfc3RhdGZzLFxcbi0tXFxuZnMvZ2ZzMi9zdXBlci5jPTUzOT12b2lkIGdmczJfbWFrZV9mc19ybyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcClcXG4tLVxcbmZzL2dmczIvc3VwZXIuYy01NzEtLyoqXFxuZnMvZ2ZzMi9zdXBlci5jOjU3MjogKiBnZnMyX3B1dF9zdXBlciAtIFVubW91bnQgdGhlIGZpbGVzeXN0ZW1cXG5mcy9nZnMyL3N1cGVyLmMtNTczLSAqIEBzYjogVGhlIFZGUyBzdXBlcmJsb2NrXFxuLS1cXG5mcy9nZnMyL3N1cGVyLmMtNTc2LVxcbmZzL2dmczIvc3VwZXIuYzo1Nzc6c3RhdGljIHZvaWQgZ2ZzMl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9nZnMyL3N1cGVyLmMtNTc4LXtcXG4tLVxcbmZzL2dmczIvc3VwZXIuYz0xNTY5PWNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdmczJfc3VwZXJfb3BzID0ge1xcbi0tXFxuZnMvZ2ZzMi9zdXBlci5jLTE1NzQtXFx0LmV2aWN0X2lub2RlXFx0XFx0PSBnZnMyX2V2aWN0X2lub2RlLFxcbmZzL2dmczIvc3VwZXIuYzoxNTc1OlxcdC5wdXRfc3VwZXJcXHRcXHQ9IGdmczJfcHV0X3N1cGVyLFxcbmZzL2dmczIvc3VwZXIuYy0xNTc2LVxcdC5zeW5jX2ZzXFx0XFx0PSBnZnMyX3N5bmNfZnMsXFxuLS1cXG5mcy9oZnMvc3VwZXIuYz0zNT1zdGF0aWMgaW50IGhmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KVxcbi0tXFxuZnMvaGZzL3N1cGVyLmMtNDctLypcXG5mcy9oZnMvc3VwZXIuYzo0ODogKiBoZnNfcHV0X3N1cGVyKClcXG5mcy9oZnMvc3VwZXIuYy00OS0gKlxcbmZzL2hmcy9zdXBlci5jOjUwOiAqIFRoaXMgaXMgdGhlIHB1dF9zdXBlcigpIGVudHJ5IGluIHRoZSBzdXBlcl9vcGVyYXRpb25zIHN0cnVjdHVyZSBmb3JcXG5mcy9oZnMvc3VwZXIuYy01MS0gKiBIRlMgZmlsZXN5c3RlbXMuICBUaGUgcHVycG9zZSBpcyB0byByZWxlYXNlIHRoZSByZXNvdXJjZXNcXG4tLVxcbmZzL2hmcy9zdXBlci5jLTUzLSAqL1xcbmZzL2hmcy9zdXBlci5jOjU0OnN0YXRpYyB2b2lkIGhmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9oZnMvc3VwZXIuYy01NS17XFxuLS1cXG5mcy9oZnMvc3VwZXIuYz0xODg9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGhmc19zdXBlcl9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvaGZzL3N1cGVyLmMtMTkyLVxcdC5ldmljdF9pbm9kZVxcdD0gaGZzX2V2aWN0X2lub2RlLFxcbmZzL2hmcy9zdXBlci5jOjE5MzpcXHQucHV0X3N1cGVyXFx0PSBoZnNfcHV0X3N1cGVyLFxcbmZzL2hmcy9zdXBlci5jLTE5NC1cXHQuc3luY19mc1xcdD0gaGZzX3N5bmNfZnMsXFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmM9MzIxPXN0YXRpYyB2b2lkIGRlbGF5ZWRfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnApXFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmMtMzI4LVxcbmZzL2hmc3BsdXMvc3VwZXIuYzozMjk6c3RhdGljIHZvaWQgaGZzcGx1c19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9oZnNwbHVzL3N1cGVyLmMtMzMwLXtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYz00MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGhmc3BsdXNfc29wcyA9IHtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy00MTItXFx0LmV2aWN0X2lub2RlXFx0PSBoZnNwbHVzX2V2aWN0X2lub2RlLFxcbmZzL2hmc3BsdXMvc3VwZXIuYzo0MTM6XFx0LnB1dF9zdXBlclxcdD0gaGZzcGx1c19wdXRfc3VwZXIsXFxuZnMvaGZzcGx1cy9zdXBlci5jLTQxNC1cXHQuc3luY19mc1xcdD0gaGZzcGx1c19zeW5jX2ZzLFxcbi0tXFxuZnMvaHBmcy9zdXBlci5jPTEyMj1zdGF0aWMgdm9pZCBsYXp5X2ZyZWVfc2JpKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbi0tXFxuZnMvaHBmcy9zdXBlci5jLTEyNi1cXG5mcy9ocGZzL3N1cGVyLmM6MTI3OnN0YXRpYyB2b2lkIGhwZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG5mcy9ocGZzL3N1cGVyLmMtMTI4LXtcXG4tLVxcbmZzL2hwZnMvc3VwZXIuYz00OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGhwZnNfc29wcyA9XFxuLS1cXG5mcy9ocGZzL3N1cGVyLmMtNDk1LVxcdC5ldmljdF9pbm9kZVxcdD0gaHBmc19ldmljdF9pbm9kZSxcXG5mcy9ocGZzL3N1cGVyLmM6NDk2OlxcdC5wdXRfc3VwZXJcXHQ9IGhwZnNfcHV0X3N1cGVyLFxcbmZzL2hwZnMvc3VwZXIuYy00OTctXFx0LnN0YXRmc1xcdFxcdD0gaHBmc19zdGF0ZnMsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMDk0PXN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTI0LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExMjU6c3RhdGljIHZvaWQgaHVnZXRsYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExMjYte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTIzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaHVnZXRsYmZzX29wcyA9IHtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNDAtXFx0LnN0YXRmc1xcdFxcdD0gaHVnZXRsYmZzX3N0YXRmcyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQxOlxcdC5wdXRfc3VwZXJcXHQ9IGh1Z2V0bGJmc19wdXRfc3VwZXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI0Mi1cXHQuc2hvd19vcHRpb25zXFx0PSBodWdldGxiZnNfc2hvd19vcHRpb25zLFxcbi0tXFxuZnMvaW50ZXJuYWwuaD0xMzg9c3RydWN0IHN1cGVyX2Jsb2NrICp1c2VyX2dldF9zdXBlcihkZXZfdCwgYm9vbCBleGNsKTtcXG5mcy9pbnRlcm5hbC5oOjEzOTp2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG5mcy9pbnRlcm5hbC5oLTE0MC12b2lkIF9faW5pdCBzdXBlcl9kZXZfaW5pdCh2b2lkKTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9NDg9c3RhdGljIGludCBpc29mc19kZW50cnlfY21wX21zKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNTEtXFxuZnMvaXNvZnMvaW5vZGUuYzo1MjpzdGF0aWMgdm9pZCBpc29mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9pc29mcy9pbm9kZS5jLTUzLXtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9MTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBpc29mc19zb3BzID0ge1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xMjQtXFx0LmZyZWVfaW5vZGVcXHQ9IGlzb2ZzX2ZyZWVfaW5vZGUsXFxuZnMvaXNvZnMvaW5vZGUuYzoxMjU6XFx0LnB1dF9zdXBlclxcdD0gaXNvZnNfcHV0X3N1cGVyLFxcbmZzL2lzb2ZzL2lub2RlLmMtMTI2LVxcdC5zdGF0ZnNcXHRcXHQ9IGlzb2ZzX3N0YXRmcyxcXG4tLVxcbmZzL2pmZnMyL3N1cGVyLmMtMzMtXFxuZnMvamZmczIvc3VwZXIuYzozNDpzdGF0aWMgdm9pZCBqZmZzMl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xcbmZzL2pmZnMyL3N1cGVyLmMtMzUtXFxuLS1cXG5mcy9qZmZzMi9zdXBlci5jPTI0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgamZmczJfc3VwZXJfb3BlcmF0aW9ucyA9XFxuLS1cXG5mcy9qZmZzMi9zdXBlci5jLTI0Ny1cXHQuZnJlZV9pbm9kZSA9XFx0amZmczJfZnJlZV9pbm9kZSxcXG5mcy9qZmZzMi9zdXBlci5jOjI0ODpcXHQucHV0X3N1cGVyID1cXHRqZmZzMl9wdXRfc3VwZXIsXFxuZnMvamZmczIvc3VwZXIuYy0yNDktXFx0LnN0YXRmcyA9XFx0amZmczJfc3RhdGZzLFxcbi0tXFxuZnMvamZmczIvc3VwZXIuYz0zMTA9c3RhdGljIGludCBqZmZzMl9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvamZmczIvc3VwZXIuYy0zMjItXFxuZnMvamZmczIvc3VwZXIuYzozMjM6c3RhdGljIHZvaWQgamZmczJfcHV0X3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2pmZnMyL3N1cGVyLmMtMzI0LXtcXG4tLVxcbmZzL2pmcy9zdXBlci5jPTE4MD1zdGF0aWMgaW5saW5lIHZvaWQgamZzX3F1b3RhX29mZl91bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2pmcy9zdXBlci5jLTE4NC1cXG5mcy9qZnMvc3VwZXIuYzoxODU6c3RhdGljIHZvaWQgamZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2pmcy9zdXBlci5jLTE4Ni17XFxuLS1cXG5mcy9qZnMvc3VwZXIuYy0xODktXFxuZnMvamZzL3N1cGVyLmM6MTkwOlxcdGpmc19pbmZvKFxcXCJJbiBqZnNfcHV0X3N1cGVyXFxcIik7XFxuZnMvamZzL3N1cGVyLmMtMTkxLVxcbi0tXFxuZnMvamZzL3N1cGVyLmM9ODQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBqZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2pmcy9zdXBlci5jLTg0OS1cXHQuZXZpY3RfaW5vZGVcXHQ9IGpmc19ldmljdF9pbm9kZSxcXG5mcy9qZnMvc3VwZXIuYzo4NTA6XFx0LnB1dF9zdXBlclxcdD0gamZzX3B1dF9zdXBlcixcXG5mcy9qZnMvc3VwZXIuYy04NTEtXFx0LnN5bmNfZnNcXHQ9IGpmc19zeW5jX2ZzLFxcbi0tXFxuZnMvbWluaXgvaW5vZGUuYz00Nz1zdGF0aWMgdm9pZCBtaW5peF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvbWluaXgvaW5vZGUuYy02MS1cXG5mcy9taW5peC9pbm9kZS5jOjYyOnN0YXRpYyB2b2lkIG1pbml4X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL21pbml4L2lub2RlLmMtNjMte1xcbi0tXFxuZnMvbWluaXgvaW5vZGUuYz0xMjk9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1pbml4X3NvcHMgPSB7XFxuLS1cXG5mcy9taW5peC9pbm9kZS5jLTEzNC1cXHQuZXZpY3RfaW5vZGVcXHQ9IG1pbml4X2V2aWN0X2lub2RlLFxcbmZzL21pbml4L2lub2RlLmM6MTM1OlxcdC5wdXRfc3VwZXJcXHQ9IG1pbml4X3B1dF9zdXBlcixcXG5mcy9taW5peC9pbm9kZS5jLTEzNi1cXHQuc3RhdGZzXFx0XFx0PSBtaW5peF9zdGF0ZnMsXFxuLS1cXG5mcy9uaWxmczIvc3VwZXIuYz00MzA9aW50IG5pbGZzX3Jlc2l6ZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3U2NCBuZXdzaXplKVxcbi0tXFxuZnMvbmlsZnMyL3N1cGVyLmMtNTA0LVxcbmZzL25pbGZzMi9zdXBlci5jOjUwNTpzdGF0aWMgdm9pZCBuaWxmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9uaWxmczIvc3VwZXIuYy01MDYte1xcbi0tXFxuZnMvbmlsZnMyL3N1cGVyLmM9NzA1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBuaWxmc19zb3BzID0ge1xcbi0tXFxuZnMvbmlsZnMyL3N1cGVyLmMtNzA5LVxcdC5ldmljdF9pbm9kZSAgICA9IG5pbGZzX2V2aWN0X2lub2RlLFxcbmZzL25pbGZzMi9zdXBlci5jOjcxMDpcXHQucHV0X3N1cGVyICAgICAgPSBuaWxmc19wdXRfc3VwZXIsXFxuZnMvbmlsZnMyL3N1cGVyLmMtNzExLVxcdC5zeW5jX2ZzICAgICAgICA9IG5pbGZzX3N5bmNfZnMsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MTY2OD1zdGF0aWMgdm9pZCBudGZzX3ZvbHVtZV9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTE3MDctLypcXG5mcy9udGZzL3N1cGVyLmM6MTcwODogKiBudGZzX3B1dF9zdXBlciAtIGNhbGxlZCBieSB0aGUgdmZzIHRvIHVubW91bnQgYSB2b2x1bWVcXG5mcy9udGZzL3N1cGVyLmMtMTcwOS0gKiBAc2I6XFx0XFx0dmZzIHN1cGVyYmxvY2sgb2Ygdm9sdW1lIHRvIHVubW91bnRcXG5mcy9udGZzL3N1cGVyLmMtMTcxMC0gKi9cXG5mcy9udGZzL3N1cGVyLmM6MTcxMTpzdGF0aWMgdm9pZCBudGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL250ZnMvc3VwZXIuYy0xNzEyLXtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0yMTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBudGZzX3NvcHMgPSB7XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjE2NC1cXHQud3JpdGVfaW5vZGVcXHQ9IG50ZnNfd3JpdGVfaW5vZGUsXFx0LyogVkZTOiBXcml0ZSBkaXJ0eSBpbm9kZSB0byBkaXNrLiAqL1xcbmZzL250ZnMvc3VwZXIuYzoyMTY1OlxcdC5wdXRfc3VwZXJcXHQ9IG50ZnNfcHV0X3N1cGVyLFxcdC8qIFN5c2NhbGw6IHVtb3VudC4gKi9cXG5mcy9udGZzL3N1cGVyLmMtMjE2Ni1cXHQuc2h1dGRvd25cXHQ9IG50ZnNfc2h1dGRvd24sXFxuLS1cXG5mcy9udGZzMy9zdXBlci5jPTcwOT1zdGF0aWMgdm9pZCBudGZzM19mcmVlX3NiaShzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmkpXFxuLS1cXG5mcy9udGZzMy9zdXBlci5jLTcyMS1cXG5mcy9udGZzMy9zdXBlci5jOjcyMjpzdGF0aWMgdm9pZCBudGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL250ZnMzL3N1cGVyLmMtNzIzLXtcXG4tLVxcbmZzL250ZnMzL3N1cGVyLmM9ODcwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBudGZzX3NvcHMgPSB7XFxuLS1cXG5mcy9udGZzMy9zdXBlci5jLTg3My1cXHQuZXZpY3RfaW5vZGUgPSBudGZzX2V2aWN0X2lub2RlLFxcbmZzL250ZnMzL3N1cGVyLmM6ODc0OlxcdC5wdXRfc3VwZXIgPSBudGZzX3B1dF9zdXBlcixcXG5mcy9udGZzMy9zdXBlci5jLTg3NS1cXHQuc3RhdGZzID0gbnRmc19zdGF0ZnMsXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTE2NzM9VFJBQ0VfRVZFTlQob2NmczJfcGFyc2Vfb3B0aW9ucyxcXG4tLVxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTY4Ni1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE2ODc6REVGSU5FX09DRlMyX1BPSU5URVJfRVZFTlQob2NmczJfcHV0X3N1cGVyKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE2ODgtXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTg5PXN0YXRpYyBpbnQgb2NmczJfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRlbnRyeSAqcm9vdCk7XFxuZnMvb2NmczIvc3VwZXIuYzo5MDpzdGF0aWMgdm9pZCBvY2ZzMl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvb2NmczIvc3VwZXIuYy05MS1zdGF0aWMgaW50IG9jZnMyX21vdW50X3ZvbHVtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9MTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvY2ZzMl9zb3BzID0ge1xcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMzQtXFx0LnN5bmNfZnNcXHQ9IG9jZnMyX3N5bmNfZnMsXFxuZnMvb2NmczIvc3VwZXIuYzoxMzU6XFx0LnB1dF9zdXBlclxcdD0gb2NmczJfcHV0X3N1cGVyLFxcbmZzL29jZnMyL3N1cGVyLmMtMTM2LVxcdC5zaG93X29wdGlvbnMgICA9IG9jZnMyX3Nob3dfb3B0aW9ucyxcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9MTUzND1zdGF0aWMgdm9pZCBfX2V4aXQgb2NmczJfZXhpdCh2b2lkKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xNTQ2LVxcbmZzL29jZnMyL3N1cGVyLmM6MTU0NzpzdGF0aWMgdm9pZCBvY2ZzMl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9vY2ZzMi9zdXBlci5jLTE1NDgte1xcbmZzL29jZnMyL3N1cGVyLmM6MTU0OTpcXHR0cmFjZV9vY2ZzMl9wdXRfc3VwZXIoc2IpO1xcbmZzL29jZnMyL3N1cGVyLmMtMTU1MC1cXG4tLVxcbmZzL29tZnMvaW5vZGUuYz0yMDQ9c3RydWN0IGlub2RlICpvbWZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW5vKVxcbi0tXFxuZnMvb21mcy9pbm9kZS5jLTI2NC1cXG5mcy9vbWZzL2lub2RlLmM6MjY1OnN0YXRpYyB2b2lkIG9tZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvb21mcy9pbm9kZS5jLTI2Ni17XFxuLS1cXG5mcy9vbWZzL2lub2RlLmM9MzIwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBvbWZzX3NvcHMgPSB7XFxuLS1cXG5mcy9vbWZzL2lub2RlLmMtMzIyLVxcdC5ldmljdF9pbm9kZVxcdD0gb21mc19ldmljdF9pbm9kZSxcXG5mcy9vbWZzL2lub2RlLmM6MzIzOlxcdC5wdXRfc3VwZXJcXHQ9IG9tZnNfcHV0X3N1cGVyLFxcbmZzL29tZnMvaW5vZGUuYy0zMjQtXFx0LnN0YXRmc1xcdFxcdD0gb21mc19zdGF0ZnMsXFxuLS1cXG5mcy9vdmVybGF5ZnMvc3VwZXIuYz0yMTM9c3RhdGljIHZvaWQgb3ZsX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL292ZXJsYXlmcy9zdXBlci5jLTIyNC1cXG5mcy9vdmVybGF5ZnMvc3VwZXIuYzoyMjU6c3RhdGljIHZvaWQgb3ZsX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL292ZXJsYXlmcy9zdXBlci5jLTIyNi17XFxuLS1cXG5mcy9vdmVybGF5ZnMvc3VwZXIuYz0yOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG92bF9zdXBlcl9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvb3ZlcmxheWZzL3N1cGVyLmMtMzAxLVxcdC5kcm9wX2lub2RlXFx0PSBpbm9kZV9qdXN0X2Ryb3AsXFxuZnMvb3ZlcmxheWZzL3N1cGVyLmM6MzAyOlxcdC5wdXRfc3VwZXJcXHQ9IG92bF9wdXRfc3VwZXIsXFxuZnMvb3ZlcmxheWZzL3N1cGVyLmMtMzAzLVxcdC5zeW5jX2ZzXFx0PSBvdmxfc3luY19mcyxcXG4tLVxcbmZzL3FueDYvaW5vZGUuYz0yOT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgcW54Nl9zb3BzO1xcbmZzL3FueDYvaW5vZGUuYy0zMC1cXG5mcy9xbng2L2lub2RlLmM6MzE6c3RhdGljIHZvaWQgcW54Nl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvcW54Ni9pbm9kZS5jLTMyLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKnFueDZfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuLS1cXG5mcy9xbng2L2lub2RlLmM9Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHFueDZfc29wcyA9IHtcXG4tLVxcbmZzL3FueDYvaW5vZGUuYy00MC1cXHQuZnJlZV9pbm9kZVxcdD0gcW54Nl9mcmVlX2lub2RlLFxcbmZzL3FueDYvaW5vZGUuYzo0MTpcXHQucHV0X3N1cGVyXFx0PSBxbng2X3B1dF9zdXBlcixcXG5mcy9xbng2L2lub2RlLmMtNDItXFx0LnN0YXRmc1xcdFxcdD0gcW54Nl9zdGF0ZnMsXFxuLS1cXG5mcy9xbng2L2lub2RlLmM9MjkxPXN0YXRpYyBpbnQgcW54Nl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvcW54Ni9pbm9kZS5jLTQ3My1cXG5mcy9xbng2L2lub2RlLmM6NDc0OnN0YXRpYyB2b2lkIHFueDZfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvcW54Ni9pbm9kZS5jLTQ3NS17XFxuLS1cXG5mcy9xdW90YS9xdW90YS5jPTg2Nj1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpxdW90YWN0bF9ibG9jayhjb25zdCBjaGFyIF9fdXNlciAqc3BlY2lhbCwgaW50IGNtZClcXG4tLVxcbmZzL3F1b3RhL3F1b3RhLmMtODk5LVxcdFxcdHNiX2VuZF93cml0ZShzYik7XFxuZnMvcXVvdGEvcXVvdGEuYzo5MDA6XFx0XFx0cHV0X3N1cGVyKHNiKTtcXG5mcy9xdW90YS9xdW90YS5jLTkwMS1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jPTg5OT1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpfX2NpZnNfZ2V0X3N1cGVyKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSxcXG4tLVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkyNS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYzo5MjY6c3RhdGljIHZvaWQgX19jaWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkyNy17XFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYz05NDM9dm9pZCBjaWZzX3B1dF90Y3Bfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05NDQte1xcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjk0NTpcXHRfX2NpZnNfcHV0X3N1cGVyKHNiKTtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05NDYtfVxcbi0tXFxuZnMvc3F1YXNoZnMvc3VwZXIuYz01NzE9c3RhdGljIGludCBzcXVhc2hmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxcbi0tXFxuZnMvc3F1YXNoZnMvc3VwZXIuYy01OTAtXFxuZnMvc3F1YXNoZnMvc3VwZXIuYzo1OTE6c3RhdGljIHZvaWQgc3F1YXNoZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvc3F1YXNoZnMvc3VwZXIuYy01OTIte1xcbi0tXFxuZnMvc3F1YXNoZnMvc3VwZXIuYz02OTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNxdWFzaGZzX3N1cGVyX29wcyA9IHtcXG4tLVxcbmZzL3NxdWFzaGZzL3N1cGVyLmMtNjk3LVxcdC5zdGF0ZnMgPSBzcXVhc2hmc19zdGF0ZnMsXFxuZnMvc3F1YXNoZnMvc3VwZXIuYzo2OTg6XFx0LnB1dF9zdXBlciA9IHNxdWFzaGZzX3B1dF9zdXBlcixcXG5mcy9zcXVhc2hmcy9zdXBlci5jLTY5OS1cXHQuc2hvd19vcHRpb25zID0gc3F1YXNoZnNfc2hvd19vcHRpb25zLFxcbi0tXFxuZnMvc3VwZXIuYz0zMzc9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcXG4tLVxcbmZzL3N1cGVyLmMtNDMwLSAqIERyb3AgYSBzdXBlcmJsb2NrJ3MgcGFzc2l2ZSByZWZlcmVuY2UuICBNdXN0IGJlIGNhbGxlZCBXSVRIT1VUIHNiX2xvY2sgaGVsZDtcXG5mcy9zdXBlci5jOjQzMTogKiBwdXRfc3VwZXIoKSBhY3F1aXJlcyBzYl9sb2NrIGl0c2VsZiB3aGVuIHRoZSBmaW5hbCByZWZlcmVuY2UgaXMgZHJvcHBlZC5cXG5mcy9zdXBlci5jLTQzMi0gKi9cXG5mcy9zdXBlci5jOjQzMzp2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXFxuZnMvc3VwZXIuYy00MzQte1xcbi0tXFxuZnMvc3VwZXIuYz00ODA9c3RhdGljIHZvaWQgc3VwZXJfZGV2X3B1dChzdHJ1Y3Qgc3VwZXJfZGV2ICpmc2QpXFxuLS1cXG5mcy9zdXBlci5jLTQ4NC1cXHRcXHRyaGx0YWJsZV9yZW1vdmUoXFx1MDAyNnN1cGVyX2Rldl90YWJsZSwgXFx1MDAyNmZzZC1cXHUwMDNlc2Rfbm9kZSwgc3VwZXJfZGV2X3BhcmFtcyk7XFxuZnMvc3VwZXIuYzo0ODU6XFx0XFx0cHV0X3N1cGVyKGZzZC1cXHUwMDNlc2Rfc2IpO1xcbmZzL3N1cGVyLmMtNDg2LVxcdFxcdGtmcmVlX3JjdShmc2QsIHNkX3JjdSk7XFxuLS1cXG5mcy9zdXBlci5jPTU5NT12b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG4tLVxcbmZzL3N1cGVyLmMtNjAzLVxcbmZzL3N1cGVyLmM6NjA0OlxcdFxcdC8qIGxpc3RfbHJ1X2Rlc3Ryb3koKSBtYXkgc2xlZXA7IHB1dF9zdXBlcigpIGNhbGxlcnMgbWF5IG5vdC4gKi9cXG5mcy9zdXBlci5jLTYwNS1cXHRcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZzLVxcdTAwM2VzX2RlbnRyeV9scnUpO1xcbi0tXFxuZnMvc3VwZXIuYy02MDctXFxuZnMvc3VwZXIuYzo2MDg6XFx0XFx0cHV0X3N1cGVyKHMpO1xcbmZzL3N1cGVyLmMtNjA5LVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9zdXBlci5jPTY0Nj1zdGF0aWMgYm9vbCBncmFiX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9zdXBlci5jLTY1NC1cXHRcXHRpZiAoYXRvbWljX2luY19ub3RfemVybyhcXHUwMDI2c2ItXFx1MDAzZXNfYWN0aXZlKSkge1xcbmZzL3N1cGVyLmM6NjU1OlxcdFxcdFxcdHB1dF9zdXBlcihzYik7XFxuZnMvc3VwZXIuYy02NTYtXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5mcy9zdXBlci5jLTY2MC1cXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2c2ItXFx1MDAzZXNfZmxhZ3MsIHN1cGVyX2ZsYWdzKHNiLCBTQl9ERUFEKSk7XFxuZnMvc3VwZXIuYzo2NjE6XFx0cHV0X3N1cGVyKHNiKTtcXG5mcy9zdXBlci5jLTY2Mi1cXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5mcy9zdXBlci5jPTczNz12b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3N1cGVyLmMtNzYzLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzoxNS4yMDI4ODQ2NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NDA2NzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNodXRkb3duIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBrZXJuZWwgc2h1dGRvd24gc2VxdWVuY2UsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgc3VwZXJibG9ja3MgYXJlIGhhbmRsZWQuIEkgc2VlIGEgY2hhaW4gb2YgZnVuY3Rpb25zIGludm9sdmVkOiBgc2dldF9mY2AsIGBwdXRfc3VwZXJgLCBgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJgLCBga2lsbF9zdXBlcl9ub3RpZnlgLCBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAsIGFuZCBga2VybmZzX2tpbGxfc2JgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGlzIHN0ZXAgYnkgc3RlcC4gSSdtIGVzcGVjaWFsbHkgY3VyaW91cyBhYm91dCBga2lsbF9zdXBlcl9ub3RpZnlgLiBJIHZhZ3VlbHkgcmVjYWxsIGl0cyBwdXJwb3NlIGFuZCBJIHdhbnQgdG8gY29uZmlybSBpZiBteSBtZW1vcnkgaXMgY29ycmVjdC5cblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IGlmIGBraWxsX3N1cGVyX25vdGlmeWAgaXMgaW5kZWVkIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBZZXMsIGNvbmZpcm1lZDogYHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpYCB3aXRoaW4gYGZzL3N1cGVyLmNgLiBQZXJmZWN0LCB0aGF0IHJlaW5mb3JjZXMgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nLiBOb3csIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsIHNpdGVzLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGludm9rZWQgd2l0aGluIHRoaXMgc2h1dGRvd24gcHJvY2Vzcz8gSXMgaXQganVzdCBjYWxsZWQgYnkgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHMpYCBvciBvdGhlciBzdXBlcmJsb2NrIGNsZWFuaW5nIHJvdXRpbmVzIGxpa2UgYGtpbGxfYW5vbl9zdXBlcihzYilgLCBvciBhcmUgdGhlcmUgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSB0aGF0IHJlbHkgb24gaXQ/IFRvIGJlIHN1cmUsIEknbGwgbmVlZCB0byBydW4gYSBicm9hZCBzZWFyY2ggZm9yIGBraWxsX3N1cGVyX25vdGlmeWAgdGhyb3VnaG91dCB0aGUgZW50aXJlIGNvZGViYXNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYW5kIGludGVyYWN0aW9ucy4gVGhpcyBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN1cGVyYmxvY2sgdGVhcmRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODU1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIxOjEzOjE4LjA2Njk1NTExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ2MTA4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2lsbF9zdXBlcl9ub3RpZnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N1cGVyLmM9NTQ1PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfZGV2ICpzdXBlcl9kZXZfbmV4dChzdHJ1Y3Qgc3VwZXJfZGV2ICpwcmV2KVxcbi0tXFxuZnMvc3VwZXIuYy01NTYtXFxuZnMvc3VwZXIuYzo1NTc6c3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9zdXBlci5jLTU1OC17XFxuLS1cXG5mcy9zdXBlci5jPTU5NT12b2lkIGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcylcXG4tLVxcbmZzL3N1cGVyLmMtNjAxLVxcbmZzL3N1cGVyLmM6NjAyOlxcdFxcdGtpbGxfc3VwZXJfbm90aWZ5KHMpO1xcbmZzL3N1cGVyLmMtNjAzLVxcbi0tXFxuZnMvc3VwZXIuYz0xMzY2PXZvaWQga2lsbF9hbm9uX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9zdXBlci5jLTEzNjktXFx0Z2VuZXJpY19zaHV0ZG93bl9zdXBlcihzYik7XFxuZnMvc3VwZXIuYzoxMzcwOlxcdGtpbGxfc3VwZXJfbm90aWZ5KHNiKTtcXG5mcy9zdXBlci5jLTEzNzEtXFx0ZnJlZV9hbm9uX2JkZXYoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTM6MTguMjAxNjEwMTY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzU4ODUzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEaWdnaW5nIERlZXBlciBmb3IgSW1wYWN0KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBga2lsbF9zdXBlcl9ub3RpZnlgLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBsaWtlbHkgb24gYSBzcGVjaWZpYyBhcmVhLCBidXQgSSdtIHRoaW5raW5nIHdlIHNob3VsZCBicm9hZGVuIHRoZSBzY29wZSBvZiBvdXIgc2VhcmNoLiBKdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgd2UgZG9uJ3QgbWlzcyBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMsIEknbSBnb2luZyB0byBydW4gYSBmdWxsLXRyZWUgc2VhcmNoIGZvciBga2lsbF9zdXBlcl9ub3RpZnlgLiBUaGlzIHdpbGwgbGV0IG1lIHNlZSBpZiBpdCdzIHJlZmVyZW5jZWQgYW55d2hlcmUgdW5leHBlY3RlZCwgYW5kIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBhY3Qgb2YgdGhpcyBmdW5jdGlvbiBhY3Jvc3MgdGhlIGNvZGViYXNlLCBub3QganVzdCBpbiB0aGUgaW1tZWRpYXRlIGFyZWEgSSBzdGFydGVkIGludmVzdGlnYXRpbmcuIEJldHRlciB0byBjYXN0IGEgd2lkZSBuZXQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1ODQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzoyMC4yMzc0OTg4OTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjk5MjkyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2lsbF9zdXBlcl9ub3RpZnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3VwZXIuYz01NDU9c3RhdGljIHN0cnVjdCBzdXBlcl9kZXYgKnN1cGVyX2Rldl9uZXh0KHN0cnVjdCBzdXBlcl9kZXYgKnByZXYpXFxuLS1cXG5mcy9zdXBlci5jLTU1Ni1cXG5mcy9zdXBlci5jOjU1NzpzdGF0aWMgdm9pZCBraWxsX3N1cGVyX25vdGlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL3N1cGVyLmMtNTU4LXtcXG4tLVxcbmZzL3N1cGVyLmM9NTk1PXZvaWQgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxcbi0tXFxuZnMvc3VwZXIuYy02MDEtXFxuZnMvc3VwZXIuYzo2MDI6XFx0XFx0a2lsbF9zdXBlcl9ub3RpZnkocyk7XFxuZnMvc3VwZXIuYy02MDMtXFxuLS1cXG5mcy9zdXBlci5jPTEzNjY9dm9pZCBraWxsX2Fub25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3N1cGVyLmMtMTM2OS1cXHRnZW5lcmljX3NodXRkb3duX3N1cGVyKHNiKTtcXG5mcy9zdXBlci5jOjEzNzA6XFx0a2lsbF9zdXBlcl9ub3RpZnkoc2IpO1xcbmZzL3N1cGVyLmMtMTM3MS1cXHRmcmVlX2Fub25fYmRldihkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzoyMi42MDc0MzI1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTMyMzU3NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IFN1cGVyYmxvY2sgTGlmZWN5Y2xlIGFuZCBTeW5jaHJvbml6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYCwgYGRlYWN0aXZhdGVfc3VwZXJgLCBga2lsbF9hbm9uX3N1cGVyYCwgYHB1dF9zdXBlcmAsIGBzZ2V0X2ZjYCwgYW5kIGBrZXJuZnNfa2lsbF9zYmAuIEknbSBpbnRlcmVzdGVkIGluIGhvdyBgcHV0X3N1cGVyYCBpcyB1c2VkOyBpcyBpdCBhIHViaXF1aXRvdXMgZnVuY3Rpb24sIG9yIGlzIGl0cyB1c2FnZSBtb3JlIHNwZWNpZmljPyBJdCBsb29rcyBsaWtlIGBwdXRfc3VwZXJgIGlzIG9ubHkgY2FsbGVkIHdoZW4gcGFzc2l2ZWx5IHJlbGVhc2luZyBhIHN1cGVyYmxvY2ssIGxpa2UgZHVyaW5nIHVubW91bnQgb3Igd2hlbiBgc2dldF9mY2Agb3IgYHN1cGVyX2Rldl9wdXRgIGZhaWwsIHdoaWNoIG1ha2VzIGl0IGxlc3MgdWJpcXVpdG91cy4gIFRoZSBrZXkgZnVuY3Rpb24gZm9yIGZpbHRlcmluZyBhbmQgaGFuZGxpbmcgYFNCX0RFQURgIHN1cGVyYmxvY2tzIHNlZW1zIHRvIGJlIGBzZ2V0X2ZjYC4gSSdtIGFsc28gbm90aW5nIHRoYXQgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYCBpcyB0aGUgcG9pbnQgd2hlcmUgYWN0aXZlIHJlZmVyZW5jZXMgZHJvcCB0byB6ZXJvLCB0cmlnZ2VyaW5nIGBraWxsX3NiYC4gYGtpbGxfYW5vbl9zdXBlcmAgY2FsbHMgYGtpbGxfc3VwZXJfbm90aWZ5YCwgd2hpY2ggaXMgYWxzbyBpbXBvcnRhbnQsIGFzIGlzIGBrZXJuZnNfa2lsbF9zYmAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGtpbGxfYW5vbl9zdXBlcmAuXG5cbk5vdywgSSB3YW50IHRvIG1hcCBvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gIFdlIGhhdmUgYHNnZXRfZmNgIGZvciBzdXBlcmJsb2NrIGxvb2t1cCBhbmQgY3JlYXRpb24sIGBwdXRfc3VwZXJgIGZvciBwYXNzaXZlIHJlZmNvdW50IGRyb3BzIGFuZCBkZWxldGlvbiwgYGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyYCBmb3IgZGVhY3RpdmF0aW9uLCBga2lsbF9hbm9uX3N1cGVyYCBmb3IgdGVhcmRvd24sIGFuZCBga2VybmZzX2tpbGxfc2JgIGZvciBrZXJuZnMtc3BlY2lmaWMgc2h1dGRvd24uIEknbGwgYWxzbyBjb25zaWRlciBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAgaW4gdGhpcyBjb250ZXh0LlxuXG5DaGVja2luZyB0aGUgcGF0Y2gsIEkgc2VlIHRoZXNlIHN5bWJvbHM6IGBmcy9rZXJuZnMvbW91bnQuYzprZXJuZnNfa2lsbF9zYmAsIGBmcy9zdXBlci5jOnB1dF9zdXBlcmAsIGBmcy9zdXBlci5jOmtpbGxfc3VwZXJfbm90aWZ5YCwgYGZzL3N1cGVyLmM6ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJgLCBgZnMvc3VwZXIuYzpnZW5lcmljX3NodXRkb3duX3N1cGVyYCwgYW5kIGBmcy9zdXBlci5jOnNnZXRfZmNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYGZzL3N1cGVyLmNgIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgYnV0IGBmcy9rZXJuZnMvbW91bnQuY2AgaXMgY29tcGlsZWQgd2hlbiBgS0VSTkZTYCBpcyBzZXQuIFNvLCBgS0VSTkZTYCBpcyBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gdG8gY29uc2lkZXIuIEl0J3MgYm9vbGVhbiwgb2Z0ZW4gc2VsZWN0ZWQsIGFuZCBuZWVkcyB0byBiZSBpbmNsdWRlZC4gIGBmcy9zdXBlci5jYCBpdHNlbGYgZG9lc24ndCBkZXBlbmQgb24gYW55IGNvbmZpZyBvcHRpb25zLlxuXG5MZXQncyByZXZpZXcgdGhlIHJlcXVpcmVkIG91dHB1dHMuIFdlIGhhdmUgYFdvcnRoRnV6emluZ2AsIGBSZWFzb25pbmdgLCBgRm9jdXNTeW1ib2xzYCwgYW5kIGBFbmFibGVDb25maWdzYC5cblxuRm9yIGBGb2N1c1N5bWJvbHNgLCBJJ3ZlIGRlY2lkZWQgb246IGBzZ2V0X2ZjYCwgYHB1dF9zdXBlcmAsIGBkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcmAsIGBnZW5lcmljX3NodXRkb3duX3N1cGVyYCwgYGtpbGxfc3VwZXJfbm90aWZ5YCAoaW1wb3J0YW50LCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYyDigJMgdGhlIGNvbXBpbGVyIG1heSByZXRhaW4gaXQgb3Igd2UgY2FuIGNvbnNpZGVyIGl0cyBjYWxsZXJzKSwgYGtpbGxfYW5vbl9zdXBlcmAsIGFuZCBga2VybmZzX2tpbGxfc2JgLiBUaGlzIHNlbGVjdGlvbiBjb3ZlcnMgYm90aCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIG9mIHRoZSBzdGF0aWMgaGVscGVycy5cblxuRm9yIGBFbmFibGVDb25maWdzYCwgaXQncyBqdXN0IGBLRVJORlNgLlxuXG5IZXJlJ3MgbXkgY29uY2lzZSByZWFzb25pbmc6IFRoZSBwYXRjaCB0b3VjaGVzIGNvcmUgVkZTIHN1cGVyYmxvY2sgbGlmZWN5Y2xlIGFuZCBzeW5jaHJvbml6YXRpb24gZHVyaW5nIG1vdW50L3VubW91bnQuIEl0IGNoYW5nZXMgaG93IHN1cGVyYmxvY2tzIGFyZSB1bmxpbmtlZCwgc3luY2hyb25pemVzIGBTQl9ERUFEYCBzdGF0dXMgdW5kZXIgYHNiX2xvY2tgLCBtb3ZlcyBgcHV0X2ZpbGVzeXN0ZW0oKWAgdG8gYHB1dF9zdXBlcigpYCwgYW5kIHVwZGF0ZXMgYHNnZXRfZmMoKWAgdG8gYXZvaWQgYFNCX0RFQURgIHN1cGVyYmxvY2tzLiAgVGhpcyBpbnZvbHZlcyBjb21wbGV4IGNvbmN1cnJlbmN5IGJldHdlZW4gbW91bnRpbmcgYW5kIHVubW91bnRpbmcgcHJvY2Vzc2VzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB0byB1bmNvdmVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgYXNzZXJ0aW9uIGZhaWx1cmVzLlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYwMjIsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzozMS43Mzk3OTI1MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2Mzc3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktFUk5GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNnZXRfZmNcIixcbiAgICBcInB1dF9zdXBlclwiLFxuICAgIFwiZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXJcIixcbiAgICBcImdlbmVyaWNfc2h1dGRvd25fc3VwZXJcIixcbiAgICBcImtpbGxfYW5vbl9zdXBlclwiLFxuICAgIFwia2VybmZzX2tpbGxfc2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgbWFuYWdlbWVudCBhY3Jvc3MgbW91bnQgYW5kIHVubW91bnQgcGF0aHMgKGluIGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKS4gSXQgZGVmZXJzIHVubGlua2luZyBzdXBlcmJsb2NrcyBmcm9tIGZzX3N1cGVycyB1bnRpbCB0aGUgbGFzdCBwYXNzaXZlIHJlZmVyZW5jZSBkcm9wcyBpbiBwdXRfc3VwZXIoKSwgc2V0cyBTQl9ERUFEIHVuZGVyIHNiX2xvY2sgaW4ga2lsbF9zdXBlcl9ub3RpZnkoKSwgYW5kIHNraXBzIFNCX0RFQUQgc3VwZXJibG9ja3MgZHVyaW5nIHNnZXRfZmMoKSB0cmF2ZXJzYWwuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29uY3VycmVuY3kgaW52YXJpYW50cyBiZXR3ZWVuIGNvbmN1cnJlbnQgbW91bnQgKHNnZXRfZmMpIGFuZCBzaHV0ZG93bi9kZWFjdGl2YXRpb24gcm91dGluZXMsIG1ha2luZyB0aGlzIGNvcmUgc3Vic3lzdGVtIGNvZGUgd2VsbCB3b3J0aCBmdXp6aW5nIGZvciBzeW5jaHJvbml6YXRpb24gYW5kIHJlZmVyZW5jZSBjb3VudGluZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLRVJORlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ2V0X2ZjXCIsXG4gICAgXCJwdXRfc3VwZXJcIixcbiAgICBcImRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyXCIsXG4gICAgXCJnZW5lcmljX3NodXRkb3duX3N1cGVyXCIsXG4gICAgXCJraWxsX2Fub25fc3VwZXJcIixcbiAgICBcImtlcm5mc19raWxsX3NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgc3VwZXJibG9jayBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IG1hbmFnZW1lbnQgYWNyb3NzIG1vdW50IGFuZCB1bm1vdW50IHBhdGhzIChpbiBmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykuIEl0IGRlZmVycyB1bmxpbmtpbmcgc3VwZXJibG9ja3MgZnJvbSBmc19zdXBlcnMgdW50aWwgdGhlIGxhc3QgcGFzc2l2ZSByZWZlcmVuY2UgZHJvcHMgaW4gcHV0X3N1cGVyKCksIHNldHMgU0JfREVBRCB1bmRlciBzYl9sb2NrIGluIGtpbGxfc3VwZXJfbm90aWZ5KCksIGFuZCBza2lwcyBTQl9ERUFEIHN1cGVyYmxvY2tzIGR1cmluZyBzZ2V0X2ZjKCkgdHJhdmVyc2FsLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYmV0d2VlbiBjb25jdXJyZW50IG1vdW50IChzZ2V0X2ZjKSBhbmQgc2h1dGRvd24vZGVhY3RpdmF0aW9uIHJvdXRpbmVzLCBtYWtpbmcgdGhpcyBjb3JlIHN1YnN5c3RlbSBjb2RlIHdlbGwgd29ydGggZnV6emluZyBmb3Igc3luY2hyb25pemF0aW9uIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIxOjEzOjMxLjg4MTQzOTg5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MTcxMjc3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQyMToxMzozMS44ODMyOTMzOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwODE1MjcwMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBzdXBlcmJsb2NrIGluc3RhbmNlcyAoZnMvc3VwZXIuYyBhbmQgZnMva2VybmZzL21vdW50LmMpIGFjcm9zcyBtb3VudCBhbmQgc2h1dGRvd24gcGF0aHMgKHNnZXRfZmMsIGtpbGxfc3VwZXJfbm90aWZ5LCBwdXRfc3VwZXIpLiBJdCBkZWZlcnMgdW5saW5raW5nIHNiLVxcdTAwM2VzX2luc3RhbmNlcyBhbmQgcHV0X2ZpbGVzeXN0ZW0gdG8gcHV0X3N1cGVyLCB3aGlsZSBob2xkaW5nIHNiX2xvY2sgd2hlbiBzZXR0aW5nIFNCX0RFQUQgc28gY29uY3VycmVudCBzZ2V0X2ZjKCkgY2FsbHMgc2tpcCBkeWluZyBzdXBlcmJsb2Nrcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcgKHNiX2xvY2spLCBsaXN0IG1hbmFnZW1lbnQsIGFuZCBvYmplY3QgbGlmZWN5Y2xlIHN5bmNocm9uaXphdGlvbi4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgaGVyZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgcmFjZSBjb25kaXRpb25zLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRyYWNrZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgcGFyc2luZywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3B5aW5nIGlzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzljN2YwMzNlMTc0M2UzM2ViZGViOGI4OTZkYjI3YmFmNTRkNzBhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMjE6MTI6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9rZXJuZnMvbW91bnQuYyBiL2ZzL2tlcm5mcy9tb3VudC5jXG5pbmRleCBmMTgzYTk2Nzc4YjlhLi5hNTczOTkwMjFjOGIwIDEwMDY0NFxuLS0tIGEvZnMva2VybmZzL21vdW50LmNcbisrKyBiL2ZzL2tlcm5mcy9tb3VudC5jXG5AQCAtNDM0LDggKzQzNCw4IEBAIHZvaWQga2VybmZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHVwX3dyaXRlKFx1MDAyNnJvb3QtXHUwMDNla2VybmZzX3N1cGVyc19yd3NlbSk7XG4gXG4gXHQvKlxuLVx0ICogUmVtb3ZlIHRoZSBzdXBlcmJsb2NrIGZyb20gZnNfc3VwZXJzL3NfaW5zdGFuY2VzXG4tXHQgKiBzbyB3ZSBjYW4ndCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBrZXJuZnNfc3VwZXJfaW5mby5cbitcdCAqIE1hcmsgdGhlIHN1cGVyYmxvY2sgZGVhZCBzbyBzZ2V0X2ZjKCkgY2FuJ3QgZmluZCBpdCxcbitcdCAqIGJlZm9yZSBmcmVlaW5nIGtlcm5mc19zdXBlcl9pbmZvLlxuIFx0ICovXG4gXHRraWxsX2Fub25fc3VwZXIoc2IpO1xuIFx0a2ZyZWUoaW5mbyk7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLjBmOWUxM2VlZGI0ZmIgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtNDMzLDE1ICs0MzMsMTkgQEAgc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqYWxsb2Nfc3VwZXIoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncyxcbiB2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpXG4ge1xuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZzLVx1MDAzZXNfcGFzc2l2ZSkpIHtcbitcdFx0c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUgPSBzLVx1MDAzZXNfdHlwZTtcbiBcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnMtXHUwMDNlc19saXN0KTtcbitcdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2cy1cdTAwM2VzX2luc3RhbmNlcyk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFxuIFx0XHRXQVJOX09OKHMtXHUwMDNlc19kZW50cnlfbHJ1Lm5vZGUpO1xuIFx0XHRXQVJOX09OKHMtXHUwMDNlc19pbm9kZV9scnUubm9kZSk7XG4gXHRcdFdBUk5fT04ocy1cdTAwM2VzX21vdW50cyk7XG4gXHRcdGNhbGxfcmN1KFx1MDAyNnMtXHUwMDNlcmN1LCBkZXN0cm95X3N1cGVyX3JjdSk7XG4rXHRcdC8qIFRoZSB1bmxpbmsgYWJvdmUgbWF5IHRvdWNoIHR5cGUtXHUwMDNlZnNfc3VwZXJzLCBzbyBkcm9wIGl0IGxhc3QuICovXG4rXHRcdHB1dF9maWxlc3lzdGVtKHR5cGUpO1xuIFx0fVxuIH1cbiBcbkBAIC01NTgsMTcgKzU2Miw2IEBAIHN0YXRpYyB2b2lkIGtpbGxfc3VwZXJfbm90aWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRpZiAoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgU0JfREVBRClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Lypcbi1cdCAqIFJlbW92ZSBpdCBmcm9tIEBmc19zdXBlcnMgc28gaXQgaXNuJ3QgZm91bmQgYnkgbmV3XG4tXHQgKiBzZ2V0X2ZjKCkgd2Fsa2VycyBhbnltb3JlLiBBbnkgY29uY3VycmVudCBtb3VudGVyIHN0aWxsXG4tXHQgKiBtYW5hZ2luZyB0byBncmFiIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBpcyBndWFyYW50ZWVkIHRvXG4tXHQgKiBhbHJlYWR5IHNlZSBTQl9EWUlORyBhbmQgd2lsbCB3YWl0IHVudGlsIHdlIG5vdGlmeSB0aGVtIGFib3V0XG4tXHQgKiBTQl9ERUFELlxuLVx0ICovXG4tXHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4tXHRobGlzdF9kZWxfaW5pdChcdTAwMjZzYi1cdTAwM2VzX2luc3RhbmNlcyk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbi1cbiBcdC8qIERyb3Agc2dldF9mYygpJ3MgY2xhaW07IGEgbmV2ZXItcmVnaXN0ZXJlZCBlbnRyeSBzdGF5cyB3aXRoIHRoZSBzYi4gKi9cbiBcdGlmIChzYi1cdTAwM2VzX3N1cGVyX2Rldi1cdTAwM2VzZF9kZXYpIHtcbiBcdFx0c3VwZXJfZGV2X3B1dChzYi1cdTAwM2VzX3N1cGVyX2Rldik7XG5AQCAtNTc3LDExICs1NzAsMTUgQEAgc3RhdGljIHZvaWQga2lsbF9zdXBlcl9ub3RpZnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcbiBcdC8qXG4gXHQgKiBMZXQgY29uY3VycmVudCBtb3VudHMga25vdyB0aGF0IHRoaXMgdGhpbmcgaXMgcmVhbGx5IGRlYWQuXG4tXHQgKiBXZSBkb24ndCBuZWVkIEBzYi1cdTAwM2VzX3Vtb3VudCBoZXJlIGFzIGV2ZXJ5IGNvbmN1cnJlbnQgY2FsbGVyXG4tXHQgKiB3aWxsIHNlZSBTQl9EWUlORyBhbmQgZWl0aGVyIGRpc2NhcmQgdGhlIHN1cGVyYmxvY2sgb3Igd2FpdFxuLVx0ICogZm9yIFNCX0RFQUQuXG4rXHQgKiBzZ2V0X2ZjKCkgc2tpcHMgU0JfREVBRCBzdXBlcmJsb2NrcyBhbmQgY2FsbHMgdGVzdCgpIHVuZGVyXG4rXHQgKiBzYl9sb2NrLCBzbyBzZXQgaXQgdW5kZXIgc2JfbG9jazogb25jZSB3ZSByZXR1cm4gbm8gdGVzdCgpXG4rXHQgKiBydW5zIG9uIHRoaXMgc3VwZXJibG9jayBhbnltb3JlIGFuZCBub25lIHdpbGwgc3RhcnQuIEV2ZXJ5b25lXG4rXHQgKiBlbHNlIGFscmVhZHkgc2F3IFNCX0RZSU5HIGFuZCBlaXRoZXIgZGlzY2FyZGVkIHRoZSBzdXBlcmJsb2NrXG4rXHQgKiBvciB3YWl0cyBmb3IgU0JfREVBRC5cbiBcdCAqL1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0c3VwZXJfd2FrZShzYiwgU0JfREVBRCk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNjA4LDcgKzYwNSw2IEBAIHZvaWQgZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKVxuIFx0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNnMtXHUwMDNlc19kZW50cnlfbHJ1KTtcbiBcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZzLVx1MDAzZXNfaW5vZGVfbHJ1KTtcbiBcbi1cdFx0cHV0X2ZpbGVzeXN0ZW0oZnMpO1xuIFx0XHRwdXRfc3VwZXIocyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdXBlcl91bmxvY2tfZXhjbChzKTtcbkBAIC03OTUsMTIgKzc5MSwxMiBAQCB2b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdH1cbiBcdC8qXG4gXHQgKiBCcm9hZGNhc3QgdG8gZXZlcnlvbmUgdGhhdCBncmFiYmVkIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSB0byB0aGlzXG4tXHQgKiBzdXBlcmJsb2NrIGJlZm9yZSB3ZSByZW1vdmVkIGl0IGZyb20gQGZzX3N1cGVycyB0aGF0IHRoZSBzdXBlcmJsb2NrXG4tXHQgKiBpcyBkeWluZy4gRXZlcnkgd2Fsa2VyIG9mIEBmc19zdXBlcnMgb3V0c2lkZSBvZiBzZ2V0X2ZjKCkgd2lsbCBub3dcbi1cdCAqIGRpc2NhcmQgdGhpcyBzdXBlcmJsb2NrIGFuZCB0cmVhdCBpdCBhcyBkZWFkLlxuK1x0ICogc3VwZXJibG9jayB0aGF0IGl0IGlzIGR5aW5nLiBFdmVyeSB3YWxrZXIgb2YgQGZzX3N1cGVycyBvdXRzaWRlXG4rXHQgKiBvZiBzZ2V0X2ZjKCkgd2lsbCBub3cgZGlzY2FyZCB0aGlzIHN1cGVyYmxvY2sgYW5kIHRyZWF0IGl0IGFzXG4rXHQgKiBkZWFkLlxuIFx0ICpcbi1cdCAqIFdlIGxlYXZlIHRoZSBzdXBlcmJsb2NrIG9uIEBmc19zdXBlcnMgc28gaXQgY2FuIGJlIGZvdW5kIGJ5XG4tXHQgKiBzZ2V0X2ZjKCkgdW50aWwgd2UgcGFzc2VkIHNiLVx1MDAzZWtpbGxfc2IoKS5cbitcdCAqIHNnZXRfZmMoKSBrZWVwcyBmaW5kaW5nIHRoZSBzdXBlcmJsb2NrIHVudGlsIFNCX0RFQUQgaXMgc2V0LCBzb1xuK1x0ICogYSBjb25jdXJyZW50IG1vdW50ZXIgd2FpdHMgdW50aWwgd2UgcGFzc2VkIHNiLVx1MDAzZWtpbGxfc2IoKS5cbiBcdCAqL1xuIFx0c3VwZXJfd2FrZShzYiwgU0JfRFlJTkcpO1xuIFx0c3VwZXJfdW5sb2NrX2V4Y2woc2IpO1xuQEAgLTg3OSw2ICs4NzUsOSBAQCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNnZXRfZmMoc3RydWN0IGZzX2NvbnRleHQgKmZjLFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuIFx0aWYgKHRlc3QpIHtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCBcdTAwMjZmYy1cdTAwM2Vmc190eXBlLVx1MDAzZWZzX3N1cGVycywgc19pbnN0YW5jZXMpIHtcbitcdFx0XHQvKiBPbmx5IHVubGlua2VkIGF0IHRoZSBsYXN0IHBhc3NpdmUgcmVmZXJlbmNlLiAqL1xuK1x0XHRcdGlmIChzdXBlcl9mbGFncyhvbGQsIFNCX0RFQUQpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKHRlc3Qob2xkLCBmYykpXG4gXHRcdFx0XHRnb3RvIHNoYXJlX2V4dGFudF9zYjtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMjE6MTM6MzEuODgzMjk1MTFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4MTUyNDU4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBhIEtNU0FOIGZ1enppbmcgcnVuLiBUaGUgY2hhbmdlcyB0b3VjaCBgZnMva2VybmZzL21vdW50LmNgIGFuZCBgZnMvc3VwZXIuY2AsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzdXBlcmJsb2NrIHN0dWZmLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyBsaWtlIGEgcmV3b3JrIG9mIHRoZSBzdXBlcmJsb2NrIGxpZmVjeWNsZSBhbmQgc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBzZ2V0X2ZjYCwgYGtpbGxfc3VwZXJfbm90aWZ5YCwgYHB1dF9zdXBlcmAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGRlZmVycyBgaGxpc3RfZGVsX2luaXRgIG9mIGBzX2luc3RhbmNlc2AgYW5kIGFkZHMgYSBgU0JfREVBRGAgY2hlY2sgaW4gYHNnZXRfZmNgLiBUaGVyZSBhcmUgYWxzbyBzb21lIGBwdXRfZmlsZXN5c3RlbWAgY2FsbHMgYmVpbmcgbW92ZWQuIEl0J3MgYSBzeW5jaHJvbml6YXRpb24gYW5kIGxpZmVjeWNsZSByZWZhY3RvciwgZXNzZW50aWFsbHkuXG5cbk5vdywgZm9yIEtNU0FOLCB3ZSBuZWVkIHRvIGFzaywgZG9lcyB0aGlzIGludHJvZHVjZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBEb2VzIGl0IGV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2Ugd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24/IE5vLCB0aGUgcGF0Y2ggZG9lc24ndCBzZWVtIHRvIHRvdWNoIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBJdCdzIG5vdCBjb3B5aW5nIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgaXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgaW52b2x2ZWQgaW4gYW55IG5ldyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgdGhlIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgYWRkcmVzc2luZyBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2VzLCBhbmQgbWF5YmUgcmVmY291bnQgcHJvYmxlbXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGxpc3QgY29ycnVwdGlvbi5cblxuTm93LCBsZXQncyBjaGVjayB0aGUgZ3VpZGVsaW5lcy4gVGhlIGd1aWRlbGluZXMgbWFrZSBpdCB2ZXJ5IGNsZWFyOiBpZiBhIGJ1ZyBjYW4gYmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGRldGVjdG9ycywgYSBLTVNBTiBzZXNzaW9uIGlzIHBvaW50bGVzcy4gS0FTQU4gaXMgYnVpbHQgdG8gY2F0Y2ggb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgaW52YWxpZCBmcmVlcy4gTG9ja2RlcCBpcyBnb29kIGZvciBsb2NraW5nIGJ1Z3MuIFRoaXMgcGF0Y2ggZGVhbHMgd2l0aCBzeW5jaHJvbml6YXRpb24sIGNvbmN1cnJlbmN5LCBsaXN0IG1hbmlwdWxhdGlvbiwgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJdCdzIGFib3V0IHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGxpc3QgY29ycnVwdGlvbi4gVGhlIHBhdGNoIGRvZXMgbm90IGRlYWwgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHJlZmFjdG9yaW5nIHRvdWNoZXMgc3luY2hyb25pemF0aW9uLCBsaXN0IG1hbmlwdWxhdGlvbiwgYW5kIHN1cGVyYmxvY2sgbGlmZWN5Y2xlLCB0aGUgcmlza3MgYXJlIGFyb3VuZCBjb25jdXJyZW5jeSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxpc3QgY29ycnVwdGlvbiwgYWxsIG9mIHdoaWNoIGZhbGwgZmlybWx5IHVuZGVyIEtBU0FOL0xPQ0tERVAuIFRoZXJlJ3Mgbm8gS01TQU4gcmlzayBoZXJlLlxuXG5TbywgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFRpbWUgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTksIk91dHB1dFRva2VucyI6MjEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDIxOjEzOjQyLjY5ODU0NDIxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpbnN0YW5jZXMgKGZzL3N1cGVyLmMgYW5kIGZzL2tlcm5mcy9tb3VudC5jKSBhY3Jvc3MgbW91bnQgYW5kIHNodXRkb3duIHBhdGhzIChzZ2V0X2ZjLCBraWxsX3N1cGVyX25vdGlmeSwgcHV0X3N1cGVyKS4gSXQgZGVmZXJzIHVubGlua2luZyBzYi1cXHUwMDNlc19pbnN0YW5jZXMgYW5kIHB1dF9maWxlc3lzdGVtIHRvIHB1dF9zdXBlciwgd2hpbGUgaG9sZGluZyBzYl9sb2NrIHdoZW4gc2V0dGluZyBTQl9ERUFEIHNvIGNvbmN1cnJlbnQgc2dldF9mYygpIGNhbGxzIHNraXAgZHlpbmcgc3VwZXJibG9ja3MuXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIChzYl9sb2NrKSwgbGlzdCBtYW5hZ2VtZW50LCBhbmQgb2JqZWN0IGxpZmVjeWNsZSBzeW5jaHJvbml6YXRpb24uIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0cmFja2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIHBhcnNpbmcsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29weWluZyBpcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgc3luY2hyb25pemF0aW9uIG9mIHN1cGVyYmxvY2sgaW5zdGFuY2VzIChmcy9zdXBlci5jIGFuZCBmcy9rZXJuZnMvbW91bnQuYykgYWNyb3NzIG1vdW50IGFuZCBzaHV0ZG93biBwYXRocyAoc2dldF9mYywga2lsbF9zdXBlcl9ub3RpZnksIHB1dF9zdXBlcikuIEl0IGRlZmVycyB1bmxpbmtpbmcgc2ItXFx1MDAzZXNfaW5zdGFuY2VzIGFuZCBwdXRfZmlsZXN5c3RlbSB0byBwdXRfc3VwZXIsIHdoaWxlIGhvbGRpbmcgc2JfbG9jayB3aGVuIHNldHRpbmcgU0JfREVBRCBzbyBjb25jdXJyZW50IHNnZXRfZmMoKSBjYWxscyBza2lwIGR5aW5nIHN1cGVyYmxvY2tzLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHJlZmVyZW5jZSBjb3VudGluZywgbG9ja2luZyAoc2JfbG9jayksIGxpc3QgbWFuYWdlbWVudCwgYW5kIG9iamVjdCBsaWZlY3ljbGUgc3luY2hyb25pemF0aW9uLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBoZXJlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgdHJhY2tlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1ZmZlciBwYXJzaW5nLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGNvcHlpbmcgaXMgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbpb8[1] Phase: Succeeded StartedAt: 2026-09-09 21:13:54 +0000 UTC FinishedAt: 2026-09-09 21:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 21:13:54 +0000 UTC FinishedAt: 2026-09-09 21:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2] Phase: Succeeded StartedAt: 2026-09-09 21:13:54 +0000 UTC FinishedAt: 2026-09-10 00:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 21:13:54 +0000 UTC FinishedAt: 2026-09-10 00:56:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 21:13:54 +0000 UTC FinishedAt: 2026-09-09 21:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 21:13:54 +0000 UTC FinishedAt: 2026-09-09 21:14:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzbpb8/series-workflowzbpb8-convert-artifact-491212368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 21:14:04 +0000 UTC FinishedAt: 2026-09-09 21:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 21:14:04 +0000 UTC FinishedAt: 2026-09-09 21:32:14 +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:*e6fd6e44-7719-46a8-948d-c07feebb1fdb,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-workflowzbpb8/series-workflowzbpb8-convert-artifact-491212368/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": "f65d3a74-f07e-4ddf-bc8c-b7fadca7a94a", "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-workflowzbpb8/series-workflowzbpb8-build-action-1606040790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 21:14:04 +0000 UTC FinishedAt: 2026-09-09 21:32:04 +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:*e6fd6e44-7719-46a8-948d-c07feebb1fdb,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-workflowzbpb8/series-workflowzbpb8-convert-artifact-491212368/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": "f65d3a74-f07e-4ddf-bc8c-b7fadca7a94a", "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-workflowzbpb8/series-workflowzbpb8-build-action-1606040790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 21:32:14 +0000 UTC FinishedAt: 2026-09-09 21:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 21:32:14 +0000 UTC FinishedAt: 2026-09-09 21:32:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 21:32:14 +0000 UTC FinishedAt: 2026-09-09 21:32:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 21:32:14 +0000 UTC FinishedAt: 2026-09-09 21:32:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzbpb8/series-workflowzbpb8-convert-artifact-3740971959/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 21:32:24 +0000 UTC FinishedAt: 2026-09-09 21:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 21:32:24 +0000 UTC FinishedAt: 2026-09-09 21:34:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f65d3a74-f07e-4ddf-bc8c-b7fadca7a94a,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-workflowzbpb8/series-workflowzbpb8-build-action-1606040790/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-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 21:34:36 +0000 UTC FinishedAt: 2026-09-09 21:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 21:34:36 +0000 UTC FinishedAt: 2026-09-09 21:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 21:34:36 +0000 UTC FinishedAt: 2026-09-09 21:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 21:34:36 +0000 UTC FinishedAt: 2026-09-09 21:51:28 +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:*e6fd6e44-7719-46a8-948d-c07feebb1fdb,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-workflowzbpb8/series-workflowzbpb8-convert-artifact-3740971959/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": "d10e8caf-6d3c-4d91-aae1-29ef9cecf377", "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-workflowzbpb8/series-workflowzbpb8-build-action-1215173499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 21:34:36 +0000 UTC FinishedAt: 2026-09-09 21:51:18 +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:*e6fd6e44-7719-46a8-948d-c07feebb1fdb,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-workflowzbpb8/series-workflowzbpb8-convert-artifact-3740971959/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": "d10e8caf-6d3c-4d91-aae1-29ef9cecf377", "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-workflowzbpb8/series-workflowzbpb8-build-action-1215173499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 21:51:28 +0000 UTC FinishedAt: 2026-09-09 21:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 21:51:28 +0000 UTC FinishedAt: 2026-09-09 21:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 21:51:28 +0000 UTC FinishedAt: 2026-09-09 21:53:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 21:51:28 +0000 UTC FinishedAt: 2026-09-09 21:53:25 +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:*d10e8caf-6d3c-4d91-aae1-29ef9cecf377,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-workflowzbpb8/series-workflowzbpb8-build-action-1215173499/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-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 21:53:35 +0000 UTC FinishedAt: 2026-09-10 00:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 21:53:35 +0000 UTC FinishedAt: 2026-09-10 00:56:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"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:*f65d3a74-f07e-4ddf-bc8c-b7fadca7a94a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d10e8caf-6d3c-4d91-aae1-29ef9cecf377,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-workflowzbpb8/series-workflowzbpb8-build-action-1606040790/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-workflowzbpb8/series-workflowzbpb8-build-action-1215173499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 21:53:35 +0000 UTC FinishedAt: 2026-09-09 21:53:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 21:53:35 +0000 UTC FinishedAt: 2026-09-09 21:53:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"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-workflowzbpb8/series-workflowzbpb8-convert-artifact-241555952/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 21:53:35 +0000 UTC FinishedAt: 2026-09-09 21:53:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 21:53:35 +0000 UTC FinishedAt: 2026-09-09 21:53:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 21:53:35 +0000 UTC FinishedAt: 2026-09-09 21:53:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 21:53:45 +0000 UTC FinishedAt: 2026-09-10 00:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzbpb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["sget_fc","put_super","deactivate_locked_super","generic_shutdown_super","kill_anon_super","kernfs_kill_sb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KERNFS"],"series_id":"571c4630-8faa-4b81-a463-2ecc63efb449","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 21:53:45 +0000 UTC FinishedAt: 2026-09-10 00:56:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f65d3a74-f07e-4ddf-bc8c-b7fadca7a94a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d10e8caf-6d3c-4d91-aae1-29ef9cecf377,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-workflowzbpb8/series-workflowzbpb8-build-action-1606040790/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-workflowzbpb8/series-workflowzbpb8-build-action-1215173499/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-workflowzbpb8/series-workflowzbpb8-convert-artifact-241555952/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,}