Name: series-workflowjc9kg Phase: Succeeded StartedAt: 2026-08-15 12:04:17 +0000 UTC FinishedAt: 2026-08-15 14:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[0] Phase: Succeeded StartedAt: 2026-08-15 12:04:17 +0000 UTC FinishedAt: 2026-08-15 12:32:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[0].run-triage Phase: Succeeded StartedAt: 2026-08-15 12:04:17 +0000 UTC FinishedAt: 2026-08-15 12:32:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "5625f0e2-6bdc-45cb-a48a-297494f07c1b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_token_join_cookie_init_state", "mptcp_subflow_init_cookie_req" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYXNzaWdubWVudCB0byBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgLiBgc3ViZmxvd19yZXFgIGlzIGEgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYHJlcXNrX2FsbG9jKClgLiBUaGUgYHJlcXNrX2FsbG9jKClgIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgZnJvbSBhIHNsYWIgY2FjaGUgd2l0aG91dCB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLlxuXG5XaGlsZSBgc3ViZmxvd19pbml0X3JlcSgpYCBpbml0aWFsaXplcyBzZXZlcmFsIGZpZWxkcyBvZiB0aGUgcmVxdWVzdCBzb2NrZXQsIGl0IGRvZXMgbm90IGluaXRpYWxpemUgYGxvY2FsX2lkYC4gRHVyaW5nIGEgU1lOIGNvb2tpZSBNUF9KT0lOLCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYCBpcyBjYWxsZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIHJlcXVlc3Qgc29ja2V0IHN0YXRlIGZyb20gdGhlIGNvb2tpZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGZhaWxlZCB0byByZXN0b3JlIGBsb2NhbF9pZGAsIGxlYXZpbmcgYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYCB1bmluaXRpYWxpemVkLlxuXG5UaGlzIHVuaW5pdGlhbGl6ZWQgMS1ieXRlIHZhbHVlIGlzIGxhdGVyIGNvcGllZCB0byB0aGUgc3ViZmxvdyBjb250ZXh0IChgbmV3X2N0eC1cdTAwM2Vsb2NhbF9pZGApIGluIGBzdWJmbG93X3VscF9jbG9uZSgpYC4gRnJvbSB0aGVyZSwgdGhlIHVuaW5pdGlhbGl6ZWQga2VybmVsIGhlYXAgbWVtb3J5IGNhbiBiZSBsZWFrZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChlLmcuLCBgTVBUQ1BfU1VCRkxPV19BVFRSX0lEX0xPQ2AgaW4gYHN1YmZsb3dfZ2V0X2luZm8oKWApIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBNUFRDUCBUQ1Agb3B0aW9ucy5cblxuU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIGFuZCBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBvZiBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIE1QVENQIHN5bmNvb2tpZSBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgTVBUQ1AgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhODBhNjMwYzY2NjY2NmI4ZDRjY2U3ZTc5MWQ0ZTgwMjNhYjI1ZmNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTI6MzA6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmNcbmluZGV4IDdmMjI1MjYzNDZhN2UuLmI1Y2FjNTcwMTEyMjEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3luY29va2llcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbFxuIFx0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfbm9uY2UgPSBlLVx1MDAzZWxvY2FsX25vbmNlO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlYmFja3VwID0gZS1cdTAwM2ViYWNrdXA7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQgPSBlLVx1MDAzZWpvaW5faWQ7XG4mIzQzO1x0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQgPSBlLVx1MDAzZWxvY2FsX2lkO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNldG9rZW4gPSBlLVx1MDAzZXRva2VuO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlbXNrID0gbXNrO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIG9mIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZGAgaW4gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgTVBUQ1Agc3luY29va2llIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNUFRDUCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4MGE2MzBjNjY2NjY2YjhkNGNjZTdlNzkxZDRlODAyM2FiMjVmY2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAxMjozMDoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zeW5jb29raWVzLmMgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jCmluZGV4IDdmMjI1MjYzNDZhN2UuLmI1Y2FjNTcwMTEyMjEgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zeW5jb29raWVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N5bmNvb2tpZXMuYwpAQCAtMTE4LDYgJiM0MzsxMTgsNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbAogCXN1YmZsb3dfcmVxLSZndDtsb2NhbF9ub25jZSA9IGUtJmd0O2xvY2FsX25vbmNlOwogCXN1YmZsb3dfcmVxLSZndDtiYWNrdXAgPSBlLSZndDtiYWNrdXA7CiAJc3ViZmxvd19yZXEtJmd0O3JlbW90ZV9pZCA9IGUtJmd0O2pvaW5faWQ7CiYjNDM7CXN1YmZsb3dfcmVxLSZndDtsb2NhbF9pZCA9IGUtJmd0O2xvY2FsX2lkOwogCXN1YmZsb3dfcmVxLSZndDt0b2tlbiA9IGUtJmd0O3Rva2VuOwogCXN1YmZsb3dfcmVxLSZndDttc2sgPSBtc2s7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtqb2luX2VudHJ5X2xvY2tzW2ldKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwYXRjaDoKCioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIE1QVENQIFBhdGNoKioKCk9rYXksIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L21wdGNwL3N5bmNvb2tpZXMuY2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0IHNlZW1zIHRvIGFkZCBgc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkID0gZS0mZ3Q7bG9jYWxfaWQ7YCB3aXRoaW4gdGhlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2h5IGFyZSB3ZSBkb2luZyB0aGlzPyYjMzQ7LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU28sIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGl0c2VsZi4gV2hhdOKAmXMgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2U/IEFuZCB3aGF0IGlzIGBzdWJmbG93X3JlcWA/IElzIGl0IGFuIGVzdGFibGlzaGVkIGRhdGEgc3RydWN0dXJlIG9yIGFuIGluc3RhbmNlPyBBbmQgaG93IGRvZXMgYGVgIHJlbGF0ZSB0byBgbG9jYWxfaWRgPyBXaGF0IGtpbmQgb2YgdmFsdWUgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgaGFuZHNoYWtlIHByb2Nlc3MgdG8gd2hpY2ggdGhpcyBjb29raWUgaW5pdGlhbGl6YXRpb24gaXMgcmVsYXRlZCB0byBmdWxseSBncmFzcCB0aGUgY2hhbmdlLiBXaGF0IHBhcnQgb2YgdGhlIE1QVENQIGhhbmRzaGFrZSBpcyBiZWluZyBtb2RpZmllZD8gTGV0JiMzOTtzIHRyYWNlIGJhY2sgd2hlcmUgdGhpcyBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgaXMgYmVpbmcgY2FsbGVkIGFuZCBzZWUgaG93IGBzdWJmbG93X3JlcWAgYW5kIGBlYCBhcmUgdXNlZC4gVGhpcyBjaGFuZ2UgbGlrZWx5IGhhcyBzb21lIGltcGFjdCBvbiBob3cgd2UgaGFuZGxlIHN1YmZsb3cgam9pbiByZXF1ZXN0cyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB0b2tlbnMsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCB0aGF0IGltcGFjdCBpcyBiZWZvcmUgSSBjYW4gYXNzZXNzIHRoZSBwYXRjaCYjMzk7cyBtZXJpdC4gSXMgdGhpcyBhIHNlY3VyaXR5IGZpeCwgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N5bmNvb2tpZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc3luY29va2llcy5jPTcxPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05MS0gKi9cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgZnVuY3Rpb246CgoqKkRpdmluZyBpbnRvIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hlcmUgdGhpcyBmdW5jdGlvbiBzaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIE1QVENQIGZyYW1ld29yay4gV2hhdCYjMzk7cyBpdHMgcm9sZSwgYW5kIHdoYXQgYXJlIGl0cyBpbnB1dHMgYW5kIG91dHB1dHM/IEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCBvciBpbml0aWFsaXppbmcgc29tZSBjcnVjaWFsIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGpvaW4gY29va2llIGFuZCB0b2tlbiBtZWNoYW5pc20uIEl0JiMzOTtzIHByb2JhYmx5IGNhbGxlZCBkdXJpbmcgdGhlIGhhbmRzaGFrZSBvciB3aGVuIGEgbmV3IHN1YmZsb3cgaXMgYmVpbmcgZXN0YWJsaXNoZWQuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZToKCiogICBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCBtb2RpZnlpbmcgb3IgcG9wdWxhdGluZz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgdGhlIE1QVENQIGNvbm5lY3Rpb24gY29udHJvbCBibG9jaywgdGhlIHN1YmZsb3cmIzM5O3MgZGF0YSwgb3Igc29tZSBkZWRpY2F0ZWQgY29va2llLXJlbGF0ZWQgc3RydWN0dXJlPwoqICAgV2hhdCBpcyB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RhdGU/IElzIGl0IG9ubHkgaW5pdGlhbGl6ZWQsIG9yIGlzIGl0IGFsc28gdXBkYXRlZCBvciBjbGVhcmVkIGxhdGVyIGluIHRoZSBjb25uZWN0aW9uPwoqICAgSG93IGRvZXMgdGhpcyBpbml0aWFsaXphdGlvbiByZWxhdGUgdG8gdGhlIE1QVENQJiMzOTtzIG92ZXJhbGwgc2VjdXJpdHkgYW5kIGNvbmdlc3Rpb24gY29udHJvbCBtZWNoYW5pc21zPwoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvZGUgdG8gc2VlIGlmIGl0JiMzOTtzIGdlbmVyYXRpbmcgbmV3IGNvb2tpZXMgb3IgdG9rZW5zLCBvciB2YWxpZGF0aW5nIHByZXZpb3VzbHkgcmVjZWl2ZWQgb25lcy4gSWYgSSB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcywgaXQmIzM5O2xsIGhlbHAgbWUgYXNzZXNzIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgYXR0YWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zeW5jb29raWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0ICogcHJlc2VudCBpbiB0aGUgY29va2llIEFDSyBtcHRjcCBvcHRpb24gc3BhY2Ugd2lsbCBiZSBjaGVja2VkIGxhdGVyLlxuICA5MTpcdCAqL1xuICA5MjpcdGJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxuICA5MzpcdFx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA5NDpcdHtcbiAgOTU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2Vzay5yZXEuaXJlcV9uZXQpO1xuICA5NjpcdFx0dTMyIGkgPSBtcHRjcF9qb2luX2VudHJ5X2hhc2goc2tiLCBuZXQpO1xuICA5NzpcdFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbiAgOTg6XHRcdHN0cnVjdCBqb2luX2VudHJ5ICplO1xuICA5OTpcdFxuIDEwMDpcdFx0ZSA9IFx1MDAyNmpvaW5fZW50cmllc1tpXTtcbiAxMDE6XHRcbiAxMDI6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcbiAxMDM6XHRcbiAxMDQ6XHRcdGlmIChlLVx1MDAzZXZhbGlkID09IDApIHtcbiAxMDU6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4gMTA2Olx0XHRcdHJldHVybiBmYWxzZTtcbiAxMDc6XHRcdH1cbiAxMDg6XHRcbiAxMDk6XHRcdGUtXHUwMDNldmFsaWQgPSAwO1xuIDExMDpcdFxuIDExMTpcdFx0bXNrID0gbXB0Y3BfdG9rZW5fZ2V0X3NvY2sobmV0LCBlLVx1MDAzZXRva2VuKTtcbiAxMTI6XHRcdGlmICghbXNrKSB7XG4gMTEzOlx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xuIDExNDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTE1Olx0XHR9XG4gMTE2Olx0XG4gMTE3Olx0XHRzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfbm9uY2UgPSBlLVx1MDAzZXJlbW90ZV9ub25jZTtcbiAxMTg6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX25vbmNlID0gZS1cdTAwM2Vsb2NhbF9ub25jZTtcbiAxMTk6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZWJhY2t1cCA9IGUtXHUwMDNlYmFja3VwO1xuIDEyMDpcdFx0c3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX2lkID0gZS1cdTAwM2Vqb2luX2lkO1xuIDEyMTpcdFx0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQgPSBlLVx1MDAzZWxvY2FsX2lkO1xuIDEyMjpcdFx0c3ViZmxvd19yZXEtXHUwMDNldG9rZW4gPSBlLVx1MDAzZXRva2VuO1xuIDEyMzpcdFx0c3ViZmxvd19yZXEtXHUwMDNlbXNrID0gbXNrO1xuIDEyNDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4gMTI1Olx0XHRyZXR1cm4gdHJ1ZTtcbiAxMjY6XHR9XG4gMTI3Olx0XG4gMTI4Olx0dm9pZCBfX2luaXQgbXB0Y3Bfam9pbl9jb29raWVfaW5pdCh2b2lkKVxuIDEyOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgTVBUQ1AgU3luY29va2llIE1vZGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgbW9kaWZpY2F0aW9uIGluIGhvdyBNUFRDUCBzeW5jb29raWVzIHdvcmsuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgJiMzNDtSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiYjMzQ7IEkgbmVlZCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBNUFRDUC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHR3ZWFrZWQgYW5kIGhvdyB0aGV5JiMzOTtyZSBpbmZsdWVuY2luZyB0aGUgb3ZlcmFsbCBiZWhhdmlvci4gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM/IEFueSBzZWN1cml0eSByYW1pZmljYXRpb25zPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgdGhlIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1QVENQIFRva2VuIEhhbmRsaW5nKioKCkFscmlnaHQsIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGRlZmluaXRlbHkgYE1QVENQYC4gVGltZSB0byB6ZXJvIGluIG9uIHRoaXMgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpdHMgc2NvcGUgYW5kIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSB3aGVyZSBpdCBnZXRzIGNhbGxlZCBmcm9t4oCUd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgTVBUQ1Agc3RhY2sgcmVseSBvbiBpdHMgZnVuY3Rpb25hbGl0eT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCBpcyBhbHdheXMgdGhlIGZpcnN0IHN0ZXAgZm9yIG1lIHRvIGdyYXNwIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgYmVmb3JlIEkgY2FuIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5oPTEzNjI9dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjMtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzY0OmJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2NS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTM3MT1zdGF0aWMgaW5saW5lIGJvb2xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNzI6bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3My1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjM9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI4OS1cdH0gZWxzZSBpZiAob3B0X21wX2pvaW4gXHUwMDI2XHUwMDI2IGxpc3RlbmVyLVx1MDAzZXJlcXVlc3RfbXB0Y3ApIHtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjkwOlx0XHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI5MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTcxPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05MS0gKi9cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE1QVENQIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBpbml0aWF0aW5nIHRoZSBjb29raWUgcmVxdWVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBhcyB0aGlzIGlzIHRoZSBzdGFydGluZyBwb2ludC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIGhhbmRzaGFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmM9MTQ3PXN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjYyLVxubmV0L21wdGNwL3N1YmZsb3cuYzoyNjM6aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjY0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTgtfVxubmV0L21wdGNwL3N1YmZsb3cuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0zMDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgU2NvcGUgb2YgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCoqCgpBbHJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBmdW5jdGlvbiwgdGhlIG9uZSBkZWFsaW5nIHdpdGggaW5pdGlhbCBjb29raWUgcmVxdWVzdHMgd2l0aGluIE1QVENQLCBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBvdGhlciBmdW5jdGlvbnMgKndpdGhpbiogdGhlIGBuZXQvbXB0Y3AvYCBkaXJlY3RvcnksIG9yIGRvZXMgaXQgaGF2ZSBhbiBleHRlcm5hbCBpbnRlcmZhY2UsIGkuZS4sIGlzIGl0IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgbW9kdWxlPyBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludCBpdHMgYm91bmRhcmllcy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlcGVuZGVuY2llcywgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIGhvdyB0aWdodGx5IGNvdXBsZWQgaXQgaXMgdG8gdGhlIHJlc3Qgb2YgdGhlIE1QVENQIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIGlmIGV4dGVybmFsIGNvZGUgZGlyZWN0bHkgY2FsbHMgdGhpcyBjb3VsZCBpbXBhY3QgaG93IEkgYXBwcm9hY2ggYW55IG1vZGlmaWNhdGlvbnMgb3IgZGVidWdnaW5nLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQgbWUgdHJhY2UgdGhlIGNhbGxzIGFuZCBkbyBzb21lIGNyb3NzLXJlZmVyZW5jaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvc3luY29va2llcy5jPTI2Mz1zdGF0aWMgaW50IGNvb2tpZV90Y3BfcmVxc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTI5NC1cdGlmICh0cmVxLVx1MDAzZWlzX21wdGNwKVxubmV0L2lwdjQvc3luY29va2llcy5jOjI5NTpcdFx0cmV0dXJuIG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHJlcSwgc2ssIHNrYik7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjk2LSNlbmRpZlxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ3PXN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjYyLVxubmV0L21wdGNwL3N1YmZsb3cuYzoyNjM6aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjY0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTgtfVxubmV0L21wdGNwL3N1YmZsb3cuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0zMDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODEKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVBUQ1AgVG9rZW4gSm9pbiBDb29raWUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvaXB2NC9zeW5jb29raWVzLmNgLiBJJiMzOTt2ZSBob25lZCBpbiBvbiBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIGFuZCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgYXMgdGhlIGtleSBmdW5jdGlvbnMgdG8gZXhhbWluZSBoZXJlLiBUaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBNUFRDUGAsIHdoaWNoIEkmIzM5O2xsIGtlZXAgaW4gbWluZC4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYWJvdXQgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLiBJIG5lZWQgdG8gY2hlY2sgaWYgaXQmIzM5O3Mgc3RhdGljIG9yIGdsb2JhbC4gQWgsIGl0JiMzOTtzIG5vdCBzdGF0aWM7IGl0JiMzOTtzIGV4cG9ydGVkLCBzbyBpdCYjMzk7cyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBub3c6IGBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSwgc3RydWN0IHNrX2J1ZmYgKnNrYilgLgoKUmlnaHQsIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gaXNzdWUuIEl0IHNlZW1zIGBzdWJmbG93X3JlcS0mZ3Q7bG9jYWxfaWRgIHdhc24mIzM5O3QgYmVpbmcgaW5pdGlhbGl6ZWQgaW4gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBpZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZC4gSXQgc2VlbXMgYE1QVENQYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcuCgpBbHJpZ2h0LCBJIHRoaW5rIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNoYW5nZS4gSSYjMzk7bSByZWFkeSB0byBkb2N1bWVudCBteSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIG9mIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZGAgaW4gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgTVBUQ1Agc3luY29va2llIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNUFRDUCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlJiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gb2YgYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBNUFRDUCBzeW5jb29raWUgcHJvY2Vzc2luZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1QVENQIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYXNzaWdubWVudCB0byBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgLiBgc3ViZmxvd19yZXFgIGlzIGEgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYHJlcXNrX2FsbG9jKClgLiBUaGUgYHJlcXNrX2FsbG9jKClgIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgZnJvbSBhIHNsYWIgY2FjaGUgd2l0aG91dCB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLlxuXG5XaGlsZSBgc3ViZmxvd19pbml0X3JlcSgpYCBpbml0aWFsaXplcyBzZXZlcmFsIGZpZWxkcyBvZiB0aGUgcmVxdWVzdCBzb2NrZXQsIGl0IGRvZXMgbm90IGluaXRpYWxpemUgYGxvY2FsX2lkYC4gRHVyaW5nIGEgU1lOIGNvb2tpZSBNUF9KT0lOLCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYCBpcyBjYWxsZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIHJlcXVlc3Qgc29ja2V0IHN0YXRlIGZyb20gdGhlIGNvb2tpZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGZhaWxlZCB0byByZXN0b3JlIGBsb2NhbF9pZGAsIGxlYXZpbmcgYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYCB1bmluaXRpYWxpemVkLlxuXG5UaGlzIHVuaW5pdGlhbGl6ZWQgMS1ieXRlIHZhbHVlIGlzIGxhdGVyIGNvcGllZCB0byB0aGUgc3ViZmxvdyBjb250ZXh0IChgbmV3X2N0eC1cdTAwM2Vsb2NhbF9pZGApIGluIGBzdWJmbG93X3VscF9jbG9uZSgpYC4gRnJvbSB0aGVyZSwgdGhlIHVuaW5pdGlhbGl6ZWQga2VybmVsIGhlYXAgbWVtb3J5IGNhbiBiZSBsZWFrZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChlLmcuLCBgTVBUQ1BfU1VCRkxPV19BVFRSX0lEX0xPQ2AgaW4gYHN1YmZsb3dfZ2V0X2luZm8oKWApIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBNUFRDUCBUQ1Agb3B0aW9ucy5cblxuU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIGFuZCBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTgwYTYzMGM2NjY2NjZiOGQ0Y2NlN2U3OTFkNGU4MDIzYWIyNWZjZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDE1IDEyOjMwOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmMKaW5kZXggN2YyMjUyNjM0NmE3ZS4uYjVjYWM1NzAxMTIyMSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw3IEBAIGJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsCiAJc3ViZmxvd19yZXEtJmd0O2xvY2FsX25vbmNlID0gZS0mZ3Q7bG9jYWxfbm9uY2U7CiAJc3ViZmxvd19yZXEtJmd0O2JhY2t1cCA9IGUtJmd0O2JhY2t1cDsKIAlzdWJmbG93X3JlcS0mZ3Q7cmVtb3RlX2lkID0gZS0mZ3Q7am9pbl9pZDsKJiM0MzsJc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkID0gZS0mZ3Q7bG9jYWxfaWQ7CiAJc3ViZmxvd19yZXEtJmd0O3Rva2VuID0gZS0mZ3Q7dG9rZW47CiAJc3ViZmxvd19yZXEtJmd0O21zayA9IG1zazsKIAlzcGluX3VubG9ja19iaCgmYW1wO2pvaW5fZW50cnlfbG9ja3NbaV0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIFRva2VuIEpvaW4gQ29va2llIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBgc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkID0gZS0mZ3Q7bG9jYWxfaWQ7YCB0byB0aGUgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L21wdGNwL3N5bmNvb2tpZXMuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIHBhdGNoIGl0c2VsZiBpcyBzaW1wbGUsIGp1c3QgYW4gYXNzaWdubWVudCB3aXRoaW4gdGhlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBmdW5jdGlvbiwgYXNzaWduaW5nIGEgdmFsdWUgZnJvbSBgZS0mZ3Q7bG9jYWxfaWRgIHRvIGBzdWJmbG93X3JlcS0mZ3Q7bG9jYWxfaWRgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGNvcGllZCBhcm91bmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG9mIHRoaXMgYXNzaWdubWVudC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBzdWJmbG93X3JlcWAgYW5kIGBlYCBhY3R1YWxseSAqYXJlKi4gSSBrbm93IHRoZXkmIzM5O3JlIGJvdGggbGlrZWx5IHN0cnVjdHVyZXMsIHBvaW50ZXJzIGluIHRoaXMgY29udGV4dCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucyBvZiBgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrYCBhbmQgYHN0cnVjdCBqb2luX2VudHJ5YC4KClJpZ2h0LCBgc3ViZmxvd19yZXFgIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrYCwgYW5kIGBlYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBqb2luX2VudHJ5YC4gTm93IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyBgZS0mZ3Q7bG9jYWxfaWRgIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgYXNzaWdubWVudD8gSWYgbm90LCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSwgd2hpY2ggaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvbXB0Y3Avc3luY29va2llcy5jYCB0byBzZWUgaG93IHRoZXNlIHN0cnVjdHVyZXMgYXJlIHBvcHVsYXRlZCBhbmQgd2hlcmUgYGUtJmd0O2xvY2FsX2lkYCBnZXRzIGl0cyB2YWx1ZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50IHRvIGVuc3VyZSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGpvaW5fZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc3luY29va2llcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zeW5jb29raWVzLmMtMjItXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjIzOnN0cnVjdCBqb2luX2VudHJ5IHtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtMjQtXHR1MzIgdG9rZW47XG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0zNC1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6MzU6c3RhdGljIHN0cnVjdCBqb2luX2VudHJ5IGpvaW5fZW50cmllc1tDT09LSUVfSk9JTl9TTE9UU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTM2LXN0YXRpYyBzcGlubG9ja190IGpvaW5fZW50cnlfbG9ja3NbQ09PS0lFX0pPSU5fU0xPVFNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9Mzg9c3RhdGljIHUzMiBtcHRjcF9qb2luX2VudHJ5X2hhc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNTgtXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjU5OnN0YXRpYyB2b2lkIG1wdGNwX2pvaW5fc3RvcmVfc3RhdGUoc3RydWN0IGpvaW5fZW50cnkgKmVudHJ5LFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy02MC1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz05Mj1ib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTk3LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTg6XHRzdHJ1Y3Qgam9pbl9lbnRyeSAqZTtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgam9pbl9lbnRyeWAgU3RydWN0dXJlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGBzdHJ1Y3Qgam9pbl9lbnRyeWAgZGVmaW5pdGlvbi4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBob3cgam9pbnMgYXJlIGhhbmRsZWQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbXBvbmVudHMgaXMgY3JpdGljYWwuIEkgbmVlZCB0byBiZSBzdXJlIEkgaGF2ZSBhIHNvbGlkIGdyYXNwIG9mIGl0cyBmaWVsZHMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBqb2luIG9wZXJhdGlvbi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgbGF5b3V0LCBhbnkgcG90ZW50aWFsIGFsaWdubWVudCBpc3N1ZXMsIGFuZCBob3cgdGhlIHZhcmlvdXMgZmllbGRzIGNvbnRyaWJ1dGUgdG8gZWZmaWNpZW50IGxvb2t1cHMgYW5kIGNvbXBhcmlzb25zLiBUaGlzIGRlZmluaXRpb24gaXMgZ29pbmcgdG8gZGljdGF0ZSBhIGxvdCBhYm91dCBwZXJmb3JtYW5jZSBhbmQgc2NhbGFiaWxpdHksIHNvIGEgZGVlcCB1bmRlcnN0YW5kaW5nIGlzIGVzc2VudGlhbCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N5bmNvb2tpZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQgKiB3aGVuIHRoZSBUQ1AgQUNLIHBhc3NlZCB0aGUgY29va2llIHZhbGlkYXRpb24gY2hlY2suXG4gIDIxOlx0ICovXG4gIDIyOlx0XG4gIDIzOlx0c3RydWN0IGpvaW5fZW50cnkge1xuICAyNDpcdFx0dTMyIHRva2VuO1xuICAyNTpcdFx0dTMyIHJlbW90ZV9ub25jZTtcbiAgMjY6XHRcdHUzMiBsb2NhbF9ub25jZTtcbiAgMjc6XHRcdHU4IGpvaW5faWQ7XG4gIDI4Olx0XHR1OCBsb2NhbF9pZDtcbiAgMjk6XHRcdHU4IGJhY2t1cDtcbiAgMzA6XHRcdHU4IHZhbGlkO1xuICAzMTpcdH07XG4gIDMyOlx0XG4gIDMzOlx0I2RlZmluZSBDT09LSUVfSk9JTl9TTE9UU1x0MTAyNFxuICAzNDpcdFxuICAzNTpcdHN0YXRpYyBzdHJ1Y3Qgam9pbl9lbnRyeSBqb2luX2VudHJpZXNbQ09PS0lFX0pPSU5fU0xPVFNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuICAzNjpcdHN0YXRpYyBzcGlubG9ja190IGpvaW5fZW50cnlfbG9ja3NbQ09PS0lFX0pPSU5fU0xPVFNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuICAzNzpcdFxuICAzODpcdHN0YXRpYyB1MzIgbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbiAgMzk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGpvaW5fZW50cmllc2AgYW5kIEZvY3VzIG9uIGBtcHRjcF9qb2luX3N0b3JlX3N0YXRlYCoqCgpBbHJpZ2h0LCBzbyBgam9pbl9lbnRyaWVzYCBpcyBhIGdsb2JhbCBhcnJheSwgbWVhbmluZyBpdHMgY29udGVudHMgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZCBhdCB0aGUgc3RhcnQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBwcmV2ZW50cyBzb21lIHVuZXhwZWN0ZWQgdmFsdWVzIGZyb20gcG9wcGluZyB1cCBpbiB0aGUgaW5pdGlhbCBzdGF0ZSwgd2hpY2ggaXMgYSBjb21tb24gY2F1c2Ugb2YgaGFyZC10by1kZWJ1ZyBpc3N1ZXMuIE5vdywgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBsb2dpYyB0aGF0IG1hbmFnZXMgaXQsIGJ1dCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG1wdGNwX2pvaW5fc3RvcmVfc3RhdGVgIHNwZWNpZmljYWxseS4gSXQmIzM5O3MgdGhlIGNvcmUgc3RhdGUgbWFuYWdlbWVudCBmb3IgdGhlIGpvaW5pbmcgcHJvY2VzcywgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCBpbnRlcmFjdHMgd2l0aCBgam9pbl9lbnRyaWVzYCBjb3JyZWN0bHkuIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgbG9va3MgaW1wb3J0YW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N5bmNvb2tpZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTg6XHRcbiAgNTk6XHRzdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSxcbiAgNjA6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXG4gIDYxOlx0e1xuICA2MjpcdFx0ZW50cnktXHUwMDNldG9rZW4gPSBzdWJmbG93X3JlcS1cdTAwM2V0b2tlbjtcbiAgNjM6XHRcdGVudHJ5LVx1MDAzZXJlbW90ZV9ub25jZSA9IHN1YmZsb3dfcmVxLVx1MDAzZXJlbW90ZV9ub25jZTtcbiAgNjQ6XHRcdGVudHJ5LVx1MDAzZWxvY2FsX25vbmNlID0gc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfbm9uY2U7XG4gIDY1Olx0XHRlbnRyeS1cdTAwM2ViYWNrdXAgPSBzdWJmbG93X3JlcS1cdTAwM2ViYWNrdXA7XG4gIDY2Olx0XHRlbnRyeS1cdTAwM2Vqb2luX2lkID0gc3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX2lkO1xuICA2NzpcdFx0ZW50cnktXHUwMDNlbG9jYWxfaWQgPSBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZDtcbiAgNjg6XHRcdGVudHJ5LVx1MDAzZXZhbGlkID0gMTtcbiAgNjk6XHR9XG4gIDcwOlx0XG4gIDcxOlx0dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbiAgNzI6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA3MzpcdHtcbiAgNzQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2Vzay5yZXEuaXJlcV9uZXQpO1xuICA3NTpcdFx0dTMyIGkgPSBtcHRjcF9qb2luX2VudHJ5X2hhc2goc2tiLCBuZXQpO1xuICA3NjpcdFxuICA3NzpcdFx0LyogTm8gdXNlIGluIHdhaXRpbmcgaWYgb3RoZXIgY3B1IGlzIGFscmVhZHkgdXNpbmcgdGhpcyBzbG90IC0tXG4gIDc4Olx0XHQgKiB3b3VsZCBvdmVyd3JpdGUgdGhlIGRhdGEgdGhhdCBnb3Qgc3RvcmVkLlxuICA3OTpcdFx0ICovXG4gIDgwOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4gIDgxOlx0XHRtcHRjcF9qb2luX3N0b3JlX3N0YXRlKFx1MDAyNmpvaW5fZW50cmllc1tpXSwgc3ViZmxvd19yZXEpO1xuICA4MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4gIDgzOlx0fVxuICA4NDpcdFxuICA4NTpcdC8qIENhbGxlZCBmb3IgYSBjb29raWUtYWNrIHdpdGggTVBfSk9JTiBvcHRpb24gcHJlc2VudC5cbiAgODY6XHQgKiBMb29rIHVwIHRoZSBzYXZlZCBzdGF0ZSBiYXNlZCBvbiBza2IgaGFzaCBcdTAwMjYgY2hlY2sgdG9rZW4gbWF0Y2hlcyBtc2tcbiAgODc6XHQgKiBpbiBzYW1lIG5ldG5zLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBNUFRDUCBUb2tlbiBKb2luIENvb2tpZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgY2hhbmdlIHdpdGhpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAuIFRoZSBrZXkgYWRkaXRpb24gaXMgYHN1YmZsb3dfcmVxLSZndDtsb2NhbF9pZCA9IGUtJmd0O2xvY2FsX2lkO2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UmIzM5O3JlIGVzc2VudGlhbGx5IGxpbmtpbmcgdGhlIGBsb2NhbF9pZGAgZnJvbSBzb21lIGVsZW1lbnQgYGVgIHRvIHRoZSBgc3ViZmxvd19yZXFgIHN0cnVjdHVyZSBkdXJpbmcgdGhlIHRva2VuIGpvaW4gY29va2llIGluaXRpYWxpemF0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgZGlyZWN0IG1hcHBpbmcgb3IgYXNzb2NpYXRpb24gaXMgYmVpbmcgY3JlYXRlZC4gSSBoYXZlIHRvIGxvb2sgZGVlcGVyIGludG8gd2hhdCBgZWAgcmVwcmVzZW50cyBhbmQgd2hhdCB0aGUgYHN1YmZsb3dfcmVxYCBjb250ZXh0IGlzIHRvIGRldGVybWluZSB0aGUgKndoeSouIElzIGl0IHNldHRpbmcgdXAgYSBwZXItc3ViZmxvdyBjb250ZXh0LCBhc3NvY2lhdGluZyBhIGxvY2FsIGlkZW50aWZpZXIgd2l0aCB0aGUgc3RhdGU/IElzIHRoZXJlIGEgc3VidGxlIGltcGFjdCBvbiBjb25jdXJyZW5jeSBvciB0aGUgd2F5IHdlJiMzOTtyZSBoYW5kbGluZyBpZGVudGlmaWVycz8gTGV0IG1lIGNoZWNrIGhvdyBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgaXMgYWN0dWFsbHkgdXNlZCBhbmQgd2hhdCBgZWAgYW5kIGBzdWJmbG93X3JlcWAgYXJlIGRlZmluZWQgYXMgdG8gZGV0ZXJtaW5lIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N5bmNvb2tpZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTI6XHRib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbiAgOTM6XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgOTQ6XHR7XG4gIDk1Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcbiAgOTY6XHRcdHUzMiBpID0gbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHNrYiwgbmV0KTtcbiAgOTc6XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XG4gIDk4Olx0XHRzdHJ1Y3Qgam9pbl9lbnRyeSAqZTtcbiAgOTk6XHRcbiAxMDA6XHRcdGUgPSBcdTAwMjZqb2luX2VudHJpZXNbaV07XG4gMTAxOlx0XG4gMTAyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4gMTAzOlx0XG4gMTA0Olx0XHRpZiAoZS1cdTAwM2V2YWxpZCA9PSAwKSB7XG4gMTA1Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xuIDEwNjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTA3Olx0XHR9XG4gMTA4Olx0XG4gMTA5Olx0XHRlLVx1MDAzZXZhbGlkID0gMDtcbiAxMTA6XHRcbiAxMTE6XHRcdG1zayA9IG1wdGNwX3Rva2VuX2dldF9zb2NrKG5ldCwgZS1cdTAwM2V0b2tlbik7XG4gMTEyOlx0XHRpZiAoIW1zaykge1xuIDExMzpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcbiAxMTQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDExNTpcdFx0fVxuIDExNjpcdFxuIDExNzpcdFx0c3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX25vbmNlID0gZS1cdTAwM2VyZW1vdGVfbm9uY2U7XG4gMTE4Olx0XHRzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9ub25jZSA9IGUtXHUwMDNlbG9jYWxfbm9uY2U7XG4gMTE5Olx0XHRzdWJmbG93X3JlcS1cdTAwM2ViYWNrdXAgPSBlLVx1MDAzZWJhY2t1cDtcbiAxMjA6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZXJlbW90ZV9pZCA9IGUtXHUwMDNlam9pbl9pZDtcbiAxMjE6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gZS1cdTAwM2Vsb2NhbF9pZDtcbiAxMjI6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuID0gZS1cdTAwM2V0b2tlbjtcbiAxMjM6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZW1zayA9IG1zaztcbiAxMjQ6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xuIDEyNTpcdFx0cmV0dXJuIHRydWU7XG4gMTI2Olx0fVxuIDEyNzpcdFxuIDEyODpcdHZvaWQgX19pbml0IG1wdGNwX2pvaW5fY29va2llX2luaXQodm9pZClcbiAxMjk6XHR7XG4gMTMwOlx0XHRpbnQgaTtcbiAxMzE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI5OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBQb3RlbnRpYWwgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgcmVzdG9yaW5nIGBsb2NhbF9pZGAgZnJvbSB0aGUgYGpvaW5fZW50cnlgIHN0cnVjdCB0byBgc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkYC4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGBlLSZndDtsb2NhbF9pZGAgd2FzIGluaXRpYWxseSBzZXQgdXNpbmcgYHN1YmZsb3dfcmVxLSZndDtsb2NhbF9pZGAgdmlhIGBtcHRjcF9qb2luX3N0b3JlX3N0YXRlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhlcmUgYSByaXNrIG9mIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmU/JiMzNDsgV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBnbG9iYWwgYXJyYXkgYGpvaW5fZW50cmllc2AsIHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQsIHNvIHRoYXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gQW5kIGBzdWJmbG93X3JlcWA/IEl0JiMzOTtzIHBhcnQgb2YgYSByZXF1ZXN0IHNvY2tldCwgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AuIFRoaXMgcGF0Y2ggaXMgYmFzaWNhbGx5IGp1c3QgY29weWluZyBhIHZhbHVlIHRoYXQgd2FzIHByZXZpb3VzbHkgYXNzaWduZWQuCgpUaGUgcG90ZW50aWFsIGlzc3VlIEkgc2VlIGlzIGlmIGBsb2NhbF9pZGAgKndhc24mIzM5O3QqIHJlc3RvcmVkLiBXaGF0IHdvdWxkIGl0IGJlPyBaZXJvPyBVbmluaXRpYWxpemVkIGdhcmJhZ2U/IElmIHdlIGRpZG4mIzM5O3QgcmVzdG9yZSBpdCwgd2hhdGV2ZXIgd2FzIGluIG1lbW9yeSBhdCB0aGUgdGltZSBgc3ViZmxvd19yZXFgIHdhcyBhbGxvY2F0ZWQgaXMgd2hhdCB3ZSYjMzk7ZCBiZSB1c2luZyBsYXRlci4gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gQnV0IHdhaXQsIHR5cGljYWxseSwgcmVxdWVzdCBzb2NrZXRzIGFyZSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBTbyBpdCYjMzk7cyBwcm9iYWJseSAqbm90KiBhbiBpc3N1ZS4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHdoZXJlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBpcyBjYWxsZWQgYW5kIGhvdyB0aGUgYHN1YmZsb3dfcmVxYCBpcyBjcmVhdGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmaW5hbCBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmg9MTM2Mj12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2My1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjQ6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzY1LVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzcxPXN0YXRpYyBpbmxpbmUgYm9vbFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MjptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzczLVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTI2Mz1pbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjg5LVx0fSBlbHNlIGlmIChvcHRfbXBfam9pbiBcdTAwMjZcdTAwMjYgbGlzdGVuZXItXHUwMDNlcmVxdWVzdF9tcHRjcCkge1xubmV0L21wdGNwL3N1YmZsb3cuYzoyOTA6XHRcdGlmICghbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdWJmbG93X3JlcSwgc2tiKSlcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjkxLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NzE9dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkxLSAqL1xubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo5Mjpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTMtXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSAmIzM0O3Rob3VnaHRzJiMzNDsgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAqKgoKUmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXMgdGVsbGluZyBtZSB0byBjaGVjayBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgLiBUaGF0IGxpa2VseSBtZWFucyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIHN1YmZsb3csIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGNvb2tpZSByZXF1ZXN0IG1lY2hhbmlzbS4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBpbml0aWF0aW5nIGVuZHBvaW50IG9mIGEgc3ViZmxvdyBpcyBoYW5kbGluZyB0aGUgaW5pdGlhbCBjb29raWUgZXhjaGFuZ2Ugd2l0aCB0aGUgcGVlci4gV2Uga25vdyB0aGUgY29va2llIGlzIGZ1bmRhbWVudGFsIGZvciBNUFRDUCBzZWN1cml0eSBhbmQgc3ViZmxvdyBpZGVudGlmaWNhdGlvbiwgc28gcHJvYmxlbXMgdGhlcmUgYXJlIGdvaW5nIHRvIHF1aWNrbHkgYmVjb21lIGNhdGFzdHJvcGhpYyBmb3IgTVBUQ1Agb3BlcmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQ6CgoqICAgKipUaGUgY29udGV4dCoqOiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBmcm9tPyBJcyBpdCBkdXJpbmcgdGhlIGluaXRpYWwgY29ubmVjdGlvbiBzZXR1cCwgYSByZS1lc3RhYmxpc2htZW50IGF0dGVtcHQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjbHVlcy4KKiAgICoqVGhlIGlucHV0IGRhdGEqKjogV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQgdG8gYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYD8gVGhhdCB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgaW5pdGlhdG9yIGlzIGF0dGVtcHRpbmcgdG8gY29tbXVuaWNhdGUgdG8gdGhlIG90aGVyIHNpZGUsIGFuZCB3aGF0IGRldGFpbHMgYXJlIHBlcnRpbmVudC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGZvcm1hdCBhbmQgdmFsaWRpdHkgb2YgdGhlIGNvb2tpZSBkYXRhIChpZiBhbnkpLgoqICAgKipUaGUgZnVuY3Rpb24gbG9naWMqKjogV2hhdCBzdGVwcyBkb2VzIHRoaXMgZnVuY3Rpb24gdGFrZT8gSG93IGRvZXMgaXQgZ2VuZXJhdGUvaGFuZGxlL3ZhbGlkYXRlIHRoZSBjb29raWUgcmVxdWVzdD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBoZXJlIChlLmcuLCB3ZWFrIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciwgaW1wcm9wZXIgaGFuZGxpbmcgb2YgYnVmZmVyIG92ZXJmbG93cywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMpPwoqICAgKipUaGUgZXJyb3IgaGFuZGxpbmcqKjogV2hhdCBoYXBwZW5zIGlmIHRoZSBjb29raWUgcmVxdWVzdCBmYWlscz8gQXJlIHRoZXJlIGFwcHJvcHJpYXRlIGZhbGxiYWNrIG1lY2hhbmlzbXMgb3IgZXJyb3IgbWVzc2FnZXM/IEFyZSBwb3RlbnRpYWwgZXJyb3JzIGJlaW5nIGxvZ2dlZCBhZGVxdWF0ZWx5IGZvciBkZWJ1Z2dpbmc/IElzIHRoZSBmdW5jdGlvbiByZXNpbGllbnQgdG8gbWFsaWNpb3VzIGF0dGVtcHRzIHRvIGNvcnJ1cHQgdGhlIGRhdGE/CiogICAqKlBlcmZvcm1hbmNlIGFzcGVjdHMqKjogSXMgdGhpcyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s/IEFyZSB0aGVyZSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24/IFRoaXMgaXMgYSBjb3JlIHBhcnQgb2Ygc3ViZmxvdyBpbml0aWFsaXphdGlvbiBzbyBzbG93IGluaXRpYWwgc2V0dXAgY291bGQgYmUgZGV0cmltZW50YWwgdG8gdGhlIHBlcmZvcm1hbmNlIG9mIE1QVENQLgoqICAgKipTZWN1cml0eSBpbXBsaWNhdGlvbnMqKjogQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBzdWNoIGFzIGEgbWFsaWNpb3VzIGFjdG9yIGJlaW5nIGFibGUgdG8gbWFuaXB1bGF0ZSB0aGUgc3ViZmxvdyBjb29raWUuCgpJbiBzdW1tYXJ5LCBJIGV4cGVjdCB0aGlzIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgaXMgYSB2aXRhbCBwaWVjZSBvZiB0aGUgTVBUQ1AgcHV6emxlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdGhvcm91Z2hseSwgaW4gYWxsIG9mIGl0cyBhc3BlY3RzLCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJ1Z3MsIHZ1bG5lcmFiaWxpdGllcywgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MzpcdGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gMjY0Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiAyNjU6XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAyNjY6XHR7XG4gMjY3Olx0XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrX2xpc3RlbmVyKTtcbiAyNjg6XHRcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuIDI2OTpcdFx0c3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgbXBfb3B0O1xuIDI3MDpcdFx0Ym9vbCBvcHRfbXBfY2FwYWJsZSwgb3B0X21wX2pvaW47XG4gMjcxOlx0XHRpbnQgZXJyO1xuIDI3MjpcdFxuIDI3MzpcdFx0c3ViZmxvd19pbml0X3JlcShyZXEsIHNrX2xpc3RlbmVyKTtcbiAyNzQ6XHRcdG1wdGNwX2dldF9vcHRpb25zKHNrYiwgXHUwMDI2bXBfb3B0KTtcbiAyNzU6XHRcbiAyNzY6XHRcdG9wdF9tcF9jYXBhYmxlID0gISEobXBfb3B0LnN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKTtcbiAyNzc6XHRcdG9wdF9tcF9qb2luID0gISEobXBfb3B0LnN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUEpfQUNLKTtcbiAyNzg6XHRcdGlmIChvcHRfbXBfY2FwYWJsZSBcdTAwMjZcdTAwMjYgbGlzdGVuZXItXHUwMDNlcmVxdWVzdF9tcHRjcCkge1xuIDI3OTpcdFx0XHRpZiAobXBfb3B0LnNuZHJfa2V5ID09IDApXG4gMjgwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjgxOlx0XG4gMjgyOlx0XHRcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2tleSA9IG1wX29wdC5yY3ZyX2tleTtcbiAyODM6XHRcdFx0ZXJyID0gbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QocmVxKTtcbiAyODQ6XHRcdFx0aWYgKGVycilcbiAyODU6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDI4NjpcdFxuIDI4NzpcdFx0XHRzdWJmbG93X3JlcS1cdTAwM2VtcF9jYXBhYmxlID0gMTtcbiAyODg6XHRcdFx0c3ViZmxvd19yZXEtXHUwMDNlc3NuX29mZnNldCA9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgLSAxO1xuIDI4OTpcdFx0fSBlbHNlIGlmIChvcHRfbXBfam9pbiBcdTAwMjZcdTAwMjYgbGlzdGVuZXItXHUwMDNlcmVxdWVzdF9tcHRjcCkge1xuIDI5MDpcdFx0XHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXG4gMjkxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjkyOlx0XG4gMjkzOlx0XHRcdHN1YmZsb3dfcmVxLVx1MDAzZW1wX2pvaW4gPSAxO1xuIDI5NDpcdFx0XHRzdWJmbG93X3JlcS1cdTAwM2Vzc25fb2Zmc2V0ID0gVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSAtIDE7XG4gMjk1Olx0XHR9XG4gMjk2Olx0XG4gMjk3Olx0XHRyZXR1cm4gMDtcbiAyOTg6XHR9XG4gMjk5Olx0RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xuIDMwMDpcdFxuIDMwMTpcdHN0YXRpYyBlbnVtIHNrX3JzdF9yZWFzb24gbXB0Y3BfZ2V0X3JzdF9yZWFzb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzMDI6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gU3ViZmxvdyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgdGhpcyBzdWJmbG93LiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgaG93IHRoZSBgc3ViZmxvd19pbml0X3JlcWAgaW50ZXJhY3RzIHdpdGggYW5kIGluaXRpYWxpemVzIHRoZSBjb3JlIGBzdWJmbG93X3JlcWAuIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGF0IHNldHVwIGlzIGNsZWFuIGFuZCBlZmZpY2llbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZm91bmRhdGlvbmFsIHJlcXVlc3QgaXMgYmVpbmcgZm9ybWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdWJmbG93X2luaXRfcmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N1YmZsb3cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc3ViZmxvdy5jPTg1PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqc3ViZmxvd190b2tlbl9qb2luX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTA3LVxubmV0L21wdGNwL3N1YmZsb3cuYzoxMDg6c3RhdGljIHZvaWQgc3ViZmxvd19pbml0X3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTA5LXtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE0Nz1zdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI1Mi1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjUzOlx0XHRcdHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShzdWJmbG93X3JlcSwgc2tiKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjU0LVx0XHR9XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjM9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI3Mi1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjczOlx0c3ViZmxvd19pbml0X3JlcShyZXEsIHNrX2xpc3RlbmVyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjc0LVx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MzExPXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzdWJmbG93X3Y0X3JvdXRlX3JlcShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0zMjAtXHR0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3AgPSAxO1xubmV0L21wdGNwL3N1YmZsb3cuYzozMjE6XHRzdWJmbG93X2luaXRfcmVxKHJlcSwgc2spO1xubmV0L21wdGNwL3N1YmZsb3cuYy0zMjItXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0zODA9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnN1YmZsb3dfdjZfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM4OS1cdHRjcF9yc2socmVxKS1cdTAwM2Vpc19tcHRjcCA9IDE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM5MDpcdHN1YmZsb3dfaW5pdF9yZXEocmVxLCBzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM5MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEluaXRpYWxpemF0aW9uIFJlcXVlc3QqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgYWx3YXlzIG1ldGhvZGljYWwsIGFuZCByaWdodCBub3csIEkmIzM5O20gemVyb2luZyBpbiBvbiBgc3ViZmxvd19pbml0X3JlcWAuIFRoYXQgc3BlY2lmaWMgcmVxdWVzdCBzdHJ1Y3R1cmUgaXMgdGhlIGNvcm5lcnN0b25lIG9mIGhvdyBvdXIgc3ViZmxvd3MgYXJlIGxhdW5jaGVkLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgY29udGVudHMgaXMgY3J1Y2lhbC4gV2hhdCBhcmUgdGhlIGtleSBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZGF0YSBzYW5pdGl6YXRpb24gb3IgYWNjZXNzIGNvbnRyb2w/IElzIHRoZSByZXF1ZXN0IGZ1bGx5IGNvbXBsaWFudCB3aXRoIHRoZSBwcm90b2NvbCB3ZSYjMzk7dmUgZGVmaW5lZD8gVGhlIGRldmlsLCBhcyB0aGV5IHNheSwgaXMgaW4gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgaW50ZW5kZWQgdXNhZ2UgdG8gZW5zdXJlIGl0cyBvcGVyYXRpb24gYWxpZ25zIHdpdGggdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLCB3aXRob3V0IGV4cG9zaW5nIGFueSB3ZWFrbmVzc2VzLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwODpcdHN0YXRpYyB2b2lkIHN1YmZsb3dfaW5pdF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIpXG4gMTA5Olx0e1xuIDExMDpcdFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG4gMTExOlx0XG4gMTEyOlx0XHRzdWJmbG93X3JlcS1cdTAwM2VtcF9jYXBhYmxlID0gMDtcbiAxMTM6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZW1wX2pvaW4gPSAwO1xuIDExNDpcdFx0c3ViZmxvd19yZXEtXHUwMDNlY3N1bV9yZXFkID0gbXB0Y3BfaXNfY2hlY2tzdW1fZW5hYmxlZChzb2NrX25ldChza19saXN0ZW5lcikpO1xuIDExNTpcdFx0c3ViZmxvd19yZXEtXHUwMDNlYWxsb3dfam9pbl9pZDAgPSBtcHRjcF9hbGxvd19qb2luX2lkMChzb2NrX25ldChza19saXN0ZW5lcikpO1xuIDExNjpcdFx0c3ViZmxvd19yZXEtXHUwMDNlbXNrID0gTlVMTDtcbiAxMTc6XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChyZXEpO1xuIDExODpcdH1cbiAxMTk6XHRcbiAxMjA6XHRzdGF0aWMgYm9vbCBzdWJmbG93X3VzZV9kaWZmZXJlbnRfc3BvcnQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDEyMTpcdHtcbiAxMjI6XHRcdHJldHVybiBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X3Nwb3J0ICE9IGluZXRfc2soKHN0cnVjdCBzb2NrICopbXNrKS1cdTAwM2VpbmV0X3Nwb3J0O1xuIDEyMzpcdH1cbiAxMjQ6XHRcbiAxMjU6XHRzdGF0aWMgdm9pZCBzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcmVhc29uKVxuIDEyNjpcdHtcbiAxMjc6XHRcdHN0cnVjdCBtcHRjcF9leHQgKm1wZXh0ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX01QVENQKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgVGhvdWdodHMgb24gU3ViZmxvdyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBgc3ViZmxvd19pbml0X3JlcWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGhlcmUuIEkgc2VlIGl0JiMzOTtzIGV4cGxpY2l0bHkgY2xlYXJpbmcgdGhlIGZpZWxkcyBsaWtlIGBtcF9jYXBhYmxlYCwgYG1wX2pvaW5gLCBhbmQgYG1za2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgY2xlYW4gc2xhdGUgZm9yIHRoZSBzdWJmbG93LiBCdXQgaG9sZCBvbi4uLiBpdCAqZG9lc24mIzM5O3QqIHplcm8gYGxvY2FsX2lkYC4gVGhhdCYjMzk7cyBhIHBvaW50IG9mIHBvdGVudGlhbCBjb25mdXNpb24uIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IHRoYXQmIzM5O3MgaGFuZGxlZCBsYXRlciBvbi4gSXQgY291bGQgYmUgaW1wb3J0YW50LiBBbmQsIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCB0aGUgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIGlzbiYjMzk7dCBqdXN0IGhhbmdpbmcgb3V0OyBpdCYjMzk7cyBiZWluZyBhbGxvY2F0ZWQgdGhyb3VnaCBgcmVxc2tfYWxsb2NgLiBSaWdodC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGFyZSBoYXBwZW5pbmcgYXMgd2UgZXhwZWN0LiBUaW1lIHRvIGRpdmUgaW50byBgcmVxc2tfYWxsb2NgIGFuZCBzZWUgaG93IGl0JiMzOTtzIHNldHRpbmcgdGhpbmdzIHVwLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN1YmZsb3cmIzM5O3MgbGlmZWN5Y2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlcXNrX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcmVxdWVzdF9zb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDU5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbmV0L2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYHJlcXNrX2FsbG9jYCoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHJlcXVlc3Qgc29ja2V0IGFsbG9jYXRpb24uIFNpbmNlIEkmIzM5O20ga25lZS1kZWVwIGluIG5ldHdvcmtpbmcsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3aGVyZSBJIHNob3VsZCBzdGFydCAtIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGlzIHdoZXJlIHRoZSBjb3JlIG5ldHdvcmsgc3RhY2sgcmVzaWRlcy4gTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgcmVxc2tfYWxsb2NgLiBUaGlzIGZ1bmN0aW9uJiMzOTtzIG5hbWUgYWxvbmUgaGludHMgaXQgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciByZXF1ZXN0IHNvY2tldHMg4oCTIHRoYXQgaXMsIGZvciB0aGUgaW5pdGlhbCBoYW5kc2hha2Ugb2YgYSBjb25uZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgYmVjYXVzZSwgbGlrZWx5LCB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBhbGwgaW5jb21pbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4gSSYjMzk7bGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW55IGluaXRpYWxpemF0aW9uIGhhcHBlbmluZywgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3RydWN0dXJlcywgYW5kLCBjcml0aWNhbGx5LCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXFza19hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTIzNDY9X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjQxMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyNDExOlx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjQxMi1cdGlmICghcmVxKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9ODQ5PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODUwOnJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg1MS1cdFx0ICAgYm9vbCBhdHRhY2hfbGlzdGVuZXIpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NzgtfVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4Nzk6I2RlZmluZSByZXFza19hbGxvYyguLi4pXHRhbGxvY19ob29rcyhyZXFza19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODAtXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4MTpzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4NC17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4NTpcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IHJlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4Ni1cdFx0XHRcdFx0ICAgICAgIGF0dGFjaF9saXN0ZW5lcik7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTMwMj1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE3LVxubmV0L2lwdjQvc3luY29va2llcy5jOjMxODpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE5LVx0XHRcdFx0XHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMjctXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxubmV0L2lwdjQvc3luY29va2llcy5jOjMyODpcdFx0cmVxID0gbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzI5LVx0ZWxzZVxubmV0L2lwdjQvc3luY29va2llcy5jOjMzMDpcdFx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzMxLVxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0zNTg9c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTM5NC1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozOTU6XHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcywgc2ssIHNrYixcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTYtXHRcdFx0XHQgICAgICBcdTAwMjZ0Y3Bfb3B0LCBtc3MsIHRzb2ZmKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NjAtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjYxOlx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhyc2tfb3BzLCBzaywgIXdhbnRfY29va2llKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NjItXHRpZiAoIXJlcSlcbi0tXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM9MTMxPXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0xNjctXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MTY4Olx0cmV0dXJuIGNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzLCBzaywgc2tiLFxubmV0L2lwdjYvc3luY29va2llcy5jLTE2OS1cdFx0XHRcdCAgICAgIFx1MDAyNnRjcF9vcHQsIG1zcywgdHNvZmYpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzI1PXN0YXRpYyB2b2lkIHN1YmZsb3dfdjZfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNzMxLVxubmV0L21wdGNwL3N1YmZsb3cuYzo3MzI6c3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxubmV0L21wdGNwL3N1YmZsb3cuYy03MzMtXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDItXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0MzpcdHJldHVybiBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsIGF0dGFjaF9saXN0ZW5lcik7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0NC19XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0NTpFWFBPUlRfU1lNQk9MKG1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MpO1xubmV0L21wdGNwL3N1YmZsb3cuYy03NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDMyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBpbmV0X2Nvbm5lY3Rpb25fc29jay5jOiBBIERlZXAgRGl2ZSBpbnRvIFNvY2tldCBBbGxvY2F0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgaW4gYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgIGFuZCBpcyBpbnN0cnVtZW50YWwgaW4gYWxsb2NhdGluZyByZXF1ZXN0IHNvY2tldHMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IGFyZW4mIzM5O3Qgc3ViamVjdCB0byB0aGUgdXN1YWwgcHJvZmlsaW5nIG92ZXJoZWFkLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGVzcGVjaWFsbHkgaW4gaGlnaC1sb2FkIHNjZW5hcmlvcyB3aGVyZSBwcm9maWxpbmcgY2FuIGJlY29tZSBhIGJvdHRsZW5lY2suIEkgd2FudCB0byBzZWUgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgYW55IHJlbGV2YW50IGZsYWdzIG9yIGNoZWNrcyBpbnZvbHZlZC4gVGhpcyBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHBvdGVudGlhbCByZXNvdXJjZSBjb250ZW50aW9uIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQ5Olx0c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKlxuIDg1MDpcdHJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4gODUxOlx0XHRcdCAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKVxuIDg1MjpcdHtcbiA4NTM6XHRcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTtcbiA4NTQ6XHRcbiA4NTU6XHRcdHJlcSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9wcm9mKG9wcy1cdTAwM2VzbGFiLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbiA4NTY6XHRcdGlmICghcmVxKVxuIDg1NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA4NTg6XHRcdHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIgPSBOVUxMO1xuIDg1OTpcdFx0aWYgKGF0dGFjaF9saXN0ZW5lcikge1xuIDg2MDpcdFx0XHRpZiAodW5saWtlbHkoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZza19saXN0ZW5lci1cdTAwM2Vza19yZWZjbnQpKSkge1xuIDg2MTpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShvcHMtXHUwMDNlc2xhYiwgcmVxKTtcbiA4NjI6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA4NjM6XHRcdFx0fVxuIDg2NDpcdFx0XHRyZXEtXHUwMDNlcnNrX2xpc3RlbmVyID0gc2tfbGlzdGVuZXI7XG4gODY1Olx0XHR9XG4gODY2Olx0XHRyZXEtXHUwMDNlcnNrX29wcyA9IG9wcztcbiA4Njc6XHRcdHJlcV90b19zayhyZXEpLVx1MDAzZXNrX3Byb3QgPSBza19saXN0ZW5lci1cdTAwM2Vza19wcm90O1xuIDg2ODpcdFx0c2tfbm9kZV9pbml0KFx1MDAyNnJlcV90b19zayhyZXEpLVx1MDAzZXNrX25vZGUpO1xuIDg2OTpcdFx0c2tfdHhfcXVldWVfY2xlYXIocmVxX3RvX3NrKHJlcSkpO1xuIDg3MDpcdFx0cmVxLVx1MDAzZXNhdmVkX3N5biA9IE5VTEw7XG4gODcxOlx0XHRyZXEtXHUwMDNlc3luY29va2llID0gMDtcbiA4NzI6XHRcdHJlcS1cdTAwM2VudW1fdGltZW91dCA9IDA7XG4gODczOlx0XHRyZXEtXHUwMDNlbnVtX3JldHJhbnMgPSAwO1xuIDg3NDpcdFx0cmVxLVx1MDAzZXNrID0gTlVMTDtcbiA4NzU6XHRcdHJlZmNvdW50X3NldChcdTAwMjZyZXEtXHUwMDNlcnNrX3JlZmNudCwgMCk7XG4gODc2Olx0XG4gODc3Olx0XHRyZXR1cm4gcmVxO1xuIDg3ODpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRlY2huaWNhbCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipNZW1vcnkgQWxsb2NhdGlvbiBDb25jZXJucyBmb3IgTVBUQ1AgU3ViZmxvdyBSZXF1ZXN0IFNvY2tldHMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBpcyBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgdXNpbmcgYGttZW1fY2FjaGVfYWxsb2Nfbm9wcm9mYCBmcm9tIHRoZSBzbGFiIGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IGZyb20gYG9wcy0mZ3Q7c2xhYmAuIFRoZSBwcm9ibGVtIGp1bXBzIG91dCBpbW1lZGlhdGVseTogaXQmIzM5O3MgbWlzc2luZyB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcuIFRoYXQgbWVhbnMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKmlzbiYjMzk7dCogYmVpbmcgemVyb2VkIG91dC4gVGhpcyBpcyBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGFuZCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLgoKTm93LCBteSBmb2N1cyBzaGlmdHMgdG8gdGhlIGBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2Agc3RydWN0dXJlLiBJIGtub3cgdGhpcyBpcyBlaXRoZXIgZW1iZWRkZWQgZGlyZWN0bHkgd2l0aGluLCBvciBhbGxvY2F0ZWQgYWxvbmdzaWRlLCBhIGByZXF1ZXN0X3NvY2tgLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciBhc3NvY2lhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzdHJ1Y3R1cmUgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgdGhlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AuLi5JIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXQgY29udGFpbnMgYW5kIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGlzIGNvdWxkIGJlIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmM9OTQ2PWJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy05NDgte1xubmV0L21wdGNwL29wdGlvbnMuYzo5NDk6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTUwLVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM1NjQ9c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1Njgte1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzU2OTpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3MC1cdHN0cnVjdCBzb2NrICpuc2sgPSBza19jbG9uZV9sb2NrKHNrLCBHRlBfQVRPTUlDKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD00OTU9c3RydWN0IGNzdW1fcHNldWRvX2hlYWRlciB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtNTAxLVxubmV0L21wdGNwL3Byb3RvY29sLmg6NTAyOnN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MDMtXHRzdHJ1Y3RcdHRjcF9yZXF1ZXN0X3NvY2sgc2s7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtNTIyLVxubmV0L21wdGNwL3Byb3RvY29sLmg6NTIzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUyNC1tcHRjcF9zdWJmbG93X3Jzayhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjUte1xubmV0L21wdGNwL3Byb3RvY29sLmg6NTI2Olx0cmV0dXJuIChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKilyc2s7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjctfVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEwODA9aW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTA4MTp2b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMDgyLVx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNTM9c3RhdGljIGlubGluZSBib29sIHN1YmZsb3dfc2ltdWx0YW5lb3VzX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjEtI2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTM2Mjp2b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2My1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjQ6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzY1LVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzY4PXN0YXRpYyBpbmxpbmUgdm9pZFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM2OTpzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNzAtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpIHt9XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzcxPXN0YXRpYyBpbmxpbmUgYm9vbFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MjptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzczLVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM4PXN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxubmV0L21wdGNwL3N1YmZsb3cuYy0zOS17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjQwOlx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTQxLVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjE9c3RhdGljIGJvb2wgbXB0Y3BfY2FuX2FjY2VwdF9uZXdfc3ViZmxvdyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjktLyogdmFsaWRhdGUgcmVjZWl2ZWQgdG9rZW4gYW5kIGNyZWF0ZSB0cnVuY2F0ZWQgaG1hYyBhbmQgbm9uY2UgZm9yIFNZTi1BQ0sgKi9cbm5ldC9tcHRjcC9zdWJmbG93LmM6NzA6c3RhdGljIHZvaWQgc3ViZmxvd19yZXFfY3JlYXRlX3RobWFjKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTcxLXtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTg1PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqc3ViZmxvd190b2tlbl9qb2luX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxubmV0L21wdGNwL3N1YmZsb3cuYy04Ni17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg3Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg4LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTEwOD1zdGF0aWMgdm9pZCBzdWJmbG93X2luaXRfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyKVxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDkte1xubmV0L21wdGNwL3N1YmZsb3cuYzoxMTA6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTExLVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ3PXN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUxLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChza19saXN0ZW5lcik7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1MjpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xNTMtXHRzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCBtcF9vcHQ7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjM9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI2Ny1cdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKmxpc3RlbmVyID0gbXB0Y3Bfc3ViZmxvd19jdHgoc2tfbGlzdGVuZXIpO1xubmV0L21wdGNwL3N1YmZsb3cuYzoyNjg6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjY5LVx0c3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgbXBfb3B0O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzQ1PUVYUE9SVF9TWU1CT0wobXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDctLyogdmFsaWRhdGUgaG1hYyByZWNlaXZlZCBpbiB0aGlyZCBBQ0sgKi9cbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQ4OnN0YXRpYyBib29sIHN1YmZsb3dfaG1hY192YWxpZChjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3N1YmZsb3cuYy03NDktXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz04MDE9c3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtODEwLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjgxMTpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTgxMi1cdHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkIG1wX29wdDtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIwMzA9c3RhdGljIHZvaWQgc3ViZmxvd191bHBfY2xvbmUoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjAzMy17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwMzQ6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjAzNS1cdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKm9sZF9jdHggPSBtcHRjcF9zdWJmbG93X2N0eChuZXdzayk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTIxPXN0YXRpYyBpbnQgc3ViZmxvd19vcHNfaW5pdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqc3ViZmxvd19vcHMpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMjIte1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMTIzOlx0c3ViZmxvd19vcHMtXHUwMDNlb2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjEyNC1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNzA9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzEte1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMTcyOlx0LyogSW4gc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrLCB3ZSBhc3N1bWUgdGhlIFRDUCByZXF1ZXN0IHNvY2tcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3My1cdCAqIHN0cnVjdHVyZXMgZm9yIHY0IGFuZCB2NiBoYXZlIHRoZSBzYW1lIHNpemUuIEl0IHNob3VsZCBub3QgY2hhbmdlZCBpblxuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NTk9c3RhdGljIHZvaWQgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShzdHJ1Y3Qgam9pbl9lbnRyeSAqZW50cnksXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjYwOlx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSlcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNjEte1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNzAtXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjcxOnZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTcyLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05MS0gKi9cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC90b2tlbi5jPTQ4PXN0YXRpYyBzdHJ1Y3QgdG9rZW5fYnVja2V0ICp0b2tlbl9idWNrZXQodTMyIHRva2VuKVxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTUzLS8qIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIGhlbGQgKi9cbm5ldC9tcHRjcC90b2tlbi5jOjU0OnN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKlxubmV0L21wdGNwL3Rva2VuLmMtNTUtX190b2tlbl9sb29rdXBfcmVxKHN0cnVjdCB0b2tlbl9idWNrZXQgKnQsIHUzMiB0b2tlbilcbm5ldC9tcHRjcC90b2tlbi5jLTU2LXtcbm5ldC9tcHRjcC90b2tlbi5jOjU3Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXE7XG5uZXQvbXB0Y3AvdG9rZW4uYy01OC1cdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpwb3M7XG4tLVxubmV0L21wdGNwL3Rva2VuLmM9MTA4PWludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5uZXQvbXB0Y3AvdG9rZW4uYy0xMDkte1xubmV0L21wdGNwL3Rva2VuLmM6MTEwOlx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3AvdG9rZW4uYy0xMTEtXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4tLVxubmV0L21wdGNwL3Rva2VuLmM9MTUxPWludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTE5MC0gKi9cbm5ldC9tcHRjcC90b2tlbi5jOjE5MTp2b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC90b2tlbi5jLTE5Mi1cdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3Rva2VuLmMtMTkzLXtcbm5ldC9tcHRjcC90b2tlbi5jOjE5NDpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xubmV0L21wdGNwL3Rva2VuLmMtMTk1LVx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuLS1cbm5ldC9tcHRjcC90b2tlbi5jPTM1Mj12b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5uZXQvbXB0Y3AvdG9rZW4uYy0zNTMte1xubmV0L21wdGNwL3Rva2VuLmM6MzU0Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3AvdG9rZW4uYzozNTU6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbm5ldC9tcHRjcC90b2tlbi5jLTM1Ni1cdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbi0tXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTUtXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjY6c3RhdGljIHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqYnVpbGRfcmVxX3NvY2soc3RydWN0IGt1bml0ICp0ZXN0KVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy03LXtcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6ODpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxO1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy05LVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMDpcdHJlcSA9IGt1bml0X2t6YWxsb2ModGVzdCwgc2l6ZW9mKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayksXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExLVx0XHRcdCAgICBHRlBfVVNFUik7XG4tLVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz0xOD1zdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X3JlcV9iYXNpYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTE5LXtcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6MjA6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSA9IGJ1aWxkX3JlcV9zb2NrKHRlc3QpO1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy0yMS1cdHN0cnVjdCBtcHRjcF9zb2NrICpudWxsX21zayA9IE5VTEw7XG4tLVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz05ND1zdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2FjY2VwdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTk1LXtcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6OTY6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSA9IGJ1aWxkX3JlcV9zb2NrKHRlc3QpO1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy05Ny1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBidWlsZF9tc2sodGVzdCk7XG4tLVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz0xMTM9c3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy0xMTQte1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMTU6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSA9IGJ1aWxkX3JlcV9zb2NrKHRlc3QpO1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy0xMTYtXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gYnVpbGRfbXNrKHRlc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgU3RydWN0dXJlKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyBNUFRDUCBoYW5kbGVzIHN1YmZsb3cgcmVxdWVzdHMuIFRoZSBgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrYCBpcyB3aGVyZSBJIHNob3VsZCBiZWdpbi4gSSYjMzk7bGwgb3BlbiB1cCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLCBpdCYjMzk7cyB0aGUgdXN1YWwgcGxhY2UgZm9yIGNvcmUgTVBUQ1AgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaXQgc2hvdWxkIGNvbnRhaW4gdGhlIGNvbXBsZXRlIGRlZmluaXRpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHJlbWVtYmVyaW5nIHRoZSBmaWVsZHMsIHRoZWlyIHB1cnBvc2UsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgc3ViZmxvdyBlc3RhYmxpc2htZW50IHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgdGhpcyBzdHJ1Y3R1cmUgaXMgZnVuZGFtZW50YWwgdG8gdHJvdWJsZXNob290aW5nIGFuZCBkZWJ1Z2dpbmcgc3ViZmxvdy1yZWxhdGVkIGlzc3VlcyBvciBvcHRpbWl6aW5nIHRoZSBoYW5kc2hha2UgaW4gdGhlIE1QVENQIHN0YWNrLiBUaW1lIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDI6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sge1xuIDUwMzpcdFx0c3RydWN0XHR0Y3BfcmVxdWVzdF9zb2NrIHNrO1xuIDUwNDpcdFx0dTE2XHRtcF9jYXBhYmxlIDogMSxcbiA1MDU6XHRcdFx0bXBfam9pbiA6IDEsXG4gNTA2Olx0XHRcdGJhY2t1cCA6IDEsXG4gNTA3Olx0XHRcdHJlcXVlc3RfYmt1cCA6IDEsXG4gNTA4Olx0XHRcdGNzdW1fcmVxZCA6IDEsXG4gNTA5Olx0XHRcdGFsbG93X2pvaW5faWQwIDogMTtcbiA1MTA6XHRcdHU4XHRsb2NhbF9pZDtcbiA1MTE6XHRcdHU4XHRyZW1vdGVfaWQ7XG4gNTEyOlx0XHR1NjRcdGxvY2FsX2tleTtcbiA1MTM6XHRcdHU2NFx0aWRzbjtcbiA1MTQ6XHRcdHUzMlx0dG9rZW47XG4gNTE1Olx0XHR1MzJcdHNzbl9vZmZzZXQ7XG4gNTE2Olx0XHR1NjRcdHRobWFjO1xuIDUxNzpcdFx0dTMyXHRsb2NhbF9ub25jZTtcbiA1MTg6XHRcdHUzMlx0cmVtb3RlX25vbmNlO1xuIDUxOTpcdFx0c3RydWN0IG1wdGNwX3NvY2tcdCptc2s7XG4gNTIwOlx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSB0b2tlbl9ub2RlO1xuIDUyMTpcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjQyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1QVENQIFN1YmZsb3cgUmVxdWVzdCBTb2NrZXQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGBsb2NhbF9pZGAgZmllbGQgd2l0aGluIHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdCBpcyBpbml0aWFsaXplZCwgYW5kIEkmIzM5O20gc2VlaW5nIGEgcG90ZW50aWFsIGlzc3VlLiBJdCYjMzk7cyBhIGB1OGAsIHNvIGEgc2luZ2xlIGJ5dGUsIGJ1dCBpdHMgaW5pdGlhbGl6YXRpb24gaXMgYSBiaXQgc2NhdHRlcmVkLgoKSW5pdGlhbGx5LCBgcmVxc2tfYWxsb2NgIGFsbG9jYXRlcyB0aGUgcmVxdWVzdCBzb2NrZXQsIGFuZCBjcnVjaWFsbHksIGl0ICpkb2VzbiYjMzk7dCogemVybyB0aGUgbWVtb3J5LiBUaGF0IG1lYW5zIHdoYXRldmVyIGdhcmJhZ2UgaGFwcGVuZWQgdG8gYmUgdGhlcmUgYmVmb3JlIHJlbWFpbnMuIFRoZW4gYHN1YmZsb3dfaW5pdF9yZXFgIGdldHMgY2FsbGVkLCBhbmQgaXQgc2V0cyBhIGZldyBmbGFncyBhbmQgc29tZSBvdGhlciBmaWVsZHMgbGlrZSBgbXBfY2FwYWJsZWAsIGBtcF9qb2luYCwgYW5kIHNvIG9uLiBCdXQgaXQgKmRvZXNuJiMzOTt0KiB0b3VjaCBgbG9jYWxfaWRgLCBub3IgYHJlbW90ZV9pZGAsIG9yIGBsb2NhbF9rZXlgLCBhbmQgdGhlIHJlc3QuIE15IFNwaWRleSBzZW5zZXMgYXJlIHRpbmdsaW5nLgoKQWgsIGJ1dCB3YWl0Li4uIHRoZXJlJiMzOTtzIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAuIFRoYXQmIzM5O3Mgd2hlcmUgU1lOIGNvb2tpZXMgZ2V0IGhhbmRsZWQuIElmIGFuIGBvcHRfbXBfam9pbmAgb3B0aW9uIGlzIHByZXNlbnQsIHdlIGNhbGwgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLCBhbmQgKnRoYXQmIzM5O3MqIHdoZXJlIHdlJiMzOTtyZSBzdXBwb3NlZCB0byBpbml0aWFsaXplIGBsb2NhbF9pZGAgYWxvbmcgd2l0aCB0aGluZ3MgbGlrZSBgcmVtb3RlX25vbmNlYCwgYGxvY2FsX25vbmNlYCwgZXRjLgoKVGhlIGNyaXRpY2FsIHRoaW5nLCBiZWZvcmUgdGhlIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nLCBpcyB0aGF0IGBsb2NhbF9pZGAgKndhc24mIzM5O3QqIGJlaW5nIGluaXRpYWxpemVkIGluc2lkZSBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAuIFRoYXQgbWVhbnMgYHN1YmZsb3dfcmVxLSZndDtsb2NhbF9pZGAgd291bGQgYmUgdW5pbml0aWFsaXplZCBtZW1vcnksIHJpZ2h0IGFmdGVyIHRoZSBjYWxsIHRvIGByZXFza19hbGxvY19ub3Byb2ZgIGFuZCB0aGlzIGNyZWF0ZXMgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiBOb3cgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIGBsb2NhbF9pZGAgaXMgdXNlZCwgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIG9mIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdoZXJlIGRvZXMgdGhpcyBieXRlIGdldCBhY2Nlc3NlZCwgYW5kIGhvdz8gVGhpcyBwYXRjaCBiZXR0ZXIgZml4IGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2NhbF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL2RpYWcuYz0xNT1zdGF0aWMgaW50IHN1YmZsb3dfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG5ldF9hZG1pbilcbi0tXG5uZXQvbXB0Y3AvZGlhZy5jLTYwLVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBNUFRDUF9TVUJGTE9XX0FUVFJfSURfUkVNLCBzZi1cdTAwM2VyZW1vdGVfaWQpIHx8XG5uZXQvbXB0Y3AvZGlhZy5jOjYxOlx0ICAgIG5sYV9wdXRfdTgoc2tiLCBNUFRDUF9TVUJGTE9XX0FUVFJfSURfTE9DLCBzdWJmbG93X2dldF9sb2NhbF9pZChzZikpKSB7XG5uZXQvbXB0Y3AvZGlhZy5jLTYyLVx0XHRlcnIgPSAtRU1TR1NJWkU7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz00NjQ9Ym9vbCBtcHRjcF9zeW5fb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy00OTItXHRcdG9wdHMtXHUwMDNlc3Vib3B0aW9ucyA9IE9QVElPTl9NUFRDUF9NUEpfU1lOO1xubmV0L21wdGNwL29wdGlvbnMuYzo0OTM6XHRcdG9wdHMtXHUwMDNlam9pbl9pZCA9IHN1YmZsb3ctXHUwMDNlbG9jYWxfaWQ7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ5NC1cdFx0b3B0cy1cdTAwM2V0b2tlbiA9IHN1YmZsb3ctXHUwMDNlcmVtb3RlX3Rva2VuO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9OTQ2PWJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy05NjItXHRcdG9wdHMtXHUwMDNlYmFja3VwID0gc3ViZmxvd19yZXEtXHUwMDNlcmVxdWVzdF9ia3VwO1xubmV0L21wdGNwL29wdGlvbnMuYzo5NjM6XHRcdG9wdHMtXHUwMDNlam9pbl9pZCA9IHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkO1xubmV0L21wdGNwL29wdGlvbnMuYy05NjQtXHRcdG9wdHMtXHUwMDNldGhtYWMgPSBzdWJmbG93X3JlcS1cdTAwM2V0aG1hYztcbi0tXG5uZXQvbXB0Y3AvcG0uYz0yNTA9c3RhdGljIGJvb2wgc3ViZmxvd19pbl9ybV9saXN0KGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXG4tLVxubmV0L21wdGNwL3BtLmMtMjUyLXtcbm5ldC9tcHRjcC9wbS5jOjI1MzpcdHU4IGksIGlkID0gc3ViZmxvd19nZXRfbG9jYWxfaWQoc3ViZmxvdyk7XG5uZXQvbXB0Y3AvcG0uYy0yNTQtXG4tLVxubmV0L21wdGNwL3BtLmM9NDk4PWludCBtcHRjcF9wbV9hbm5vdW5jZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtLmMtNTAzLVxubmV0L21wdGNwL3BtLmM6NTA0Olx0cHJfZGVidWcoXCYjMzQ7bXNrPSVwLCBsb2NhbF9pZD0lZCwgZWNobz0lZFxcblwmIzM0OywgbXNrLCBhZGRyLVx1MDAzZWlkLCBlY2hvKTtcbm5ldC9tcHRjcC9wbS5jLTUwNS1cbi0tXG5uZXQvbXB0Y3AvcG0uYz03NjQ9c3RhdGljIHZvaWQgbXB0Y3BfcG1fcm1fYWRkcl9vcl9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtLmMtNzkzLVx0XHRcdGludCBob3cgPSBSQ1ZfU0hVVERPV04gfCBTRU5EX1NIVVRET1dOO1xubmV0L21wdGNwL3BtLmM6Nzk0Olx0XHRcdHU4IGlkID0gc3ViZmxvd19nZXRfbG9jYWxfaWQoc3ViZmxvdyk7XG5uZXQvbXB0Y3AvcG0uYy03OTUtXG4tLVxubmV0L21wdGNwL3BtLmMtODAzLVxubmV0L21wdGNwL3BtLmM6ODA0Olx0XHRcdHByX2RlYnVnKFwmIzM0OyAtXHUwMDNlICVzIHJtX2xpc3RfaWRzWyVkXT0ldSBsb2NhbF9pZD0ldSByZW1vdGVfaWQ9JXUgbXBjX2lkPSV1XFxuXCYjMzQ7LFxubmV0L21wdGNwL3BtLmMtODA1LVx0XHRcdFx0IHJtX3R5cGUgPT0gTVBUQ1BfTUlCX1JNQUREUiA/IFwmIzM0O2FkZHJlc3NcJiMzNDsgOiBcJiMzNDtzdWJmbG93XCYjMzQ7LFxuLS1cbm5ldC9tcHRjcC9wbS5jPTEwMDE9Ym9vbCBtcHRjcF9wbV9ybV9hZGRyX3NpZ25hbChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTEwMzEtXG5uZXQvbXB0Y3AvcG0uYzoxMDMyOmludCBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2tfY29tbW9uICpza2MpXG5uZXQvbXB0Y3AvcG0uYy0xMDMzLXtcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMDUxLVx0aWYgKG1wdGNwX3BtX2lzX3VzZXJzcGFjZShtc2spKVxubmV0L21wdGNwL3BtLmM6MTA1MjpcdFx0cmV0dXJuIG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQobXNrLCBcdTAwMjZza2NfbG9jYWwpO1xubmV0L21wdGNwL3BtLmM6MTA1MzpcdHJldHVybiBtcHRjcF9wbV9ubF9nZXRfbG9jYWxfaWQobXNrLCBcdTAwMjZza2NfbG9jYWwpO1xubmV0L21wdGNwL3BtLmMtMTA1NC19XG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTIwMz1maWxsX3JlbW90ZV9hZGRyZXNzZXNfZnVsbG1lc2goc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMjE5LVx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MjIwOlx0XHRpZiAoUkVBRF9PTkNFKHN1YmZsb3ctXHUwMDNlbG9jYWxfaWQpID09IGxvY2FsLVx1MDAzZWlkKVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTIyMS1cdFx0XHRfX3NldF9iaXQoc3ViZmxvdy1cdTAwM2VyZW1vdGVfaWQsIHVuYXZhaWxfaWQpO1xuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0yODE9X19sb29rdXBfYWRkcihzdHJ1Y3QgcG1fbmxfcGVybmV0ICpwZXJuZXQsIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmluZm8pXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTI5Mi1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoyOTM6c3RhdGljIHU4IG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMjk0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz01MDc9ZmlsbF9sb2NhbF9sYW1pbmFyX2VuZHAoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqcmVtb3RlLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy01MjktXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NTMwOlx0XHRfX3NldF9iaXQoc3ViZmxvd19nZXRfbG9jYWxfaWQoc3ViZmxvdyksIHVuYXZhaWxfaWQpO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jLTUzMS1cdH1cbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNTQwLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjU0MTpcdFx0aWYgKHRlc3RfYml0KG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKG1zaywgXHUwMDI2ZW50cnktXHUwMDNlYWRkciksXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNTQyLVx0XHRcdCAgICAgdW5hdmFpbF9pZCkpXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTg1Mj1zdGF0aWMgaW50IG1wdGNwX3BtX25sX2NyZWF0ZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTE3LVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjkxODppbnQgbXB0Y3BfcG1fbmxfZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTE5LVx0XHRcdCAgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKnNrYylcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9MTA1Nj1zdGF0aWMgdm9pZCBtcHRjcF9wbV9yZW1vdmVfYW5ub3VuY2VkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEwNjItXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTA2MzpcdGxpc3QuaWRzW2xpc3QubnImIzQzOyYjNDM7XSA9IG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKG1zaywgYWRkcik7XG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTA2NC1cbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9MTA4Mz1zdGF0aWMgaW50IG1wdGNwX25sX3JlbW92ZV9zdWJmbG93X2FuZF9zaWduYWxfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTExMDQtXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTEwNTpcdFx0bGlzdC5pZHNbMF0gPSBtcHRjcF9lbmRwX2dldF9sb2NhbF9pZChtc2ssIGFkZHIpO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jLTExMDYtXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTEyMjU9c3RhdGljIHZvaWQgbXB0Y3BfcG1fZmx1c2hfYWRkcnNfYW5kX3N1YmZsb3dzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEyMzktXHRcdGlmIChtcHRjcF9wbV9oYXNfc3ViZmxvd19zYWRkcihtc2ssIFx1MDAyNmVudHJ5LVx1MDAzZWFkZHIpKVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjEyNDA6XHRcdFx0c2xpc3QuaWRzW3NsaXN0Lm5yJiM0MzsmIzQzO10gPSBtcHRjcF9lbmRwX2dldF9sb2NhbF9pZChtc2ssIFx1MDAyNmVudHJ5LVx1MDAzZWFkZHIpO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEyNDEtXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTI0Mi1cdFx0aWYgKG1wdGNwX3BtX2Fubm91bmNlZF9yZW1vdmUobXNrLCBcdTAwMjZlbnRyeS1cdTAwM2VhZGRyKSlcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoxMjQzOlx0XHRcdGFsaXN0Lmlkc1thbGlzdC5uciYjNDM7JiM0MztdID0gbXB0Y3BfZW5kcF9nZXRfbG9jYWxfaWQobXNrLCBcdTAwMjZlbnRyeS1cdTAwM2VhZGRyKTtcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMjQ0LVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xNDY3PXN0YXRpYyB2b2lkIG1wdGNwX3BtX25sX2Z1bGxtZXNoKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE0NzEtXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTQ3MjpcdGxpc3QuaWRzW2xpc3QubnImIzQzOyYjNDM7XSA9IG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKG1zaywgYWRkcik7XG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTQ3My1cbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTI5OD1zdGF0aWMgaW50IG1wdGNwX2V2ZW50X2FkZF9zdWJmbG93KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0zMzUtXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjMzNjpcdGlmIChubGFfcHV0X3U4KHNrYiwgTVBUQ1BfQVRUUl9MT0NfSUQsIHN1YmZsb3dfZ2V0X2xvY2FsX2lkKHNmKSkpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTMzNy1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTIyPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcl9ieV9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgaWQpXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTEzMi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxMzM6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xMzQtXHRcdFx0XHQgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKnNrYylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MjUzPXN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjYyLVx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoyNjM6XHRcdGlmIChSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2Vsb2NhbF9pZCkgPT0gMCkge1xubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTI2NC1cdFx0XHRoYXNfaWRfMCA9IHRydWU7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTAzPXN0YXRpYyBpbnQgX19tcHRjcF9zb2NrZXRfY3JlYXRlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTIyLVx0LyogVGhpcyBpcyB0aGUgZmlyc3Qgc3ViZmxvdywgYWx3YXlzIHdpdGggaWQgMCAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTIzOlx0V1JJVEVfT05DRShzdWJmbG93LVx1MDAzZWxvY2FsX2lkLCAwKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEyNC1cdG1wdGNwX3NvY2tfZ3JhZnQobXNrLVx1MDAzZWZpcnN0LCBzay1cdTAwM2Vza19zb2NrZXQpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI2ODQ9dm9pZCBtcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODctXHQvKiBUaGUgZmlyc3Qgc3ViZmxvdyBjYW4gYWxyZWFkeSBiZSBjbG9zZWQgb3IgZGlzY29ubmVjdGVkICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNjg4Olx0aWYgKHN1YmZsb3ctXHUwMDNlY2xvc2VfZXZlbnRfZG9uZSB8fCBSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2Vsb2NhbF9pZCkgXHUwMDNjIDApXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjg5LVx0XHRyZXR1cm47XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU2ND1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzYyNy1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM2Mjg6XHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM2MjktXHQgKiB1c2VzIHRoZSBjb3JyZWN0IGRhdGFcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD01MDI9c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MDktXHRcdGFsbG93X2pvaW5faWQwIDogMTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUxMDpcdHU4XHRsb2NhbF9pZDtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUxMS1cdHU4XHRyZW1vdGVfaWQ7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9NTQ0PXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTYwMS1cdH07XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo2MDI6XHRzMTZcdGxvY2FsX2lkO1x0ICAgIC8qIGlmIG5lZ2F0aXZlIG5vdCBpbml0aWFsaXplZCB5ZXQgKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTYwMy1cdHU4XHRyZW1vdGVfaWQ7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9NjQ5PW1wdGNwX3N1YmZsb3dfY3R4X3Jlc2V0KHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3cpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtNjUyLVx0c3ViZmxvdy1cdTAwM2VyZXF1ZXN0X21wdGNwID0gMTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjY1MzpcdFdSSVRFX09OQ0Uoc3ViZmxvdy1cdTAwM2Vsb2NhbF9pZCwgLTEpO1xubmV0L21wdGNwL3Byb3RvY29sLmgtNjU0LX1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjExPWJvb2wgbXB0Y3BfcG1fcm1fYWRkcl9zaWduYWwoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMTItXHRcdFx0ICAgICBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCwgaW50ICpsZW4pO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTIxMzppbnQgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMTQ6aW50IG1wdGNwX3BtX25sX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTIxNS1cdFx0XHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICpza2MpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTIxNjppbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTIxNy1cdFx0XHRcdCAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqc2tjKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjI3PWludCBtcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2FkZHIodTggaWQsIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICphZGRyLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMjktXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjMwOnN0YXRpYyBpbmxpbmUgdTggc3ViZmxvd19nZXRfbG9jYWxfaWQoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMzEte1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTIzMjpcdGludCBsb2NhbF9pZCA9IFJFQURfT05DRShzdWJmbG93LVx1MDAzZWxvY2FsX2lkKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMzMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjM0Olx0aWYgKGxvY2FsX2lkIFx1MDAzYyAwKVxubmV0L21wdGNwL3Byb3RvY29sLmgtMTIzNS1cdFx0cmV0dXJuIDA7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjM2Olx0cmV0dXJuIGxvY2FsX2lkO1xubmV0L21wdGNwL3Byb3RvY29sLmgtMTIzNy19XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz04NT1zdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg4LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbm5ldC9tcHRjcC9zdWJmbG93LmM6ODk6XHRpbnQgbG9jYWxfaWQ7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTkwLVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtOTYtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjk3Olx0bG9jYWxfaWQgPSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQobXNrLCAoc3RydWN0IHNvY2tfY29tbW9uICopcmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6OTg6XHRpZiAobG9jYWxfaWQgXHUwMDNjIDApIHtcbm5ldC9tcHRjcC9zdWJmbG93LmMtOTktXHRcdHNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDEtXHR9XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEwMjpcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gbG9jYWxfaWQ7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEwMy1cdHN1YmZsb3dfcmVxLVx1MDAzZXJlcXVlc3RfYmt1cCA9IG1wdGNwX3BtX2lzX2JhY2t1cChtc2ssIChzdHJ1Y3Qgc29ja19jb21tb24gKilyZXEpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NTIxPXN0YXRpYyB2b2lkIHN1YmZsb3dfZmluaXNoX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjE4LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2MTk6c3RhdGljIHZvaWQgc3ViZmxvd19zZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdywgaW50IGxvY2FsX2lkKVxubmV0L21wdGNwL3N1YmZsb3cuYy02MjAte1xubmV0L21wdGNwL3N1YmZsb3cuYzo2MjE6XHRXQVJOX09OX09OQ0UobG9jYWxfaWQgXHUwMDNjIDAgfHwgbG9jYWxfaWQgXHUwMDNlIDI1NSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjYyMjpcdFdSSVRFX09OQ0Uoc3ViZmxvdy1cdTAwM2Vsb2NhbF9pZCwgbG9jYWxfaWQpO1xubmV0L21wdGNwL3N1YmZsb3cuYy02MjMtfVxubmV0L21wdGNwL3N1YmZsb3cuYy02MjQtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjYyNTpzdGF0aWMgaW50IHN1YmZsb3dfY2hrX2xvY2FsX2lkKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjI2LXtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTYzMC1cbm5ldC9tcHRjcC9zdWJmbG93LmM6NjMxOlx0aWYgKGxpa2VseShzdWJmbG93LVx1MDAzZWxvY2FsX2lkIFx1MDAzZT0gMCkpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTYzMi1cdFx0cmV0dXJuIDA7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTYzMy1cbm5ldC9tcHRjcC9zdWJmbG93LmM6NjM0Olx0ZXJyID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjM1LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTYzNy1cbm5ldC9tcHRjcC9zdWJmbG93LmM6NjM4Olx0c3ViZmxvd19zZXRfbG9jYWxfaWQoc3ViZmxvdywgZXJyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjM5LVx0c3ViZmxvdy1cdTAwM2VyZXF1ZXN0X2JrdXAgPSBtcHRjcF9wbV9pc19iYWNrdXAobXNrLCAoc3RydWN0IHNvY2tfY29tbW9uICopc2spO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjQ0PXN0YXRpYyBpbnQgc3ViZmxvd19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY0NS17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY0NjpcdGludCBlcnIgPSBzdWJmbG93X2Noa19sb2NhbF9pZChzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY0Ny1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY1NT1zdGF0aWMgaW50IHN1YmZsb3dfdjZfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3N1YmZsb3cuYy02NTYte1xubmV0L21wdGNwL3N1YmZsb3cuYzo2NTc6XHRpbnQgZXJyID0gc3ViZmxvd19jaGtfbG9jYWxfaWQoc2spO1xubmV0L21wdGNwL3N1YmZsb3cuYy02NTgtXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjA4PWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjEyLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTYxMzpcdGludCBsb2NhbF9pZCA9IGxvY2FsLVx1MDAzZWFkZHIuaWQ7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2MTQtXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYyOS1cdFx0cHJfZGVidWcoXCYjMzQ7bXNrPSVwIGxvY2FsPSVkIHJlbW90ZT0lZCBjcmVhdGUgc29jayBlcnJvcjogJWRcXG5cJiMzNDssXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2MzA6XHRcdFx0IG1zaywgbG9jYWxfaWQsIHJlbW90ZV9pZCwgZXJyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYzMS1cdFx0Z290byBlcnJfb3V0O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY0Mi1cdFx0aWYgKCFsb2NhbC1cdTAwM2VhZGRyLmFkZHIuc19hZGRyKVxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjQzOlx0XHRcdGxvY2FsX2lkID0gLTE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDQtI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjQ2LVx0XHRpZiAoaXB2Nl9hZGRyX2FueShcdTAwMjZsb2NhbC1cdTAwM2VhZGRyLmFkZHI2KSlcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY0NzpcdFx0XHRsb2NhbF9pZCA9IC0xO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xNjQ4LSNlbmRpZlxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY1MC1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY1MTpcdGlmIChsb2NhbF9pZCBcdTAwM2U9IDApXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NTI6XHRcdHN1YmZsb3dfc2V0X2xvY2FsX2lkKHN1YmZsb3csIGxvY2FsX2lkKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY1My1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NjktXHRcdHByX2RlYnVnKFwmIzM0O21zaz0lcCBsb2NhbD0lZCByZW1vdGU9JWQgYmluZCBlcnJvcjogJWRcXG5cJiMzNDssXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NzA6XHRcdFx0IG1zaywgbG9jYWxfaWQsIHJlbW90ZV9pZCwgZXJyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY3MS1cdFx0Z290byBmYWlsZWQ7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjc0LVx0bXB0Y3BfY3J5cHRvX2tleV9zaGEoc3ViZmxvdy1cdTAwM2VyZW1vdGVfa2V5LCBcdTAwMjZyZW1vdGVfdG9rZW4sIE5VTEwpO1xubmV0L21wdGNwL3N1YmZsb3cuYzoxNjc1Olx0cHJfZGVidWcoXCYjMzQ7bXNrPSVwIHJlbW90ZV90b2tlbj0ldSBsb2NhbF9pZD0lZCByZW1vdGVfaWQ9JWRcXG5cJiMzNDssIG1zayxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY3NjpcdFx0IHJlbW90ZV90b2tlbiwgbG9jYWxfaWQsIHJlbW90ZV9pZCk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NzctXHRzdWJmbG93LVx1MDAzZXJlbW90ZV90b2tlbiA9IHJlbW90ZV90b2tlbjtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2ODktXHRcdHByX2RlYnVnKFwmIzM0O21zaz0lcCBsb2NhbD0lZCByZW1vdGU9JWQgY29ubmVjdCBlcnJvcjogJWRcXG5cJiMzNDssXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2OTA6XHRcdFx0IG1zaywgbG9jYWxfaWQsIHJlbW90ZV9pZCwgZXJyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY5MS1cdFx0Z290byBmYWlsZWRfdW5saW5rO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTgzNj1zdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvd19jcmVhdGVfY3R4KHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4NTItXHRjdHgtXHUwMDNldGNwX3NvY2sgPSBzaztcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg1MzpcdFdSSVRFX09OQ0UoY3R4LVx1MDAzZWxvY2FsX2lkLCAtMSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4NTQtXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDMwPXN0YXRpYyB2b2lkIHN1YmZsb3dfdWxwX2Nsb25lKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwNjYtXHRcdC8qIHRoaXMgaXMgdGhlIGZpcnN0IHN1YmZsb3csIGlkIGlzIGFsd2F5cyAwICovXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwNjc6XHRcdHN1YmZsb3dfc2V0X2xvY2FsX2lkKG5ld19jdHgsIDApO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMDY4LVx0fSBlbHNlIGlmIChzdWJmbG93X3JlcS1cdTAwM2VtcF9qb2luKSB7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDgxLVx0XHQgKi9cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjA4MjpcdFx0c3ViZmxvd19zZXRfbG9jYWxfaWQobmV3X2N0eCwgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMDgzLVx0fVxuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9MjM9c3RydWN0IGpvaW5fZW50cnkge1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtMjctXHR1OCBqb2luX2lkO1xubmV0L21wdGNwL3N5bmNvb2tpZXMuYzoyODpcdHU4IGxvY2FsX2lkO1xubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0yOS1cdHU4IGJhY2t1cDtcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTU5PXN0YXRpYyB2b2lkIG1wdGNwX2pvaW5fc3RvcmVfc3RhdGUoc3RydWN0IGpvaW5fZW50cnkgKmVudHJ5LFxuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNjYtXHRlbnRyeS1cdTAwM2Vqb2luX2lkID0gc3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX2lkO1xubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo2NzpcdGVudHJ5LVx1MDAzZWxvY2FsX2lkID0gc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQ7XG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTY4LVx0ZW50cnktXHUwMDNldmFsaWQgPSAxO1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9OTI9Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0xMjAtXHRzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQgPSBlLVx1MDAzZWpvaW5faWQ7XG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjEyMTpcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gZS1cdTAwM2Vsb2NhbF9pZDtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtMTIyLVx0c3ViZmxvd19yZXEtXHUwMDNldG9rZW4gPSBlLVx1MDAzZXRva2VuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA2NQoJCQkJCQkJb3V0cHV0OiAzNzEKCQkJCQkJCXRob3VnaHRzOiAxOTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IEluZm8tTGVhayBpbiBNUFRDUCBTWU4gQ29va2llIEhhbmRsaW5nKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIEkmIzM5O20gbG9va2luZyBhdCBob3cgTVBUQ1AgaGFuZGxlcyBzdWJmbG93cywgc3BlY2lmaWNhbGx5IHdoZW4gYSBTWU4gY29va2llIGlzIGludm9sdmVkLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYG1wdGNwX3N5bmFja19vcHRpb25zYCwgd2hpY2ggZGVhbHMgd2l0aCBTWU4tQUNLIHBhY2tldHMsIGFuZCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMgdGhlIEFDSyBpbiBhIFNZTiBjb29raWUgaGFuZHNoYWtlLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBpc3N1ZSBpbW1lZGlhdGVseS4KCldoZW4gYW4gQUNLIHdpdGggYSBTWU4gY29va2llIGNvbWVzIGluLCB0aGUgc2VydmVyIHJlY29uc3RydWN0cyB0aGUgcmVxdWVzdCBzb2NrZXQuIFRoZSBmdW5jdGlvbiBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIGNyZWF0ZXMgYSBuZXcgYHJlcXVlc3Rfc29ja2AsIGFuZCB0aGVuIGNhbGxzIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCB0byBwb3B1bGF0ZSBpdCB1c2luZyB0aGUgY29va2llIGRhdGEuIFRoZW4sIHRoaXMgcmVjb25zdHJ1Y3RlZCByZXF1ZXN0IHNvY2tldCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgYWN0dWFsIHN1YmZsb3cgc29ja2V0LiBUaGlzIGlzIGhhbmRsZWQgYnkgYHN1YmZsb3dfdWxwX2Nsb25lYC4KCk5vdywgaWYgd2UgZGl2ZSBpbnRvIHRoZSBjb2RlLCBlc3BlY2lhbGx5IGBzdWJmbG93X3VscF9jbG9uZWAsIGl0IGNvcGllcyBkYXRhIGZyb20gdGhlIGBzdWJmbG93X3JlcWAgc3RydWN0dXJlIGludG8gdGhlIG5ldyBzdWJmbG93IGNvbnRleHQuIEkgbm90aWNlZCB0aGF0IGBzdWJmbG93X3JlcS0mZ3Q7bG9jYWxfaWRgIGlzIHBhcnQgb2YgdGhpcyBjb3B5aW5nLiBJZiB0aGlzIHZhbHVlIGlzIHVuaW5pdGlhbGl6ZWQsIHRoZSBjb2RlIHVzZXMgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSwgYmVjYXVzZSBpdCBjYW4gYmUgdXNlZCBmb3IgdGhpbmdzIGxpa2UgbmV0bGluayBtZXNzYWdlcyBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgcGFja2V0cy4KCkhlcmUmIzM5O3MgdGhlIHByb2JsZW06IGBzdWJmbG93X3JlcWAgY29tZXMgZnJvbSBgcmVxc2tfYWxsb2NgLCBhbmQgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gYSBzbGFiIGNhY2hlLiBJbXBvcnRhbnRseSwgdGhpcyBhbGxvY2F0aW9uIGRvZXMgKm5vdCogemVybyB0aGUgbWVtb3J5IGJ5IGRlZmF1bHQuIFRoaXMgbWVhbnMgdGhhdCBpZiBzb21ldGhpbmcgaXNuJiMzOTt0IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGl0IHdpbGwgaG9sZCB3aGF0ZXZlciBnYXJiYWdlIHZhbHVlIHdhcyBwcmV2aW91c2x5IGluIHRoYXQgbWVtb3J5IGxvY2F0aW9uLiBTbyBJIHN0YXJ0IHRvIHRoaW5rIHRoaXMgYGxvY2FsX2lkYCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLgoKTm93LCBpZiBgc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkYCBpcyB1bmluaXRpYWxpemVkIHdoZW4gYHN1YmZsb3dfdWxwX2Nsb25lYCBpcyBjYWxsZWQgYW5kIGBsb2NhbF9pZGAgaXMgKm5vdCogc3BlY2lmaWNhbGx5IGFzc2lnbmVkIGVsc2V3aGVyZSwgdGhlbiB0aGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSBnZXRzIGNvcGllZCBpbnRvIHRoZSBuZXcgc3ViZmxvdyBjb250ZXh0LCB0aGVuIHVzZWQgaW4gdmFyaW91cyBwbGFjZXMgbGlrZSBuZXRsaW5rIG1lc3NhZ2VzLCB0aGUgbmV0d29yaywgZXRjLiBJJiMzOTt2ZSBmb3VuZCBwbGFjZXMgd2hlcmUgdGhlIGBsb2NhbF9pZGAgaXMgc2VudCB0byB1c2Vyc3BhY2UgdmlhIGBubGFfcHV0X3U4YCB3aGljaCB0cmFuc2xhdGVzIHRvIGEgcG90ZW50aWFsIG9uZS1ieXRlIGluZm8tbGVhay4KClRoZSBjcml0aWNhbCBiaXQgaXMgdGhhdCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRoZW4gc2VudCBvdXQgdG8gdXNlcnNwYWNlLiBJJiMzOTttIHdvbmRlcmluZyBpZiBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIHdvdWxkIGNhdGNoIHRoaXMsIGJ1dCBubywgS0FTQU4gZG9lc24mIzM5O3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBPbmx5IEtNU0FOIGRvZXMuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgS01TQU4gcmVhbGx5IHNoaW5lcy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIGByZXF1ZXN0X3NvY2tgLiBJIHNlZSB0aGF0IGBrbWVtX2NhY2hlX2FsbG9jX25vcHJvZmAgZG9lcyAqbm90KiBoYXZlIGBfX0dGUF9aRVJPYCB3aGljaCBjb25maXJtcyBpdCBkb2VzbiYjMzk7dCB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBJIHZlcmlmeSB0aGF0IGBzdWJmbG93X2luaXRfcmVxYCBkb2VzbiYjMzk7dCBzZXQgYGxvY2FsX2lkYC4gVGhlcmVmb3JlIGBsb2NhbF9pZGAgaXMgaW5kZWVkIHVuaW5pdGlhbGl6ZWQuCgpTbywgdGhlIHBhdGNoIGhlcmUgaXMgY3J1Y2lhbC4gVGhlIHBhdGNoIGFkZHMgYW4gYXNzaWdubWVudCBvZiBgbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgLiBTbyBiZWZvcmUgdGhlIHBhdGNoLCBgbG9jYWxfaWRgIHdhcyB1bmluaXRpYWxpemVkIGZyb20gdGhlIGByZXFza19hbGxvYygpYCBhbGxvY2F0aW9uLiBUaGlzIHdvdWxkIGJlIGEgcGVyZmVjdCBzcG90IHRvIHRlc3Qgd2l0aCBLTVNBTiwgZ2l2ZW4gdGhlIHZ1bG5lcmFiaWxpdHkgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW5mby1sZWFrcy4KCkkgY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIGVmZmVjdGl2ZWx5IGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHRoYXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlIG9yIHRoZSBuZXR3b3JrLCB0aGVyZWZvcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IHJlY29tbWVuZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGFzc2lnbm1lbnQgdG8gYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYC4gYHN1YmZsb3dfcmVxYCBpcyBhIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGByZXFza19hbGxvYygpYC4gVGhlIGByZXFza19hbGxvYygpYCBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gYSBzbGFiIGNhY2hlIHdpdGhvdXQgdGhlIGBfX0dGUF9aRVJPYCBmbGFnLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC5cblxuV2hpbGUgYHN1YmZsb3dfaW5pdF9yZXEoKWAgaW5pdGlhbGl6ZXMgc2V2ZXJhbCBmaWVsZHMgb2YgdGhlIHJlcXVlc3Qgc29ja2V0LCBpdCBkb2VzIG5vdCBpbml0aWFsaXplIGBsb2NhbF9pZGAuIER1cmluZyBhIFNZTiBjb29raWUgTVBfSk9JTiwgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoKWAgaXMgY2FsbGVkIHRvIHJlY29uc3RydWN0IHRoZSByZXF1ZXN0IHNvY2tldCBzdGF0ZSBmcm9tIHRoZSBjb29raWUuIEJlZm9yZSB0aGlzIHBhdGNoLCBpdCBmYWlsZWQgdG8gcmVzdG9yZSBgbG9jYWxfaWRgLCBsZWF2aW5nIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZGAgdW5pbml0aWFsaXplZC5cblxuVGhpcyB1bmluaXRpYWxpemVkIDEtYnl0ZSB2YWx1ZSBpcyBsYXRlciBjb3BpZWQgdG8gdGhlIHN1YmZsb3cgY29udGV4dCAoYG5ld19jdHgtXHUwMDNlbG9jYWxfaWRgKSBpbiBgc3ViZmxvd191bHBfY2xvbmUoKWAuIEZyb20gdGhlcmUsIHRoZSB1bmluaXRpYWxpemVkIGtlcm5lbCBoZWFwIG1lbW9yeSBjYW4gYmUgbGVha2VkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoZS5nLiwgYE1QVENQX1NVQkZMT1dfQVRUUl9JRF9MT0NgIGluIGBzdWJmbG93X2dldF9pbmZvKClgKSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgVENQIG9wdGlvbnMuXG5cblN0YW5kYXJkIEtBU0FOIGRvZXMgbm90IGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgaXQgb25seSBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcyBhbmQgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2ltaWxhciBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGFzc2lnbm1lbnQgdG8gYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYC4gYHN1YmZsb3dfcmVxYCBpcyBhIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGByZXFza19hbGxvYygpYC4gVGhlIGByZXFza19hbGxvYygpYCBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gYSBzbGFiIGNhY2hlIHdpdGhvdXQgdGhlIGBfX0dGUF9aRVJPYCBmbGFnLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC5cblxuV2hpbGUgYHN1YmZsb3dfaW5pdF9yZXEoKWAgaW5pdGlhbGl6ZXMgc2V2ZXJhbCBmaWVsZHMgb2YgdGhlIHJlcXVlc3Qgc29ja2V0LCBpdCBkb2VzIG5vdCBpbml0aWFsaXplIGBsb2NhbF9pZGAuIER1cmluZyBhIFNZTiBjb29raWUgTVBfSk9JTiwgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoKWAgaXMgY2FsbGVkIHRvIHJlY29uc3RydWN0IHRoZSByZXF1ZXN0IHNvY2tldCBzdGF0ZSBmcm9tIHRoZSBjb29raWUuIEJlZm9yZSB0aGlzIHBhdGNoLCBpdCBmYWlsZWQgdG8gcmVzdG9yZSBgbG9jYWxfaWRgLCBsZWF2aW5nIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZGAgdW5pbml0aWFsaXplZC5cblxuVGhpcyB1bmluaXRpYWxpemVkIDEtYnl0ZSB2YWx1ZSBpcyBsYXRlciBjb3BpZWQgdG8gdGhlIHN1YmZsb3cgY29udGV4dCAoYG5ld19jdHgtXHUwMDNlbG9jYWxfaWRgKSBpbiBgc3ViZmxvd191bHBfY2xvbmUoKWAuIEZyb20gdGhlcmUsIHRoZSB1bmluaXRpYWxpemVkIGtlcm5lbCBoZWFwIG1lbW9yeSBjYW4gYmUgbGVha2VkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoZS5nLiwgYE1QVENQX1NVQkZMT1dfQVRUUl9JRF9MT0NgIGluIGBzdWJmbG93X2dldF9pbmZvKClgKSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgVENQIG9wdGlvbnMuXG5cblN0YW5kYXJkIEtBU0FOIGRvZXMgbm90IGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgaXQgb25seSBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcyBhbmQgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2ltaWxhciBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjMxLjA2NDc5NTc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MjkxMTE2MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZVwiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYXNzaWdubWVudCB0byBgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYC4gYHN1YmZsb3dfcmVxYCBpcyBhIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGByZXFza19hbGxvYygpYC4gVGhlIGByZXFza19hbGxvYygpYCBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gYSBzbGFiIGNhY2hlIHdpdGhvdXQgdGhlIGBfX0dGUF9aRVJPYCBmbGFnLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC5cXG5cXG5XaGlsZSBgc3ViZmxvd19pbml0X3JlcSgpYCBpbml0aWFsaXplcyBzZXZlcmFsIGZpZWxkcyBvZiB0aGUgcmVxdWVzdCBzb2NrZXQsIGl0IGRvZXMgbm90IGluaXRpYWxpemUgYGxvY2FsX2lkYC4gRHVyaW5nIGEgU1lOIGNvb2tpZSBNUF9KT0lOLCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYCBpcyBjYWxsZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIHJlcXVlc3Qgc29ja2V0IHN0YXRlIGZyb20gdGhlIGNvb2tpZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGZhaWxlZCB0byByZXN0b3JlIGBsb2NhbF9pZGAsIGxlYXZpbmcgYHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9pZGAgdW5pbml0aWFsaXplZC5cXG5cXG5UaGlzIHVuaW5pdGlhbGl6ZWQgMS1ieXRlIHZhbHVlIGlzIGxhdGVyIGNvcGllZCB0byB0aGUgc3ViZmxvdyBjb250ZXh0IChgbmV3X2N0eC1cXHUwMDNlbG9jYWxfaWRgKSBpbiBgc3ViZmxvd191bHBfY2xvbmUoKWAuIEZyb20gdGhlcmUsIHRoZSB1bmluaXRpYWxpemVkIGtlcm5lbCBoZWFwIG1lbW9yeSBjYW4gYmUgbGVha2VkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoZS5nLiwgYE1QVENQX1NVQkZMT1dfQVRUUl9JRF9MT0NgIGluIGBzdWJmbG93X2dldF9pbmZvKClgKSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgVENQIG9wdGlvbnMuXFxuXFxuU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIGFuZCBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIG9mIGBzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIE1QVENQIHN5bmNvb2tpZSBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgTVBUQ1AgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjMxLjA2NDgwNDE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQyMDY3NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTgwYTYzMGM2NjY2NjZiOGQ0Y2NlN2U3OTFkNGU4MDIzYWIyNWZjZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxMjozMDoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3luY29va2llcy5jIGIvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xcbmluZGV4IDdmMjI1MjYzNDZhN2UuLmI1Y2FjNTcwMTEyMjEgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xcbisrKyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmNcXG5AQCAtMTE4LDYgKzExOCw3IEBAIGJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsXFxuIFxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9ub25jZSA9IGUtXFx1MDAzZWxvY2FsX25vbmNlO1xcbiBcXHRzdWJmbG93X3JlcS1cXHUwMDNlYmFja3VwID0gZS1cXHUwMDNlYmFja3VwO1xcbiBcXHRzdWJmbG93X3JlcS1cXHUwMDNlcmVtb3RlX2lkID0gZS1cXHUwMDNlam9pbl9pZDtcXG4rXFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkID0gZS1cXHUwMDNlbG9jYWxfaWQ7XFxuIFxcdHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbiA9IGUtXFx1MDAzZXRva2VuO1xcbiBcXHRzdWJmbG93X3JlcS1cXHUwMDNlbXNrID0gbXNrO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjMyLjQwNzYyMjI5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM2ODY0MTMxODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZVwiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIG9mIGBzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIE1QVENQIHN5bmNvb2tpZSBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgTVBUQ1AgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4MGE2MzBjNjY2NjY2YjhkNGNjZTdlNzkxZDRlODAyM2FiMjVmY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxMjozMDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zeW5jb29raWVzLmMgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jXG5pbmRleCA3ZjIyNTI2MzQ2YTdlLi5iNWNhYzU3MDExMjIxIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xuKysrIGIvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xuQEAgLTExOCw2ICsxMTgsNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbFxuIFx0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfbm9uY2UgPSBlLVx1MDAzZWxvY2FsX25vbmNlO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlYmFja3VwID0gZS1cdTAwM2ViYWNrdXA7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQgPSBlLVx1MDAzZWpvaW5faWQ7XG4rXHRzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZCA9IGUtXHUwMDNlbG9jYWxfaWQ7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2V0b2tlbiA9IGUtXHUwMDNldG9rZW47XG4gXHRzdWJmbG93X3JlcS1cdTAwM2Vtc2sgPSBtc2s7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjMyLjQwNzYyMzUzNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Njc2Mjc4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwYXRjaDpcblxuKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgTVBUQ1AgUGF0Y2gqKlxuXG5Pa2F5LCBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L21wdGNwL3N5bmNvb2tpZXMuY2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQgc2VlbXMgdG8gYWRkIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZCA9IGUtXHUwMDNlbG9jYWxfaWQ7YCB3aXRoaW4gdGhlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2h5IGFyZSB3ZSBkb2luZyB0aGlzP1wiLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU28sIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGl0c2VsZi4gV2hhdOKAmXMgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2U/IEFuZCB3aGF0IGlzIGBzdWJmbG93X3JlcWA/IElzIGl0IGFuIGVzdGFibGlzaGVkIGRhdGEgc3RydWN0dXJlIG9yIGFuIGluc3RhbmNlPyBBbmQgaG93IGRvZXMgYGVgIHJlbGF0ZSB0byBgbG9jYWxfaWRgPyBXaGF0IGtpbmQgb2YgdmFsdWUgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBoYW5kc2hha2UgcHJvY2VzcyB0byB3aGljaCB0aGlzIGNvb2tpZSBpbml0aWFsaXphdGlvbiBpcyByZWxhdGVkIHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGFuZ2UuIFdoYXQgcGFydCBvZiB0aGUgTVBUQ1AgaGFuZHNoYWtlIGlzIGJlaW5nIG1vZGlmaWVkPyBMZXQncyB0cmFjZSBiYWNrIHdoZXJlIHRoaXMgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGlzIGJlaW5nIGNhbGxlZCBhbmQgc2VlIGhvdyBgc3ViZmxvd19yZXFgIGFuZCBgZWAgYXJlIHVzZWQuIFRoaXMgY2hhbmdlIGxpa2VseSBoYXMgc29tZSBpbXBhY3Qgb24gaG93IHdlIGhhbmRsZSBzdWJmbG93IGpvaW4gcmVxdWVzdHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgdG9rZW5zLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQgdGhhdCBpbXBhY3QgaXMgYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgcGF0Y2gncyBtZXJpdC4gSXMgdGhpcyBhIHNlY3VyaXR5IGZpeCwgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzA6MzYuODc1MjU0NjI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzE5Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3N5bmNvb2tpZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc3luY29va2llcy5jPTcxPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkxLSAqL1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMDozNi45MjM1Nzg5OThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY5OTAyMzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGZ1bmN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoZXJlIHRoaXMgZnVuY3Rpb24gc2l0cyB3aXRoaW4gdGhlIGxhcmdlciBNUFRDUCBmcmFtZXdvcmsuIFdoYXQncyBpdHMgcm9sZSwgYW5kIHdoYXQgYXJlIGl0cyBpbnB1dHMgYW5kIG91dHB1dHM/IEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIHNldHRpbmcgdXAgb3IgaW5pdGlhbGl6aW5nIHNvbWUgY3J1Y2lhbCBzdGF0ZSByZWxhdGVkIHRvIHRoZSBqb2luIGNvb2tpZSBhbmQgdG9rZW4gbWVjaGFuaXNtLiBJdCdzIHByb2JhYmx5IGNhbGxlZCBkdXJpbmcgdGhlIGhhbmRzaGFrZSBvciB3aGVuIGEgbmV3IHN1YmZsb3cgaXMgYmVpbmcgZXN0YWJsaXNoZWQuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOlxuXG4qICAgV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgbW9kaWZ5aW5nIG9yIHBvcHVsYXRpbmc/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBNUFRDUCBjb25uZWN0aW9uIGNvbnRyb2wgYmxvY2ssIHRoZSBzdWJmbG93J3MgZGF0YSwgb3Igc29tZSBkZWRpY2F0ZWQgY29va2llLXJlbGF0ZWQgc3RydWN0dXJlP1xuKiAgIFdoYXQgaXMgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHN0YXRlPyBJcyBpdCBvbmx5IGluaXRpYWxpemVkLCBvciBpcyBpdCBhbHNvIHVwZGF0ZWQgb3IgY2xlYXJlZCBsYXRlciBpbiB0aGUgY29ubmVjdGlvbj9cbiogICBIb3cgZG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIHJlbGF0ZSB0byB0aGUgTVBUQ1AncyBvdmVyYWxsIHNlY3VyaXR5IGFuZCBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcz9cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgbG9naWMuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjb2RlIHRvIHNlZSBpZiBpdCdzIGdlbmVyYXRpbmcgbmV3IGNvb2tpZXMgb3IgdG9rZW5zLCBvciB2YWxpZGF0aW5nIHByZXZpb3VzbHkgcmVjZWl2ZWQgb25lcy4gSWYgSSB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcywgaXQnbGwgaGVscCBtZSBhc3Nlc3MgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBhdHRhY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzA6NDAuODkzNDg1MTM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3N5bmNvb2tpZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHQgKiBwcmVzZW50IGluIHRoZSBjb29raWUgQUNLIG1wdGNwIG9wdGlvbiBzcGFjZSB3aWxsIGJlIGNoZWNrZWQgbGF0ZXIuXFxuICA5MTpcXHQgKi9cXG4gIDkyOlxcdGJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbiAgOTM6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXNrLnJlcS5pcmVxX25ldCk7XFxuICA5NjpcXHRcXHR1MzIgaSA9IG1wdGNwX2pvaW5fZW50cnlfaGFzaChza2IsIG5ldCk7XFxuICA5NzpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrO1xcbiAgOTg6XFx0XFx0c3RydWN0IGpvaW5fZW50cnkgKmU7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdGUgPSBcXHUwMDI2am9pbl9lbnRyaWVzW2ldO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRpZiAoZS1cXHUwMDNldmFsaWQgPT0gMCkge1xcbiAxMDU6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xcbiAxMDY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMDc6XFx0XFx0fVxcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRlLVxcdTAwM2V2YWxpZCA9IDA7XFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdG1zayA9IG1wdGNwX3Rva2VuX2dldF9zb2NrKG5ldCwgZS1cXHUwMDNldG9rZW4pO1xcbiAxMTI6XFx0XFx0aWYgKCFtc2spIHtcXG4gMTEzOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcXG4gMTE0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTE1OlxcdFxcdH1cXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9ub25jZSA9IGUtXFx1MDAzZXJlbW90ZV9ub25jZTtcXG4gMTE4OlxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9ub25jZSA9IGUtXFx1MDAzZWxvY2FsX25vbmNlO1xcbiAxMTk6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZWJhY2t1cCA9IGUtXFx1MDAzZWJhY2t1cDtcXG4gMTIwOlxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2VyZW1vdGVfaWQgPSBlLVxcdTAwM2Vqb2luX2lkO1xcbiAxMjE6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkID0gZS1cXHUwMDNlbG9jYWxfaWQ7XFxuIDEyMjpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNldG9rZW4gPSBlLVxcdTAwM2V0b2tlbjtcXG4gMTIzOlxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2sgPSBtc2s7XFxuIDEyNDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XFxuIDEyNTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMTI2OlxcdH1cXG4gMTI3OlxcdFxcbiAxMjg6XFx0dm9pZCBfX2luaXQgbXB0Y3Bfam9pbl9jb29raWVfaW5pdCh2b2lkKVxcbiAxMjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMDo0MC44OTM1NTM3MDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjIzMTc1OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBNUFRDUCBTeW5jb29raWUgTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhpcyBpcyBhYm91dCBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIG1vZGlmaWNhdGlvbiBpbiBob3cgTVBUQ1Agc3luY29va2llcyB3b3JrLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsIFwiUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLlwiIEkgbmVlZCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBNUFRDUC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHR3ZWFrZWQgYW5kIGhvdyB0aGV5J3JlIGluZmx1ZW5jaW5nIHRoZSBvdmVyYWxsIGJlaGF2aW9yLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucz8gQW55IHNlY3VyaXR5IHJhbWlmaWNhdGlvbnM/IEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHRoZSBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjQ1LjExNjczNzk2M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc2NzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzA6NDUuMTYyNTEyMDUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkxMTI0MjMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1QVENQIFRva2VuIEhhbmRsaW5nKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgZGVmaW5pdGVseSBgTVBUQ1BgLiBUaW1lIHRvIHplcm8gaW4gb24gdGhpcyBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBzY29wZSBhbmQgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgd2hlcmUgaXQgZ2V0cyBjYWxsZWQgZnJvbeKAlHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIE1QVENQIHN0YWNrIHJlbHkgb24gaXRzIGZ1bmN0aW9uYWxpdHk/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggaXMgYWx3YXlzIHRoZSBmaXJzdCBzdGVwIGZvciBtZSB0byBncmFzcCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIGJlZm9yZSBJIGNhbiB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDYzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzA6NTUuMDczNzU4MzQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkzMDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmg9MTM2Mj12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjQ6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNzE9c3RhdGljIGlubGluZSBib29sXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MjptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjM9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjg5LVxcdH0gZWxzZSBpZiAob3B0X21wX2pvaW4gXFx1MDAyNlxcdTAwMjYgbGlzdGVuZXItXFx1MDAzZXJlcXVlc3RfbXB0Y3ApIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjI5MDpcXHRcXHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTcxPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkxLSAqL1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMDo1NS4xMTg2OTQxNzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NDU4NTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIE1QVENQIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGluaXRpYXRpbmcgdGhlIGNvb2tpZSByZXF1ZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGFzIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBhbmQgc2VlIHdoYXQgaXQncyBkb2luZy4gTGV0J3Mgc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIGhhbmRzaGFrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjU4LjA4MzI4MjQ2N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzNTAzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jPTE0Nz1zdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjYyLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjYzOmludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNjQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI5OC19XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMDo1OC4xMjk2Mzc2NzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNjg2NTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIFNjb3BlIG9mIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBmdW5jdGlvbiwgdGhlIG9uZSBkZWFsaW5nIHdpdGggaW5pdGlhbCBjb29raWUgcmVxdWVzdHMgd2l0aGluIE1QVENQLCBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBvdGhlciBmdW5jdGlvbnMgKndpdGhpbiogdGhlIGBuZXQvbXB0Y3AvYCBkaXJlY3RvcnksIG9yIGRvZXMgaXQgaGF2ZSBhbiBleHRlcm5hbCBpbnRlcmZhY2UsIGkuZS4sIGlzIGl0IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgbW9kdWxlPyBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IGl0cyBib3VuZGFyaWVzLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24ncyBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIGFuZCBob3cgdGlnaHRseSBjb3VwbGVkIGl0IGlzIHRvIHRoZSByZXN0IG9mIHRoZSBNUFRDUCBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyBpZiBleHRlcm5hbCBjb2RlIGRpcmVjdGx5IGNhbGxzIHRoaXMgY291bGQgaW1wYWN0IGhvdyBJIGFwcHJvYWNoIGFueSBtb2RpZmljYXRpb25zIG9yIGRlYnVnZ2luZy4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGxpbmcgY29udGV4dC4gTGV0IG1lIHRyYWNlIHRoZSBjYWxscyBhbmQgZG8gc29tZSBjcm9zcy1yZWZlcmVuY2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE5NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjAxLjM1NjUxMDk2MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyNDIyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9zeW5jb29raWVzLmM9MjYzPXN0YXRpYyBpbnQgY29va2llX3RjcF9yZXFza19pbml0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yOTQtXFx0aWYgKHRyZXEtXFx1MDAzZWlzX21wdGNwKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyOTU6XFx0XFx0cmV0dXJuIG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHJlcSwgc2ssIHNrYik7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTI5Ni0jZW5kaWZcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ3PXN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNjItXFxubmV0L21wdGNwL3N1YmZsb3cuYzoyNjM6aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI2NC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjk4LX1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjI5OTpFWFBPUlRfU1lNQk9MX0dQTChtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0zMDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjAxLjQ0MDc1ODI1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzQ1NDY4MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBUQ1AgVG9rZW4gSm9pbiBDb29raWUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L2lwdjQvc3luY29va2llcy5jYC4gSSd2ZSBob25lZCBpbiBvbiBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIGFuZCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgYXMgdGhlIGtleSBmdW5jdGlvbnMgdG8gZXhhbWluZSBoZXJlLiBUaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBNUFRDUGAsIHdoaWNoIEknbGwga2VlcCBpbiBtaW5kLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGFib3V0IGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gSSBuZWVkIHRvIGNoZWNrIGlmIGl0J3Mgc3RhdGljIG9yIGdsb2JhbC4gQWgsIGl0J3Mgbm90IHN0YXRpYzsgaXQncyBleHBvcnRlZCwgc28gaXQncyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBJJ20gbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG5vdzogYGJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuXG5cblJpZ2h0LCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBtaXNzaW5nIGluaXRpYWxpemF0aW9uIGlzc3VlLiBJdCBzZWVtcyBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIHdhc24ndCBiZWluZyBpbml0aWFsaXplZCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgc28gSSdsbCBuZWVkIHRvIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLiBJdCBzZWVtcyBgTVBUQ1BgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZy5cblxuQWxyaWdodCwgSSB0aGluayBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjaGFuZ2UuIEknbSByZWFkeSB0byBkb2N1bWVudCBteSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4MSwiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6MDkuMTg2MjI5NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTUyMTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlXCIsXG4gICAgXCJtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gb2YgYHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9pZGAgaW4gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgTVBUQ1Agc3luY29va2llIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNUFRDUCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVcIixcbiAgICBcIm1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBvZiBgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBNUFRDUCBzeW5jb29raWUgcHJvY2Vzc2luZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1QVENQIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTowOS4yNzE3NTk0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwODQxNDIxMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTowOS4yNzIzOTczNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzA4MzUwMDA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBhc3NpZ25tZW50IHRvIGBzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgLiBgc3ViZmxvd19yZXFgIGlzIGEgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYHJlcXNrX2FsbG9jKClgLiBUaGUgYHJlcXNrX2FsbG9jKClgIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgZnJvbSBhIHNsYWIgY2FjaGUgd2l0aG91dCB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLlxcblxcbldoaWxlIGBzdWJmbG93X2luaXRfcmVxKClgIGluaXRpYWxpemVzIHNldmVyYWwgZmllbGRzIG9mIHRoZSByZXF1ZXN0IHNvY2tldCwgaXQgZG9lcyBub3QgaW5pdGlhbGl6ZSBgbG9jYWxfaWRgLiBEdXJpbmcgYSBTWU4gY29va2llIE1QX0pPSU4sIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgIGlzIGNhbGxlZCB0byByZWNvbnN0cnVjdCB0aGUgcmVxdWVzdCBzb2NrZXQgc3RhdGUgZnJvbSB0aGUgY29va2llLiBCZWZvcmUgdGhpcyBwYXRjaCwgaXQgZmFpbGVkIHRvIHJlc3RvcmUgYGxvY2FsX2lkYCwgbGVhdmluZyBgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkYCB1bmluaXRpYWxpemVkLlxcblxcblRoaXMgdW5pbml0aWFsaXplZCAxLWJ5dGUgdmFsdWUgaXMgbGF0ZXIgY29waWVkIHRvIHRoZSBzdWJmbG93IGNvbnRleHQgKGBuZXdfY3R4LVxcdTAwM2Vsb2NhbF9pZGApIGluIGBzdWJmbG93X3VscF9jbG9uZSgpYC4gRnJvbSB0aGVyZSwgdGhlIHVuaW5pdGlhbGl6ZWQga2VybmVsIGhlYXAgbWVtb3J5IGNhbiBiZSBsZWFrZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChlLmcuLCBgTVBUQ1BfU1VCRkxPV19BVFRSX0lEX0xPQ2AgaW4gYHN1YmZsb3dfZ2V0X2luZm8oKWApIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBNUFRDUCBUQ1Agb3B0aW9ucy5cXG5cXG5TdGFuZGFyZCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk7IGl0IG9ubHkgZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZXMgYW5kIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4MGE2MzBjNjY2NjY2YjhkNGNjZTdlNzkxZDRlODAyM2FiMjVmY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxMjozMDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zeW5jb29raWVzLmMgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jXG5pbmRleCA3ZjIyNTI2MzQ2YTdlLi5iNWNhYzU3MDExMjIxIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xuKysrIGIvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xuQEAgLTExOCw2ICsxMTgsNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbFxuIFx0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfbm9uY2UgPSBlLVx1MDAzZWxvY2FsX25vbmNlO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlYmFja3VwID0gZS1cdTAwM2ViYWNrdXA7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQgPSBlLVx1MDAzZWpvaW5faWQ7XG4rXHRzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZCA9IGUtXHUwMDNlbG9jYWxfaWQ7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2V0b2tlbiA9IGUtXHUwMDNldG9rZW47XG4gXHRzdWJmbG93X3JlcS1cdTAwM2Vtc2sgPSBtc2s7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjA5LjI3MjM5ODJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM4Mjc5NDkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIFRva2VuIEpvaW4gQ29va2llIEluaXRpYWxpemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gZS1cdTAwM2Vsb2NhbF9pZDtgIHRvIHRoZSBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbXB0Y3Avc3luY29va2llcy5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gdGhlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZSwganVzdCBhbiBhc3NpZ25tZW50IHdpdGhpbiB0aGUgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGZ1bmN0aW9uLCBhc3NpZ25pbmcgYSB2YWx1ZSBmcm9tIGBlLVx1MDAzZWxvY2FsX2lkYCB0byBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHdlJ3JlIGludHJvZHVjaW5nIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBjb3BpZWQgYXJvdW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBvZiB0aGlzIGFzc2lnbm1lbnQuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBgc3ViZmxvd19yZXFgIGFuZCBgZWAgYWN0dWFsbHkgKmFyZSouIEkga25vdyB0aGV5J3JlIGJvdGggbGlrZWx5IHN0cnVjdHVyZXMsIHBvaW50ZXJzIGluIHRoaXMgY29udGV4dCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucyBvZiBgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrYCBhbmQgYHN0cnVjdCBqb2luX2VudHJ5YC5cblxuUmlnaHQsIGBzdWJmbG93X3JlcWAgaXMgYSBwb2ludGVyIHRvIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLCBhbmQgYGVgIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IGpvaW5fZW50cnlgLiBOb3cgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIGBlLVx1MDAzZWxvY2FsX2lkYCBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIGFzc2lnbm1lbnQ/IElmIG5vdCwgd2UgY291bGQgcG90ZW50aWFsbHkgYmUgY29weWluZyB1bmluaXRpYWxpemVkIGRhdGEsIHdoaWNoIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3Vlcy4gVGltZSB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L21wdGNwL3N5bmNvb2tpZXMuY2AgdG8gc2VlIGhvdyB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBwb3B1bGF0ZWQgYW5kIHdoZXJlIGBlLVx1MDAzZWxvY2FsX2lkYCBnZXRzIGl0cyB2YWx1ZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50IHRvIGVuc3VyZSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjE1LjY1NTE5NzI3M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4NTgyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGpvaW5fZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3N5bmNvb2tpZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc3luY29va2llcy5jLTIyLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6MjM6c3RydWN0IGpvaW5fZW50cnkge1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtMjQtXFx0dTMyIHRva2VuO1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0zNC1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjM1OnN0YXRpYyBzdHJ1Y3Qgam9pbl9lbnRyeSBqb2luX2VudHJpZXNbQ09PS0lFX0pPSU5fU0xPVFNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtMzYtc3RhdGljIHNwaW5sb2NrX3Qgam9pbl9lbnRyeV9sb2Nrc1tDT09LSUVfSk9JTl9TTE9UU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTM4PXN0YXRpYyB1MzIgbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNTgtXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo1OTpzdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSxcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTYwLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTkyPWJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05Ny1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrO1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTg6XFx0c3RydWN0IGpvaW5fZW50cnkgKmU7XFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6MTUuNzA0MDY4MDMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzg5NTkzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBqb2luX2VudHJ5YCBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGBzdHJ1Y3Qgam9pbl9lbnRyeWAgZGVmaW5pdGlvbi4gSXQncyB0aGUgbHluY2hwaW4gZm9yIGhvdyBqb2lucyBhcmUgaGFuZGxlZCwgc28gdW5kZXJzdGFuZGluZyBpdHMgY29tcG9uZW50cyBpcyBjcml0aWNhbC4gSSBuZWVkIHRvIGJlIHN1cmUgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb2YgaXRzIGZpZWxkcyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGpvaW4gb3BlcmF0aW9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGxheW91dCwgYW55IHBvdGVudGlhbCBhbGlnbm1lbnQgaXNzdWVzLCBhbmQgaG93IHRoZSB2YXJpb3VzIGZpZWxkcyBjb250cmlidXRlIHRvIGVmZmljaWVudCBsb29rdXBzIGFuZCBjb21wYXJpc29ucy4gVGhpcyBkZWZpbml0aW9uIGlzIGdvaW5nIHRvIGRpY3RhdGUgYSBsb3QgYWJvdXQgcGVyZm9ybWFuY2UgYW5kIHNjYWxhYmlsaXR5LCBzbyBhIGRlZXAgdW5kZXJzdGFuZGluZyBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6MTkuMDQzMDMwMzg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9zeW5jb29raWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0ICogd2hlbiB0aGUgVENQIEFDSyBwYXNzZWQgdGhlIGNvb2tpZSB2YWxpZGF0aW9uIGNoZWNrLlxcbiAgMjE6XFx0ICovXFxuICAyMjpcXHRcXG4gIDIzOlxcdHN0cnVjdCBqb2luX2VudHJ5IHtcXG4gIDI0OlxcdFxcdHUzMiB0b2tlbjtcXG4gIDI1OlxcdFxcdHUzMiByZW1vdGVfbm9uY2U7XFxuICAyNjpcXHRcXHR1MzIgbG9jYWxfbm9uY2U7XFxuICAyNzpcXHRcXHR1OCBqb2luX2lkO1xcbiAgMjg6XFx0XFx0dTggbG9jYWxfaWQ7XFxuICAyOTpcXHRcXHR1OCBiYWNrdXA7XFxuICAzMDpcXHRcXHR1OCB2YWxpZDtcXG4gIDMxOlxcdH07XFxuICAzMjpcXHRcXG4gIDMzOlxcdCNkZWZpbmUgQ09PS0lFX0pPSU5fU0xPVFNcXHQxMDI0XFxuICAzNDpcXHRcXG4gIDM1OlxcdHN0YXRpYyBzdHJ1Y3Qgam9pbl9lbnRyeSBqb2luX2VudHJpZXNbQ09PS0lFX0pPSU5fU0xPVFNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbiAgMzY6XFx0c3RhdGljIHNwaW5sb2NrX3Qgam9pbl9lbnRyeV9sb2Nrc1tDT09LSUVfSk9JTl9TTE9UU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuICAzNzpcXHRcXG4gIDM4OlxcdHN0YXRpYyB1MzIgbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcXG4gIDM5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6MTkuMDQzMTEwODg3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODM1MzUzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgam9pbl9lbnRyaWVzYCBhbmQgRm9jdXMgb24gYG1wdGNwX2pvaW5fc3RvcmVfc3RhdGVgKipcblxuQWxyaWdodCwgc28gYGpvaW5fZW50cmllc2AgaXMgYSBnbG9iYWwgYXJyYXksIG1lYW5pbmcgaXRzIGNvbnRlbnRzIGFyZSBhdXRvbWF0aWNhbGx5IHplcm8taW5pdGlhbGl6ZWQgYXQgdGhlIHN0YXJ0LiBUaGF0J3MgZ29vZCB0byBrbm93IOKAkyBwcmV2ZW50cyBzb21lIHVuZXhwZWN0ZWQgdmFsdWVzIGZyb20gcG9wcGluZyB1cCBpbiB0aGUgaW5pdGlhbCBzdGF0ZSwgd2hpY2ggaXMgYSBjb21tb24gY2F1c2Ugb2YgaGFyZC10by1kZWJ1ZyBpc3N1ZXMuIE5vdywgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBsb2dpYyB0aGF0IG1hbmFnZXMgaXQsIGJ1dCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZWAgc3BlY2lmaWNhbGx5LiBJdCdzIHRoZSBjb3JlIHN0YXRlIG1hbmFnZW1lbnQgZm9yIHRoZSBqb2luaW5nIHByb2Nlc3MsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQgaW50ZXJhY3RzIHdpdGggYGpvaW5fZW50cmllc2AgY29ycmVjdGx5LiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0YXRlIGxvb2tzIGltcG9ydGFudC4gTGV0J3Mgc2VlIHdoYXQgaXMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjIyLjYyNjY0ODk1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9zeW5jb29raWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTg6XFx0XFxuICA1OTpcXHRzdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSxcXG4gIDYwOlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRlbnRyeS1cXHUwMDNldG9rZW4gPSBzdWJmbG93X3JlcS1cXHUwMDNldG9rZW47XFxuICA2MzpcXHRcXHRlbnRyeS1cXHUwMDNlcmVtb3RlX25vbmNlID0gc3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9ub25jZTtcXG4gIDY0OlxcdFxcdGVudHJ5LVxcdTAwM2Vsb2NhbF9ub25jZSA9IHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9ub25jZTtcXG4gIDY1OlxcdFxcdGVudHJ5LVxcdTAwM2ViYWNrdXAgPSBzdWJmbG93X3JlcS1cXHUwMDNlYmFja3VwO1xcbiAgNjY6XFx0XFx0ZW50cnktXFx1MDAzZWpvaW5faWQgPSBzdWJmbG93X3JlcS1cXHUwMDNlcmVtb3RlX2lkO1xcbiAgNjc6XFx0XFx0ZW50cnktXFx1MDAzZWxvY2FsX2lkID0gc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkO1xcbiAgNjg6XFx0XFx0ZW50cnktXFx1MDAzZXZhbGlkID0gMTtcXG4gIDY5OlxcdH1cXG4gIDcwOlxcdFxcbiAgNzE6XFx0dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG4gIDcyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgNzM6XFx0e1xcbiAgNzQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcXG4gIDc1OlxcdFxcdHUzMiBpID0gbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHNrYiwgbmV0KTtcXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0LyogTm8gdXNlIGluIHdhaXRpbmcgaWYgb3RoZXIgY3B1IGlzIGFscmVhZHkgdXNpbmcgdGhpcyBzbG90IC0tXFxuICA3ODpcXHRcXHQgKiB3b3VsZCBvdmVyd3JpdGUgdGhlIGRhdGEgdGhhdCBnb3Qgc3RvcmVkLlxcbiAgNzk6XFx0XFx0ICovXFxuICA4MDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xcbiAgODE6XFx0XFx0bXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShcXHUwMDI2am9pbl9lbnRyaWVzW2ldLCBzdWJmbG93X3JlcSk7XFxuICA4MjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XFxuICA4MzpcXHR9XFxuICA4NDpcXHRcXG4gIDg1OlxcdC8qIENhbGxlZCBmb3IgYSBjb29raWUtYWNrIHdpdGggTVBfSk9JTiBvcHRpb24gcHJlc2VudC5cXG4gIDg2OlxcdCAqIExvb2sgdXAgdGhlIHNhdmVkIHN0YXRlIGJhc2VkIG9uIHNrYiBoYXNoIFxcdTAwMjYgY2hlY2sgdG9rZW4gbWF0Y2hlcyBtc2tcXG4gIDg3OlxcdCAqIGluIHNhbWUgbmV0bnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjIyLjYyNjcxNDY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTkxNzgzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgTVBUQ1AgVG9rZW4gSm9pbiBDb29raWUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgY2hhbmdlIHdpdGhpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAuIFRoZSBrZXkgYWRkaXRpb24gaXMgYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gZS1cdTAwM2Vsb2NhbF9pZDtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJ3JlIGVzc2VudGlhbGx5IGxpbmtpbmcgdGhlIGBsb2NhbF9pZGAgZnJvbSBzb21lIGVsZW1lbnQgYGVgIHRvIHRoZSBgc3ViZmxvd19yZXFgIHN0cnVjdHVyZSBkdXJpbmcgdGhlIHRva2VuIGpvaW4gY29va2llIGluaXRpYWxpemF0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgZGlyZWN0IG1hcHBpbmcgb3IgYXNzb2NpYXRpb24gaXMgYmVpbmcgY3JlYXRlZC4gSSBoYXZlIHRvIGxvb2sgZGVlcGVyIGludG8gd2hhdCBgZWAgcmVwcmVzZW50cyBhbmQgd2hhdCB0aGUgYHN1YmZsb3dfcmVxYCBjb250ZXh0IGlzIHRvIGRldGVybWluZSB0aGUgKndoeSouIElzIGl0IHNldHRpbmcgdXAgYSBwZXItc3ViZmxvdyBjb250ZXh0LCBhc3NvY2lhdGluZyBhIGxvY2FsIGlkZW50aWZpZXIgd2l0aCB0aGUgc3RhdGU/IElzIHRoZXJlIGEgc3VidGxlIGltcGFjdCBvbiBjb25jdXJyZW5jeSBvciB0aGUgd2F5IHdlJ3JlIGhhbmRsaW5nIGlkZW50aWZpZXJzPyBMZXQgbWUgY2hlY2sgaG93IGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBpcyBhY3R1YWxseSB1c2VkIGFuZCB3aGF0IGBlYCBhbmQgYHN1YmZsb3dfcmVxYCBhcmUgZGVmaW5lZCBhcyB0byBkZXRlcm1pbmUgaXRzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6MjYuNzg1ODk1Njg2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9zeW5jb29raWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTI6XFx0Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxuICA5MzpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgOTQ6XFx0e1xcbiAgOTU6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcXG4gIDk2OlxcdFxcdHUzMiBpID0gbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHNrYiwgbmV0KTtcXG4gIDk3OlxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XFxuICA5ODpcXHRcXHRzdHJ1Y3Qgam9pbl9lbnRyeSAqZTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0ZSA9IFxcdTAwMjZqb2luX2VudHJpZXNbaV07XFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdGlmIChlLVxcdTAwM2V2YWxpZCA9PSAwKSB7XFxuIDEwNTpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XFxuIDEwNjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEwNzpcXHRcXHR9XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdGUtXFx1MDAzZXZhbGlkID0gMDtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0bXNrID0gbXB0Y3BfdG9rZW5fZ2V0X3NvY2sobmV0LCBlLVxcdTAwM2V0b2tlbik7XFxuIDExMjpcXHRcXHRpZiAoIW1zaykge1xcbiAxMTM6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xcbiAxMTQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMTU6XFx0XFx0fVxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlcmVtb3RlX25vbmNlID0gZS1cXHUwMDNlcmVtb3RlX25vbmNlO1xcbiAxMTg6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX25vbmNlID0gZS1cXHUwMDNlbG9jYWxfbm9uY2U7XFxuIDExOTpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlYmFja3VwID0gZS1cXHUwMDNlYmFja3VwO1xcbiAxMjA6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9pZCA9IGUtXFx1MDAzZWpvaW5faWQ7XFxuIDEyMTpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWQgPSBlLVxcdTAwM2Vsb2NhbF9pZDtcXG4gMTIyOlxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbiA9IGUtXFx1MDAzZXRva2VuO1xcbiAxMjM6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZW1zayA9IG1zaztcXG4gMTI0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcXG4gMTI1OlxcdFxcdHJldHVybiB0cnVlO1xcbiAxMjY6XFx0fVxcbiAxMjc6XFx0XFxuIDEyODpcXHR2b2lkIF9faW5pdCBtcHRjcF9qb2luX2Nvb2tpZV9pbml0KHZvaWQpXFxuIDEyOTpcXHR7XFxuIDEzMDpcXHRcXHRpbnQgaTtcXG4gMTMxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMToyNi43ODU5ODAyMzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQwMDY2NDcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBQb3RlbnRpYWwgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXQgc2VlbXMgbGlrZSBpdCdzIHJlc3RvcmluZyBgbG9jYWxfaWRgIGZyb20gdGhlIGBqb2luX2VudHJ5YCBzdHJ1Y3QgdG8gYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYC4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGBlLVx1MDAzZWxvY2FsX2lkYCB3YXMgaW5pdGlhbGx5IHNldCB1c2luZyBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIHZpYSBgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoZXJlIGEgcmlzayBvZiB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlP1wiIFdlJ3JlIGRlYWxpbmcgd2l0aCBnbG9iYWwgYXJyYXkgYGpvaW5fZW50cmllc2AsIHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQsIHNvIHRoYXQncyBub3QgYSBjb25jZXJuLiBBbmQgYHN1YmZsb3dfcmVxYD8gSXQncyBwYXJ0IG9mIGEgcmVxdWVzdCBzb2NrZXQsIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLiBUaGlzIHBhdGNoIGlzIGJhc2ljYWxseSBqdXN0IGNvcHlpbmcgYSB2YWx1ZSB0aGF0IHdhcyBwcmV2aW91c2x5IGFzc2lnbmVkLlxuXG5UaGUgcG90ZW50aWFsIGlzc3VlIEkgc2VlIGlzIGlmIGBsb2NhbF9pZGAgKndhc24ndCogcmVzdG9yZWQuIFdoYXQgd291bGQgaXQgYmU/IFplcm8/IFVuaW5pdGlhbGl6ZWQgZ2FyYmFnZT8gSWYgd2UgZGlkbid0IHJlc3RvcmUgaXQsIHdoYXRldmVyIHdhcyBpbiBtZW1vcnkgYXQgdGhlIHRpbWUgYHN1YmZsb3dfcmVxYCB3YXMgYWxsb2NhdGVkIGlzIHdoYXQgd2UnZCBiZSB1c2luZyBsYXRlci4gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gQnV0IHdhaXQsIHR5cGljYWxseSwgcmVxdWVzdCBzb2NrZXRzIGFyZSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBTbyBpdCdzIHByb2JhYmx5ICpub3QqIGFuIGlzc3VlLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHRha2UgYSBsb29rIGF0IHdoZXJlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBpcyBjYWxsZWQgYW5kIGhvdyB0aGUgYHN1YmZsb3dfcmVxYCBpcyBjcmVhdGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmaW5hbCBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyOTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTozMy4xODY2NDc3MDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDkwNTk3NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmg9MTM2Mj12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjQ6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNzE9c3RhdGljIGlubGluZSBib29sXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MjptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjM9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjg5LVxcdH0gZWxzZSBpZiAob3B0X21wX2pvaW4gXFx1MDAyNlxcdTAwMjYgbGlzdGVuZXItXFx1MDAzZXJlcXVlc3RfbXB0Y3ApIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjI5MDpcXHRcXHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTcxPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkxLSAqL1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTozNC44MzU3MTI3OTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2NjkwMjc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBcInRob3VnaHRzXCIgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCoqXG5cblJpZ2h0LCBzbyB0aGUgc3lzdGVtIGlzIHRlbGxpbmcgbWUgdG8gY2hlY2sgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYC4gVGhhdCBsaWtlbHkgbWVhbnMgdGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIHN1YmZsb3csIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGNvb2tpZSByZXF1ZXN0IG1lY2hhbmlzbS4gR2l2ZW4gdGhlIG5hbWUsIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgdGhlIGluaXRpYXRpbmcgZW5kcG9pbnQgb2YgYSBzdWJmbG93IGlzIGhhbmRsaW5nIHRoZSBpbml0aWFsIGNvb2tpZSBleGNoYW5nZSB3aXRoIHRoZSBwZWVyLiBXZSBrbm93IHRoZSBjb29raWUgaXMgZnVuZGFtZW50YWwgZm9yIE1QVENQIHNlY3VyaXR5IGFuZCBzdWJmbG93IGlkZW50aWZpY2F0aW9uLCBzbyBwcm9ibGVtcyB0aGVyZSBhcmUgZ29pbmcgdG8gcXVpY2tseSBiZWNvbWUgY2F0YXN0cm9waGljIGZvciBNUFRDUCBvcGVyYXRpb24uIEknbGwgbmVlZCB0byBsb29rIGF0OlxuXG4qICAgKipUaGUgY29udGV4dCoqOiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBmcm9tPyBJcyBpdCBkdXJpbmcgdGhlIGluaXRpYWwgY29ubmVjdGlvbiBzZXR1cCwgYSByZS1lc3RhYmxpc2htZW50IGF0dGVtcHQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjbHVlcy5cbiogICAqKlRoZSBpbnB1dCBkYXRhKio6IFdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgcGFzc2VkIHRvIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWA/IFRoYXQgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGluaXRpYXRvciBpcyBhdHRlbXB0aW5nIHRvIGNvbW11bmljYXRlIHRvIHRoZSBvdGhlciBzaWRlLCBhbmQgd2hhdCBkZXRhaWxzIGFyZSBwZXJ0aW5lbnQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGZvcm1hdCBhbmQgdmFsaWRpdHkgb2YgdGhlIGNvb2tpZSBkYXRhIChpZiBhbnkpLlxuKiAgICoqVGhlIGZ1bmN0aW9uIGxvZ2ljKio6IFdoYXQgc3RlcHMgZG9lcyB0aGlzIGZ1bmN0aW9uIHRha2U/IEhvdyBkb2VzIGl0IGdlbmVyYXRlL2hhbmRsZS92YWxpZGF0ZSB0aGUgY29va2llIHJlcXVlc3Q/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaGVyZSAoZS5nLiwgd2VhayBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IsIGltcHJvcGVyIGhhbmRsaW5nIG9mIGJ1ZmZlciBvdmVyZmxvd3MsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzKT9cbiogICAqKlRoZSBlcnJvciBoYW5kbGluZyoqOiBXaGF0IGhhcHBlbnMgaWYgdGhlIGNvb2tpZSByZXF1ZXN0IGZhaWxzPyBBcmUgdGhlcmUgYXBwcm9wcmlhdGUgZmFsbGJhY2sgbWVjaGFuaXNtcyBvciBlcnJvciBtZXNzYWdlcz8gQXJlIHBvdGVudGlhbCBlcnJvcnMgYmVpbmcgbG9nZ2VkIGFkZXF1YXRlbHkgZm9yIGRlYnVnZ2luZz8gSXMgdGhlIGZ1bmN0aW9uIHJlc2lsaWVudCB0byBtYWxpY2lvdXMgYXR0ZW1wdHMgdG8gY29ycnVwdCB0aGUgZGF0YT9cbiogICAqKlBlcmZvcm1hbmNlIGFzcGVjdHMqKjogSXMgdGhpcyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s/IEFyZSB0aGVyZSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24/IFRoaXMgaXMgYSBjb3JlIHBhcnQgb2Ygc3ViZmxvdyBpbml0aWFsaXphdGlvbiBzbyBzbG93IGluaXRpYWwgc2V0dXAgY291bGQgYmUgZGV0cmltZW50YWwgdG8gdGhlIHBlcmZvcm1hbmNlIG9mIE1QVENQLlxuKiAgICoqU2VjdXJpdHkgaW1wbGljYXRpb25zKio6IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgc3VjaCBhcyBhIG1hbGljaW91cyBhY3RvciBiZWluZyBhYmxlIHRvIG1hbmlwdWxhdGUgdGhlIHN1YmZsb3cgY29va2llLlxuXG5JbiBzdW1tYXJ5LCBJIGV4cGVjdCB0aGlzIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgaXMgYSB2aXRhbCBwaWVjZSBvZiB0aGUgTVBUQ1AgcHV6emxlLCBzbyBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5LCBpbiBhbGwgb2YgaXRzIGFzcGVjdHMsIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYnVncywgdnVsbmVyYWJpbGl0aWVzLCBvciBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTozOS44MDI2MTg0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3N1YmZsb3cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjMsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjM6XFx0aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gMjY0OlxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbiAyNjU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyNjY6XFx0e1xcbiAyNjc6XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChza19saXN0ZW5lcik7XFxuIDI2ODpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG4gMjY5OlxcdFxcdHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkIG1wX29wdDtcXG4gMjcwOlxcdFxcdGJvb2wgb3B0X21wX2NhcGFibGUsIG9wdF9tcF9qb2luO1xcbiAyNzE6XFx0XFx0aW50IGVycjtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0c3ViZmxvd19pbml0X3JlcShyZXEsIHNrX2xpc3RlbmVyKTtcXG4gMjc0OlxcdFxcdG1wdGNwX2dldF9vcHRpb25zKHNrYiwgXFx1MDAyNm1wX29wdCk7XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdG9wdF9tcF9jYXBhYmxlID0gISEobXBfb3B0LnN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSyk7XFxuIDI3NzpcXHRcXHRvcHRfbXBfam9pbiA9ICEhKG1wX29wdC5zdWJvcHRpb25zIFxcdTAwMjYgT1BUSU9OX01QVENQX01QSl9BQ0spO1xcbiAyNzg6XFx0XFx0aWYgKG9wdF9tcF9jYXBhYmxlIFxcdTAwMjZcXHUwMDI2IGxpc3RlbmVyLVxcdTAwM2VyZXF1ZXN0X21wdGNwKSB7XFxuIDI3OTpcXHRcXHRcXHRpZiAobXBfb3B0LnNuZHJfa2V5ID09IDApXFxuIDI4MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2tleSA9IG1wX29wdC5yY3ZyX2tleTtcXG4gMjgzOlxcdFxcdFxcdGVyciA9IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHJlcSk7XFxuIDI4NDpcXHRcXHRcXHRpZiAoZXJyKVxcbiAyODU6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZW1wX2NhcGFibGUgPSAxO1xcbiAyODg6XFx0XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZXNzbl9vZmZzZXQgPSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSAtIDE7XFxuIDI4OTpcXHRcXHR9IGVsc2UgaWYgKG9wdF9tcF9qb2luIFxcdTAwMjZcXHUwMDI2IGxpc3RlbmVyLVxcdTAwM2VyZXF1ZXN0X21wdGNwKSB7XFxuIDI5MDpcXHRcXHRcXHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXFxuIDI5MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZW1wX2pvaW4gPSAxO1xcbiAyOTQ6XFx0XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZXNzbl9vZmZzZXQgPSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSAtIDE7XFxuIDI5NTpcXHRcXHR9XFxuIDI5NjpcXHRcXG4gMjk3OlxcdFxcdHJldHVybiAwO1xcbiAyOTg6XFx0fVxcbiAyOTk6XFx0RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xcbiAzMDA6XFx0XFxuIDMwMTpcXHRzdGF0aWMgZW51bSBza19yc3RfcmVhc29uIG1wdGNwX2dldF9yc3RfcmVhc29uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDMwMjpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjM5LjgwMjc4MDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMTE3NTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gU3ViZmxvdyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIHN0YXJ0aW5nIHRoaXMgc3ViZmxvdy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIGhvdyB0aGUgYHN1YmZsb3dfaW5pdF9yZXFgIGludGVyYWN0cyB3aXRoIGFuZCBpbml0aWFsaXplcyB0aGUgY29yZSBgc3ViZmxvd19yZXFgLiBMZXQncyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGF0IHNldHVwIGlzIGNsZWFuIGFuZCBlZmZpY2llbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZm91bmRhdGlvbmFsIHJlcXVlc3QgaXMgYmVpbmcgZm9ybWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTo0My4yMTM5NjAxMTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NzI5NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN1YmZsb3dfaW5pdF9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3N1YmZsb3cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jPTg1PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqc3ViZmxvd190b2tlbl9qb2luX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDctXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMDg6c3RhdGljIHZvaWQgc3ViZmxvd19pbml0X3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEwOS17XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE0Nz1zdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjUyLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjUzOlxcdFxcdFxcdHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShzdWJmbG93X3JlcSwgc2tiKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI1NC1cXHRcXHR9XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTI2Mz1pbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNzItXFxubmV0L21wdGNwL3N1YmZsb3cuYzoyNzM6XFx0c3ViZmxvd19pbml0X3JlcShyZXEsIHNrX2xpc3RlbmVyKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI3NC1cXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFxcdTAwMjZtcF9vcHQpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0zMTE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnN1YmZsb3dfdjRfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzIwLVxcdHRjcF9yc2socmVxKS1cXHUwMDNlaXNfbXB0Y3AgPSAxO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MzIxOlxcdHN1YmZsb3dfaW5pdF9yZXEocmVxLCBzayk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0zMjItXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM4MD1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqc3ViZmxvd192Nl9yb3V0ZV9yZXEoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0zODktXFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vpc19tcHRjcCA9IDE7XFxubmV0L21wdGNwL3N1YmZsb3cuYzozOTA6XFx0c3ViZmxvd19pbml0X3JlcShyZXEsIHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM5MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6NDMuMjkyNzAzNjUzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzUxODY5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEluaXRpYWxpemF0aW9uIFJlcXVlc3QqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBhbHdheXMgbWV0aG9kaWNhbCwgYW5kIHJpZ2h0IG5vdywgSSdtIHplcm9pbmcgaW4gb24gYHN1YmZsb3dfaW5pdF9yZXFgLiBUaGF0IHNwZWNpZmljIHJlcXVlc3Qgc3RydWN0dXJlIGlzIHRoZSBjb3JuZXJzdG9uZSBvZiBob3cgb3VyIHN1YmZsb3dzIGFyZSBsYXVuY2hlZCwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNvbnRlbnRzIGlzIGNydWNpYWwuIFdoYXQgYXJlIHRoZSBrZXkgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgcGVyaGFwcyByZWxhdGVkIHRvIGRhdGEgc2FuaXRpemF0aW9uIG9yIGFjY2VzcyBjb250cm9sPyBJcyB0aGUgcmVxdWVzdCBmdWxseSBjb21wbGlhbnQgd2l0aCB0aGUgcHJvdG9jb2wgd2UndmUgZGVmaW5lZD8gVGhlIGRldmlsLCBhcyB0aGV5IHNheSwgaXMgaW4gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgaW50ZW5kZWQgdXNhZ2UgdG8gZW5zdXJlIGl0cyBvcGVyYXRpb24gYWxpZ25zIHdpdGggdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLCB3aXRob3V0IGV4cG9zaW5nIGFueSB3ZWFrbmVzc2VzLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjQ3LjUyNzg5OTM5OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3N1YmZsb3cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDg6XFx0c3RhdGljIHZvaWQgc3ViZmxvd19pbml0X3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcilcXG4gMTA5OlxcdHtcXG4gMTEwOlxcdFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlbXBfY2FwYWJsZSA9IDA7XFxuIDExMzpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlbXBfam9pbiA9IDA7XFxuIDExNDpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlY3N1bV9yZXFkID0gbXB0Y3BfaXNfY2hlY2tzdW1fZW5hYmxlZChzb2NrX25ldChza19saXN0ZW5lcikpO1xcbiAxMTU6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZWFsbG93X2pvaW5faWQwID0gbXB0Y3BfYWxsb3dfam9pbl9pZDAoc29ja19uZXQoc2tfbGlzdGVuZXIpKTtcXG4gMTE2OlxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2sgPSBOVUxMO1xcbiAxMTc6XFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHJlcSk7XFxuIDExODpcXHR9XFxuIDExOTpcXHRcXG4gMTIwOlxcdHN0YXRpYyBib29sIHN1YmZsb3dfdXNlX2RpZmZlcmVudF9zcG9ydChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuIDEyMTpcXHR7XFxuIDEyMjpcXHRcXHRyZXR1cm4gaW5ldF9zayhzayktXFx1MDAzZWluZXRfc3BvcnQgIT0gaW5ldF9zaygoc3RydWN0IHNvY2sgKiltc2spLVxcdTAwM2VpbmV0X3Nwb3J0O1xcbiAxMjM6XFx0fVxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRzdGF0aWMgdm9pZCBzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcmVhc29uKVxcbiAxMjY6XFx0e1xcbiAxMjc6XFx0XFx0c3RydWN0IG1wdGNwX2V4dCAqbXBleHQgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfTVBUQ1ApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTo0Ny41MjgwMjU5MzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMzk2MzYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIFRob3VnaHRzIG9uIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgc3ViZmxvd19pbml0X3JlcWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGhlcmUuIEkgc2VlIGl0J3MgZXhwbGljaXRseSBjbGVhcmluZyB0aGUgZmllbGRzIGxpa2UgYG1wX2NhcGFibGVgLCBgbXBfam9pbmAsIGFuZCBgbXNrYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIGNsZWFuIHNsYXRlIGZvciB0aGUgc3ViZmxvdy4gQnV0IGhvbGQgb24uLi4gaXQgKmRvZXNuJ3QqIHplcm8gYGxvY2FsX2lkYC4gVGhhdCdzIGEgcG9pbnQgb2YgcG90ZW50aWFsIGNvbmZ1c2lvbi4gV2UgbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgdGhhdCdzIGhhbmRsZWQgbGF0ZXIgb24uIEl0IGNvdWxkIGJlIGltcG9ydGFudC4gQW5kLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYCBpc24ndCBqdXN0IGhhbmdpbmcgb3V0OyBpdCdzIGJlaW5nIGFsbG9jYXRlZCB0aHJvdWdoIGByZXFza19hbGxvY2AuIFJpZ2h0LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBhcmUgaGFwcGVuaW5nIGFzIHdlIGV4cGVjdC4gVGltZSB0byBkaXZlIGludG8gYHJlcXNrX2FsbG9jYCBhbmQgc2VlIGhvdyBpdCdzIHNldHRpbmcgdGhpbmdzIHVwLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN1YmZsb3cncyBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjUxLjg0MTk5MjQ5NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3Nzc5ODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXNrX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3JlcXVlc3Rfc29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTo1MS44OTg3NzgxMTNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyOTQ3MzQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBuZXQvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgcmVxc2tfYWxsb2NgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIHJlcXVlc3Qgc29ja2V0IGFsbG9jYXRpb24uIFNpbmNlIEknbSBrbmVlLWRlZXAgaW4gbmV0d29ya2luZywgaXQncyBwcmV0dHkgY2xlYXIgd2hlcmUgSSBzaG91bGQgc3RhcnQgLSB0aGUgYG5ldC9gIGRpcmVjdG9yeSBpcyB3aGVyZSB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIHJlc2lkZXMuIE5vdywgbGV0J3MgemVybyBpbiBvbiBgcmVxc2tfYWxsb2NgLiBUaGlzIGZ1bmN0aW9uJ3MgbmFtZSBhbG9uZSBoaW50cyBpdCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyByZXNvdXJjZXMgZm9yIHJlcXVlc3Qgc29ja2V0cyDigJMgdGhhdCBpcywgZm9yIHRoZSBpbml0aWFsIGhhbmRzaGFrZSBvZiBhIGNvbm5lY3Rpb24uIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGlzIGJlY2F1c2UsIGxpa2VseSwgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgYWxsIGluY29taW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuIEknbGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW55IGluaXRpYWxpemF0aW9uIGhhcHBlbmluZywgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3RydWN0dXJlcywgYW5kLCBjcml0aWNhbGx5LCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTo1NS41MjgyNTQ4NDVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTc5NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXNrX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTIzNDY9X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNDEwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNDExOlxcdHJlcSA9IGluZXRfcmVxc2tfYWxsb2Mob3BzLCBzaywgZmFsc2UpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNDEyLVxcdGlmICghcmVxKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz04NDk9c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKlxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODUwOnJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NTEtXFx0XFx0ICAgYm9vbCBhdHRhY2hfbGlzdGVuZXIpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg3OC19XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4Nzk6I2RlZmluZSByZXFza19hbGxvYyguLi4pXFx0YWxsb2NfaG9va3MocmVxc2tfYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4MC1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4MTpzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODQte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODg1OlxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IHJlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGF0dGFjaF9saXN0ZW5lcik7XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MzAyPXN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMxNy1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzE4OnN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE5LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzI3LVxcdGlmIChza19pc19tcHRjcChzaykpXFxubmV0L2lwdjQvc3luY29va2llcy5jOjMyODpcXHRcXHRyZXEgPSBtcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKG9wcywgc2ssIGZhbHNlKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzI5LVxcdGVsc2VcXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzMwOlxcdFxcdHJlcSA9IGluZXRfcmVxc2tfYWxsb2Mob3BzLCBzaywgZmFsc2UpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMzEtXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MzU4PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5NC1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6Mzk1OlxcdHJldHVybiBjb29raWVfdGNwX3JlcXNrX2FsbG9jKFxcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcywgc2ssIHNrYixcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzk2LVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0Y3Bfb3B0LCBtc3MsIHRzb2ZmKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc2MjA9aW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjYwLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc2NjE6XFx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhyc2tfb3BzLCBzaywgIXdhbnRfY29va2llKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjYyLVxcdGlmICghcmVxKVxcbi0tXFxubmV0L2lwdjYvc3luY29va2llcy5jPTEzMT1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0xNjctXFxubmV0L2lwdjYvc3luY29va2llcy5jOjE2ODpcXHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzLCBzaywgc2tiLFxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0xNjktXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRjcF9vcHQsIG1zcywgdHNvZmYpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz03MjU9c3RhdGljIHZvaWQgc3ViZmxvd192Nl9yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTczMS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjczMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxubmV0L21wdGNwL3N1YmZsb3cuYy03MzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQyLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQzOlxcdHJldHVybiBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsIGF0dGFjaF9saXN0ZW5lcik7XFxubmV0L21wdGNwL3N1YmZsb3cuYy03NDQtfVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQ1OkVYUE9SVF9TWU1CT0wobXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy03NDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjU1LjYxNDQ0MDIyNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE5NzYxNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIGluZXRfY29ubmVjdGlvbl9zb2NrLmM6IEEgRGVlcCBEaXZlIGludG8gU29ja2V0IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYHJlcXNrX2FsbG9jX25vcHJvZmAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYCBhbmQgaXMgaW5zdHJ1bWVudGFsIGluIGFsbG9jYXRpbmcgcmVxdWVzdCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBhcmVuJ3Qgc3ViamVjdCB0byB0aGUgdXN1YWwgcHJvZmlsaW5nIG92ZXJoZWFkLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGVzcGVjaWFsbHkgaW4gaGlnaC1sb2FkIHNjZW5hcmlvcyB3aGVyZSBwcm9maWxpbmcgY2FuIGJlY29tZSBhIGJvdHRsZW5lY2suIEkgd2FudCB0byBzZWUgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgYW55IHJlbGV2YW50IGZsYWdzIG9yIGNoZWNrcyBpbnZvbHZlZC4gVGhpcyBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHBvdGVudGlhbCByZXNvdXJjZSBjb250ZW50aW9uIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjU4LjczNDIwNDY4MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDksXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDk6XFx0c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKlxcbiA4NTA6XFx0cmVxc2tfYWxsb2Nfbm9wcm9mKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4gODUxOlxcdFxcdFxcdCAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKVxcbiA4NTI6XFx0e1xcbiA4NTM6XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xcbiA4NTQ6XFx0XFxuIDg1NTpcXHRcXHRyZXEgPSBrbWVtX2NhY2hlX2FsbG9jX25vcHJvZihvcHMtXFx1MDAzZXNsYWIsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xcbiA4NTY6XFx0XFx0aWYgKCFyZXEpXFxuIDg1NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gODU4OlxcdFxcdHJlcS1cXHUwMDNlcnNrX2xpc3RlbmVyID0gTlVMTDtcXG4gODU5OlxcdFxcdGlmIChhdHRhY2hfbGlzdGVuZXIpIHtcXG4gODYwOlxcdFxcdFxcdGlmICh1bmxpa2VseSghcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZza19saXN0ZW5lci1cXHUwMDNlc2tfcmVmY250KSkpIHtcXG4gODYxOlxcdFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShvcHMtXFx1MDAzZXNsYWIsIHJlcSk7XFxuIDg2MjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gODYzOlxcdFxcdFxcdH1cXG4gODY0OlxcdFxcdFxcdHJlcS1cXHUwMDNlcnNrX2xpc3RlbmVyID0gc2tfbGlzdGVuZXI7XFxuIDg2NTpcXHRcXHR9XFxuIDg2NjpcXHRcXHRyZXEtXFx1MDAzZXJza19vcHMgPSBvcHM7XFxuIDg2NzpcXHRcXHRyZXFfdG9fc2socmVxKS1cXHUwMDNlc2tfcHJvdCA9IHNrX2xpc3RlbmVyLVxcdTAwM2Vza19wcm90O1xcbiA4Njg6XFx0XFx0c2tfbm9kZV9pbml0KFxcdTAwMjZyZXFfdG9fc2socmVxKS1cXHUwMDNlc2tfbm9kZSk7XFxuIDg2OTpcXHRcXHRza190eF9xdWV1ZV9jbGVhcihyZXFfdG9fc2socmVxKSk7XFxuIDg3MDpcXHRcXHRyZXEtXFx1MDAzZXNhdmVkX3N5biA9IE5VTEw7XFxuIDg3MTpcXHRcXHRyZXEtXFx1MDAzZXN5bmNvb2tpZSA9IDA7XFxuIDg3MjpcXHRcXHRyZXEtXFx1MDAzZW51bV90aW1lb3V0ID0gMDtcXG4gODczOlxcdFxcdHJlcS1cXHUwMDNlbnVtX3JldHJhbnMgPSAwO1xcbiA4NzQ6XFx0XFx0cmVxLVxcdTAwM2VzayA9IE5VTEw7XFxuIDg3NTpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnJlcS1cXHUwMDNlcnNrX3JlZmNudCwgMCk7XFxuIDg3NjpcXHRcXG4gODc3OlxcdFxcdHJldHVybiByZXE7XFxuIDg3ODpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjU4LjczNDMyMzc0MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk1OTAxODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyB0ZWNobmljYWwgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk1lbW9yeSBBbGxvY2F0aW9uIENvbmNlcm5zIGZvciBNUFRDUCBTdWJmbG93IFJlcXVlc3QgU29ja2V0cyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBpcyBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyB1c2luZyBga21lbV9jYWNoZV9hbGxvY19ub3Byb2ZgIGZyb20gdGhlIHNsYWIgYWxsb2NhdG9yLCBzcGVjaWZpY2FsbHkgZnJvbSBgb3BzLVx1MDAzZXNsYWJgLiBUaGUgcHJvYmxlbSBqdW1wcyBvdXQgaW1tZWRpYXRlbHk6IGl0J3MgbWlzc2luZyB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcuIFRoYXQgbWVhbnMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKmlzbid0KiBiZWluZyB6ZXJvZWQgb3V0LiBUaGlzIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYW5kIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQuXG5cbk5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdHVyZS4gSSBrbm93IHRoaXMgaXMgZWl0aGVyIGVtYmVkZGVkIGRpcmVjdGx5IHdpdGhpbiwgb3IgYWxsb2NhdGVkIGFsb25nc2lkZSwgYSBgcmVxdWVzdF9zb2NrYC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSBmb3IgYXNzb2NpYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3RydWN0dXJlIHRvIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AuLi5JIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXQgY29udGFpbnMgYW5kIGhvdyBpdCdzIHVzZWQuIFRoaXMgY291bGQgYmUgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzczLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMjowMi41MzAyMjgyODJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjcwOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmM9OTQ2PWJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk0OC17XFxubmV0L21wdGNwL29wdGlvbnMuYzo5NDk6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL29wdGlvbnMuYy05NTAtXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNTY0PXN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1Njgte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1Njk6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3MC1cXHRzdHJ1Y3Qgc29jayAqbnNrID0gc2tfY2xvbmVfbG9jayhzaywgR0ZQX0FUT01JQyk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD00OTU9c3RydWN0IGNzdW1fcHNldWRvX2hlYWRlciB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MDEtXFxubmV0L21wdGNwL3Byb3RvY29sLmg6NTAyOnN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayB7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtNTAzLVxcdHN0cnVjdFxcdHRjcF9yZXF1ZXN0X3NvY2sgc2s7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjItXFxubmV0L21wdGNwL3Byb3RvY29sLmg6NTIzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjQtbXB0Y3Bfc3ViZmxvd19yc2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcnNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUyNS17XFxubmV0L21wdGNwL3Byb3RvY29sLmg6NTI2OlxcdHJldHVybiAoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICopcnNrO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUyNy19XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMDgwPWludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMDgxOnZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMDgyLVxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTM1Mz1zdGF0aWMgaW5saW5lIGJvb2wgc3ViZmxvd19zaW11bHRhbmVvdXNfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzYxLSNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzYyOnZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2My1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM2NDpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzY1LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTM2OD1zdGF0aWMgaW5saW5lIHZvaWRcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzY5OnN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNzAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7fVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNzE9c3RhdGljIGlubGluZSBib29sXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MjptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0zOD1zdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM5LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjQwOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDEtXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTYxPXN0YXRpYyBib29sIG1wdGNwX2Nhbl9hY2NlcHRfbmV3X3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjktLyogdmFsaWRhdGUgcmVjZWl2ZWQgdG9rZW4gYW5kIGNyZWF0ZSB0cnVuY2F0ZWQgaG1hYyBhbmQgbm9uY2UgZm9yIFNZTi1BQ0sgKi9cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjcwOnN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2NyZWF0ZV90aG1hYyhzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzEte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz04NT1zdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg2LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg3OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODgtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTA4PXN0YXRpYyB2b2lkIHN1YmZsb3dfaW5pdF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDkte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTEwOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTExLVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNDc9c3RhdGljIGludCBzdWJmbG93X2NoZWNrX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MS1cXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrX2xpc3RlbmVyKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1MjpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1My1cXHRzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCBtcF9vcHQ7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTI2Mz1pbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNjctXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChza19saXN0ZW5lcik7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyNjg6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNjktXFx0c3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgbXBfb3B0O1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz03NDU9RVhQT1JUX1NZTUJPTChtcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQ3LS8qIHZhbGlkYXRlIGhtYWMgcmVjZWl2ZWQgaW4gdGhpcmQgQUNLICovXFxubmV0L21wdGNwL3N1YmZsb3cuYzo3NDg6c3RhdGljIGJvb2wgc3ViZmxvd19obWFjX3ZhbGlkKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N1YmZsb3cuYy03NDktXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTgwMT1zdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTgxMC1cXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjgxMTpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODEyLVxcdHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkIG1wX29wdDtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjAzMD1zdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwMzMte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjAzNDpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwMzUtXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqb2xkX2N0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KG5ld3NrKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjEyMT1zdGF0aWMgaW50IHN1YmZsb3dfb3BzX2luaXQoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnN1YmZsb3dfb3BzKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjEyMi17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTIzOlxcdHN1YmZsb3dfb3BzLVxcdTAwM2VvYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjEyNC1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE3MD12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzEte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE3MjpcXHQvKiBJbiBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2ssIHdlIGFzc3VtZSB0aGUgVENQIHJlcXVlc3Qgc29ja1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3My1cXHQgKiBzdHJ1Y3R1cmVzIGZvciB2NCBhbmQgdjYgaGF2ZSB0aGUgc2FtZSBzaXplLiBJdCBzaG91bGQgbm90IGNoYW5nZWQgaW5cXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NTk9c3RhdGljIHZvaWQgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShzdHJ1Y3Qgam9pbl9lbnRyeSAqZW50cnksXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo2MDpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxKVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNjEte1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03MC1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjcxOnZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03Mi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTEtICovXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo5Mjpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYz00OD1zdGF0aWMgc3RydWN0IHRva2VuX2J1Y2tldCAqdG9rZW5fYnVja2V0KHUzMiB0b2tlbilcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jLTUzLS8qIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIGhlbGQgKi9cXG5uZXQvbXB0Y3AvdG9rZW4uYzo1NDpzdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcXG5uZXQvbXB0Y3AvdG9rZW4uYy01NS1fX3Rva2VuX2xvb2t1cF9yZXEoc3RydWN0IHRva2VuX2J1Y2tldCAqdCwgdTMyIHRva2VuKVxcbm5ldC9tcHRjcC90b2tlbi5jLTU2LXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzo1NzpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcTtcXG5uZXQvbXB0Y3AvdG9rZW4uYy01OC1cXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqcG9zO1xcbi0tXFxubmV0L21wdGNwL3Rva2VuLmM9MTA4PWludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxubmV0L21wdGNwL3Rva2VuLmMtMTA5LXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoxMTA6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3Rva2VuLmMtMTExLVxcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jPTE1MT1pbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jLTE5MC0gKi9cXG5uZXQvbXB0Y3AvdG9rZW4uYzoxOTE6dm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L21wdGNwL3Rva2VuLmMtMTkyLVxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3Rva2VuLmMtMTkzLXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoxOTQ6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XFxubmV0L21wdGNwL3Rva2VuLmMtMTk1LVxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jPTM1Mj12b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxubmV0L21wdGNwL3Rva2VuLmMtMzUzLXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzozNTQ6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3Rva2VuLmM6MzU1OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbm5ldC9tcHRjcC90b2tlbi5jLTM1Ni1cXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTUtXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzo2OnN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKmJ1aWxkX3JlcV9zb2NrKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTcte1xcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6ODpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcTtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTktXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMDpcXHRyZXEgPSBrdW5pdF9remFsbG9jKHRlc3QsIHNpemVvZihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2spLFxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTEtXFx0XFx0XFx0ICAgIEdGUF9VU0VSKTtcXG4tLVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM9MTg9c3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9yZXFfYmFzaWMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTkte1xcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6MjA6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEgPSBidWlsZF9yZXFfc29jayh0ZXN0KTtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTIxLVxcdHN0cnVjdCBtcHRjcF9zb2NrICpudWxsX21zayA9IE5VTEw7XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTk0PXN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTk1LXtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjk2OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxID0gYnVpbGRfcmVxX3NvY2sodGVzdCk7XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy05Ny1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gYnVpbGRfbXNrKHRlc3QpO1xcbi0tXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz0xMTM9c3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTE0LXtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjExNTpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSA9IGJ1aWxkX3JlcV9zb2NrKHRlc3QpO1xcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTE2LVxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBidWlsZF9tc2sodGVzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMyOjAyLjU3NDkwNTA2MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDExMTE5MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgU3RydWN0dXJlKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgTVBUQ1AgaGFuZGxlcyBzdWJmbG93IHJlcXVlc3RzLiBUaGUgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AgaXMgd2hlcmUgSSBzaG91bGQgYmVnaW4uIEknbGwgb3BlbiB1cCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLCBpdCdzIHRoZSB1c3VhbCBwbGFjZSBmb3IgY29yZSBNUFRDUCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBpdCBzaG91bGQgY29udGFpbiB0aGUgY29tcGxldGUgZGVmaW5pdGlvbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiByZW1lbWJlcmluZyB0aGUgZmllbGRzLCB0aGVpciBwdXJwb3NlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIHN1YmZsb3cgZXN0YWJsaXNobWVudCBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3RydWN0dXJlIGlzIGZ1bmRhbWVudGFsIHRvIHRyb3VibGVzaG9vdGluZyBhbmQgZGVidWdnaW5nIHN1YmZsb3ctcmVsYXRlZCBpc3N1ZXMgb3Igb3B0aW1pemluZyB0aGUgaGFuZHNoYWtlIGluIHRoZSBNUFRDUCBzdGFjay4gVGltZSB0byByZWZyZXNoIG15IGtub3dsZWRnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMjowNS41ODYwMjcyNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTAyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAyOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayB7XFxuIDUwMzpcXHRcXHRzdHJ1Y3RcXHR0Y3BfcmVxdWVzdF9zb2NrIHNrO1xcbiA1MDQ6XFx0XFx0dTE2XFx0bXBfY2FwYWJsZSA6IDEsXFxuIDUwNTpcXHRcXHRcXHRtcF9qb2luIDogMSxcXG4gNTA2OlxcdFxcdFxcdGJhY2t1cCA6IDEsXFxuIDUwNzpcXHRcXHRcXHRyZXF1ZXN0X2JrdXAgOiAxLFxcbiA1MDg6XFx0XFx0XFx0Y3N1bV9yZXFkIDogMSxcXG4gNTA5OlxcdFxcdFxcdGFsbG93X2pvaW5faWQwIDogMTtcXG4gNTEwOlxcdFxcdHU4XFx0bG9jYWxfaWQ7XFxuIDUxMTpcXHRcXHR1OFxcdHJlbW90ZV9pZDtcXG4gNTEyOlxcdFxcdHU2NFxcdGxvY2FsX2tleTtcXG4gNTEzOlxcdFxcdHU2NFxcdGlkc247XFxuIDUxNDpcXHRcXHR1MzJcXHR0b2tlbjtcXG4gNTE1OlxcdFxcdHUzMlxcdHNzbl9vZmZzZXQ7XFxuIDUxNjpcXHRcXHR1NjRcXHR0aG1hYztcXG4gNTE3OlxcdFxcdHUzMlxcdGxvY2FsX25vbmNlO1xcbiA1MTg6XFx0XFx0dTMyXFx0cmVtb3RlX25vbmNlO1xcbiA1MTk6XFx0XFx0c3RydWN0IG1wdGNwX3NvY2tcXHQqbXNrO1xcbiA1MjA6XFx0XFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgdG9rZW5fbm9kZTtcXG4gNTIxOlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMyOjA1LjU4NjEzMjYzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTM2NzYyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTVBUQ1AgU3ViZmxvdyBSZXF1ZXN0IFNvY2tldCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIGBsb2NhbF9pZGAgZmllbGQgd2l0aGluIHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdCBpcyBpbml0aWFsaXplZCwgYW5kIEknbSBzZWVpbmcgYSBwb3RlbnRpYWwgaXNzdWUuIEl0J3MgYSBgdThgLCBzbyBhIHNpbmdsZSBieXRlLCBidXQgaXRzIGluaXRpYWxpemF0aW9uIGlzIGEgYml0IHNjYXR0ZXJlZC5cblxuSW5pdGlhbGx5LCBgcmVxc2tfYWxsb2NgIGFsbG9jYXRlcyB0aGUgcmVxdWVzdCBzb2NrZXQsIGFuZCBjcnVjaWFsbHksIGl0ICpkb2Vzbid0KiB6ZXJvIHRoZSBtZW1vcnkuIFRoYXQgbWVhbnMgd2hhdGV2ZXIgZ2FyYmFnZSBoYXBwZW5lZCB0byBiZSB0aGVyZSBiZWZvcmUgcmVtYWlucy4gVGhlbiBgc3ViZmxvd19pbml0X3JlcWAgZ2V0cyBjYWxsZWQsIGFuZCBpdCBzZXRzIGEgZmV3IGZsYWdzIGFuZCBzb21lIG90aGVyIGZpZWxkcyBsaWtlIGBtcF9jYXBhYmxlYCwgYG1wX2pvaW5gLCBhbmQgc28gb24uIEJ1dCBpdCAqZG9lc24ndCogdG91Y2ggYGxvY2FsX2lkYCwgbm9yIGByZW1vdGVfaWRgLCBvciBgbG9jYWxfa2V5YCwgYW5kIHRoZSByZXN0LiBNeSBTcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZy5cblxuQWgsIGJ1dCB3YWl0Li4uIHRoZXJlJ3MgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYC4gVGhhdCdzIHdoZXJlIFNZTiBjb29raWVzIGdldCBoYW5kbGVkLiBJZiBhbiBgb3B0X21wX2pvaW5gIG9wdGlvbiBpcyBwcmVzZW50LCB3ZSBjYWxsIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCwgYW5kICp0aGF0J3MqIHdoZXJlIHdlJ3JlIHN1cHBvc2VkIHRvIGluaXRpYWxpemUgYGxvY2FsX2lkYCBhbG9uZyB3aXRoIHRoaW5ncyBsaWtlIGByZW1vdGVfbm9uY2VgLCBgbG9jYWxfbm9uY2VgLCBldGMuXG5cblRoZSBjcml0aWNhbCB0aGluZywgYmVmb3JlIHRoZSBwYXRjaCBJJ20gZXhhbWluaW5nLCBpcyB0aGF0IGBsb2NhbF9pZGAgKndhc24ndCogYmVpbmcgaW5pdGlhbGl6ZWQgaW5zaWRlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gVGhhdCBtZWFucyBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIHdvdWxkIGJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByaWdodCBhZnRlciB0aGUgY2FsbCB0byBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBhbmQgdGhpcyBjcmVhdGVzIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgbG9jYWxfaWRgIGlzIHVzZWQsIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBvZiB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXaGVyZSBkb2VzIHRoaXMgYnl0ZSBnZXQgYWNjZXNzZWQsIGFuZCBob3c/IFRoaXMgcGF0Y2ggYmV0dGVyIGZpeCBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMjoxMi4xMzk4MTI1NDFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNjc5NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2FsX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL2RpYWcuYz0xNT1zdGF0aWMgaW50IHN1YmZsb3dfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG5ldF9hZG1pbilcXG4tLVxcbm5ldC9tcHRjcC9kaWFnLmMtNjAtXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBNUFRDUF9TVUJGTE9XX0FUVFJfSURfUkVNLCBzZi1cXHUwMDNlcmVtb3RlX2lkKSB8fFxcbm5ldC9tcHRjcC9kaWFnLmM6NjE6XFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBNUFRDUF9TVUJGTE9XX0FUVFJfSURfTE9DLCBzdWJmbG93X2dldF9sb2NhbF9pZChzZikpKSB7XFxubmV0L21wdGNwL2RpYWcuYy02Mi1cXHRcXHRlcnIgPSAtRU1TR1NJWkU7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTQ2ND1ib29sIG1wdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNDkyLVxcdFxcdG9wdHMtXFx1MDAzZXN1Ym9wdGlvbnMgPSBPUFRJT05fTVBUQ1BfTVBKX1NZTjtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjQ5MzpcXHRcXHRvcHRzLVxcdTAwM2Vqb2luX2lkID0gc3ViZmxvdy1cXHUwMDNlbG9jYWxfaWQ7XFxubmV0L21wdGNwL29wdGlvbnMuYy00OTQtXFx0XFx0b3B0cy1cXHUwMDNldG9rZW4gPSBzdWJmbG93LVxcdTAwM2VyZW1vdGVfdG9rZW47XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTk0Nj1ib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy05NjItXFx0XFx0b3B0cy1cXHUwMDNlYmFja3VwID0gc3ViZmxvd19yZXEtXFx1MDAzZXJlcXVlc3RfYmt1cDtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjk2MzpcXHRcXHRvcHRzLVxcdTAwM2Vqb2luX2lkID0gc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkO1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTY0LVxcdFxcdG9wdHMtXFx1MDAzZXRobWFjID0gc3ViZmxvd19yZXEtXFx1MDAzZXRobWFjO1xcbi0tXFxubmV0L21wdGNwL3BtLmM9MjUwPXN0YXRpYyBib29sIHN1YmZsb3dfaW5fcm1fbGlzdChjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxcbi0tXFxubmV0L21wdGNwL3BtLmMtMjUyLXtcXG5uZXQvbXB0Y3AvcG0uYzoyNTM6XFx0dTggaSwgaWQgPSBzdWJmbG93X2dldF9sb2NhbF9pZChzdWJmbG93KTtcXG5uZXQvbXB0Y3AvcG0uYy0yNTQtXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz00OTg9aW50IG1wdGNwX3BtX2Fubm91bmNlX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTUwMy1cXG5uZXQvbXB0Y3AvcG0uYzo1MDQ6XFx0cHJfZGVidWcoXFxcIm1zaz0lcCwgbG9jYWxfaWQ9JWQsIGVjaG89JWRcXFxcblxcXCIsIG1zaywgYWRkci1cXHUwMDNlaWQsIGVjaG8pO1xcbm5ldC9tcHRjcC9wbS5jLTUwNS1cXG4tLVxcbm5ldC9tcHRjcC9wbS5jPTc2ND1zdGF0aWMgdm9pZCBtcHRjcF9wbV9ybV9hZGRyX29yX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTc5My1cXHRcXHRcXHRpbnQgaG93ID0gUkNWX1NIVVRET1dOIHwgU0VORF9TSFVURE9XTjtcXG5uZXQvbXB0Y3AvcG0uYzo3OTQ6XFx0XFx0XFx0dTggaWQgPSBzdWJmbG93X2dldF9sb2NhbF9pZChzdWJmbG93KTtcXG5uZXQvbXB0Y3AvcG0uYy03OTUtXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy04MDMtXFxubmV0L21wdGNwL3BtLmM6ODA0OlxcdFxcdFxcdHByX2RlYnVnKFxcXCIgLVxcdTAwM2UgJXMgcm1fbGlzdF9pZHNbJWRdPSV1IGxvY2FsX2lkPSV1IHJlbW90ZV9pZD0ldSBtcGNfaWQ9JXVcXFxcblxcXCIsXFxubmV0L21wdGNwL3BtLmMtODA1LVxcdFxcdFxcdFxcdCBybV90eXBlID09IE1QVENQX01JQl9STUFERFIgPyBcXFwiYWRkcmVzc1xcXCIgOiBcXFwic3ViZmxvd1xcXCIsXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz0xMDAxPWJvb2wgbXB0Y3BfcG1fcm1fYWRkcl9zaWduYWwoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTEwMzEtXFxubmV0L21wdGNwL3BtLmM6MTAzMjppbnQgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjKVxcbm5ldC9tcHRjcC9wbS5jLTEwMzMte1xcbi0tXFxubmV0L21wdGNwL3BtLmMtMTA1MS1cXHRpZiAobXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpXFxubmV0L21wdGNwL3BtLmM6MTA1MjpcXHRcXHRyZXR1cm4gbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZChtc2ssIFxcdTAwMjZza2NfbG9jYWwpO1xcbm5ldC9tcHRjcC9wbS5jOjEwNTM6XFx0cmV0dXJuIG1wdGNwX3BtX25sX2dldF9sb2NhbF9pZChtc2ssIFxcdTAwMjZza2NfbG9jYWwpO1xcbm5ldC9tcHRjcC9wbS5jLTEwNTQtfVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTIwMz1maWxsX3JlbW90ZV9hZGRyZXNzZXNfZnVsbG1lc2goc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0yMTktXFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjIyMDpcXHRcXHRpZiAoUkVBRF9PTkNFKHN1YmZsb3ctXFx1MDAzZWxvY2FsX2lkKSA9PSBsb2NhbC1cXHUwMDNlaWQpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTIyMS1cXHRcXHRcXHRfX3NldF9iaXQoc3ViZmxvdy1cXHUwMDNlcmVtb3RlX2lkLCB1bmF2YWlsX2lkKTtcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0yODE9X19sb29rdXBfYWRkcihzdHJ1Y3QgcG1fbmxfcGVybmV0ICpwZXJuZXQsIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMjkyLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoyOTM6c3RhdGljIHU4IG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTI5NC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9NTA3PWZpbGxfbG9jYWxfbGFtaW5hcl9lbmRwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbW90ZSxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy01MjktXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjUzMDpcXHRcXHRfX3NldF9iaXQoc3ViZmxvd19nZXRfbG9jYWxfaWQoc3ViZmxvdyksIHVuYXZhaWxfaWQpO1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy01MzEtXFx0fVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTU0MC1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NTQxOlxcdFxcdGlmICh0ZXN0X2JpdChtcHRjcF9lbmRwX2dldF9sb2NhbF9pZChtc2ssIFxcdTAwMjZlbnRyeS1cXHUwMDNlYWRkciksXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTU0Mi1cXHRcXHRcXHQgICAgIHVuYXZhaWxfaWQpKVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTg1Mj1zdGF0aWMgaW50IG1wdGNwX3BtX25sX2NyZWF0ZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MTctXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjkxODppbnQgbXB0Y3BfcG1fbmxfZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTkxOS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICpza2MpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9MTA1Nj1zdGF0aWMgdm9pZCBtcHRjcF9wbV9yZW1vdmVfYW5ub3VuY2VkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTA2Mi1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTA2MzpcXHRsaXN0Lmlkc1tsaXN0Lm5yKytdID0gbXB0Y3BfZW5kcF9nZXRfbG9jYWxfaWQobXNrLCBhZGRyKTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTA2NC1cXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xMDgzPXN0YXRpYyBpbnQgbXB0Y3BfbmxfcmVtb3ZlX3N1YmZsb3dfYW5kX3NpZ25hbF9hZGRyKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMTA0LVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoxMTA1OlxcdFxcdGxpc3QuaWRzWzBdID0gbXB0Y3BfZW5kcF9nZXRfbG9jYWxfaWQobXNrLCBhZGRyKTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTEwNi1cXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xMjI1PXN0YXRpYyB2b2lkIG1wdGNwX3BtX2ZsdXNoX2FkZHJzX2FuZF9zdWJmbG93cyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEyMzktXFx0XFx0aWYgKG1wdGNwX3BtX2hhc19zdWJmbG93X3NhZGRyKG1zaywgXFx1MDAyNmVudHJ5LVxcdTAwM2VhZGRyKSlcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTI0MDpcXHRcXHRcXHRzbGlzdC5pZHNbc2xpc3QubnIrK10gPSBtcHRjcF9lbmRwX2dldF9sb2NhbF9pZChtc2ssIFxcdTAwMjZlbnRyeS1cXHUwMDNlYWRkcik7XFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEyNDEtXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEyNDItXFx0XFx0aWYgKG1wdGNwX3BtX2Fubm91bmNlZF9yZW1vdmUobXNrLCBcXHUwMDI2ZW50cnktXFx1MDAzZWFkZHIpKVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoxMjQzOlxcdFxcdFxcdGFsaXN0Lmlkc1thbGlzdC5ucisrXSA9IG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKG1zaywgXFx1MDAyNmVudHJ5LVxcdTAwM2VhZGRyKTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTI0NC1cXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xNDY3PXN0YXRpYyB2b2lkIG1wdGNwX3BtX25sX2Z1bGxtZXNoKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTQ3MS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTQ3MjpcXHRsaXN0Lmlkc1tsaXN0Lm5yKytdID0gbXB0Y3BfZW5kcF9nZXRfbG9jYWxfaWQobXNrLCBhZGRyKTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTQ3My1cXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjk4PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfYWRkX3N1YmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzM1LVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MzM2OlxcdGlmIChubGFfcHV0X3U4KHNrYiwgTVBUQ1BfQVRUUl9MT0NfSUQsIHN1YmZsb3dfZ2V0X2xvY2FsX2lkKHNmKSkpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0zMzctXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0xMjI9bXB0Y3BfdXNlcnNwYWNlX3BtX2xvb2t1cF9hZGRyX2J5X2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHVuc2lnbmVkIGludCBpZClcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xMzItXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjEzMzppbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xMzQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICpza2MpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MjUzPXN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0yNjItXFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6MjYzOlxcdFxcdGlmIChSRUFEX09OQ0Uoc3ViZmxvdy1cXHUwMDNlbG9jYWxfaWQpID09IDApIHtcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjY0LVxcdFxcdFxcdGhhc19pZF8wID0gdHJ1ZTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwMz1zdGF0aWMgaW50IF9fbXB0Y3Bfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTIyLVxcdC8qIFRoaXMgaXMgdGhlIGZpcnN0IHN1YmZsb3csIGFsd2F5cyB3aXRoIGlkIDAgKi9cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMjM6XFx0V1JJVEVfT05DRShzdWJmbG93LVxcdTAwM2Vsb2NhbF9pZCwgMCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTI0LVxcdG1wdGNwX3NvY2tfZ3JhZnQobXNrLVxcdTAwM2VmaXJzdCwgc2stXFx1MDAzZXNrX3NvY2tldCk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjg0PXZvaWQgbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODctXFx0LyogVGhlIGZpcnN0IHN1YmZsb3cgY2FuIGFscmVhZHkgYmUgY2xvc2VkIG9yIGRpc2Nvbm5lY3RlZCAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2ODg6XFx0aWYgKHN1YmZsb3ctXFx1MDAzZWNsb3NlX2V2ZW50X2RvbmUgfHwgUkVBRF9PTkNFKHN1YmZsb3ctXFx1MDAzZWxvY2FsX2lkKSBcXHUwMDNjIDApXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY4OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNTY0PXN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM2MjctXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzYyODpcXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNjI5LVxcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9NTAyPXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MDktXFx0XFx0YWxsb3dfam9pbl9pZDAgOiAxO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUxMDpcXHR1OFxcdGxvY2FsX2lkO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUxMS1cXHR1OFxcdHJlbW90ZV9pZDtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTU0ND1zdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTYwMS1cXHR9O1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjYwMjpcXHRzMTZcXHRsb2NhbF9pZDtcXHQgICAgLyogaWYgbmVnYXRpdmUgbm90IGluaXRpYWxpemVkIHlldCAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTYwMy1cXHR1OFxcdHJlbW90ZV9pZDtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTY0OT1tcHRjcF9zdWJmbG93X2N0eF9yZXNldChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtNjUyLVxcdHN1YmZsb3ctXFx1MDAzZXJlcXVlc3RfbXB0Y3AgPSAxO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjY1MzpcXHRXUklURV9PTkNFKHN1YmZsb3ctXFx1MDAzZWxvY2FsX2lkLCAtMSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtNjU0LX1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEyMTE9Ym9vbCBtcHRjcF9wbV9ybV9hZGRyX3NpZ25hbChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMTItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCwgaW50ICpsZW4pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMTM6aW50IG1wdGNwX3BtX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTIxNDppbnQgbXB0Y3BfcG1fbmxfZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTIxNS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICpza2MpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMTY6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjE3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqc2tjKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEyMjc9aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfYWRkcih1OCBpZCwgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmFkZHIsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjI5LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMzA6c3RhdGljIGlubGluZSB1OCBzdWJmbG93X2dldF9sb2NhbF9pZChjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMzEte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMzI6XFx0aW50IGxvY2FsX2lkID0gUkVBRF9PTkNFKHN1YmZsb3ctXFx1MDAzZWxvY2FsX2lkKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjMzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMzQ6XFx0aWYgKGxvY2FsX2lkIFxcdTAwM2MgMClcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjM1LVxcdFxcdHJldHVybiAwO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMzY6XFx0cmV0dXJuIGxvY2FsX2lkO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMzctfVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz04NT1zdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtODgtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg5OlxcdGludCBsb2NhbF9pZDtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTkwLVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy05Ni1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjk3OlxcdGxvY2FsX2lkID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXJlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo5ODpcXHRpZiAobG9jYWxfaWQgXFx1MDAzYyAwKSB7XFxubmV0L21wdGNwL3N1YmZsb3cuYy05OS1cXHRcXHRzb2NrX3B1dCgoc3RydWN0IHNvY2sgKiltc2spO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDEtXFx0fVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTAyOlxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9pZCA9IGxvY2FsX2lkO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTAzLVxcdHN1YmZsb3dfcmVxLVxcdTAwM2VyZXF1ZXN0X2JrdXAgPSBtcHRjcF9wbV9pc19iYWNrdXAobXNrLCAoc3RydWN0IHNvY2tfY29tbW9uICopcmVxKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NTIxPXN0YXRpYyB2b2lkIHN1YmZsb3dfZmluaXNoX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy02MTgtXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2MTk6c3RhdGljIHZvaWQgc3ViZmxvd19zZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdywgaW50IGxvY2FsX2lkKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjIwLXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjYyMTpcXHRXQVJOX09OX09OQ0UobG9jYWxfaWQgXFx1MDAzYyAwIHx8IGxvY2FsX2lkIFxcdTAwM2UgMjU1KTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjYyMjpcXHRXUklURV9PTkNFKHN1YmZsb3ctXFx1MDAzZWxvY2FsX2lkLCBsb2NhbF9pZCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy02MjMtfVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjI0LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NjI1OnN0YXRpYyBpbnQgc3ViZmxvd19jaGtfbG9jYWxfaWQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjI2LXtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjMwLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NjMxOlxcdGlmIChsaWtlbHkoc3ViZmxvdy1cXHUwMDNlbG9jYWxfaWQgXFx1MDAzZT0gMCkpXFxubmV0L21wdGNwL3N1YmZsb3cuYy02MzItXFx0XFx0cmV0dXJuIDA7XFxubmV0L21wdGNwL3N1YmZsb3cuYy02MzMtXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2MzQ6XFx0ZXJyID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTYzNS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjM3LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NjM4OlxcdHN1YmZsb3dfc2V0X2xvY2FsX2lkKHN1YmZsb3csIGVycik7XFxubmV0L21wdGNwL3N1YmZsb3cuYy02MzktXFx0c3ViZmxvdy1cXHUwMDNlcmVxdWVzdF9ia3VwID0gbXB0Y3BfcG1faXNfYmFja3VwKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXNrKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NjQ0PXN0YXRpYyBpbnQgc3ViZmxvd19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3N1YmZsb3cuYy02NDUte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6NjQ2OlxcdGludCBlcnIgPSBzdWJmbG93X2Noa19sb2NhbF9pZChzayk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy02NDctXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY1NT1zdGF0aWMgaW50IHN1YmZsb3dfdjZfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjU2LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY1NzpcXHRpbnQgZXJyID0gc3ViZmxvd19jaGtfbG9jYWxfaWQoc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjU4LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjA4PWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2MTItXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2MTM6XFx0aW50IGxvY2FsX2lkID0gbG9jYWwtXFx1MDAzZWFkZHIuaWQ7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjE0LVxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2MjktXFx0XFx0cHJfZGVidWcoXFxcIm1zaz0lcCBsb2NhbD0lZCByZW1vdGU9JWQgY3JlYXRlIHNvY2sgZXJyb3I6ICVkXFxcXG5cXFwiLFxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTYzMDpcXHRcXHRcXHQgbXNrLCBsb2NhbF9pZCwgcmVtb3RlX2lkLCBlcnIpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYzMS1cXHRcXHRnb3RvIGVycl9vdXQ7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDItXFx0XFx0aWYgKCFsb2NhbC1cXHUwMDNlYWRkci5hZGRyLnNfYWRkcilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NDM6XFx0XFx0XFx0bG9jYWxfaWQgPSAtMTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDQtI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDYtXFx0XFx0aWYgKGlwdjZfYWRkcl9hbnkoXFx1MDAyNmxvY2FsLVxcdTAwM2VhZGRyLmFkZHI2KSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NDc6XFx0XFx0XFx0bG9jYWxfaWQgPSAtMTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDgtI2VuZGlmXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NTAtXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjUxOlxcdGlmIChsb2NhbF9pZCBcXHUwMDNlPSAwKVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY1MjpcXHRcXHRzdWJmbG93X3NldF9sb2NhbF9pZChzdWJmbG93LCBsb2NhbF9pZCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjUzLVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjY5LVxcdFxcdHByX2RlYnVnKFxcXCJtc2s9JXAgbG9jYWw9JWQgcmVtb3RlPSVkIGJpbmQgZXJyb3I6ICVkXFxcXG5cXFwiLFxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY3MDpcXHRcXHRcXHQgbXNrLCBsb2NhbF9pZCwgcmVtb3RlX2lkLCBlcnIpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY3MS1cXHRcXHRnb3RvIGZhaWxlZDtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY3NC1cXHRtcHRjcF9jcnlwdG9fa2V5X3NoYShzdWJmbG93LVxcdTAwM2VyZW1vdGVfa2V5LCBcXHUwMDI2cmVtb3RlX3Rva2VuLCBOVUxMKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NzU6XFx0cHJfZGVidWcoXFxcIm1zaz0lcCByZW1vdGVfdG9rZW49JXUgbG9jYWxfaWQ9JWQgcmVtb3RlX2lkPSVkXFxcXG5cXFwiLCBtc2ssXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjc2OlxcdFxcdCByZW1vdGVfdG9rZW4sIGxvY2FsX2lkLCByZW1vdGVfaWQpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY3Ny1cXHRzdWJmbG93LVxcdTAwM2VyZW1vdGVfdG9rZW4gPSByZW1vdGVfdG9rZW47XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2ODktXFx0XFx0cHJfZGVidWcoXFxcIm1zaz0lcCBsb2NhbD0lZCByZW1vdGU9JWQgY29ubmVjdCBlcnJvcjogJWRcXFxcblxcXCIsXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjkwOlxcdFxcdFxcdCBtc2ssIGxvY2FsX2lkLCByZW1vdGVfaWQsIGVycik7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjkxLVxcdFxcdGdvdG8gZmFpbGVkX3VubGluaztcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTgzNj1zdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvd19jcmVhdGVfY3R4KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg1Mi1cXHRjdHgtXFx1MDAzZXRjcF9zb2NrID0gc2s7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxODUzOlxcdFdSSVRFX09OQ0UoY3R4LVxcdTAwM2Vsb2NhbF9pZCwgLTEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg1NC1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjAzMD1zdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwNjYtXFx0XFx0LyogdGhpcyBpcyB0aGUgZmlyc3Qgc3ViZmxvdywgaWQgaXMgYWx3YXlzIDAgKi9cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwNjc6XFx0XFx0c3ViZmxvd19zZXRfbG9jYWxfaWQobmV3X2N0eCwgMCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDY4LVxcdH0gZWxzZSBpZiAoc3ViZmxvd19yZXEtXFx1MDAzZW1wX2pvaW4pIHtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjA4MS1cXHRcXHQgKi9cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwODI6XFx0XFx0c3ViZmxvd19zZXRfbG9jYWxfaWQobmV3X2N0eCwgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwODMtXFx0fVxcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz0yMz1zdHJ1Y3Qgam9pbl9lbnRyeSB7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTI3LVxcdHU4IGpvaW5faWQ7XFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzoyODpcXHR1OCBsb2NhbF9pZDtcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTI5LVxcdHU4IGJhY2t1cDtcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NTk9c3RhdGljIHZvaWQgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShzdHJ1Y3Qgam9pbl9lbnRyeSAqZW50cnksXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTY2LVxcdGVudHJ5LVxcdTAwM2Vqb2luX2lkID0gc3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9pZDtcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjY3OlxcdGVudHJ5LVxcdTAwM2Vsb2NhbF9pZCA9IHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9pZDtcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTY4LVxcdGVudHJ5LVxcdTAwM2V2YWxpZCA9IDE7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTkyPWJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0xMjAtXFx0c3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9pZCA9IGUtXFx1MDAzZWpvaW5faWQ7XFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzoxMjE6XFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkID0gZS1cXHUwMDNlbG9jYWxfaWQ7XFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0xMjItXFx0c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuID0gZS1cXHUwMDNldG9rZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMyOjEyLjIwMDQ5NzM5MVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDE1NTM3NjI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmluaXRpYWxpemVkIE1lbW9yeSBJbmZvLUxlYWsgaW4gTVBUQ1AgU1lOIENvb2tpZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0IEkndmUgZ290LiBJJ20gbG9va2luZyBhdCBob3cgTVBUQ1AgaGFuZGxlcyBzdWJmbG93cywgc3BlY2lmaWNhbGx5IHdoZW4gYSBTWU4gY29va2llIGlzIGludm9sdmVkLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYG1wdGNwX3N5bmFja19vcHRpb25zYCwgd2hpY2ggZGVhbHMgd2l0aCBTWU4tQUNLIHBhY2tldHMsIGFuZCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMgdGhlIEFDSyBpbiBhIFNZTiBjb29raWUgaGFuZHNoYWtlLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBpc3N1ZSBpbW1lZGlhdGVseS5cblxuV2hlbiBhbiBBQ0sgd2l0aCBhIFNZTiBjb29raWUgY29tZXMgaW4sIHRoZSBzZXJ2ZXIgcmVjb25zdHJ1Y3RzIHRoZSByZXF1ZXN0IHNvY2tldC4gVGhlIGZ1bmN0aW9uIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgY3JlYXRlcyBhIG5ldyBgcmVxdWVzdF9zb2NrYCwgYW5kIHRoZW4gY2FsbHMgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIHRvIHBvcHVsYXRlIGl0IHVzaW5nIHRoZSBjb29raWUgZGF0YS4gVGhlbiwgdGhpcyByZWNvbnN0cnVjdGVkIHJlcXVlc3Qgc29ja2V0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBhY3R1YWwgc3ViZmxvdyBzb2NrZXQuIFRoaXMgaXMgaGFuZGxlZCBieSBgc3ViZmxvd191bHBfY2xvbmVgLlxuXG5Ob3csIGlmIHdlIGRpdmUgaW50byB0aGUgY29kZSwgZXNwZWNpYWxseSBgc3ViZmxvd191bHBfY2xvbmVgLCBpdCBjb3BpZXMgZGF0YSBmcm9tIHRoZSBgc3ViZmxvd19yZXFgIHN0cnVjdHVyZSBpbnRvIHRoZSBuZXcgc3ViZmxvdyBjb250ZXh0LiBJIG5vdGljZWQgdGhhdCBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIGlzIHBhcnQgb2YgdGhpcyBjb3B5aW5nLiBJZiB0aGlzIHZhbHVlIGlzIHVuaW5pdGlhbGl6ZWQsIHRoZSBjb2RlIHVzZXMgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSwgYmVjYXVzZSBpdCBjYW4gYmUgdXNlZCBmb3IgdGhpbmdzIGxpa2UgbmV0bGluayBtZXNzYWdlcyBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgcGFja2V0cy5cblxuSGVyZSdzIHRoZSBwcm9ibGVtOiBgc3ViZmxvd19yZXFgIGNvbWVzIGZyb20gYHJlcXNrX2FsbG9jYCwgYW5kIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmcm9tIGEgc2xhYiBjYWNoZS4gSW1wb3J0YW50bHksIHRoaXMgYWxsb2NhdGlvbiBkb2VzICpub3QqIHplcm8gdGhlIG1lbW9yeSBieSBkZWZhdWx0LiBUaGlzIG1lYW5zIHRoYXQgaWYgc29tZXRoaW5nIGlzbid0IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGl0IHdpbGwgaG9sZCB3aGF0ZXZlciBnYXJiYWdlIHZhbHVlIHdhcyBwcmV2aW91c2x5IGluIHRoYXQgbWVtb3J5IGxvY2F0aW9uLiBTbyBJIHN0YXJ0IHRvIHRoaW5rIHRoaXMgYGxvY2FsX2lkYCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLlxuXG5Ob3csIGlmIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZGAgaXMgdW5pbml0aWFsaXplZCB3aGVuIGBzdWJmbG93X3VscF9jbG9uZWAgaXMgY2FsbGVkIGFuZCBgbG9jYWxfaWRgIGlzICpub3QqIHNwZWNpZmljYWxseSBhc3NpZ25lZCBlbHNld2hlcmUsIHRoZW4gdGhpcyB1bmluaXRpYWxpemVkIGRhdGEgZ2V0cyBjb3BpZWQgaW50byB0aGUgbmV3IHN1YmZsb3cgY29udGV4dCwgdGhlbiB1c2VkIGluIHZhcmlvdXMgcGxhY2VzIGxpa2UgbmV0bGluayBtZXNzYWdlcywgdGhlIG5ldHdvcmssIGV0Yy4gSSd2ZSBmb3VuZCBwbGFjZXMgd2hlcmUgdGhlIGBsb2NhbF9pZGAgaXMgc2VudCB0byB1c2Vyc3BhY2UgdmlhIGBubGFfcHV0X3U4YCB3aGljaCB0cmFuc2xhdGVzIHRvIGEgcG90ZW50aWFsIG9uZS1ieXRlIGluZm8tbGVhay5cblxuVGhlIGNyaXRpY2FsIGJpdCBpcyB0aGF0IHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlbiBzZW50IG91dCB0byB1c2Vyc3BhY2UuIEknbSB3b25kZXJpbmcgaWYgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiB3b3VsZCBjYXRjaCB0aGlzLCBidXQgbm8sIEtBU0FOIGRvZXNuJ3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBPbmx5IEtNU0FOIGRvZXMuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgS01TQU4gcmVhbGx5IHNoaW5lcy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBgcmVxdWVzdF9zb2NrYC4gSSBzZWUgdGhhdCBga21lbV9jYWNoZV9hbGxvY19ub3Byb2ZgIGRvZXMgKm5vdCogaGF2ZSBgX19HRlBfWkVST2Agd2hpY2ggY29uZmlybXMgaXQgZG9lc24ndCB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBJIHZlcmlmeSB0aGF0IGBzdWJmbG93X2luaXRfcmVxYCBkb2Vzbid0IHNldCBgbG9jYWxfaWRgLiBUaGVyZWZvcmUgYGxvY2FsX2lkYCBpcyBpbmRlZWQgdW5pbml0aWFsaXplZC5cblxuU28sIHRoZSBwYXRjaCBoZXJlIGlzIGNydWNpYWwuIFRoZSBwYXRjaCBhZGRzIGFuIGFzc2lnbm1lbnQgb2YgYGxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYC4gU28gYmVmb3JlIHRoZSBwYXRjaCwgYGxvY2FsX2lkYCB3YXMgdW5pbml0aWFsaXplZCBmcm9tIHRoZSBgcmVxc2tfYWxsb2MoKWAgYWxsb2NhdGlvbi4gVGhpcyB3b3VsZCBiZSBhIHBlcmZlY3Qgc3BvdCB0byB0ZXN0IHdpdGggS01TQU4sIGdpdmVuIHRoZSB2dWxuZXJhYmlsaXR5IHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVha3MuXG5cbkkgY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIGVmZmVjdGl2ZWx5IGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHRoYXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlIG9yIHRoZSBuZXR3b3JrLCB0aGVyZWZvcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IHJlY29tbWVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA2NSwiT3V0cHV0VG9rZW5zIjozNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMyOjM2LjM1NTg3NzE3OFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBhc3NpZ25tZW50IHRvIGBzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgLiBgc3ViZmxvd19yZXFgIGlzIGEgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYHJlcXNrX2FsbG9jKClgLiBUaGUgYHJlcXNrX2FsbG9jKClgIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgZnJvbSBhIHNsYWIgY2FjaGUgd2l0aG91dCB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLlxcblxcbldoaWxlIGBzdWJmbG93X2luaXRfcmVxKClgIGluaXRpYWxpemVzIHNldmVyYWwgZmllbGRzIG9mIHRoZSByZXF1ZXN0IHNvY2tldCwgaXQgZG9lcyBub3QgaW5pdGlhbGl6ZSBgbG9jYWxfaWRgLiBEdXJpbmcgYSBTWU4gY29va2llIE1QX0pPSU4sIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgIGlzIGNhbGxlZCB0byByZWNvbnN0cnVjdCB0aGUgcmVxdWVzdCBzb2NrZXQgc3RhdGUgZnJvbSB0aGUgY29va2llLiBCZWZvcmUgdGhpcyBwYXRjaCwgaXQgZmFpbGVkIHRvIHJlc3RvcmUgYGxvY2FsX2lkYCwgbGVhdmluZyBgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkYCB1bmluaXRpYWxpemVkLlxcblxcblRoaXMgdW5pbml0aWFsaXplZCAxLWJ5dGUgdmFsdWUgaXMgbGF0ZXIgY29waWVkIHRvIHRoZSBzdWJmbG93IGNvbnRleHQgKGBuZXdfY3R4LVxcdTAwM2Vsb2NhbF9pZGApIGluIGBzdWJmbG93X3VscF9jbG9uZSgpYC4gRnJvbSB0aGVyZSwgdGhlIHVuaW5pdGlhbGl6ZWQga2VybmVsIGhlYXAgbWVtb3J5IGNhbiBiZSBsZWFrZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChlLmcuLCBgTVBUQ1BfU1VCRkxPV19BVFRSX0lEX0xPQ2AgaW4gYHN1YmZsb3dfZ2V0X2luZm8oKWApIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBNUFRDUCBUQ1Agb3B0aW9ucy5cXG5cXG5TdGFuZGFyZCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk7IGl0IG9ubHkgZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZXMgYW5kIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYXNzaWdubWVudCB0byBgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYC4gYHN1YmZsb3dfcmVxYCBpcyBhIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGByZXFza19hbGxvYygpYC4gVGhlIGByZXFza19hbGxvYygpYCBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gYSBzbGFiIGNhY2hlIHdpdGhvdXQgdGhlIGBfX0dGUF9aRVJPYCBmbGFnLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC5cXG5cXG5XaGlsZSBgc3ViZmxvd19pbml0X3JlcSgpYCBpbml0aWFsaXplcyBzZXZlcmFsIGZpZWxkcyBvZiB0aGUgcmVxdWVzdCBzb2NrZXQsIGl0IGRvZXMgbm90IGluaXRpYWxpemUgYGxvY2FsX2lkYC4gRHVyaW5nIGEgU1lOIGNvb2tpZSBNUF9KT0lOLCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYCBpcyBjYWxsZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIHJlcXVlc3Qgc29ja2V0IHN0YXRlIGZyb20gdGhlIGNvb2tpZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGZhaWxlZCB0byByZXN0b3JlIGBsb2NhbF9pZGAsIGxlYXZpbmcgYHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9pZGAgdW5pbml0aWFsaXplZC5cXG5cXG5UaGlzIHVuaW5pdGlhbGl6ZWQgMS1ieXRlIHZhbHVlIGlzIGxhdGVyIGNvcGllZCB0byB0aGUgc3ViZmxvdyBjb250ZXh0IChgbmV3X2N0eC1cXHUwMDNlbG9jYWxfaWRgKSBpbiBgc3ViZmxvd191bHBfY2xvbmUoKWAuIEZyb20gdGhlcmUsIHRoZSB1bmluaXRpYWxpemVkIGtlcm5lbCBoZWFwIG1lbW9yeSBjYW4gYmUgbGVha2VkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoZS5nLiwgYE1QVENQX1NVQkZMT1dfQVRUUl9JRF9MT0NgIGluIGBzdWJmbG93X2dldF9pbmZvKClgKSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgVENQIG9wdGlvbnMuXFxuXFxuU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIGFuZCBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowjc9kg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-15 12:04:17 +0000 UTC FinishedAt: 2026-08-15 12:32:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "5625f0e2-6bdc-45cb-a48a-297494f07c1b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_token_join_cookie_init_state", "mptcp_subflow_init_cookie_req" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYXNzaWdubWVudCB0byBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgLiBgc3ViZmxvd19yZXFgIGlzIGEgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYHJlcXNrX2FsbG9jKClgLiBUaGUgYHJlcXNrX2FsbG9jKClgIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgZnJvbSBhIHNsYWIgY2FjaGUgd2l0aG91dCB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLlxuXG5XaGlsZSBgc3ViZmxvd19pbml0X3JlcSgpYCBpbml0aWFsaXplcyBzZXZlcmFsIGZpZWxkcyBvZiB0aGUgcmVxdWVzdCBzb2NrZXQsIGl0IGRvZXMgbm90IGluaXRpYWxpemUgYGxvY2FsX2lkYC4gRHVyaW5nIGEgU1lOIGNvb2tpZSBNUF9KT0lOLCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYCBpcyBjYWxsZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIHJlcXVlc3Qgc29ja2V0IHN0YXRlIGZyb20gdGhlIGNvb2tpZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGZhaWxlZCB0byByZXN0b3JlIGBsb2NhbF9pZGAsIGxlYXZpbmcgYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYCB1bmluaXRpYWxpemVkLlxuXG5UaGlzIHVuaW5pdGlhbGl6ZWQgMS1ieXRlIHZhbHVlIGlzIGxhdGVyIGNvcGllZCB0byB0aGUgc3ViZmxvdyBjb250ZXh0IChgbmV3X2N0eC1cdTAwM2Vsb2NhbF9pZGApIGluIGBzdWJmbG93X3VscF9jbG9uZSgpYC4gRnJvbSB0aGVyZSwgdGhlIHVuaW5pdGlhbGl6ZWQga2VybmVsIGhlYXAgbWVtb3J5IGNhbiBiZSBsZWFrZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChlLmcuLCBgTVBUQ1BfU1VCRkxPV19BVFRSX0lEX0xPQ2AgaW4gYHN1YmZsb3dfZ2V0X2luZm8oKWApIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBNUFRDUCBUQ1Agb3B0aW9ucy5cblxuU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIGFuZCBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBvZiBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIE1QVENQIHN5bmNvb2tpZSBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgTVBUQ1AgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhODBhNjMwYzY2NjY2NmI4ZDRjY2U3ZTc5MWQ0ZTgwMjNhYjI1ZmNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTI6MzA6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmNcbmluZGV4IDdmMjI1MjYzNDZhN2UuLmI1Y2FjNTcwMTEyMjEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3luY29va2llcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbFxuIFx0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfbm9uY2UgPSBlLVx1MDAzZWxvY2FsX25vbmNlO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlYmFja3VwID0gZS1cdTAwM2ViYWNrdXA7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQgPSBlLVx1MDAzZWpvaW5faWQ7XG4mIzQzO1x0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQgPSBlLVx1MDAzZWxvY2FsX2lkO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNldG9rZW4gPSBlLVx1MDAzZXRva2VuO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlbXNrID0gbXNrO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIG9mIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZGAgaW4gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgTVBUQ1Agc3luY29va2llIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNUFRDUCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4MGE2MzBjNjY2NjY2YjhkNGNjZTdlNzkxZDRlODAyM2FiMjVmY2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAxMjozMDoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zeW5jb29raWVzLmMgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jCmluZGV4IDdmMjI1MjYzNDZhN2UuLmI1Y2FjNTcwMTEyMjEgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zeW5jb29raWVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N5bmNvb2tpZXMuYwpAQCAtMTE4LDYgJiM0MzsxMTgsNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbAogCXN1YmZsb3dfcmVxLSZndDtsb2NhbF9ub25jZSA9IGUtJmd0O2xvY2FsX25vbmNlOwogCXN1YmZsb3dfcmVxLSZndDtiYWNrdXAgPSBlLSZndDtiYWNrdXA7CiAJc3ViZmxvd19yZXEtJmd0O3JlbW90ZV9pZCA9IGUtJmd0O2pvaW5faWQ7CiYjNDM7CXN1YmZsb3dfcmVxLSZndDtsb2NhbF9pZCA9IGUtJmd0O2xvY2FsX2lkOwogCXN1YmZsb3dfcmVxLSZndDt0b2tlbiA9IGUtJmd0O3Rva2VuOwogCXN1YmZsb3dfcmVxLSZndDttc2sgPSBtc2s7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtqb2luX2VudHJ5X2xvY2tzW2ldKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwYXRjaDoKCioqQW5hbHl6aW5nIGEgTmV0ZmlsdGVyIE1QVENQIFBhdGNoKioKCk9rYXksIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L21wdGNwL3N5bmNvb2tpZXMuY2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0IHNlZW1zIHRvIGFkZCBgc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkID0gZS0mZ3Q7bG9jYWxfaWQ7YCB3aXRoaW4gdGhlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2h5IGFyZSB3ZSBkb2luZyB0aGlzPyYjMzQ7LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU28sIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGl0c2VsZi4gV2hhdOKAmXMgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2U/IEFuZCB3aGF0IGlzIGBzdWJmbG93X3JlcWA/IElzIGl0IGFuIGVzdGFibGlzaGVkIGRhdGEgc3RydWN0dXJlIG9yIGFuIGluc3RhbmNlPyBBbmQgaG93IGRvZXMgYGVgIHJlbGF0ZSB0byBgbG9jYWxfaWRgPyBXaGF0IGtpbmQgb2YgdmFsdWUgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgaGFuZHNoYWtlIHByb2Nlc3MgdG8gd2hpY2ggdGhpcyBjb29raWUgaW5pdGlhbGl6YXRpb24gaXMgcmVsYXRlZCB0byBmdWxseSBncmFzcCB0aGUgY2hhbmdlLiBXaGF0IHBhcnQgb2YgdGhlIE1QVENQIGhhbmRzaGFrZSBpcyBiZWluZyBtb2RpZmllZD8gTGV0JiMzOTtzIHRyYWNlIGJhY2sgd2hlcmUgdGhpcyBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgaXMgYmVpbmcgY2FsbGVkIGFuZCBzZWUgaG93IGBzdWJmbG93X3JlcWAgYW5kIGBlYCBhcmUgdXNlZC4gVGhpcyBjaGFuZ2UgbGlrZWx5IGhhcyBzb21lIGltcGFjdCBvbiBob3cgd2UgaGFuZGxlIHN1YmZsb3cgam9pbiByZXF1ZXN0cyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB0b2tlbnMsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCB0aGF0IGltcGFjdCBpcyBiZWZvcmUgSSBjYW4gYXNzZXNzIHRoZSBwYXRjaCYjMzk7cyBtZXJpdC4gSXMgdGhpcyBhIHNlY3VyaXR5IGZpeCwgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N5bmNvb2tpZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc3luY29va2llcy5jPTcxPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05MS0gKi9cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgZnVuY3Rpb246CgoqKkRpdmluZyBpbnRvIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hlcmUgdGhpcyBmdW5jdGlvbiBzaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIE1QVENQIGZyYW1ld29yay4gV2hhdCYjMzk7cyBpdHMgcm9sZSwgYW5kIHdoYXQgYXJlIGl0cyBpbnB1dHMgYW5kIG91dHB1dHM/IEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCBvciBpbml0aWFsaXppbmcgc29tZSBjcnVjaWFsIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGpvaW4gY29va2llIGFuZCB0b2tlbiBtZWNoYW5pc20uIEl0JiMzOTtzIHByb2JhYmx5IGNhbGxlZCBkdXJpbmcgdGhlIGhhbmRzaGFrZSBvciB3aGVuIGEgbmV3IHN1YmZsb3cgaXMgYmVpbmcgZXN0YWJsaXNoZWQuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZToKCiogICBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCBtb2RpZnlpbmcgb3IgcG9wdWxhdGluZz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgdGhlIE1QVENQIGNvbm5lY3Rpb24gY29udHJvbCBibG9jaywgdGhlIHN1YmZsb3cmIzM5O3MgZGF0YSwgb3Igc29tZSBkZWRpY2F0ZWQgY29va2llLXJlbGF0ZWQgc3RydWN0dXJlPwoqICAgV2hhdCBpcyB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgc3RhdGU/IElzIGl0IG9ubHkgaW5pdGlhbGl6ZWQsIG9yIGlzIGl0IGFsc28gdXBkYXRlZCBvciBjbGVhcmVkIGxhdGVyIGluIHRoZSBjb25uZWN0aW9uPwoqICAgSG93IGRvZXMgdGhpcyBpbml0aWFsaXphdGlvbiByZWxhdGUgdG8gdGhlIE1QVENQJiMzOTtzIG92ZXJhbGwgc2VjdXJpdHkgYW5kIGNvbmdlc3Rpb24gY29udHJvbCBtZWNoYW5pc21zPwoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvZGUgdG8gc2VlIGlmIGl0JiMzOTtzIGdlbmVyYXRpbmcgbmV3IGNvb2tpZXMgb3IgdG9rZW5zLCBvciB2YWxpZGF0aW5nIHByZXZpb3VzbHkgcmVjZWl2ZWQgb25lcy4gSWYgSSB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcywgaXQmIzM5O2xsIGhlbHAgbWUgYXNzZXNzIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgYXR0YWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zeW5jb29raWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0ICogcHJlc2VudCBpbiB0aGUgY29va2llIEFDSyBtcHRjcCBvcHRpb24gc3BhY2Ugd2lsbCBiZSBjaGVja2VkIGxhdGVyLlxuICA5MTpcdCAqL1xuICA5MjpcdGJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxuICA5MzpcdFx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA5NDpcdHtcbiAgOTU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2Vzay5yZXEuaXJlcV9uZXQpO1xuICA5NjpcdFx0dTMyIGkgPSBtcHRjcF9qb2luX2VudHJ5X2hhc2goc2tiLCBuZXQpO1xuICA5NzpcdFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbiAgOTg6XHRcdHN0cnVjdCBqb2luX2VudHJ5ICplO1xuICA5OTpcdFxuIDEwMDpcdFx0ZSA9IFx1MDAyNmpvaW5fZW50cmllc1tpXTtcbiAxMDE6XHRcbiAxMDI6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcbiAxMDM6XHRcbiAxMDQ6XHRcdGlmIChlLVx1MDAzZXZhbGlkID09IDApIHtcbiAxMDU6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4gMTA2Olx0XHRcdHJldHVybiBmYWxzZTtcbiAxMDc6XHRcdH1cbiAxMDg6XHRcbiAxMDk6XHRcdGUtXHUwMDNldmFsaWQgPSAwO1xuIDExMDpcdFxuIDExMTpcdFx0bXNrID0gbXB0Y3BfdG9rZW5fZ2V0X3NvY2sobmV0LCBlLVx1MDAzZXRva2VuKTtcbiAxMTI6XHRcdGlmICghbXNrKSB7XG4gMTEzOlx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xuIDExNDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTE1Olx0XHR9XG4gMTE2Olx0XG4gMTE3Olx0XHRzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfbm9uY2UgPSBlLVx1MDAzZXJlbW90ZV9ub25jZTtcbiAxMTg6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX25vbmNlID0gZS1cdTAwM2Vsb2NhbF9ub25jZTtcbiAxMTk6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZWJhY2t1cCA9IGUtXHUwMDNlYmFja3VwO1xuIDEyMDpcdFx0c3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX2lkID0gZS1cdTAwM2Vqb2luX2lkO1xuIDEyMTpcdFx0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQgPSBlLVx1MDAzZWxvY2FsX2lkO1xuIDEyMjpcdFx0c3ViZmxvd19yZXEtXHUwMDNldG9rZW4gPSBlLVx1MDAzZXRva2VuO1xuIDEyMzpcdFx0c3ViZmxvd19yZXEtXHUwMDNlbXNrID0gbXNrO1xuIDEyNDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4gMTI1Olx0XHRyZXR1cm4gdHJ1ZTtcbiAxMjY6XHR9XG4gMTI3Olx0XG4gMTI4Olx0dm9pZCBfX2luaXQgbXB0Y3Bfam9pbl9jb29raWVfaW5pdCh2b2lkKVxuIDEyOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgTVBUQ1AgU3luY29va2llIE1vZGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgbW9kaWZpY2F0aW9uIGluIGhvdyBNUFRDUCBzeW5jb29raWVzIHdvcmsuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgJiMzNDtSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiYjMzQ7IEkgbmVlZCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBNUFRDUC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHR3ZWFrZWQgYW5kIGhvdyB0aGV5JiMzOTtyZSBpbmZsdWVuY2luZyB0aGUgb3ZlcmFsbCBiZWhhdmlvci4gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnM/IEFueSBzZWN1cml0eSByYW1pZmljYXRpb25zPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgdGhlIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1QVENQIFRva2VuIEhhbmRsaW5nKioKCkFscmlnaHQsIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGRlZmluaXRlbHkgYE1QVENQYC4gVGltZSB0byB6ZXJvIGluIG9uIHRoaXMgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpdHMgc2NvcGUgYW5kIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSB3aGVyZSBpdCBnZXRzIGNhbGxlZCBmcm9t4oCUd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgTVBUQ1Agc3RhY2sgcmVseSBvbiBpdHMgZnVuY3Rpb25hbGl0eT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCBpcyBhbHdheXMgdGhlIGZpcnN0IHN0ZXAgZm9yIG1lIHRvIGdyYXNwIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgYmVmb3JlIEkgY2FuIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5oPTEzNjI9dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjMtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzY0OmJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2NS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTM3MT1zdGF0aWMgaW5saW5lIGJvb2xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNzI6bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3My1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjM9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI4OS1cdH0gZWxzZSBpZiAob3B0X21wX2pvaW4gXHUwMDI2XHUwMDI2IGxpc3RlbmVyLVx1MDAzZXJlcXVlc3RfbXB0Y3ApIHtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjkwOlx0XHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI5MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTcxPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05MS0gKi9cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE1QVENQIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBpbml0aWF0aW5nIHRoZSBjb29raWUgcmVxdWVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBhcyB0aGlzIGlzIHRoZSBzdGFydGluZyBwb2ludC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIGhhbmRzaGFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmM9MTQ3PXN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjYyLVxubmV0L21wdGNwL3N1YmZsb3cuYzoyNjM6aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjY0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTgtfVxubmV0L21wdGNwL3N1YmZsb3cuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0zMDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgU2NvcGUgb2YgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCoqCgpBbHJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBmdW5jdGlvbiwgdGhlIG9uZSBkZWFsaW5nIHdpdGggaW5pdGlhbCBjb29raWUgcmVxdWVzdHMgd2l0aGluIE1QVENQLCBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBvdGhlciBmdW5jdGlvbnMgKndpdGhpbiogdGhlIGBuZXQvbXB0Y3AvYCBkaXJlY3RvcnksIG9yIGRvZXMgaXQgaGF2ZSBhbiBleHRlcm5hbCBpbnRlcmZhY2UsIGkuZS4sIGlzIGl0IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgbW9kdWxlPyBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludCBpdHMgYm91bmRhcmllcy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlcGVuZGVuY2llcywgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIGhvdyB0aWdodGx5IGNvdXBsZWQgaXQgaXMgdG8gdGhlIHJlc3Qgb2YgdGhlIE1QVENQIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIGlmIGV4dGVybmFsIGNvZGUgZGlyZWN0bHkgY2FsbHMgdGhpcyBjb3VsZCBpbXBhY3QgaG93IEkgYXBwcm9hY2ggYW55IG1vZGlmaWNhdGlvbnMgb3IgZGVidWdnaW5nLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQgbWUgdHJhY2UgdGhlIGNhbGxzIGFuZCBkbyBzb21lIGNyb3NzLXJlZmVyZW5jaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvc3luY29va2llcy5jPTI2Mz1zdGF0aWMgaW50IGNvb2tpZV90Y3BfcmVxc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTI5NC1cdGlmICh0cmVxLVx1MDAzZWlzX21wdGNwKVxubmV0L2lwdjQvc3luY29va2llcy5jOjI5NTpcdFx0cmV0dXJuIG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHJlcSwgc2ssIHNrYik7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjk2LSNlbmRpZlxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ3PXN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjYyLVxubmV0L21wdGNwL3N1YmZsb3cuYzoyNjM6aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjY0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTgtfVxubmV0L21wdGNwL3N1YmZsb3cuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0zMDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODEKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVBUQ1AgVG9rZW4gSm9pbiBDb29raWUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvaXB2NC9zeW5jb29raWVzLmNgLiBJJiMzOTt2ZSBob25lZCBpbiBvbiBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIGFuZCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgYXMgdGhlIGtleSBmdW5jdGlvbnMgdG8gZXhhbWluZSBoZXJlLiBUaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBNUFRDUGAsIHdoaWNoIEkmIzM5O2xsIGtlZXAgaW4gbWluZC4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYWJvdXQgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLiBJIG5lZWQgdG8gY2hlY2sgaWYgaXQmIzM5O3Mgc3RhdGljIG9yIGdsb2JhbC4gQWgsIGl0JiMzOTtzIG5vdCBzdGF0aWM7IGl0JiMzOTtzIGV4cG9ydGVkLCBzbyBpdCYjMzk7cyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBub3c6IGBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSwgc3RydWN0IHNrX2J1ZmYgKnNrYilgLgoKUmlnaHQsIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gaXNzdWUuIEl0IHNlZW1zIGBzdWJmbG93X3JlcS0mZ3Q7bG9jYWxfaWRgIHdhc24mIzM5O3QgYmVpbmcgaW5pdGlhbGl6ZWQgaW4gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBpZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZC4gSXQgc2VlbXMgYE1QVENQYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcuCgpBbHJpZ2h0LCBJIHRoaW5rIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNoYW5nZS4gSSYjMzk7bSByZWFkeSB0byBkb2N1bWVudCBteSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIG9mIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZGAgaW4gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgTVBUQ1Agc3luY29va2llIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNUFRDUCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlJiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gb2YgYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBNUFRDUCBzeW5jb29raWUgcHJvY2Vzc2luZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1QVENQIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gYXNzaWdubWVudCB0byBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgLiBgc3ViZmxvd19yZXFgIGlzIGEgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYHJlcXNrX2FsbG9jKClgLiBUaGUgYHJlcXNrX2FsbG9jKClgIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgZnJvbSBhIHNsYWIgY2FjaGUgd2l0aG91dCB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLlxuXG5XaGlsZSBgc3ViZmxvd19pbml0X3JlcSgpYCBpbml0aWFsaXplcyBzZXZlcmFsIGZpZWxkcyBvZiB0aGUgcmVxdWVzdCBzb2NrZXQsIGl0IGRvZXMgbm90IGluaXRpYWxpemUgYGxvY2FsX2lkYC4gRHVyaW5nIGEgU1lOIGNvb2tpZSBNUF9KT0lOLCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYCBpcyBjYWxsZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIHJlcXVlc3Qgc29ja2V0IHN0YXRlIGZyb20gdGhlIGNvb2tpZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGZhaWxlZCB0byByZXN0b3JlIGBsb2NhbF9pZGAsIGxlYXZpbmcgYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYCB1bmluaXRpYWxpemVkLlxuXG5UaGlzIHVuaW5pdGlhbGl6ZWQgMS1ieXRlIHZhbHVlIGlzIGxhdGVyIGNvcGllZCB0byB0aGUgc3ViZmxvdyBjb250ZXh0IChgbmV3X2N0eC1cdTAwM2Vsb2NhbF9pZGApIGluIGBzdWJmbG93X3VscF9jbG9uZSgpYC4gRnJvbSB0aGVyZSwgdGhlIHVuaW5pdGlhbGl6ZWQga2VybmVsIGhlYXAgbWVtb3J5IGNhbiBiZSBsZWFrZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChlLmcuLCBgTVBUQ1BfU1VCRkxPV19BVFRSX0lEX0xPQ2AgaW4gYHN1YmZsb3dfZ2V0X2luZm8oKWApIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBNUFRDUCBUQ1Agb3B0aW9ucy5cblxuU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIGFuZCBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIGJ1Z3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTgwYTYzMGM2NjY2NjZiOGQ0Y2NlN2U3OTFkNGU4MDIzYWIyNWZjZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDE1IDEyOjMwOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmMKaW5kZXggN2YyMjUyNjM0NmE3ZS4uYjVjYWM1NzAxMTIyMSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw3IEBAIGJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsCiAJc3ViZmxvd19yZXEtJmd0O2xvY2FsX25vbmNlID0gZS0mZ3Q7bG9jYWxfbm9uY2U7CiAJc3ViZmxvd19yZXEtJmd0O2JhY2t1cCA9IGUtJmd0O2JhY2t1cDsKIAlzdWJmbG93X3JlcS0mZ3Q7cmVtb3RlX2lkID0gZS0mZ3Q7am9pbl9pZDsKJiM0MzsJc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkID0gZS0mZ3Q7bG9jYWxfaWQ7CiAJc3ViZmxvd19yZXEtJmd0O3Rva2VuID0gZS0mZ3Q7dG9rZW47CiAJc3ViZmxvd19yZXEtJmd0O21zayA9IG1zazsKIAlzcGluX3VubG9ja19iaCgmYW1wO2pvaW5fZW50cnlfbG9ja3NbaV0pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIFRva2VuIEpvaW4gQ29va2llIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBgc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkID0gZS0mZ3Q7bG9jYWxfaWQ7YCB0byB0aGUgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L21wdGNwL3N5bmNvb2tpZXMuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIHBhdGNoIGl0c2VsZiBpcyBzaW1wbGUsIGp1c3QgYW4gYXNzaWdubWVudCB3aXRoaW4gdGhlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBmdW5jdGlvbiwgYXNzaWduaW5nIGEgdmFsdWUgZnJvbSBgZS0mZ3Q7bG9jYWxfaWRgIHRvIGBzdWJmbG93X3JlcS0mZ3Q7bG9jYWxfaWRgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGNvcGllZCBhcm91bmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG9mIHRoaXMgYXNzaWdubWVudC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBzdWJmbG93X3JlcWAgYW5kIGBlYCBhY3R1YWxseSAqYXJlKi4gSSBrbm93IHRoZXkmIzM5O3JlIGJvdGggbGlrZWx5IHN0cnVjdHVyZXMsIHBvaW50ZXJzIGluIHRoaXMgY29udGV4dCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucyBvZiBgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrYCBhbmQgYHN0cnVjdCBqb2luX2VudHJ5YC4KClJpZ2h0LCBgc3ViZmxvd19yZXFgIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrYCwgYW5kIGBlYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBqb2luX2VudHJ5YC4gTm93IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyBgZS0mZ3Q7bG9jYWxfaWRgIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgYXNzaWdubWVudD8gSWYgbm90LCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSwgd2hpY2ggaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvbXB0Y3Avc3luY29va2llcy5jYCB0byBzZWUgaG93IHRoZXNlIHN0cnVjdHVyZXMgYXJlIHBvcHVsYXRlZCBhbmQgd2hlcmUgYGUtJmd0O2xvY2FsX2lkYCBnZXRzIGl0cyB2YWx1ZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50IHRvIGVuc3VyZSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGpvaW5fZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc3luY29va2llcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zeW5jb29raWVzLmMtMjItXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjIzOnN0cnVjdCBqb2luX2VudHJ5IHtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtMjQtXHR1MzIgdG9rZW47XG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0zNC1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6MzU6c3RhdGljIHN0cnVjdCBqb2luX2VudHJ5IGpvaW5fZW50cmllc1tDT09LSUVfSk9JTl9TTE9UU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTM2LXN0YXRpYyBzcGlubG9ja190IGpvaW5fZW50cnlfbG9ja3NbQ09PS0lFX0pPSU5fU0xPVFNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9Mzg9c3RhdGljIHUzMiBtcHRjcF9qb2luX2VudHJ5X2hhc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNTgtXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjU5OnN0YXRpYyB2b2lkIG1wdGNwX2pvaW5fc3RvcmVfc3RhdGUoc3RydWN0IGpvaW5fZW50cnkgKmVudHJ5LFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy02MC1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz05Mj1ib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTk3LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTg6XHRzdHJ1Y3Qgam9pbl9lbnRyeSAqZTtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgam9pbl9lbnRyeWAgU3RydWN0dXJlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGBzdHJ1Y3Qgam9pbl9lbnRyeWAgZGVmaW5pdGlvbi4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBob3cgam9pbnMgYXJlIGhhbmRsZWQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbXBvbmVudHMgaXMgY3JpdGljYWwuIEkgbmVlZCB0byBiZSBzdXJlIEkgaGF2ZSBhIHNvbGlkIGdyYXNwIG9mIGl0cyBmaWVsZHMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBqb2luIG9wZXJhdGlvbi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgbGF5b3V0LCBhbnkgcG90ZW50aWFsIGFsaWdubWVudCBpc3N1ZXMsIGFuZCBob3cgdGhlIHZhcmlvdXMgZmllbGRzIGNvbnRyaWJ1dGUgdG8gZWZmaWNpZW50IGxvb2t1cHMgYW5kIGNvbXBhcmlzb25zLiBUaGlzIGRlZmluaXRpb24gaXMgZ29pbmcgdG8gZGljdGF0ZSBhIGxvdCBhYm91dCBwZXJmb3JtYW5jZSBhbmQgc2NhbGFiaWxpdHksIHNvIGEgZGVlcCB1bmRlcnN0YW5kaW5nIGlzIGVzc2VudGlhbCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N5bmNvb2tpZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQgKiB3aGVuIHRoZSBUQ1AgQUNLIHBhc3NlZCB0aGUgY29va2llIHZhbGlkYXRpb24gY2hlY2suXG4gIDIxOlx0ICovXG4gIDIyOlx0XG4gIDIzOlx0c3RydWN0IGpvaW5fZW50cnkge1xuICAyNDpcdFx0dTMyIHRva2VuO1xuICAyNTpcdFx0dTMyIHJlbW90ZV9ub25jZTtcbiAgMjY6XHRcdHUzMiBsb2NhbF9ub25jZTtcbiAgMjc6XHRcdHU4IGpvaW5faWQ7XG4gIDI4Olx0XHR1OCBsb2NhbF9pZDtcbiAgMjk6XHRcdHU4IGJhY2t1cDtcbiAgMzA6XHRcdHU4IHZhbGlkO1xuICAzMTpcdH07XG4gIDMyOlx0XG4gIDMzOlx0I2RlZmluZSBDT09LSUVfSk9JTl9TTE9UU1x0MTAyNFxuICAzNDpcdFxuICAzNTpcdHN0YXRpYyBzdHJ1Y3Qgam9pbl9lbnRyeSBqb2luX2VudHJpZXNbQ09PS0lFX0pPSU5fU0xPVFNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuICAzNjpcdHN0YXRpYyBzcGlubG9ja190IGpvaW5fZW50cnlfbG9ja3NbQ09PS0lFX0pPSU5fU0xPVFNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuICAzNzpcdFxuICAzODpcdHN0YXRpYyB1MzIgbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbiAgMzk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGpvaW5fZW50cmllc2AgYW5kIEZvY3VzIG9uIGBtcHRjcF9qb2luX3N0b3JlX3N0YXRlYCoqCgpBbHJpZ2h0LCBzbyBgam9pbl9lbnRyaWVzYCBpcyBhIGdsb2JhbCBhcnJheSwgbWVhbmluZyBpdHMgY29udGVudHMgYXJlIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplZCBhdCB0aGUgc3RhcnQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBwcmV2ZW50cyBzb21lIHVuZXhwZWN0ZWQgdmFsdWVzIGZyb20gcG9wcGluZyB1cCBpbiB0aGUgaW5pdGlhbCBzdGF0ZSwgd2hpY2ggaXMgYSBjb21tb24gY2F1c2Ugb2YgaGFyZC10by1kZWJ1ZyBpc3N1ZXMuIE5vdywgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBsb2dpYyB0aGF0IG1hbmFnZXMgaXQsIGJ1dCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG1wdGNwX2pvaW5fc3RvcmVfc3RhdGVgIHNwZWNpZmljYWxseS4gSXQmIzM5O3MgdGhlIGNvcmUgc3RhdGUgbWFuYWdlbWVudCBmb3IgdGhlIGpvaW5pbmcgcHJvY2VzcywgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCBpbnRlcmFjdHMgd2l0aCBgam9pbl9lbnRyaWVzYCBjb3JyZWN0bHkuIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgbG9va3MgaW1wb3J0YW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N5bmNvb2tpZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTg6XHRcbiAgNTk6XHRzdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSxcbiAgNjA6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXG4gIDYxOlx0e1xuICA2MjpcdFx0ZW50cnktXHUwMDNldG9rZW4gPSBzdWJmbG93X3JlcS1cdTAwM2V0b2tlbjtcbiAgNjM6XHRcdGVudHJ5LVx1MDAzZXJlbW90ZV9ub25jZSA9IHN1YmZsb3dfcmVxLVx1MDAzZXJlbW90ZV9ub25jZTtcbiAgNjQ6XHRcdGVudHJ5LVx1MDAzZWxvY2FsX25vbmNlID0gc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfbm9uY2U7XG4gIDY1Olx0XHRlbnRyeS1cdTAwM2ViYWNrdXAgPSBzdWJmbG93X3JlcS1cdTAwM2ViYWNrdXA7XG4gIDY2Olx0XHRlbnRyeS1cdTAwM2Vqb2luX2lkID0gc3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX2lkO1xuICA2NzpcdFx0ZW50cnktXHUwMDNlbG9jYWxfaWQgPSBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZDtcbiAgNjg6XHRcdGVudHJ5LVx1MDAzZXZhbGlkID0gMTtcbiAgNjk6XHR9XG4gIDcwOlx0XG4gIDcxOlx0dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbiAgNzI6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA3MzpcdHtcbiAgNzQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2Vzay5yZXEuaXJlcV9uZXQpO1xuICA3NTpcdFx0dTMyIGkgPSBtcHRjcF9qb2luX2VudHJ5X2hhc2goc2tiLCBuZXQpO1xuICA3NjpcdFxuICA3NzpcdFx0LyogTm8gdXNlIGluIHdhaXRpbmcgaWYgb3RoZXIgY3B1IGlzIGFscmVhZHkgdXNpbmcgdGhpcyBzbG90IC0tXG4gIDc4Olx0XHQgKiB3b3VsZCBvdmVyd3JpdGUgdGhlIGRhdGEgdGhhdCBnb3Qgc3RvcmVkLlxuICA3OTpcdFx0ICovXG4gIDgwOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4gIDgxOlx0XHRtcHRjcF9qb2luX3N0b3JlX3N0YXRlKFx1MDAyNmpvaW5fZW50cmllc1tpXSwgc3ViZmxvd19yZXEpO1xuICA4MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4gIDgzOlx0fVxuICA4NDpcdFxuICA4NTpcdC8qIENhbGxlZCBmb3IgYSBjb29raWUtYWNrIHdpdGggTVBfSk9JTiBvcHRpb24gcHJlc2VudC5cbiAgODY6XHQgKiBMb29rIHVwIHRoZSBzYXZlZCBzdGF0ZSBiYXNlZCBvbiBza2IgaGFzaCBcdTAwMjYgY2hlY2sgdG9rZW4gbWF0Y2hlcyBtc2tcbiAgODc6XHQgKiBpbiBzYW1lIG5ldG5zLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBNUFRDUCBUb2tlbiBKb2luIENvb2tpZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgY2hhbmdlIHdpdGhpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAuIFRoZSBrZXkgYWRkaXRpb24gaXMgYHN1YmZsb3dfcmVxLSZndDtsb2NhbF9pZCA9IGUtJmd0O2xvY2FsX2lkO2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UmIzM5O3JlIGVzc2VudGlhbGx5IGxpbmtpbmcgdGhlIGBsb2NhbF9pZGAgZnJvbSBzb21lIGVsZW1lbnQgYGVgIHRvIHRoZSBgc3ViZmxvd19yZXFgIHN0cnVjdHVyZSBkdXJpbmcgdGhlIHRva2VuIGpvaW4gY29va2llIGluaXRpYWxpemF0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgZGlyZWN0IG1hcHBpbmcgb3IgYXNzb2NpYXRpb24gaXMgYmVpbmcgY3JlYXRlZC4gSSBoYXZlIHRvIGxvb2sgZGVlcGVyIGludG8gd2hhdCBgZWAgcmVwcmVzZW50cyBhbmQgd2hhdCB0aGUgYHN1YmZsb3dfcmVxYCBjb250ZXh0IGlzIHRvIGRldGVybWluZSB0aGUgKndoeSouIElzIGl0IHNldHRpbmcgdXAgYSBwZXItc3ViZmxvdyBjb250ZXh0LCBhc3NvY2lhdGluZyBhIGxvY2FsIGlkZW50aWZpZXIgd2l0aCB0aGUgc3RhdGU/IElzIHRoZXJlIGEgc3VidGxlIGltcGFjdCBvbiBjb25jdXJyZW5jeSBvciB0aGUgd2F5IHdlJiMzOTtyZSBoYW5kbGluZyBpZGVudGlmaWVycz8gTGV0IG1lIGNoZWNrIGhvdyBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgaXMgYWN0dWFsbHkgdXNlZCBhbmQgd2hhdCBgZWAgYW5kIGBzdWJmbG93X3JlcWAgYXJlIGRlZmluZWQgYXMgdG8gZGV0ZXJtaW5lIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N5bmNvb2tpZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTI6XHRib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbiAgOTM6XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgOTQ6XHR7XG4gIDk1Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcbiAgOTY6XHRcdHUzMiBpID0gbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHNrYiwgbmV0KTtcbiAgOTc6XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XG4gIDk4Olx0XHRzdHJ1Y3Qgam9pbl9lbnRyeSAqZTtcbiAgOTk6XHRcbiAxMDA6XHRcdGUgPSBcdTAwMjZqb2luX2VudHJpZXNbaV07XG4gMTAxOlx0XG4gMTAyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XG4gMTAzOlx0XG4gMTA0Olx0XHRpZiAoZS1cdTAwM2V2YWxpZCA9PSAwKSB7XG4gMTA1Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xuIDEwNjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTA3Olx0XHR9XG4gMTA4Olx0XG4gMTA5Olx0XHRlLVx1MDAzZXZhbGlkID0gMDtcbiAxMTA6XHRcbiAxMTE6XHRcdG1zayA9IG1wdGNwX3Rva2VuX2dldF9zb2NrKG5ldCwgZS1cdTAwM2V0b2tlbik7XG4gMTEyOlx0XHRpZiAoIW1zaykge1xuIDExMzpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcbiAxMTQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDExNTpcdFx0fVxuIDExNjpcdFxuIDExNzpcdFx0c3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX25vbmNlID0gZS1cdTAwM2VyZW1vdGVfbm9uY2U7XG4gMTE4Olx0XHRzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9ub25jZSA9IGUtXHUwMDNlbG9jYWxfbm9uY2U7XG4gMTE5Olx0XHRzdWJmbG93X3JlcS1cdTAwM2ViYWNrdXAgPSBlLVx1MDAzZWJhY2t1cDtcbiAxMjA6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZXJlbW90ZV9pZCA9IGUtXHUwMDNlam9pbl9pZDtcbiAxMjE6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gZS1cdTAwM2Vsb2NhbF9pZDtcbiAxMjI6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuID0gZS1cdTAwM2V0b2tlbjtcbiAxMjM6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZW1zayA9IG1zaztcbiAxMjQ6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xuIDEyNTpcdFx0cmV0dXJuIHRydWU7XG4gMTI2Olx0fVxuIDEyNzpcdFxuIDEyODpcdHZvaWQgX19pbml0IG1wdGNwX2pvaW5fY29va2llX2luaXQodm9pZClcbiAxMjk6XHR7XG4gMTMwOlx0XHRpbnQgaTtcbiAxMzE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI5OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBQb3RlbnRpYWwgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgcmVzdG9yaW5nIGBsb2NhbF9pZGAgZnJvbSB0aGUgYGpvaW5fZW50cnlgIHN0cnVjdCB0byBgc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkYC4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGBlLSZndDtsb2NhbF9pZGAgd2FzIGluaXRpYWxseSBzZXQgdXNpbmcgYHN1YmZsb3dfcmVxLSZndDtsb2NhbF9pZGAgdmlhIGBtcHRjcF9qb2luX3N0b3JlX3N0YXRlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhlcmUgYSByaXNrIG9mIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmU/JiMzNDsgV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBnbG9iYWwgYXJyYXkgYGpvaW5fZW50cmllc2AsIHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQsIHNvIHRoYXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gQW5kIGBzdWJmbG93X3JlcWA/IEl0JiMzOTtzIHBhcnQgb2YgYSByZXF1ZXN0IHNvY2tldCwgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AuIFRoaXMgcGF0Y2ggaXMgYmFzaWNhbGx5IGp1c3QgY29weWluZyBhIHZhbHVlIHRoYXQgd2FzIHByZXZpb3VzbHkgYXNzaWduZWQuCgpUaGUgcG90ZW50aWFsIGlzc3VlIEkgc2VlIGlzIGlmIGBsb2NhbF9pZGAgKndhc24mIzM5O3QqIHJlc3RvcmVkLiBXaGF0IHdvdWxkIGl0IGJlPyBaZXJvPyBVbmluaXRpYWxpemVkIGdhcmJhZ2U/IElmIHdlIGRpZG4mIzM5O3QgcmVzdG9yZSBpdCwgd2hhdGV2ZXIgd2FzIGluIG1lbW9yeSBhdCB0aGUgdGltZSBgc3ViZmxvd19yZXFgIHdhcyBhbGxvY2F0ZWQgaXMgd2hhdCB3ZSYjMzk7ZCBiZSB1c2luZyBsYXRlci4gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gQnV0IHdhaXQsIHR5cGljYWxseSwgcmVxdWVzdCBzb2NrZXRzIGFyZSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBTbyBpdCYjMzk7cyBwcm9iYWJseSAqbm90KiBhbiBpc3N1ZS4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHdoZXJlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBpcyBjYWxsZWQgYW5kIGhvdyB0aGUgYHN1YmZsb3dfcmVxYCBpcyBjcmVhdGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmaW5hbCBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmg9MTM2Mj12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2My1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjQ6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzY1LVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzcxPXN0YXRpYyBpbmxpbmUgYm9vbFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MjptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzczLVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTI2Mz1pbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjg5LVx0fSBlbHNlIGlmIChvcHRfbXBfam9pbiBcdTAwMjZcdTAwMjYgbGlzdGVuZXItXHUwMDNlcmVxdWVzdF9tcHRjcCkge1xubmV0L21wdGNwL3N1YmZsb3cuYzoyOTA6XHRcdGlmICghbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdWJmbG93X3JlcSwgc2tiKSlcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjkxLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NzE9dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkxLSAqL1xubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo5Mjpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTMtXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSAmIzM0O3Rob3VnaHRzJiMzNDsgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAqKgoKUmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXMgdGVsbGluZyBtZSB0byBjaGVjayBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgLiBUaGF0IGxpa2VseSBtZWFucyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIHN1YmZsb3csIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGNvb2tpZSByZXF1ZXN0IG1lY2hhbmlzbS4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBpbml0aWF0aW5nIGVuZHBvaW50IG9mIGEgc3ViZmxvdyBpcyBoYW5kbGluZyB0aGUgaW5pdGlhbCBjb29raWUgZXhjaGFuZ2Ugd2l0aCB0aGUgcGVlci4gV2Uga25vdyB0aGUgY29va2llIGlzIGZ1bmRhbWVudGFsIGZvciBNUFRDUCBzZWN1cml0eSBhbmQgc3ViZmxvdyBpZGVudGlmaWNhdGlvbiwgc28gcHJvYmxlbXMgdGhlcmUgYXJlIGdvaW5nIHRvIHF1aWNrbHkgYmVjb21lIGNhdGFzdHJvcGhpYyBmb3IgTVBUQ1Agb3BlcmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQ6CgoqICAgKipUaGUgY29udGV4dCoqOiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBmcm9tPyBJcyBpdCBkdXJpbmcgdGhlIGluaXRpYWwgY29ubmVjdGlvbiBzZXR1cCwgYSByZS1lc3RhYmxpc2htZW50IGF0dGVtcHQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjbHVlcy4KKiAgICoqVGhlIGlucHV0IGRhdGEqKjogV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQgdG8gYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYD8gVGhhdCB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgaW5pdGlhdG9yIGlzIGF0dGVtcHRpbmcgdG8gY29tbXVuaWNhdGUgdG8gdGhlIG90aGVyIHNpZGUsIGFuZCB3aGF0IGRldGFpbHMgYXJlIHBlcnRpbmVudC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGZvcm1hdCBhbmQgdmFsaWRpdHkgb2YgdGhlIGNvb2tpZSBkYXRhIChpZiBhbnkpLgoqICAgKipUaGUgZnVuY3Rpb24gbG9naWMqKjogV2hhdCBzdGVwcyBkb2VzIHRoaXMgZnVuY3Rpb24gdGFrZT8gSG93IGRvZXMgaXQgZ2VuZXJhdGUvaGFuZGxlL3ZhbGlkYXRlIHRoZSBjb29raWUgcmVxdWVzdD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBoZXJlIChlLmcuLCB3ZWFrIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciwgaW1wcm9wZXIgaGFuZGxpbmcgb2YgYnVmZmVyIG92ZXJmbG93cywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMpPwoqICAgKipUaGUgZXJyb3IgaGFuZGxpbmcqKjogV2hhdCBoYXBwZW5zIGlmIHRoZSBjb29raWUgcmVxdWVzdCBmYWlscz8gQXJlIHRoZXJlIGFwcHJvcHJpYXRlIGZhbGxiYWNrIG1lY2hhbmlzbXMgb3IgZXJyb3IgbWVzc2FnZXM/IEFyZSBwb3RlbnRpYWwgZXJyb3JzIGJlaW5nIGxvZ2dlZCBhZGVxdWF0ZWx5IGZvciBkZWJ1Z2dpbmc/IElzIHRoZSBmdW5jdGlvbiByZXNpbGllbnQgdG8gbWFsaWNpb3VzIGF0dGVtcHRzIHRvIGNvcnJ1cHQgdGhlIGRhdGE/CiogICAqKlBlcmZvcm1hbmNlIGFzcGVjdHMqKjogSXMgdGhpcyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s/IEFyZSB0aGVyZSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24/IFRoaXMgaXMgYSBjb3JlIHBhcnQgb2Ygc3ViZmxvdyBpbml0aWFsaXphdGlvbiBzbyBzbG93IGluaXRpYWwgc2V0dXAgY291bGQgYmUgZGV0cmltZW50YWwgdG8gdGhlIHBlcmZvcm1hbmNlIG9mIE1QVENQLgoqICAgKipTZWN1cml0eSBpbXBsaWNhdGlvbnMqKjogQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBzdWNoIGFzIGEgbWFsaWNpb3VzIGFjdG9yIGJlaW5nIGFibGUgdG8gbWFuaXB1bGF0ZSB0aGUgc3ViZmxvdyBjb29raWUuCgpJbiBzdW1tYXJ5LCBJIGV4cGVjdCB0aGlzIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgaXMgYSB2aXRhbCBwaWVjZSBvZiB0aGUgTVBUQ1AgcHV6emxlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdGhvcm91Z2hseSwgaW4gYWxsIG9mIGl0cyBhc3BlY3RzLCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJ1Z3MsIHZ1bG5lcmFiaWxpdGllcywgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MzpcdGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gMjY0Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiAyNjU6XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAyNjY6XHR7XG4gMjY3Olx0XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrX2xpc3RlbmVyKTtcbiAyNjg6XHRcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuIDI2OTpcdFx0c3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgbXBfb3B0O1xuIDI3MDpcdFx0Ym9vbCBvcHRfbXBfY2FwYWJsZSwgb3B0X21wX2pvaW47XG4gMjcxOlx0XHRpbnQgZXJyO1xuIDI3MjpcdFxuIDI3MzpcdFx0c3ViZmxvd19pbml0X3JlcShyZXEsIHNrX2xpc3RlbmVyKTtcbiAyNzQ6XHRcdG1wdGNwX2dldF9vcHRpb25zKHNrYiwgXHUwMDI2bXBfb3B0KTtcbiAyNzU6XHRcbiAyNzY6XHRcdG9wdF9tcF9jYXBhYmxlID0gISEobXBfb3B0LnN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKTtcbiAyNzc6XHRcdG9wdF9tcF9qb2luID0gISEobXBfb3B0LnN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUEpfQUNLKTtcbiAyNzg6XHRcdGlmIChvcHRfbXBfY2FwYWJsZSBcdTAwMjZcdTAwMjYgbGlzdGVuZXItXHUwMDNlcmVxdWVzdF9tcHRjcCkge1xuIDI3OTpcdFx0XHRpZiAobXBfb3B0LnNuZHJfa2V5ID09IDApXG4gMjgwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjgxOlx0XG4gMjgyOlx0XHRcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2tleSA9IG1wX29wdC5yY3ZyX2tleTtcbiAyODM6XHRcdFx0ZXJyID0gbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QocmVxKTtcbiAyODQ6XHRcdFx0aWYgKGVycilcbiAyODU6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDI4NjpcdFxuIDI4NzpcdFx0XHRzdWJmbG93X3JlcS1cdTAwM2VtcF9jYXBhYmxlID0gMTtcbiAyODg6XHRcdFx0c3ViZmxvd19yZXEtXHUwMDNlc3NuX29mZnNldCA9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgLSAxO1xuIDI4OTpcdFx0fSBlbHNlIGlmIChvcHRfbXBfam9pbiBcdTAwMjZcdTAwMjYgbGlzdGVuZXItXHUwMDNlcmVxdWVzdF9tcHRjcCkge1xuIDI5MDpcdFx0XHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXG4gMjkxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjkyOlx0XG4gMjkzOlx0XHRcdHN1YmZsb3dfcmVxLVx1MDAzZW1wX2pvaW4gPSAxO1xuIDI5NDpcdFx0XHRzdWJmbG93X3JlcS1cdTAwM2Vzc25fb2Zmc2V0ID0gVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSAtIDE7XG4gMjk1Olx0XHR9XG4gMjk2Olx0XG4gMjk3Olx0XHRyZXR1cm4gMDtcbiAyOTg6XHR9XG4gMjk5Olx0RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xuIDMwMDpcdFxuIDMwMTpcdHN0YXRpYyBlbnVtIHNrX3JzdF9yZWFzb24gbXB0Y3BfZ2V0X3JzdF9yZWFzb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzMDI6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gU3ViZmxvdyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgdGhpcyBzdWJmbG93LiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgaG93IHRoZSBgc3ViZmxvd19pbml0X3JlcWAgaW50ZXJhY3RzIHdpdGggYW5kIGluaXRpYWxpemVzIHRoZSBjb3JlIGBzdWJmbG93X3JlcWAuIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGF0IHNldHVwIGlzIGNsZWFuIGFuZCBlZmZpY2llbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZm91bmRhdGlvbmFsIHJlcXVlc3QgaXMgYmVpbmcgZm9ybWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdWJmbG93X2luaXRfcmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N1YmZsb3cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc3ViZmxvdy5jPTg1PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqc3ViZmxvd190b2tlbl9qb2luX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTA3LVxubmV0L21wdGNwL3N1YmZsb3cuYzoxMDg6c3RhdGljIHZvaWQgc3ViZmxvd19pbml0X3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTA5LXtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE0Nz1zdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI1Mi1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjUzOlx0XHRcdHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShzdWJmbG93X3JlcSwgc2tiKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjU0LVx0XHR9XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjM9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI3Mi1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjczOlx0c3ViZmxvd19pbml0X3JlcShyZXEsIHNrX2xpc3RlbmVyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjc0LVx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MzExPXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzdWJmbG93X3Y0X3JvdXRlX3JlcShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0zMjAtXHR0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3AgPSAxO1xubmV0L21wdGNwL3N1YmZsb3cuYzozMjE6XHRzdWJmbG93X2luaXRfcmVxKHJlcSwgc2spO1xubmV0L21wdGNwL3N1YmZsb3cuYy0zMjItXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0zODA9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnN1YmZsb3dfdjZfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM4OS1cdHRjcF9yc2socmVxKS1cdTAwM2Vpc19tcHRjcCA9IDE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM5MDpcdHN1YmZsb3dfaW5pdF9yZXEocmVxLCBzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM5MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEluaXRpYWxpemF0aW9uIFJlcXVlc3QqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgYWx3YXlzIG1ldGhvZGljYWwsIGFuZCByaWdodCBub3csIEkmIzM5O20gemVyb2luZyBpbiBvbiBgc3ViZmxvd19pbml0X3JlcWAuIFRoYXQgc3BlY2lmaWMgcmVxdWVzdCBzdHJ1Y3R1cmUgaXMgdGhlIGNvcm5lcnN0b25lIG9mIGhvdyBvdXIgc3ViZmxvd3MgYXJlIGxhdW5jaGVkLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgY29udGVudHMgaXMgY3J1Y2lhbC4gV2hhdCBhcmUgdGhlIGtleSBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZGF0YSBzYW5pdGl6YXRpb24gb3IgYWNjZXNzIGNvbnRyb2w/IElzIHRoZSByZXF1ZXN0IGZ1bGx5IGNvbXBsaWFudCB3aXRoIHRoZSBwcm90b2NvbCB3ZSYjMzk7dmUgZGVmaW5lZD8gVGhlIGRldmlsLCBhcyB0aGV5IHNheSwgaXMgaW4gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgaW50ZW5kZWQgdXNhZ2UgdG8gZW5zdXJlIGl0cyBvcGVyYXRpb24gYWxpZ25zIHdpdGggdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLCB3aXRob3V0IGV4cG9zaW5nIGFueSB3ZWFrbmVzc2VzLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwODpcdHN0YXRpYyB2b2lkIHN1YmZsb3dfaW5pdF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIpXG4gMTA5Olx0e1xuIDExMDpcdFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG4gMTExOlx0XG4gMTEyOlx0XHRzdWJmbG93X3JlcS1cdTAwM2VtcF9jYXBhYmxlID0gMDtcbiAxMTM6XHRcdHN1YmZsb3dfcmVxLVx1MDAzZW1wX2pvaW4gPSAwO1xuIDExNDpcdFx0c3ViZmxvd19yZXEtXHUwMDNlY3N1bV9yZXFkID0gbXB0Y3BfaXNfY2hlY2tzdW1fZW5hYmxlZChzb2NrX25ldChza19saXN0ZW5lcikpO1xuIDExNTpcdFx0c3ViZmxvd19yZXEtXHUwMDNlYWxsb3dfam9pbl9pZDAgPSBtcHRjcF9hbGxvd19qb2luX2lkMChzb2NrX25ldChza19saXN0ZW5lcikpO1xuIDExNjpcdFx0c3ViZmxvd19yZXEtXHUwMDNlbXNrID0gTlVMTDtcbiAxMTc6XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChyZXEpO1xuIDExODpcdH1cbiAxMTk6XHRcbiAxMjA6XHRzdGF0aWMgYm9vbCBzdWJmbG93X3VzZV9kaWZmZXJlbnRfc3BvcnQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDEyMTpcdHtcbiAxMjI6XHRcdHJldHVybiBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X3Nwb3J0ICE9IGluZXRfc2soKHN0cnVjdCBzb2NrICopbXNrKS1cdTAwM2VpbmV0X3Nwb3J0O1xuIDEyMzpcdH1cbiAxMjQ6XHRcbiAxMjU6XHRzdGF0aWMgdm9pZCBzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcmVhc29uKVxuIDEyNjpcdHtcbiAxMjc6XHRcdHN0cnVjdCBtcHRjcF9leHQgKm1wZXh0ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX01QVENQKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgVGhvdWdodHMgb24gU3ViZmxvdyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBgc3ViZmxvd19pbml0X3JlcWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGhlcmUuIEkgc2VlIGl0JiMzOTtzIGV4cGxpY2l0bHkgY2xlYXJpbmcgdGhlIGZpZWxkcyBsaWtlIGBtcF9jYXBhYmxlYCwgYG1wX2pvaW5gLCBhbmQgYG1za2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgY2xlYW4gc2xhdGUgZm9yIHRoZSBzdWJmbG93LiBCdXQgaG9sZCBvbi4uLiBpdCAqZG9lc24mIzM5O3QqIHplcm8gYGxvY2FsX2lkYC4gVGhhdCYjMzk7cyBhIHBvaW50IG9mIHBvdGVudGlhbCBjb25mdXNpb24uIFdlIG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IHRoYXQmIzM5O3MgaGFuZGxlZCBsYXRlciBvbi4gSXQgY291bGQgYmUgaW1wb3J0YW50LiBBbmQsIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCB0aGUgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIGlzbiYjMzk7dCBqdXN0IGhhbmdpbmcgb3V0OyBpdCYjMzk7cyBiZWluZyBhbGxvY2F0ZWQgdGhyb3VnaCBgcmVxc2tfYWxsb2NgLiBSaWdodC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGFyZSBoYXBwZW5pbmcgYXMgd2UgZXhwZWN0LiBUaW1lIHRvIGRpdmUgaW50byBgcmVxc2tfYWxsb2NgIGFuZCBzZWUgaG93IGl0JiMzOTtzIHNldHRpbmcgdGhpbmdzIHVwLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN1YmZsb3cmIzM5O3MgbGlmZWN5Y2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlcXNrX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcmVxdWVzdF9zb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDU5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbmV0L2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYHJlcXNrX2FsbG9jYCoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHJlcXVlc3Qgc29ja2V0IGFsbG9jYXRpb24uIFNpbmNlIEkmIzM5O20ga25lZS1kZWVwIGluIG5ldHdvcmtpbmcsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3aGVyZSBJIHNob3VsZCBzdGFydCAtIHRoZSBgbmV0L2AgZGlyZWN0b3J5IGlzIHdoZXJlIHRoZSBjb3JlIG5ldHdvcmsgc3RhY2sgcmVzaWRlcy4gTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgcmVxc2tfYWxsb2NgLiBUaGlzIGZ1bmN0aW9uJiMzOTtzIG5hbWUgYWxvbmUgaGludHMgaXQgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgcmVzb3VyY2VzIGZvciByZXF1ZXN0IHNvY2tldHMg4oCTIHRoYXQgaXMsIGZvciB0aGUgaW5pdGlhbCBoYW5kc2hha2Ugb2YgYSBjb25uZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgYmVjYXVzZSwgbGlrZWx5LCB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBhbGwgaW5jb21pbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4gSSYjMzk7bGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW55IGluaXRpYWxpemF0aW9uIGhhcHBlbmluZywgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3RydWN0dXJlcywgYW5kLCBjcml0aWNhbGx5LCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXFza19hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTIzNDY9X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjQxMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyNDExOlx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjQxMi1cdGlmICghcmVxKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9ODQ5PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODUwOnJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg1MS1cdFx0ICAgYm9vbCBhdHRhY2hfbGlzdGVuZXIpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NzgtfVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4Nzk6I2RlZmluZSByZXFza19hbGxvYyguLi4pXHRhbGxvY19ob29rcyhyZXFza19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODAtXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4MTpzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4NC17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4NTpcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IHJlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4Ni1cdFx0XHRcdFx0ICAgICAgIGF0dGFjaF9saXN0ZW5lcik7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTMwMj1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE3LVxubmV0L2lwdjQvc3luY29va2llcy5jOjMxODpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE5LVx0XHRcdFx0XHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMjctXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxubmV0L2lwdjQvc3luY29va2llcy5jOjMyODpcdFx0cmVxID0gbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzI5LVx0ZWxzZVxubmV0L2lwdjQvc3luY29va2llcy5jOjMzMDpcdFx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzMxLVxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0zNTg9c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTM5NC1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozOTU6XHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcywgc2ssIHNrYixcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTYtXHRcdFx0XHQgICAgICBcdTAwMjZ0Y3Bfb3B0LCBtc3MsIHRzb2ZmKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NjAtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjYxOlx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhyc2tfb3BzLCBzaywgIXdhbnRfY29va2llKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NjItXHRpZiAoIXJlcSlcbi0tXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM9MTMxPXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0xNjctXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MTY4Olx0cmV0dXJuIGNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzLCBzaywgc2tiLFxubmV0L2lwdjYvc3luY29va2llcy5jLTE2OS1cdFx0XHRcdCAgICAgIFx1MDAyNnRjcF9vcHQsIG1zcywgdHNvZmYpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzI1PXN0YXRpYyB2b2lkIHN1YmZsb3dfdjZfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNzMxLVxubmV0L21wdGNwL3N1YmZsb3cuYzo3MzI6c3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxubmV0L21wdGNwL3N1YmZsb3cuYy03MzMtXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDItXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0MzpcdHJldHVybiBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsIGF0dGFjaF9saXN0ZW5lcik7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0NC19XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0NTpFWFBPUlRfU1lNQk9MKG1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MpO1xubmV0L21wdGNwL3N1YmZsb3cuYy03NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDMyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBpbmV0X2Nvbm5lY3Rpb25fc29jay5jOiBBIERlZXAgRGl2ZSBpbnRvIFNvY2tldCBBbGxvY2F0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgaW4gYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgIGFuZCBpcyBpbnN0cnVtZW50YWwgaW4gYWxsb2NhdGluZyByZXF1ZXN0IHNvY2tldHMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IGFyZW4mIzM5O3Qgc3ViamVjdCB0byB0aGUgdXN1YWwgcHJvZmlsaW5nIG92ZXJoZWFkLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGVzcGVjaWFsbHkgaW4gaGlnaC1sb2FkIHNjZW5hcmlvcyB3aGVyZSBwcm9maWxpbmcgY2FuIGJlY29tZSBhIGJvdHRsZW5lY2suIEkgd2FudCB0byBzZWUgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgYW55IHJlbGV2YW50IGZsYWdzIG9yIGNoZWNrcyBpbnZvbHZlZC4gVGhpcyBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHBvdGVudGlhbCByZXNvdXJjZSBjb250ZW50aW9uIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQ5Olx0c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKlxuIDg1MDpcdHJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4gODUxOlx0XHRcdCAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKVxuIDg1MjpcdHtcbiA4NTM6XHRcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTtcbiA4NTQ6XHRcbiA4NTU6XHRcdHJlcSA9IGttZW1fY2FjaGVfYWxsb2Nfbm9wcm9mKG9wcy1cdTAwM2VzbGFiLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbiA4NTY6XHRcdGlmICghcmVxKVxuIDg1NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA4NTg6XHRcdHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIgPSBOVUxMO1xuIDg1OTpcdFx0aWYgKGF0dGFjaF9saXN0ZW5lcikge1xuIDg2MDpcdFx0XHRpZiAodW5saWtlbHkoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZza19saXN0ZW5lci1cdTAwM2Vza19yZWZjbnQpKSkge1xuIDg2MTpcdFx0XHRcdGttZW1fY2FjaGVfZnJlZShvcHMtXHUwMDNlc2xhYiwgcmVxKTtcbiA4NjI6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA4NjM6XHRcdFx0fVxuIDg2NDpcdFx0XHRyZXEtXHUwMDNlcnNrX2xpc3RlbmVyID0gc2tfbGlzdGVuZXI7XG4gODY1Olx0XHR9XG4gODY2Olx0XHRyZXEtXHUwMDNlcnNrX29wcyA9IG9wcztcbiA4Njc6XHRcdHJlcV90b19zayhyZXEpLVx1MDAzZXNrX3Byb3QgPSBza19saXN0ZW5lci1cdTAwM2Vza19wcm90O1xuIDg2ODpcdFx0c2tfbm9kZV9pbml0KFx1MDAyNnJlcV90b19zayhyZXEpLVx1MDAzZXNrX25vZGUpO1xuIDg2OTpcdFx0c2tfdHhfcXVldWVfY2xlYXIocmVxX3RvX3NrKHJlcSkpO1xuIDg3MDpcdFx0cmVxLVx1MDAzZXNhdmVkX3N5biA9IE5VTEw7XG4gODcxOlx0XHRyZXEtXHUwMDNlc3luY29va2llID0gMDtcbiA4NzI6XHRcdHJlcS1cdTAwM2VudW1fdGltZW91dCA9IDA7XG4gODczOlx0XHRyZXEtXHUwMDNlbnVtX3JldHJhbnMgPSAwO1xuIDg3NDpcdFx0cmVxLVx1MDAzZXNrID0gTlVMTDtcbiA4NzU6XHRcdHJlZmNvdW50X3NldChcdTAwMjZyZXEtXHUwMDNlcnNrX3JlZmNudCwgMCk7XG4gODc2Olx0XG4gODc3Olx0XHRyZXR1cm4gcmVxO1xuIDg3ODpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRlY2huaWNhbCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipNZW1vcnkgQWxsb2NhdGlvbiBDb25jZXJucyBmb3IgTVBUQ1AgU3ViZmxvdyBSZXF1ZXN0IFNvY2tldHMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBpcyBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgdXNpbmcgYGttZW1fY2FjaGVfYWxsb2Nfbm9wcm9mYCBmcm9tIHRoZSBzbGFiIGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IGZyb20gYG9wcy0mZ3Q7c2xhYmAuIFRoZSBwcm9ibGVtIGp1bXBzIG91dCBpbW1lZGlhdGVseTogaXQmIzM5O3MgbWlzc2luZyB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcuIFRoYXQgbWVhbnMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKmlzbiYjMzk7dCogYmVpbmcgemVyb2VkIG91dC4gVGhpcyBpcyBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGFuZCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLgoKTm93LCBteSBmb2N1cyBzaGlmdHMgdG8gdGhlIGBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2Agc3RydWN0dXJlLiBJIGtub3cgdGhpcyBpcyBlaXRoZXIgZW1iZWRkZWQgZGlyZWN0bHkgd2l0aGluLCBvciBhbGxvY2F0ZWQgYWxvbmdzaWRlLCBhIGByZXF1ZXN0X3NvY2tgLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciBhc3NvY2lhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzdHJ1Y3R1cmUgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgdGhlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AuLi5JIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXQgY29udGFpbnMgYW5kIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGlzIGNvdWxkIGJlIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmM9OTQ2PWJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy05NDgte1xubmV0L21wdGNwL29wdGlvbnMuYzo5NDk6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTUwLVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM1NjQ9c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1Njgte1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzU2OTpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3MC1cdHN0cnVjdCBzb2NrICpuc2sgPSBza19jbG9uZV9sb2NrKHNrLCBHRlBfQVRPTUlDKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD00OTU9c3RydWN0IGNzdW1fcHNldWRvX2hlYWRlciB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtNTAxLVxubmV0L21wdGNwL3Byb3RvY29sLmg6NTAyOnN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MDMtXHRzdHJ1Y3RcdHRjcF9yZXF1ZXN0X3NvY2sgc2s7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtNTIyLVxubmV0L21wdGNwL3Byb3RvY29sLmg6NTIzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUyNC1tcHRjcF9zdWJmbG93X3Jzayhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjUte1xubmV0L21wdGNwL3Byb3RvY29sLmg6NTI2Olx0cmV0dXJuIChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKilyc2s7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjctfVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEwODA9aW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTA4MTp2b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMDgyLVx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNTM9c3RhdGljIGlubGluZSBib29sIHN1YmZsb3dfc2ltdWx0YW5lb3VzX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjEtI2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTM2Mjp2b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2My1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjQ6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzY1LVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzY4PXN0YXRpYyBpbmxpbmUgdm9pZFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM2OTpzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNzAtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpIHt9XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzcxPXN0YXRpYyBpbmxpbmUgYm9vbFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MjptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzczLVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM4PXN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxubmV0L21wdGNwL3N1YmZsb3cuYy0zOS17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjQwOlx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTQxLVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjE9c3RhdGljIGJvb2wgbXB0Y3BfY2FuX2FjY2VwdF9uZXdfc3ViZmxvdyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjktLyogdmFsaWRhdGUgcmVjZWl2ZWQgdG9rZW4gYW5kIGNyZWF0ZSB0cnVuY2F0ZWQgaG1hYyBhbmQgbm9uY2UgZm9yIFNZTi1BQ0sgKi9cbm5ldC9tcHRjcC9zdWJmbG93LmM6NzA6c3RhdGljIHZvaWQgc3ViZmxvd19yZXFfY3JlYXRlX3RobWFjKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTcxLXtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTg1PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqc3ViZmxvd190b2tlbl9qb2luX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxubmV0L21wdGNwL3N1YmZsb3cuYy04Ni17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg3Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg4LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTEwOD1zdGF0aWMgdm9pZCBzdWJmbG93X2luaXRfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyKVxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDkte1xubmV0L21wdGNwL3N1YmZsb3cuYzoxMTA6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTExLVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ3PXN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUxLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChza19saXN0ZW5lcik7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1MjpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xNTMtXHRzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCBtcF9vcHQ7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjM9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI2Ny1cdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKmxpc3RlbmVyID0gbXB0Y3Bfc3ViZmxvd19jdHgoc2tfbGlzdGVuZXIpO1xubmV0L21wdGNwL3N1YmZsb3cuYzoyNjg6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjY5LVx0c3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgbXBfb3B0O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzQ1PUVYUE9SVF9TWU1CT0wobXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDctLyogdmFsaWRhdGUgaG1hYyByZWNlaXZlZCBpbiB0aGlyZCBBQ0sgKi9cbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQ4OnN0YXRpYyBib29sIHN1YmZsb3dfaG1hY192YWxpZChjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3N1YmZsb3cuYy03NDktXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz04MDE9c3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtODEwLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjgxMTpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTgxMi1cdHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkIG1wX29wdDtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIwMzA9c3RhdGljIHZvaWQgc3ViZmxvd191bHBfY2xvbmUoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjAzMy17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwMzQ6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjAzNS1cdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKm9sZF9jdHggPSBtcHRjcF9zdWJmbG93X2N0eChuZXdzayk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTIxPXN0YXRpYyBpbnQgc3ViZmxvd19vcHNfaW5pdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqc3ViZmxvd19vcHMpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMjIte1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMTIzOlx0c3ViZmxvd19vcHMtXHUwMDNlb2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjEyNC1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNzA9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzEte1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMTcyOlx0LyogSW4gc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrLCB3ZSBhc3N1bWUgdGhlIFRDUCByZXF1ZXN0IHNvY2tcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3My1cdCAqIHN0cnVjdHVyZXMgZm9yIHY0IGFuZCB2NiBoYXZlIHRoZSBzYW1lIHNpemUuIEl0IHNob3VsZCBub3QgY2hhbmdlZCBpblxuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NTk9c3RhdGljIHZvaWQgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShzdHJ1Y3Qgam9pbl9lbnRyeSAqZW50cnksXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjYwOlx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSlcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNjEte1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNzAtXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjcxOnZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTcyLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05MS0gKi9cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLVx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC90b2tlbi5jPTQ4PXN0YXRpYyBzdHJ1Y3QgdG9rZW5fYnVja2V0ICp0b2tlbl9idWNrZXQodTMyIHRva2VuKVxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTUzLS8qIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIGhlbGQgKi9cbm5ldC9tcHRjcC90b2tlbi5jOjU0OnN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKlxubmV0L21wdGNwL3Rva2VuLmMtNTUtX190b2tlbl9sb29rdXBfcmVxKHN0cnVjdCB0b2tlbl9idWNrZXQgKnQsIHUzMiB0b2tlbilcbm5ldC9tcHRjcC90b2tlbi5jLTU2LXtcbm5ldC9tcHRjcC90b2tlbi5jOjU3Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXE7XG5uZXQvbXB0Y3AvdG9rZW4uYy01OC1cdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpwb3M7XG4tLVxubmV0L21wdGNwL3Rva2VuLmM9MTA4PWludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5uZXQvbXB0Y3AvdG9rZW4uYy0xMDkte1xubmV0L21wdGNwL3Rva2VuLmM6MTEwOlx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3AvdG9rZW4uYy0xMTEtXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4tLVxubmV0L21wdGNwL3Rva2VuLmM9MTUxPWludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTE5MC0gKi9cbm5ldC9tcHRjcC90b2tlbi5jOjE5MTp2b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC90b2tlbi5jLTE5Mi1cdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3Rva2VuLmMtMTkzLXtcbm5ldC9tcHRjcC90b2tlbi5jOjE5NDpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xubmV0L21wdGNwL3Rva2VuLmMtMTk1LVx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuLS1cbm5ldC9tcHRjcC90b2tlbi5jPTM1Mj12b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5uZXQvbXB0Y3AvdG9rZW4uYy0zNTMte1xubmV0L21wdGNwL3Rva2VuLmM6MzU0Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3AvdG9rZW4uYzozNTU6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbm5ldC9tcHRjcC90b2tlbi5jLTM1Ni1cdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbi0tXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTUtXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjY6c3RhdGljIHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqYnVpbGRfcmVxX3NvY2soc3RydWN0IGt1bml0ICp0ZXN0KVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy03LXtcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6ODpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxO1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy05LVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMDpcdHJlcSA9IGt1bml0X2t6YWxsb2ModGVzdCwgc2l6ZW9mKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayksXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExLVx0XHRcdCAgICBHRlBfVVNFUik7XG4tLVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz0xOD1zdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X3JlcV9iYXNpYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTE5LXtcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6MjA6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSA9IGJ1aWxkX3JlcV9zb2NrKHRlc3QpO1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy0yMS1cdHN0cnVjdCBtcHRjcF9zb2NrICpudWxsX21zayA9IE5VTEw7XG4tLVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz05ND1zdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2FjY2VwdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTk1LXtcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6OTY6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSA9IGJ1aWxkX3JlcV9zb2NrKHRlc3QpO1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy05Ny1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBidWlsZF9tc2sodGVzdCk7XG4tLVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz0xMTM9c3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy0xMTQte1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMTU6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSA9IGJ1aWxkX3JlcV9zb2NrKHRlc3QpO1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy0xMTYtXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gYnVpbGRfbXNrKHRlc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgU3RydWN0dXJlKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyBNUFRDUCBoYW5kbGVzIHN1YmZsb3cgcmVxdWVzdHMuIFRoZSBgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrYCBpcyB3aGVyZSBJIHNob3VsZCBiZWdpbi4gSSYjMzk7bGwgb3BlbiB1cCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLCBpdCYjMzk7cyB0aGUgdXN1YWwgcGxhY2UgZm9yIGNvcmUgTVBUQ1AgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaXQgc2hvdWxkIGNvbnRhaW4gdGhlIGNvbXBsZXRlIGRlZmluaXRpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHJlbWVtYmVyaW5nIHRoZSBmaWVsZHMsIHRoZWlyIHB1cnBvc2UsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgc3ViZmxvdyBlc3RhYmxpc2htZW50IHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgdGhpcyBzdHJ1Y3R1cmUgaXMgZnVuZGFtZW50YWwgdG8gdHJvdWJsZXNob290aW5nIGFuZCBkZWJ1Z2dpbmcgc3ViZmxvdy1yZWxhdGVkIGlzc3VlcyBvciBvcHRpbWl6aW5nIHRoZSBoYW5kc2hha2UgaW4gdGhlIE1QVENQIHN0YWNrLiBUaW1lIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDI6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sge1xuIDUwMzpcdFx0c3RydWN0XHR0Y3BfcmVxdWVzdF9zb2NrIHNrO1xuIDUwNDpcdFx0dTE2XHRtcF9jYXBhYmxlIDogMSxcbiA1MDU6XHRcdFx0bXBfam9pbiA6IDEsXG4gNTA2Olx0XHRcdGJhY2t1cCA6IDEsXG4gNTA3Olx0XHRcdHJlcXVlc3RfYmt1cCA6IDEsXG4gNTA4Olx0XHRcdGNzdW1fcmVxZCA6IDEsXG4gNTA5Olx0XHRcdGFsbG93X2pvaW5faWQwIDogMTtcbiA1MTA6XHRcdHU4XHRsb2NhbF9pZDtcbiA1MTE6XHRcdHU4XHRyZW1vdGVfaWQ7XG4gNTEyOlx0XHR1NjRcdGxvY2FsX2tleTtcbiA1MTM6XHRcdHU2NFx0aWRzbjtcbiA1MTQ6XHRcdHUzMlx0dG9rZW47XG4gNTE1Olx0XHR1MzJcdHNzbl9vZmZzZXQ7XG4gNTE2Olx0XHR1NjRcdHRobWFjO1xuIDUxNzpcdFx0dTMyXHRsb2NhbF9ub25jZTtcbiA1MTg6XHRcdHUzMlx0cmVtb3RlX25vbmNlO1xuIDUxOTpcdFx0c3RydWN0IG1wdGNwX3NvY2tcdCptc2s7XG4gNTIwOlx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSB0b2tlbl9ub2RlO1xuIDUyMTpcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjQyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1QVENQIFN1YmZsb3cgUmVxdWVzdCBTb2NrZXQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGBsb2NhbF9pZGAgZmllbGQgd2l0aGluIHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdCBpcyBpbml0aWFsaXplZCwgYW5kIEkmIzM5O20gc2VlaW5nIGEgcG90ZW50aWFsIGlzc3VlLiBJdCYjMzk7cyBhIGB1OGAsIHNvIGEgc2luZ2xlIGJ5dGUsIGJ1dCBpdHMgaW5pdGlhbGl6YXRpb24gaXMgYSBiaXQgc2NhdHRlcmVkLgoKSW5pdGlhbGx5LCBgcmVxc2tfYWxsb2NgIGFsbG9jYXRlcyB0aGUgcmVxdWVzdCBzb2NrZXQsIGFuZCBjcnVjaWFsbHksIGl0ICpkb2VzbiYjMzk7dCogemVybyB0aGUgbWVtb3J5LiBUaGF0IG1lYW5zIHdoYXRldmVyIGdhcmJhZ2UgaGFwcGVuZWQgdG8gYmUgdGhlcmUgYmVmb3JlIHJlbWFpbnMuIFRoZW4gYHN1YmZsb3dfaW5pdF9yZXFgIGdldHMgY2FsbGVkLCBhbmQgaXQgc2V0cyBhIGZldyBmbGFncyBhbmQgc29tZSBvdGhlciBmaWVsZHMgbGlrZSBgbXBfY2FwYWJsZWAsIGBtcF9qb2luYCwgYW5kIHNvIG9uLiBCdXQgaXQgKmRvZXNuJiMzOTt0KiB0b3VjaCBgbG9jYWxfaWRgLCBub3IgYHJlbW90ZV9pZGAsIG9yIGBsb2NhbF9rZXlgLCBhbmQgdGhlIHJlc3QuIE15IFNwaWRleSBzZW5zZXMgYXJlIHRpbmdsaW5nLgoKQWgsIGJ1dCB3YWl0Li4uIHRoZXJlJiMzOTtzIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAuIFRoYXQmIzM5O3Mgd2hlcmUgU1lOIGNvb2tpZXMgZ2V0IGhhbmRsZWQuIElmIGFuIGBvcHRfbXBfam9pbmAgb3B0aW9uIGlzIHByZXNlbnQsIHdlIGNhbGwgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLCBhbmQgKnRoYXQmIzM5O3MqIHdoZXJlIHdlJiMzOTtyZSBzdXBwb3NlZCB0byBpbml0aWFsaXplIGBsb2NhbF9pZGAgYWxvbmcgd2l0aCB0aGluZ3MgbGlrZSBgcmVtb3RlX25vbmNlYCwgYGxvY2FsX25vbmNlYCwgZXRjLgoKVGhlIGNyaXRpY2FsIHRoaW5nLCBiZWZvcmUgdGhlIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nLCBpcyB0aGF0IGBsb2NhbF9pZGAgKndhc24mIzM5O3QqIGJlaW5nIGluaXRpYWxpemVkIGluc2lkZSBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAuIFRoYXQgbWVhbnMgYHN1YmZsb3dfcmVxLSZndDtsb2NhbF9pZGAgd291bGQgYmUgdW5pbml0aWFsaXplZCBtZW1vcnksIHJpZ2h0IGFmdGVyIHRoZSBjYWxsIHRvIGByZXFza19hbGxvY19ub3Byb2ZgIGFuZCB0aGlzIGNyZWF0ZXMgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiBOb3cgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIGBsb2NhbF9pZGAgaXMgdXNlZCwgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIG9mIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdoZXJlIGRvZXMgdGhpcyBieXRlIGdldCBhY2Nlc3NlZCwgYW5kIGhvdz8gVGhpcyBwYXRjaCBiZXR0ZXIgZml4IGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2NhbF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL2RpYWcuYz0xNT1zdGF0aWMgaW50IHN1YmZsb3dfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG5ldF9hZG1pbilcbi0tXG5uZXQvbXB0Y3AvZGlhZy5jLTYwLVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBNUFRDUF9TVUJGTE9XX0FUVFJfSURfUkVNLCBzZi1cdTAwM2VyZW1vdGVfaWQpIHx8XG5uZXQvbXB0Y3AvZGlhZy5jOjYxOlx0ICAgIG5sYV9wdXRfdTgoc2tiLCBNUFRDUF9TVUJGTE9XX0FUVFJfSURfTE9DLCBzdWJmbG93X2dldF9sb2NhbF9pZChzZikpKSB7XG5uZXQvbXB0Y3AvZGlhZy5jLTYyLVx0XHRlcnIgPSAtRU1TR1NJWkU7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz00NjQ9Ym9vbCBtcHRjcF9zeW5fb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy00OTItXHRcdG9wdHMtXHUwMDNlc3Vib3B0aW9ucyA9IE9QVElPTl9NUFRDUF9NUEpfU1lOO1xubmV0L21wdGNwL29wdGlvbnMuYzo0OTM6XHRcdG9wdHMtXHUwMDNlam9pbl9pZCA9IHN1YmZsb3ctXHUwMDNlbG9jYWxfaWQ7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ5NC1cdFx0b3B0cy1cdTAwM2V0b2tlbiA9IHN1YmZsb3ctXHUwMDNlcmVtb3RlX3Rva2VuO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9OTQ2PWJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy05NjItXHRcdG9wdHMtXHUwMDNlYmFja3VwID0gc3ViZmxvd19yZXEtXHUwMDNlcmVxdWVzdF9ia3VwO1xubmV0L21wdGNwL29wdGlvbnMuYzo5NjM6XHRcdG9wdHMtXHUwMDNlam9pbl9pZCA9IHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkO1xubmV0L21wdGNwL29wdGlvbnMuYy05NjQtXHRcdG9wdHMtXHUwMDNldGhtYWMgPSBzdWJmbG93X3JlcS1cdTAwM2V0aG1hYztcbi0tXG5uZXQvbXB0Y3AvcG0uYz0yNTA9c3RhdGljIGJvb2wgc3ViZmxvd19pbl9ybV9saXN0KGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXG4tLVxubmV0L21wdGNwL3BtLmMtMjUyLXtcbm5ldC9tcHRjcC9wbS5jOjI1MzpcdHU4IGksIGlkID0gc3ViZmxvd19nZXRfbG9jYWxfaWQoc3ViZmxvdyk7XG5uZXQvbXB0Y3AvcG0uYy0yNTQtXG4tLVxubmV0L21wdGNwL3BtLmM9NDk4PWludCBtcHRjcF9wbV9hbm5vdW5jZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtLmMtNTAzLVxubmV0L21wdGNwL3BtLmM6NTA0Olx0cHJfZGVidWcoXCYjMzQ7bXNrPSVwLCBsb2NhbF9pZD0lZCwgZWNobz0lZFxcblwmIzM0OywgbXNrLCBhZGRyLVx1MDAzZWlkLCBlY2hvKTtcbm5ldC9tcHRjcC9wbS5jLTUwNS1cbi0tXG5uZXQvbXB0Y3AvcG0uYz03NjQ9c3RhdGljIHZvaWQgbXB0Y3BfcG1fcm1fYWRkcl9vcl9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtLmMtNzkzLVx0XHRcdGludCBob3cgPSBSQ1ZfU0hVVERPV04gfCBTRU5EX1NIVVRET1dOO1xubmV0L21wdGNwL3BtLmM6Nzk0Olx0XHRcdHU4IGlkID0gc3ViZmxvd19nZXRfbG9jYWxfaWQoc3ViZmxvdyk7XG5uZXQvbXB0Y3AvcG0uYy03OTUtXG4tLVxubmV0L21wdGNwL3BtLmMtODAzLVxubmV0L21wdGNwL3BtLmM6ODA0Olx0XHRcdHByX2RlYnVnKFwmIzM0OyAtXHUwMDNlICVzIHJtX2xpc3RfaWRzWyVkXT0ldSBsb2NhbF9pZD0ldSByZW1vdGVfaWQ9JXUgbXBjX2lkPSV1XFxuXCYjMzQ7LFxubmV0L21wdGNwL3BtLmMtODA1LVx0XHRcdFx0IHJtX3R5cGUgPT0gTVBUQ1BfTUlCX1JNQUREUiA/IFwmIzM0O2FkZHJlc3NcJiMzNDsgOiBcJiMzNDtzdWJmbG93XCYjMzQ7LFxuLS1cbm5ldC9tcHRjcC9wbS5jPTEwMDE9Ym9vbCBtcHRjcF9wbV9ybV9hZGRyX3NpZ25hbChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTEwMzEtXG5uZXQvbXB0Y3AvcG0uYzoxMDMyOmludCBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2tfY29tbW9uICpza2MpXG5uZXQvbXB0Y3AvcG0uYy0xMDMzLXtcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMDUxLVx0aWYgKG1wdGNwX3BtX2lzX3VzZXJzcGFjZShtc2spKVxubmV0L21wdGNwL3BtLmM6MTA1MjpcdFx0cmV0dXJuIG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQobXNrLCBcdTAwMjZza2NfbG9jYWwpO1xubmV0L21wdGNwL3BtLmM6MTA1MzpcdHJldHVybiBtcHRjcF9wbV9ubF9nZXRfbG9jYWxfaWQobXNrLCBcdTAwMjZza2NfbG9jYWwpO1xubmV0L21wdGNwL3BtLmMtMTA1NC19XG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTIwMz1maWxsX3JlbW90ZV9hZGRyZXNzZXNfZnVsbG1lc2goc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMjE5LVx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MjIwOlx0XHRpZiAoUkVBRF9PTkNFKHN1YmZsb3ctXHUwMDNlbG9jYWxfaWQpID09IGxvY2FsLVx1MDAzZWlkKVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTIyMS1cdFx0XHRfX3NldF9iaXQoc3ViZmxvdy1cdTAwM2VyZW1vdGVfaWQsIHVuYXZhaWxfaWQpO1xuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0yODE9X19sb29rdXBfYWRkcihzdHJ1Y3QgcG1fbmxfcGVybmV0ICpwZXJuZXQsIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmluZm8pXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTI5Mi1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoyOTM6c3RhdGljIHU4IG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMjk0LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz01MDc9ZmlsbF9sb2NhbF9sYW1pbmFyX2VuZHAoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqcmVtb3RlLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy01MjktXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NTMwOlx0XHRfX3NldF9iaXQoc3ViZmxvd19nZXRfbG9jYWxfaWQoc3ViZmxvdyksIHVuYXZhaWxfaWQpO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jLTUzMS1cdH1cbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNTQwLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjU0MTpcdFx0aWYgKHRlc3RfYml0KG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKG1zaywgXHUwMDI2ZW50cnktXHUwMDNlYWRkciksXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNTQyLVx0XHRcdCAgICAgdW5hdmFpbF9pZCkpXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTg1Mj1zdGF0aWMgaW50IG1wdGNwX3BtX25sX2NyZWF0ZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTE3LVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjkxODppbnQgbXB0Y3BfcG1fbmxfZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTE5LVx0XHRcdCAgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKnNrYylcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9MTA1Nj1zdGF0aWMgdm9pZCBtcHRjcF9wbV9yZW1vdmVfYW5ub3VuY2VkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEwNjItXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTA2MzpcdGxpc3QuaWRzW2xpc3QubnImIzQzOyYjNDM7XSA9IG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKG1zaywgYWRkcik7XG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTA2NC1cbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9MTA4Mz1zdGF0aWMgaW50IG1wdGNwX25sX3JlbW92ZV9zdWJmbG93X2FuZF9zaWduYWxfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTExMDQtXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTEwNTpcdFx0bGlzdC5pZHNbMF0gPSBtcHRjcF9lbmRwX2dldF9sb2NhbF9pZChtc2ssIGFkZHIpO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jLTExMDYtXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTEyMjU9c3RhdGljIHZvaWQgbXB0Y3BfcG1fZmx1c2hfYWRkcnNfYW5kX3N1YmZsb3dzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEyMzktXHRcdGlmIChtcHRjcF9wbV9oYXNfc3ViZmxvd19zYWRkcihtc2ssIFx1MDAyNmVudHJ5LVx1MDAzZWFkZHIpKVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjEyNDA6XHRcdFx0c2xpc3QuaWRzW3NsaXN0Lm5yJiM0MzsmIzQzO10gPSBtcHRjcF9lbmRwX2dldF9sb2NhbF9pZChtc2ssIFx1MDAyNmVudHJ5LVx1MDAzZWFkZHIpO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEyNDEtXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTI0Mi1cdFx0aWYgKG1wdGNwX3BtX2Fubm91bmNlZF9yZW1vdmUobXNrLCBcdTAwMjZlbnRyeS1cdTAwM2VhZGRyKSlcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoxMjQzOlx0XHRcdGFsaXN0Lmlkc1thbGlzdC5uciYjNDM7JiM0MztdID0gbXB0Y3BfZW5kcF9nZXRfbG9jYWxfaWQobXNrLCBcdTAwMjZlbnRyeS1cdTAwM2VhZGRyKTtcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMjQ0LVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xNDY3PXN0YXRpYyB2b2lkIG1wdGNwX3BtX25sX2Z1bGxtZXNoKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE0NzEtXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTQ3MjpcdGxpc3QuaWRzW2xpc3QubnImIzQzOyYjNDM7XSA9IG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKG1zaywgYWRkcik7XG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTQ3My1cbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTI5OD1zdGF0aWMgaW50IG1wdGNwX2V2ZW50X2FkZF9zdWJmbG93KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0zMzUtXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjMzNjpcdGlmIChubGFfcHV0X3U4KHNrYiwgTVBUQ1BfQVRUUl9MT0NfSUQsIHN1YmZsb3dfZ2V0X2xvY2FsX2lkKHNmKSkpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTMzNy1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTIyPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcl9ieV9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgaWQpXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTEzMi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxMzM6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xMzQtXHRcdFx0XHQgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKnNrYylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MjUzPXN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjYyLVx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoyNjM6XHRcdGlmIChSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2Vsb2NhbF9pZCkgPT0gMCkge1xubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTI2NC1cdFx0XHRoYXNfaWRfMCA9IHRydWU7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTAzPXN0YXRpYyBpbnQgX19tcHRjcF9zb2NrZXRfY3JlYXRlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTIyLVx0LyogVGhpcyBpcyB0aGUgZmlyc3Qgc3ViZmxvdywgYWx3YXlzIHdpdGggaWQgMCAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTIzOlx0V1JJVEVfT05DRShzdWJmbG93LVx1MDAzZWxvY2FsX2lkLCAwKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEyNC1cdG1wdGNwX3NvY2tfZ3JhZnQobXNrLVx1MDAzZWZpcnN0LCBzay1cdTAwM2Vza19zb2NrZXQpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI2ODQ9dm9pZCBtcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODctXHQvKiBUaGUgZmlyc3Qgc3ViZmxvdyBjYW4gYWxyZWFkeSBiZSBjbG9zZWQgb3IgZGlzY29ubmVjdGVkICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNjg4Olx0aWYgKHN1YmZsb3ctXHUwMDNlY2xvc2VfZXZlbnRfZG9uZSB8fCBSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2Vsb2NhbF9pZCkgXHUwMDNjIDApXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjg5LVx0XHRyZXR1cm47XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU2ND1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzYyNy1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM2Mjg6XHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM2MjktXHQgKiB1c2VzIHRoZSBjb3JyZWN0IGRhdGFcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD01MDI9c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MDktXHRcdGFsbG93X2pvaW5faWQwIDogMTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUxMDpcdHU4XHRsb2NhbF9pZDtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUxMS1cdHU4XHRyZW1vdGVfaWQ7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9NTQ0PXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTYwMS1cdH07XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo2MDI6XHRzMTZcdGxvY2FsX2lkO1x0ICAgIC8qIGlmIG5lZ2F0aXZlIG5vdCBpbml0aWFsaXplZCB5ZXQgKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTYwMy1cdHU4XHRyZW1vdGVfaWQ7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9NjQ5PW1wdGNwX3N1YmZsb3dfY3R4X3Jlc2V0KHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3cpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtNjUyLVx0c3ViZmxvdy1cdTAwM2VyZXF1ZXN0X21wdGNwID0gMTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjY1MzpcdFdSSVRFX09OQ0Uoc3ViZmxvdy1cdTAwM2Vsb2NhbF9pZCwgLTEpO1xubmV0L21wdGNwL3Byb3RvY29sLmgtNjU0LX1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjExPWJvb2wgbXB0Y3BfcG1fcm1fYWRkcl9zaWduYWwoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMTItXHRcdFx0ICAgICBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCwgaW50ICpsZW4pO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTIxMzppbnQgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMTQ6aW50IG1wdGNwX3BtX25sX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTIxNS1cdFx0XHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICpza2MpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTIxNjppbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTIxNy1cdFx0XHRcdCAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqc2tjKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjI3PWludCBtcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2FkZHIodTggaWQsIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICphZGRyLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMjktXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjMwOnN0YXRpYyBpbmxpbmUgdTggc3ViZmxvd19nZXRfbG9jYWxfaWQoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMzEte1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTIzMjpcdGludCBsb2NhbF9pZCA9IFJFQURfT05DRShzdWJmbG93LVx1MDAzZWxvY2FsX2lkKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMzMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjM0Olx0aWYgKGxvY2FsX2lkIFx1MDAzYyAwKVxubmV0L21wdGNwL3Byb3RvY29sLmgtMTIzNS1cdFx0cmV0dXJuIDA7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMjM2Olx0cmV0dXJuIGxvY2FsX2lkO1xubmV0L21wdGNwL3Byb3RvY29sLmgtMTIzNy19XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz04NT1zdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg4LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbm5ldC9tcHRjcC9zdWJmbG93LmM6ODk6XHRpbnQgbG9jYWxfaWQ7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTkwLVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtOTYtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjk3Olx0bG9jYWxfaWQgPSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQobXNrLCAoc3RydWN0IHNvY2tfY29tbW9uICopcmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6OTg6XHRpZiAobG9jYWxfaWQgXHUwMDNjIDApIHtcbm5ldC9tcHRjcC9zdWJmbG93LmMtOTktXHRcdHNvY2tfcHV0KChzdHJ1Y3Qgc29jayAqKW1zayk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDEtXHR9XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEwMjpcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gbG9jYWxfaWQ7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEwMy1cdHN1YmZsb3dfcmVxLVx1MDAzZXJlcXVlc3RfYmt1cCA9IG1wdGNwX3BtX2lzX2JhY2t1cChtc2ssIChzdHJ1Y3Qgc29ja19jb21tb24gKilyZXEpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NTIxPXN0YXRpYyB2b2lkIHN1YmZsb3dfZmluaXNoX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjE4LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2MTk6c3RhdGljIHZvaWQgc3ViZmxvd19zZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdywgaW50IGxvY2FsX2lkKVxubmV0L21wdGNwL3N1YmZsb3cuYy02MjAte1xubmV0L21wdGNwL3N1YmZsb3cuYzo2MjE6XHRXQVJOX09OX09OQ0UobG9jYWxfaWQgXHUwMDNjIDAgfHwgbG9jYWxfaWQgXHUwMDNlIDI1NSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjYyMjpcdFdSSVRFX09OQ0Uoc3ViZmxvdy1cdTAwM2Vsb2NhbF9pZCwgbG9jYWxfaWQpO1xubmV0L21wdGNwL3N1YmZsb3cuYy02MjMtfVxubmV0L21wdGNwL3N1YmZsb3cuYy02MjQtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjYyNTpzdGF0aWMgaW50IHN1YmZsb3dfY2hrX2xvY2FsX2lkKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjI2LXtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTYzMC1cbm5ldC9tcHRjcC9zdWJmbG93LmM6NjMxOlx0aWYgKGxpa2VseShzdWJmbG93LVx1MDAzZWxvY2FsX2lkIFx1MDAzZT0gMCkpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTYzMi1cdFx0cmV0dXJuIDA7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTYzMy1cbm5ldC9tcHRjcC9zdWJmbG93LmM6NjM0Olx0ZXJyID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjM1LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTYzNy1cbm5ldC9tcHRjcC9zdWJmbG93LmM6NjM4Olx0c3ViZmxvd19zZXRfbG9jYWxfaWQoc3ViZmxvdywgZXJyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjM5LVx0c3ViZmxvdy1cdTAwM2VyZXF1ZXN0X2JrdXAgPSBtcHRjcF9wbV9pc19iYWNrdXAobXNrLCAoc3RydWN0IHNvY2tfY29tbW9uICopc2spO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjQ0PXN0YXRpYyBpbnQgc3ViZmxvd19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY0NS17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY0NjpcdGludCBlcnIgPSBzdWJmbG93X2Noa19sb2NhbF9pZChzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY0Ny1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY1NT1zdGF0aWMgaW50IHN1YmZsb3dfdjZfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3N1YmZsb3cuYy02NTYte1xubmV0L21wdGNwL3N1YmZsb3cuYzo2NTc6XHRpbnQgZXJyID0gc3ViZmxvd19jaGtfbG9jYWxfaWQoc2spO1xubmV0L21wdGNwL3N1YmZsb3cuYy02NTgtXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjA4PWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjEyLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTYxMzpcdGludCBsb2NhbF9pZCA9IGxvY2FsLVx1MDAzZWFkZHIuaWQ7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2MTQtXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYyOS1cdFx0cHJfZGVidWcoXCYjMzQ7bXNrPSVwIGxvY2FsPSVkIHJlbW90ZT0lZCBjcmVhdGUgc29jayBlcnJvcjogJWRcXG5cJiMzNDssXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2MzA6XHRcdFx0IG1zaywgbG9jYWxfaWQsIHJlbW90ZV9pZCwgZXJyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYzMS1cdFx0Z290byBlcnJfb3V0O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY0Mi1cdFx0aWYgKCFsb2NhbC1cdTAwM2VhZGRyLmFkZHIuc19hZGRyKVxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjQzOlx0XHRcdGxvY2FsX2lkID0gLTE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDQtI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjQ2LVx0XHRpZiAoaXB2Nl9hZGRyX2FueShcdTAwMjZsb2NhbC1cdTAwM2VhZGRyLmFkZHI2KSlcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY0NzpcdFx0XHRsb2NhbF9pZCA9IC0xO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xNjQ4LSNlbmRpZlxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY1MC1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY1MTpcdGlmIChsb2NhbF9pZCBcdTAwM2U9IDApXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NTI6XHRcdHN1YmZsb3dfc2V0X2xvY2FsX2lkKHN1YmZsb3csIGxvY2FsX2lkKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY1My1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NjktXHRcdHByX2RlYnVnKFwmIzM0O21zaz0lcCBsb2NhbD0lZCByZW1vdGU9JWQgYmluZCBlcnJvcjogJWRcXG5cJiMzNDssXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NzA6XHRcdFx0IG1zaywgbG9jYWxfaWQsIHJlbW90ZV9pZCwgZXJyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY3MS1cdFx0Z290byBmYWlsZWQ7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjc0LVx0bXB0Y3BfY3J5cHRvX2tleV9zaGEoc3ViZmxvdy1cdTAwM2VyZW1vdGVfa2V5LCBcdTAwMjZyZW1vdGVfdG9rZW4sIE5VTEwpO1xubmV0L21wdGNwL3N1YmZsb3cuYzoxNjc1Olx0cHJfZGVidWcoXCYjMzQ7bXNrPSVwIHJlbW90ZV90b2tlbj0ldSBsb2NhbF9pZD0lZCByZW1vdGVfaWQ9JWRcXG5cJiMzNDssIG1zayxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY3NjpcdFx0IHJlbW90ZV90b2tlbiwgbG9jYWxfaWQsIHJlbW90ZV9pZCk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NzctXHRzdWJmbG93LVx1MDAzZXJlbW90ZV90b2tlbiA9IHJlbW90ZV90b2tlbjtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2ODktXHRcdHByX2RlYnVnKFwmIzM0O21zaz0lcCBsb2NhbD0lZCByZW1vdGU9JWQgY29ubmVjdCBlcnJvcjogJWRcXG5cJiMzNDssXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2OTA6XHRcdFx0IG1zaywgbG9jYWxfaWQsIHJlbW90ZV9pZCwgZXJyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY5MS1cdFx0Z290byBmYWlsZWRfdW5saW5rO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTgzNj1zdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvd19jcmVhdGVfY3R4KHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4NTItXHRjdHgtXHUwMDNldGNwX3NvY2sgPSBzaztcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg1MzpcdFdSSVRFX09OQ0UoY3R4LVx1MDAzZWxvY2FsX2lkLCAtMSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4NTQtXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDMwPXN0YXRpYyB2b2lkIHN1YmZsb3dfdWxwX2Nsb25lKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwNjYtXHRcdC8qIHRoaXMgaXMgdGhlIGZpcnN0IHN1YmZsb3csIGlkIGlzIGFsd2F5cyAwICovXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwNjc6XHRcdHN1YmZsb3dfc2V0X2xvY2FsX2lkKG5ld19jdHgsIDApO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMDY4LVx0fSBlbHNlIGlmIChzdWJmbG93X3JlcS1cdTAwM2VtcF9qb2luKSB7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDgxLVx0XHQgKi9cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjA4MjpcdFx0c3ViZmxvd19zZXRfbG9jYWxfaWQobmV3X2N0eCwgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMDgzLVx0fVxuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9MjM9c3RydWN0IGpvaW5fZW50cnkge1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtMjctXHR1OCBqb2luX2lkO1xubmV0L21wdGNwL3N5bmNvb2tpZXMuYzoyODpcdHU4IGxvY2FsX2lkO1xubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0yOS1cdHU4IGJhY2t1cDtcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTU5PXN0YXRpYyB2b2lkIG1wdGNwX2pvaW5fc3RvcmVfc3RhdGUoc3RydWN0IGpvaW5fZW50cnkgKmVudHJ5LFxuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNjYtXHRlbnRyeS1cdTAwM2Vqb2luX2lkID0gc3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX2lkO1xubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo2NzpcdGVudHJ5LVx1MDAzZWxvY2FsX2lkID0gc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQ7XG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTY4LVx0ZW50cnktXHUwMDNldmFsaWQgPSAxO1xuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9OTI9Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0xMjAtXHRzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQgPSBlLVx1MDAzZWpvaW5faWQ7XG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjEyMTpcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gZS1cdTAwM2Vsb2NhbF9pZDtcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtMTIyLVx0c3ViZmxvd19yZXEtXHUwMDNldG9rZW4gPSBlLVx1MDAzZXRva2VuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA2NQoJCQkJCQkJb3V0cHV0OiAzNzEKCQkJCQkJCXRob3VnaHRzOiAxOTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IEluZm8tTGVhayBpbiBNUFRDUCBTWU4gQ29va2llIEhhbmRsaW5nKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIEkmIzM5O20gbG9va2luZyBhdCBob3cgTVBUQ1AgaGFuZGxlcyBzdWJmbG93cywgc3BlY2lmaWNhbGx5IHdoZW4gYSBTWU4gY29va2llIGlzIGludm9sdmVkLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYG1wdGNwX3N5bmFja19vcHRpb25zYCwgd2hpY2ggZGVhbHMgd2l0aCBTWU4tQUNLIHBhY2tldHMsIGFuZCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMgdGhlIEFDSyBpbiBhIFNZTiBjb29raWUgaGFuZHNoYWtlLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBpc3N1ZSBpbW1lZGlhdGVseS4KCldoZW4gYW4gQUNLIHdpdGggYSBTWU4gY29va2llIGNvbWVzIGluLCB0aGUgc2VydmVyIHJlY29uc3RydWN0cyB0aGUgcmVxdWVzdCBzb2NrZXQuIFRoZSBmdW5jdGlvbiBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIGNyZWF0ZXMgYSBuZXcgYHJlcXVlc3Rfc29ja2AsIGFuZCB0aGVuIGNhbGxzIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCB0byBwb3B1bGF0ZSBpdCB1c2luZyB0aGUgY29va2llIGRhdGEuIFRoZW4sIHRoaXMgcmVjb25zdHJ1Y3RlZCByZXF1ZXN0IHNvY2tldCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgYWN0dWFsIHN1YmZsb3cgc29ja2V0LiBUaGlzIGlzIGhhbmRsZWQgYnkgYHN1YmZsb3dfdWxwX2Nsb25lYC4KCk5vdywgaWYgd2UgZGl2ZSBpbnRvIHRoZSBjb2RlLCBlc3BlY2lhbGx5IGBzdWJmbG93X3VscF9jbG9uZWAsIGl0IGNvcGllcyBkYXRhIGZyb20gdGhlIGBzdWJmbG93X3JlcWAgc3RydWN0dXJlIGludG8gdGhlIG5ldyBzdWJmbG93IGNvbnRleHQuIEkgbm90aWNlZCB0aGF0IGBzdWJmbG93X3JlcS0mZ3Q7bG9jYWxfaWRgIGlzIHBhcnQgb2YgdGhpcyBjb3B5aW5nLiBJZiB0aGlzIHZhbHVlIGlzIHVuaW5pdGlhbGl6ZWQsIHRoZSBjb2RlIHVzZXMgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSwgYmVjYXVzZSBpdCBjYW4gYmUgdXNlZCBmb3IgdGhpbmdzIGxpa2UgbmV0bGluayBtZXNzYWdlcyBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgcGFja2V0cy4KCkhlcmUmIzM5O3MgdGhlIHByb2JsZW06IGBzdWJmbG93X3JlcWAgY29tZXMgZnJvbSBgcmVxc2tfYWxsb2NgLCBhbmQgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gYSBzbGFiIGNhY2hlLiBJbXBvcnRhbnRseSwgdGhpcyBhbGxvY2F0aW9uIGRvZXMgKm5vdCogemVybyB0aGUgbWVtb3J5IGJ5IGRlZmF1bHQuIFRoaXMgbWVhbnMgdGhhdCBpZiBzb21ldGhpbmcgaXNuJiMzOTt0IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGl0IHdpbGwgaG9sZCB3aGF0ZXZlciBnYXJiYWdlIHZhbHVlIHdhcyBwcmV2aW91c2x5IGluIHRoYXQgbWVtb3J5IGxvY2F0aW9uLiBTbyBJIHN0YXJ0IHRvIHRoaW5rIHRoaXMgYGxvY2FsX2lkYCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLgoKTm93LCBpZiBgc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkYCBpcyB1bmluaXRpYWxpemVkIHdoZW4gYHN1YmZsb3dfdWxwX2Nsb25lYCBpcyBjYWxsZWQgYW5kIGBsb2NhbF9pZGAgaXMgKm5vdCogc3BlY2lmaWNhbGx5IGFzc2lnbmVkIGVsc2V3aGVyZSwgdGhlbiB0aGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSBnZXRzIGNvcGllZCBpbnRvIHRoZSBuZXcgc3ViZmxvdyBjb250ZXh0LCB0aGVuIHVzZWQgaW4gdmFyaW91cyBwbGFjZXMgbGlrZSBuZXRsaW5rIG1lc3NhZ2VzLCB0aGUgbmV0d29yaywgZXRjLiBJJiMzOTt2ZSBmb3VuZCBwbGFjZXMgd2hlcmUgdGhlIGBsb2NhbF9pZGAgaXMgc2VudCB0byB1c2Vyc3BhY2UgdmlhIGBubGFfcHV0X3U4YCB3aGljaCB0cmFuc2xhdGVzIHRvIGEgcG90ZW50aWFsIG9uZS1ieXRlIGluZm8tbGVhay4KClRoZSBjcml0aWNhbCBiaXQgaXMgdGhhdCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRoZW4gc2VudCBvdXQgdG8gdXNlcnNwYWNlLiBJJiMzOTttIHdvbmRlcmluZyBpZiBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIHdvdWxkIGNhdGNoIHRoaXMsIGJ1dCBubywgS0FTQU4gZG9lc24mIzM5O3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBPbmx5IEtNU0FOIGRvZXMuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgS01TQU4gcmVhbGx5IHNoaW5lcy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIGByZXF1ZXN0X3NvY2tgLiBJIHNlZSB0aGF0IGBrbWVtX2NhY2hlX2FsbG9jX25vcHJvZmAgZG9lcyAqbm90KiBoYXZlIGBfX0dGUF9aRVJPYCB3aGljaCBjb25maXJtcyBpdCBkb2VzbiYjMzk7dCB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBJIHZlcmlmeSB0aGF0IGBzdWJmbG93X2luaXRfcmVxYCBkb2VzbiYjMzk7dCBzZXQgYGxvY2FsX2lkYC4gVGhlcmVmb3JlIGBsb2NhbF9pZGAgaXMgaW5kZWVkIHVuaW5pdGlhbGl6ZWQuCgpTbywgdGhlIHBhdGNoIGhlcmUgaXMgY3J1Y2lhbC4gVGhlIHBhdGNoIGFkZHMgYW4gYXNzaWdubWVudCBvZiBgbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgLiBTbyBiZWZvcmUgdGhlIHBhdGNoLCBgbG9jYWxfaWRgIHdhcyB1bmluaXRpYWxpemVkIGZyb20gdGhlIGByZXFza19hbGxvYygpYCBhbGxvY2F0aW9uLiBUaGlzIHdvdWxkIGJlIGEgcGVyZmVjdCBzcG90IHRvIHRlc3Qgd2l0aCBLTVNBTiwgZ2l2ZW4gdGhlIHZ1bG5lcmFiaWxpdHkgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW5mby1sZWFrcy4KCkkgY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIGVmZmVjdGl2ZWx5IGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHRoYXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlIG9yIHRoZSBuZXR3b3JrLCB0aGVyZWZvcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IHJlY29tbWVuZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGFzc2lnbm1lbnQgdG8gYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYC4gYHN1YmZsb3dfcmVxYCBpcyBhIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGByZXFza19hbGxvYygpYC4gVGhlIGByZXFza19hbGxvYygpYCBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gYSBzbGFiIGNhY2hlIHdpdGhvdXQgdGhlIGBfX0dGUF9aRVJPYCBmbGFnLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC5cblxuV2hpbGUgYHN1YmZsb3dfaW5pdF9yZXEoKWAgaW5pdGlhbGl6ZXMgc2V2ZXJhbCBmaWVsZHMgb2YgdGhlIHJlcXVlc3Qgc29ja2V0LCBpdCBkb2VzIG5vdCBpbml0aWFsaXplIGBsb2NhbF9pZGAuIER1cmluZyBhIFNZTiBjb29raWUgTVBfSk9JTiwgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoKWAgaXMgY2FsbGVkIHRvIHJlY29uc3RydWN0IHRoZSByZXF1ZXN0IHNvY2tldCBzdGF0ZSBmcm9tIHRoZSBjb29raWUuIEJlZm9yZSB0aGlzIHBhdGNoLCBpdCBmYWlsZWQgdG8gcmVzdG9yZSBgbG9jYWxfaWRgLCBsZWF2aW5nIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZGAgdW5pbml0aWFsaXplZC5cblxuVGhpcyB1bmluaXRpYWxpemVkIDEtYnl0ZSB2YWx1ZSBpcyBsYXRlciBjb3BpZWQgdG8gdGhlIHN1YmZsb3cgY29udGV4dCAoYG5ld19jdHgtXHUwMDNlbG9jYWxfaWRgKSBpbiBgc3ViZmxvd191bHBfY2xvbmUoKWAuIEZyb20gdGhlcmUsIHRoZSB1bmluaXRpYWxpemVkIGtlcm5lbCBoZWFwIG1lbW9yeSBjYW4gYmUgbGVha2VkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoZS5nLiwgYE1QVENQX1NVQkZMT1dfQVRUUl9JRF9MT0NgIGluIGBzdWJmbG93X2dldF9pbmZvKClgKSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgVENQIG9wdGlvbnMuXG5cblN0YW5kYXJkIEtBU0FOIGRvZXMgbm90IGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgaXQgb25seSBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcyBhbmQgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2ltaWxhciBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuIGFzc2lnbm1lbnQgdG8gYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYC4gYHN1YmZsb3dfcmVxYCBpcyBhIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGByZXFza19hbGxvYygpYC4gVGhlIGByZXFza19hbGxvYygpYCBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gYSBzbGFiIGNhY2hlIHdpdGhvdXQgdGhlIGBfX0dGUF9aRVJPYCBmbGFnLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC5cblxuV2hpbGUgYHN1YmZsb3dfaW5pdF9yZXEoKWAgaW5pdGlhbGl6ZXMgc2V2ZXJhbCBmaWVsZHMgb2YgdGhlIHJlcXVlc3Qgc29ja2V0LCBpdCBkb2VzIG5vdCBpbml0aWFsaXplIGBsb2NhbF9pZGAuIER1cmluZyBhIFNZTiBjb29raWUgTVBfSk9JTiwgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoKWAgaXMgY2FsbGVkIHRvIHJlY29uc3RydWN0IHRoZSByZXF1ZXN0IHNvY2tldCBzdGF0ZSBmcm9tIHRoZSBjb29raWUuIEJlZm9yZSB0aGlzIHBhdGNoLCBpdCBmYWlsZWQgdG8gcmVzdG9yZSBgbG9jYWxfaWRgLCBsZWF2aW5nIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZGAgdW5pbml0aWFsaXplZC5cblxuVGhpcyB1bmluaXRpYWxpemVkIDEtYnl0ZSB2YWx1ZSBpcyBsYXRlciBjb3BpZWQgdG8gdGhlIHN1YmZsb3cgY29udGV4dCAoYG5ld19jdHgtXHUwMDNlbG9jYWxfaWRgKSBpbiBgc3ViZmxvd191bHBfY2xvbmUoKWAuIEZyb20gdGhlcmUsIHRoZSB1bmluaXRpYWxpemVkIGtlcm5lbCBoZWFwIG1lbW9yeSBjYW4gYmUgbGVha2VkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoZS5nLiwgYE1QVENQX1NVQkZMT1dfQVRUUl9JRF9MT0NgIGluIGBzdWJmbG93X2dldF9pbmZvKClgKSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgVENQIG9wdGlvbnMuXG5cblN0YW5kYXJkIEtBU0FOIGRvZXMgbm90IGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgaXQgb25seSBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcyBhbmQgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2ltaWxhciBidWdzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjMxLjA2NDc5NTc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MjkxMTE2MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZVwiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYXNzaWdubWVudCB0byBgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYC4gYHN1YmZsb3dfcmVxYCBpcyBhIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGByZXFza19hbGxvYygpYC4gVGhlIGByZXFza19hbGxvYygpYCBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gYSBzbGFiIGNhY2hlIHdpdGhvdXQgdGhlIGBfX0dGUF9aRVJPYCBmbGFnLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC5cXG5cXG5XaGlsZSBgc3ViZmxvd19pbml0X3JlcSgpYCBpbml0aWFsaXplcyBzZXZlcmFsIGZpZWxkcyBvZiB0aGUgcmVxdWVzdCBzb2NrZXQsIGl0IGRvZXMgbm90IGluaXRpYWxpemUgYGxvY2FsX2lkYC4gRHVyaW5nIGEgU1lOIGNvb2tpZSBNUF9KT0lOLCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYCBpcyBjYWxsZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIHJlcXVlc3Qgc29ja2V0IHN0YXRlIGZyb20gdGhlIGNvb2tpZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGZhaWxlZCB0byByZXN0b3JlIGBsb2NhbF9pZGAsIGxlYXZpbmcgYHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9pZGAgdW5pbml0aWFsaXplZC5cXG5cXG5UaGlzIHVuaW5pdGlhbGl6ZWQgMS1ieXRlIHZhbHVlIGlzIGxhdGVyIGNvcGllZCB0byB0aGUgc3ViZmxvdyBjb250ZXh0IChgbmV3X2N0eC1cXHUwMDNlbG9jYWxfaWRgKSBpbiBgc3ViZmxvd191bHBfY2xvbmUoKWAuIEZyb20gdGhlcmUsIHRoZSB1bmluaXRpYWxpemVkIGtlcm5lbCBoZWFwIG1lbW9yeSBjYW4gYmUgbGVha2VkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoZS5nLiwgYE1QVENQX1NVQkZMT1dfQVRUUl9JRF9MT0NgIGluIGBzdWJmbG93X2dldF9pbmZvKClgKSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgVENQIG9wdGlvbnMuXFxuXFxuU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIGFuZCBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIG9mIGBzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIE1QVENQIHN5bmNvb2tpZSBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgTVBUQ1AgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjMxLjA2NDgwNDE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQyMDY3NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTgwYTYzMGM2NjY2NjZiOGQ0Y2NlN2U3OTFkNGU4MDIzYWIyNWZjZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxMjozMDoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3luY29va2llcy5jIGIvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xcbmluZGV4IDdmMjI1MjYzNDZhN2UuLmI1Y2FjNTcwMTEyMjEgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xcbisrKyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmNcXG5AQCAtMTE4LDYgKzExOCw3IEBAIGJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsXFxuIFxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9ub25jZSA9IGUtXFx1MDAzZWxvY2FsX25vbmNlO1xcbiBcXHRzdWJmbG93X3JlcS1cXHUwMDNlYmFja3VwID0gZS1cXHUwMDNlYmFja3VwO1xcbiBcXHRzdWJmbG93X3JlcS1cXHUwMDNlcmVtb3RlX2lkID0gZS1cXHUwMDNlam9pbl9pZDtcXG4rXFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkID0gZS1cXHUwMDNlbG9jYWxfaWQ7XFxuIFxcdHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbiA9IGUtXFx1MDAzZXRva2VuO1xcbiBcXHRzdWJmbG93X3JlcS1cXHUwMDNlbXNrID0gbXNrO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjMyLjQwNzYyMjI5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM2ODY0MTMxODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZVwiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBtaXNzaW5nIGluaXRpYWxpemF0aW9uIG9mIGBzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIE1QVENQIHN5bmNvb2tpZSBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgTVBUQ1AgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4MGE2MzBjNjY2NjY2YjhkNGNjZTdlNzkxZDRlODAyM2FiMjVmY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxMjozMDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zeW5jb29raWVzLmMgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jXG5pbmRleCA3ZjIyNTI2MzQ2YTdlLi5iNWNhYzU3MDExMjIxIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xuKysrIGIvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xuQEAgLTExOCw2ICsxMTgsNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbFxuIFx0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfbm9uY2UgPSBlLVx1MDAzZWxvY2FsX25vbmNlO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlYmFja3VwID0gZS1cdTAwM2ViYWNrdXA7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQgPSBlLVx1MDAzZWpvaW5faWQ7XG4rXHRzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZCA9IGUtXHUwMDNlbG9jYWxfaWQ7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2V0b2tlbiA9IGUtXHUwMDNldG9rZW47XG4gXHRzdWJmbG93X3JlcS1cdTAwM2Vtc2sgPSBtc2s7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjMyLjQwNzYyMzUzNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Njc2Mjc4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwYXRjaDpcblxuKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgTVBUQ1AgUGF0Y2gqKlxuXG5Pa2F5LCBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L21wdGNwL3N5bmNvb2tpZXMuY2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQgc2VlbXMgdG8gYWRkIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZCA9IGUtXHUwMDNlbG9jYWxfaWQ7YCB3aXRoaW4gdGhlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgd2h5IGFyZSB3ZSBkb2luZyB0aGlzP1wiLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU28sIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGl0c2VsZi4gV2hhdOKAmXMgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2U/IEFuZCB3aGF0IGlzIGBzdWJmbG93X3JlcWA/IElzIGl0IGFuIGVzdGFibGlzaGVkIGRhdGEgc3RydWN0dXJlIG9yIGFuIGluc3RhbmNlPyBBbmQgaG93IGRvZXMgYGVgIHJlbGF0ZSB0byBgbG9jYWxfaWRgPyBXaGF0IGtpbmQgb2YgdmFsdWUgYXJlIHdlIGRlYWxpbmcgd2l0aD8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBoYW5kc2hha2UgcHJvY2VzcyB0byB3aGljaCB0aGlzIGNvb2tpZSBpbml0aWFsaXphdGlvbiBpcyByZWxhdGVkIHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGFuZ2UuIFdoYXQgcGFydCBvZiB0aGUgTVBUQ1AgaGFuZHNoYWtlIGlzIGJlaW5nIG1vZGlmaWVkPyBMZXQncyB0cmFjZSBiYWNrIHdoZXJlIHRoaXMgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGlzIGJlaW5nIGNhbGxlZCBhbmQgc2VlIGhvdyBgc3ViZmxvd19yZXFgIGFuZCBgZWAgYXJlIHVzZWQuIFRoaXMgY2hhbmdlIGxpa2VseSBoYXMgc29tZSBpbXBhY3Qgb24gaG93IHdlIGhhbmRsZSBzdWJmbG93IGpvaW4gcmVxdWVzdHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgdG9rZW5zLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQgdGhhdCBpbXBhY3QgaXMgYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgcGF0Y2gncyBtZXJpdC4gSXMgdGhpcyBhIHNlY3VyaXR5IGZpeCwgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzA6MzYuODc1MjU0NjI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzE5Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3N5bmNvb2tpZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc3luY29va2llcy5jPTcxPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkxLSAqL1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMDozNi45MjM1Nzg5OThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY5OTAyMzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGZ1bmN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoZXJlIHRoaXMgZnVuY3Rpb24gc2l0cyB3aXRoaW4gdGhlIGxhcmdlciBNUFRDUCBmcmFtZXdvcmsuIFdoYXQncyBpdHMgcm9sZSwgYW5kIHdoYXQgYXJlIGl0cyBpbnB1dHMgYW5kIG91dHB1dHM/IEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIHNldHRpbmcgdXAgb3IgaW5pdGlhbGl6aW5nIHNvbWUgY3J1Y2lhbCBzdGF0ZSByZWxhdGVkIHRvIHRoZSBqb2luIGNvb2tpZSBhbmQgdG9rZW4gbWVjaGFuaXNtLiBJdCdzIHByb2JhYmx5IGNhbGxlZCBkdXJpbmcgdGhlIGhhbmRzaGFrZSBvciB3aGVuIGEgbmV3IHN1YmZsb3cgaXMgYmVpbmcgZXN0YWJsaXNoZWQuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOlxuXG4qICAgV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgbW9kaWZ5aW5nIG9yIHBvcHVsYXRpbmc/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBNUFRDUCBjb25uZWN0aW9uIGNvbnRyb2wgYmxvY2ssIHRoZSBzdWJmbG93J3MgZGF0YSwgb3Igc29tZSBkZWRpY2F0ZWQgY29va2llLXJlbGF0ZWQgc3RydWN0dXJlP1xuKiAgIFdoYXQgaXMgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHN0YXRlPyBJcyBpdCBvbmx5IGluaXRpYWxpemVkLCBvciBpcyBpdCBhbHNvIHVwZGF0ZWQgb3IgY2xlYXJlZCBsYXRlciBpbiB0aGUgY29ubmVjdGlvbj9cbiogICBIb3cgZG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIHJlbGF0ZSB0byB0aGUgTVBUQ1AncyBvdmVyYWxsIHNlY3VyaXR5IGFuZCBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtcz9cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgbG9naWMuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjb2RlIHRvIHNlZSBpZiBpdCdzIGdlbmVyYXRpbmcgbmV3IGNvb2tpZXMgb3IgdG9rZW5zLCBvciB2YWxpZGF0aW5nIHByZXZpb3VzbHkgcmVjZWl2ZWQgb25lcy4gSWYgSSB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcywgaXQnbGwgaGVscCBtZSBhc3Nlc3MgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBhdHRhY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzA6NDAuODkzNDg1MTM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3N5bmNvb2tpZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHQgKiBwcmVzZW50IGluIHRoZSBjb29raWUgQUNLIG1wdGNwIG9wdGlvbiBzcGFjZSB3aWxsIGJlIGNoZWNrZWQgbGF0ZXIuXFxuICA5MTpcXHQgKi9cXG4gIDkyOlxcdGJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbiAgOTM6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXNrLnJlcS5pcmVxX25ldCk7XFxuICA5NjpcXHRcXHR1MzIgaSA9IG1wdGNwX2pvaW5fZW50cnlfaGFzaChza2IsIG5ldCk7XFxuICA5NzpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrO1xcbiAgOTg6XFx0XFx0c3RydWN0IGpvaW5fZW50cnkgKmU7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdGUgPSBcXHUwMDI2am9pbl9lbnRyaWVzW2ldO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRpZiAoZS1cXHUwMDNldmFsaWQgPT0gMCkge1xcbiAxMDU6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xcbiAxMDY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMDc6XFx0XFx0fVxcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRlLVxcdTAwM2V2YWxpZCA9IDA7XFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdG1zayA9IG1wdGNwX3Rva2VuX2dldF9zb2NrKG5ldCwgZS1cXHUwMDNldG9rZW4pO1xcbiAxMTI6XFx0XFx0aWYgKCFtc2spIHtcXG4gMTEzOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcXG4gMTE0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTE1OlxcdFxcdH1cXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9ub25jZSA9IGUtXFx1MDAzZXJlbW90ZV9ub25jZTtcXG4gMTE4OlxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9ub25jZSA9IGUtXFx1MDAzZWxvY2FsX25vbmNlO1xcbiAxMTk6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZWJhY2t1cCA9IGUtXFx1MDAzZWJhY2t1cDtcXG4gMTIwOlxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2VyZW1vdGVfaWQgPSBlLVxcdTAwM2Vqb2luX2lkO1xcbiAxMjE6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkID0gZS1cXHUwMDNlbG9jYWxfaWQ7XFxuIDEyMjpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNldG9rZW4gPSBlLVxcdTAwM2V0b2tlbjtcXG4gMTIzOlxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2sgPSBtc2s7XFxuIDEyNDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XFxuIDEyNTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMTI2OlxcdH1cXG4gMTI3OlxcdFxcbiAxMjg6XFx0dm9pZCBfX2luaXQgbXB0Y3Bfam9pbl9jb29raWVfaW5pdCh2b2lkKVxcbiAxMjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMDo0MC44OTM1NTM3MDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjIzMTc1OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBNUFRDUCBTeW5jb29raWUgTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhpcyBpcyBhYm91dCBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIG1vZGlmaWNhdGlvbiBpbiBob3cgTVBUQ1Agc3luY29va2llcyB3b3JrLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsIFwiUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLlwiIEkgbmVlZCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBNUFRDUC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHR3ZWFrZWQgYW5kIGhvdyB0aGV5J3JlIGluZmx1ZW5jaW5nIHRoZSBvdmVyYWxsIGJlaGF2aW9yLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucz8gQW55IHNlY3VyaXR5IHJhbWlmaWNhdGlvbnM/IEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHRoZSBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjQ1LjExNjczNzk2M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc2NzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzA6NDUuMTYyNTEyMDUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkxMTI0MjMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1QVENQIFRva2VuIEhhbmRsaW5nKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgZGVmaW5pdGVseSBgTVBUQ1BgLiBUaW1lIHRvIHplcm8gaW4gb24gdGhpcyBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBzY29wZSBhbmQgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgd2hlcmUgaXQgZ2V0cyBjYWxsZWQgZnJvbeKAlHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIE1QVENQIHN0YWNrIHJlbHkgb24gaXRzIGZ1bmN0aW9uYWxpdHk/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggaXMgYWx3YXlzIHRoZSBmaXJzdCBzdGVwIGZvciBtZSB0byBncmFzcCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIGJlZm9yZSBJIGNhbiB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDYzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzA6NTUuMDczNzU4MzQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkzMDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmg9MTM2Mj12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjQ6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNzE9c3RhdGljIGlubGluZSBib29sXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MjptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjM9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjg5LVxcdH0gZWxzZSBpZiAob3B0X21wX2pvaW4gXFx1MDAyNlxcdTAwMjYgbGlzdGVuZXItXFx1MDAzZXJlcXVlc3RfbXB0Y3ApIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjI5MDpcXHRcXHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTcxPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkxLSAqL1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMDo1NS4xMTg2OTQxNzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NDU4NTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIE1QVENQIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGluaXRpYXRpbmcgdGhlIGNvb2tpZSByZXF1ZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGFzIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBhbmQgc2VlIHdoYXQgaXQncyBkb2luZy4gTGV0J3Mgc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIGhhbmRzaGFrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMwOjU4LjA4MzI4MjQ2N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzNTAzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jPTE0Nz1zdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjYyLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjYzOmludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNjQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI5OC19XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyOTk6RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMDo1OC4xMjk2Mzc2NzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNjg2NTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIFNjb3BlIG9mIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBmdW5jdGlvbiwgdGhlIG9uZSBkZWFsaW5nIHdpdGggaW5pdGlhbCBjb29raWUgcmVxdWVzdHMgd2l0aGluIE1QVENQLCBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBvdGhlciBmdW5jdGlvbnMgKndpdGhpbiogdGhlIGBuZXQvbXB0Y3AvYCBkaXJlY3RvcnksIG9yIGRvZXMgaXQgaGF2ZSBhbiBleHRlcm5hbCBpbnRlcmZhY2UsIGkuZS4sIGlzIGl0IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgbW9kdWxlPyBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IGl0cyBib3VuZGFyaWVzLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24ncyBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIGFuZCBob3cgdGlnaHRseSBjb3VwbGVkIGl0IGlzIHRvIHRoZSByZXN0IG9mIHRoZSBNUFRDUCBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyBpZiBleHRlcm5hbCBjb2RlIGRpcmVjdGx5IGNhbGxzIHRoaXMgY291bGQgaW1wYWN0IGhvdyBJIGFwcHJvYWNoIGFueSBtb2RpZmljYXRpb25zIG9yIGRlYnVnZ2luZy4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGxpbmcgY29udGV4dC4gTGV0IG1lIHRyYWNlIHRoZSBjYWxscyBhbmQgZG8gc29tZSBjcm9zcy1yZWZlcmVuY2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE5NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjAxLjM1NjUxMDk2MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyNDIyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9zeW5jb29raWVzLmM9MjYzPXN0YXRpYyBpbnQgY29va2llX3RjcF9yZXFza19pbml0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yOTQtXFx0aWYgKHRyZXEtXFx1MDAzZWlzX21wdGNwKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyOTU6XFx0XFx0cmV0dXJuIG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHJlcSwgc2ssIHNrYik7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTI5Ni0jZW5kaWZcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ3PXN0YXRpYyBpbnQgc3ViZmxvd19jaGVja19yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNjItXFxubmV0L21wdGNwL3N1YmZsb3cuYzoyNjM6aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI2NC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjk4LX1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjI5OTpFWFBPUlRfU1lNQk9MX0dQTChtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0zMDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjAxLjQ0MDc1ODI1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzQ1NDY4MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBUQ1AgVG9rZW4gSm9pbiBDb29raWUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L2lwdjQvc3luY29va2llcy5jYC4gSSd2ZSBob25lZCBpbiBvbiBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIGFuZCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgYXMgdGhlIGtleSBmdW5jdGlvbnMgdG8gZXhhbWluZSBoZXJlLiBUaGUgcmVsZXZhbnQgY29uZmlnIGlzIGBNUFRDUGAsIHdoaWNoIEknbGwga2VlcCBpbiBtaW5kLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGFib3V0IGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gSSBuZWVkIHRvIGNoZWNrIGlmIGl0J3Mgc3RhdGljIG9yIGdsb2JhbC4gQWgsIGl0J3Mgbm90IHN0YXRpYzsgaXQncyBleHBvcnRlZCwgc28gaXQncyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBJJ20gbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG5vdzogYGJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuXG5cblJpZ2h0LCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBtaXNzaW5nIGluaXRpYWxpemF0aW9uIGlzc3VlLiBJdCBzZWVtcyBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIHdhc24ndCBiZWluZyBpbml0aWFsaXplZCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgc28gSSdsbCBuZWVkIHRvIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLiBJdCBzZWVtcyBgTVBUQ1BgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZy5cblxuQWxyaWdodCwgSSB0aGluayBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjaGFuZ2UuIEknbSByZWFkeSB0byBkb2N1bWVudCBteSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4MSwiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6MDkuMTg2MjI5NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTUyMTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlXCIsXG4gICAgXCJtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gb2YgYHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9pZGAgaW4gYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgTVBUQ1Agc3luY29va2llIHByb2Nlc3NpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNUFRDUCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVcIixcbiAgICBcIm1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgbWlzc2luZyBpbml0aWFsaXphdGlvbiBvZiBgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBNUFRDUCBzeW5jb29raWUgcHJvY2Vzc2luZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1QVENQIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTowOS4yNzE3NTk0MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwODQxNDIxMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTowOS4yNzIzOTczNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzA4MzUwMDA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBhc3NpZ25tZW50IHRvIGBzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgLiBgc3ViZmxvd19yZXFgIGlzIGEgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYHJlcXNrX2FsbG9jKClgLiBUaGUgYHJlcXNrX2FsbG9jKClgIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgZnJvbSBhIHNsYWIgY2FjaGUgd2l0aG91dCB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLlxcblxcbldoaWxlIGBzdWJmbG93X2luaXRfcmVxKClgIGluaXRpYWxpemVzIHNldmVyYWwgZmllbGRzIG9mIHRoZSByZXF1ZXN0IHNvY2tldCwgaXQgZG9lcyBub3QgaW5pdGlhbGl6ZSBgbG9jYWxfaWRgLiBEdXJpbmcgYSBTWU4gY29va2llIE1QX0pPSU4sIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgIGlzIGNhbGxlZCB0byByZWNvbnN0cnVjdCB0aGUgcmVxdWVzdCBzb2NrZXQgc3RhdGUgZnJvbSB0aGUgY29va2llLiBCZWZvcmUgdGhpcyBwYXRjaCwgaXQgZmFpbGVkIHRvIHJlc3RvcmUgYGxvY2FsX2lkYCwgbGVhdmluZyBgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkYCB1bmluaXRpYWxpemVkLlxcblxcblRoaXMgdW5pbml0aWFsaXplZCAxLWJ5dGUgdmFsdWUgaXMgbGF0ZXIgY29waWVkIHRvIHRoZSBzdWJmbG93IGNvbnRleHQgKGBuZXdfY3R4LVxcdTAwM2Vsb2NhbF9pZGApIGluIGBzdWJmbG93X3VscF9jbG9uZSgpYC4gRnJvbSB0aGVyZSwgdGhlIHVuaW5pdGlhbGl6ZWQga2VybmVsIGhlYXAgbWVtb3J5IGNhbiBiZSBsZWFrZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChlLmcuLCBgTVBUQ1BfU1VCRkxPV19BVFRSX0lEX0xPQ2AgaW4gYHN1YmZsb3dfZ2V0X2luZm8oKWApIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBNUFRDUCBUQ1Agb3B0aW9ucy5cXG5cXG5TdGFuZGFyZCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk7IGl0IG9ubHkgZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZXMgYW5kIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4MGE2MzBjNjY2NjY2YjhkNGNjZTdlNzkxZDRlODAyM2FiMjVmY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxMjozMDoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zeW5jb29raWVzLmMgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jXG5pbmRleCA3ZjIyNTI2MzQ2YTdlLi5iNWNhYzU3MDExMjIxIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xuKysrIGIvbmV0L21wdGNwL3N5bmNvb2tpZXMuY1xuQEAgLTExOCw2ICsxMTgsNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbFxuIFx0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfbm9uY2UgPSBlLVx1MDAzZWxvY2FsX25vbmNlO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlYmFja3VwID0gZS1cdTAwM2ViYWNrdXA7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQgPSBlLVx1MDAzZWpvaW5faWQ7XG4rXHRzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZCA9IGUtXHUwMDNlbG9jYWxfaWQ7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2V0b2tlbiA9IGUtXHUwMDNldG9rZW47XG4gXHRzdWJmbG93X3JlcS1cdTAwM2Vtc2sgPSBtc2s7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjA5LjI3MjM5ODJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM4Mjc5NDkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIFRva2VuIEpvaW4gQ29va2llIEluaXRpYWxpemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gZS1cdTAwM2Vsb2NhbF9pZDtgIHRvIHRoZSBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbXB0Y3Avc3luY29va2llcy5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gdGhlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZSwganVzdCBhbiBhc3NpZ25tZW50IHdpdGhpbiB0aGUgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIGZ1bmN0aW9uLCBhc3NpZ25pbmcgYSB2YWx1ZSBmcm9tIGBlLVx1MDAzZWxvY2FsX2lkYCB0byBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHdlJ3JlIGludHJvZHVjaW5nIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBjb3BpZWQgYXJvdW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBvZiB0aGlzIGFzc2lnbm1lbnQuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBgc3ViZmxvd19yZXFgIGFuZCBgZWAgYWN0dWFsbHkgKmFyZSouIEkga25vdyB0aGV5J3JlIGJvdGggbGlrZWx5IHN0cnVjdHVyZXMsIHBvaW50ZXJzIGluIHRoaXMgY29udGV4dCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucyBvZiBgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrYCBhbmQgYHN0cnVjdCBqb2luX2VudHJ5YC5cblxuUmlnaHQsIGBzdWJmbG93X3JlcWAgaXMgYSBwb2ludGVyIHRvIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLCBhbmQgYGVgIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IGpvaW5fZW50cnlgLiBOb3cgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIGBlLVx1MDAzZWxvY2FsX2lkYCBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIGFzc2lnbm1lbnQ/IElmIG5vdCwgd2UgY291bGQgcG90ZW50aWFsbHkgYmUgY29weWluZyB1bmluaXRpYWxpemVkIGRhdGEsIHdoaWNoIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3Vlcy4gVGltZSB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L21wdGNwL3N5bmNvb2tpZXMuY2AgdG8gc2VlIGhvdyB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBwb3B1bGF0ZWQgYW5kIHdoZXJlIGBlLVx1MDAzZWxvY2FsX2lkYCBnZXRzIGl0cyB2YWx1ZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50IHRvIGVuc3VyZSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjE1LjY1NTE5NzI3M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4NTgyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGpvaW5fZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3N5bmNvb2tpZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc3luY29va2llcy5jLTIyLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6MjM6c3RydWN0IGpvaW5fZW50cnkge1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtMjQtXFx0dTMyIHRva2VuO1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0zNC1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjM1OnN0YXRpYyBzdHJ1Y3Qgam9pbl9lbnRyeSBqb2luX2VudHJpZXNbQ09PS0lFX0pPSU5fU0xPVFNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtMzYtc3RhdGljIHNwaW5sb2NrX3Qgam9pbl9lbnRyeV9sb2Nrc1tDT09LSUVfSk9JTl9TTE9UU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTM4PXN0YXRpYyB1MzIgbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNTgtXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo1OTpzdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSxcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTYwLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTkyPWJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05Ny1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrO1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTg6XFx0c3RydWN0IGpvaW5fZW50cnkgKmU7XFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6MTUuNzA0MDY4MDMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzg5NTkzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBqb2luX2VudHJ5YCBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGBzdHJ1Y3Qgam9pbl9lbnRyeWAgZGVmaW5pdGlvbi4gSXQncyB0aGUgbHluY2hwaW4gZm9yIGhvdyBqb2lucyBhcmUgaGFuZGxlZCwgc28gdW5kZXJzdGFuZGluZyBpdHMgY29tcG9uZW50cyBpcyBjcml0aWNhbC4gSSBuZWVkIHRvIGJlIHN1cmUgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb2YgaXRzIGZpZWxkcyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGpvaW4gb3BlcmF0aW9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGxheW91dCwgYW55IHBvdGVudGlhbCBhbGlnbm1lbnQgaXNzdWVzLCBhbmQgaG93IHRoZSB2YXJpb3VzIGZpZWxkcyBjb250cmlidXRlIHRvIGVmZmljaWVudCBsb29rdXBzIGFuZCBjb21wYXJpc29ucy4gVGhpcyBkZWZpbml0aW9uIGlzIGdvaW5nIHRvIGRpY3RhdGUgYSBsb3QgYWJvdXQgcGVyZm9ybWFuY2UgYW5kIHNjYWxhYmlsaXR5LCBzbyBhIGRlZXAgdW5kZXJzdGFuZGluZyBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6MTkuMDQzMDMwMzg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9zeW5jb29raWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0ICogd2hlbiB0aGUgVENQIEFDSyBwYXNzZWQgdGhlIGNvb2tpZSB2YWxpZGF0aW9uIGNoZWNrLlxcbiAgMjE6XFx0ICovXFxuICAyMjpcXHRcXG4gIDIzOlxcdHN0cnVjdCBqb2luX2VudHJ5IHtcXG4gIDI0OlxcdFxcdHUzMiB0b2tlbjtcXG4gIDI1OlxcdFxcdHUzMiByZW1vdGVfbm9uY2U7XFxuICAyNjpcXHRcXHR1MzIgbG9jYWxfbm9uY2U7XFxuICAyNzpcXHRcXHR1OCBqb2luX2lkO1xcbiAgMjg6XFx0XFx0dTggbG9jYWxfaWQ7XFxuICAyOTpcXHRcXHR1OCBiYWNrdXA7XFxuICAzMDpcXHRcXHR1OCB2YWxpZDtcXG4gIDMxOlxcdH07XFxuICAzMjpcXHRcXG4gIDMzOlxcdCNkZWZpbmUgQ09PS0lFX0pPSU5fU0xPVFNcXHQxMDI0XFxuICAzNDpcXHRcXG4gIDM1OlxcdHN0YXRpYyBzdHJ1Y3Qgam9pbl9lbnRyeSBqb2luX2VudHJpZXNbQ09PS0lFX0pPSU5fU0xPVFNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbiAgMzY6XFx0c3RhdGljIHNwaW5sb2NrX3Qgam9pbl9lbnRyeV9sb2Nrc1tDT09LSUVfSk9JTl9TTE9UU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuICAzNzpcXHRcXG4gIDM4OlxcdHN0YXRpYyB1MzIgbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcXG4gIDM5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6MTkuMDQzMTEwODg3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODM1MzUzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgam9pbl9lbnRyaWVzYCBhbmQgRm9jdXMgb24gYG1wdGNwX2pvaW5fc3RvcmVfc3RhdGVgKipcblxuQWxyaWdodCwgc28gYGpvaW5fZW50cmllc2AgaXMgYSBnbG9iYWwgYXJyYXksIG1lYW5pbmcgaXRzIGNvbnRlbnRzIGFyZSBhdXRvbWF0aWNhbGx5IHplcm8taW5pdGlhbGl6ZWQgYXQgdGhlIHN0YXJ0LiBUaGF0J3MgZ29vZCB0byBrbm93IOKAkyBwcmV2ZW50cyBzb21lIHVuZXhwZWN0ZWQgdmFsdWVzIGZyb20gcG9wcGluZyB1cCBpbiB0aGUgaW5pdGlhbCBzdGF0ZSwgd2hpY2ggaXMgYSBjb21tb24gY2F1c2Ugb2YgaGFyZC10by1kZWJ1ZyBpc3N1ZXMuIE5vdywgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBsb2dpYyB0aGF0IG1hbmFnZXMgaXQsIGJ1dCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZWAgc3BlY2lmaWNhbGx5LiBJdCdzIHRoZSBjb3JlIHN0YXRlIG1hbmFnZW1lbnQgZm9yIHRoZSBqb2luaW5nIHByb2Nlc3MsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQgaW50ZXJhY3RzIHdpdGggYGpvaW5fZW50cmllc2AgY29ycmVjdGx5LiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0YXRlIGxvb2tzIGltcG9ydGFudC4gTGV0J3Mgc2VlIHdoYXQgaXMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjIyLjYyNjY0ODk1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9zeW5jb29raWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTg6XFx0XFxuICA1OTpcXHRzdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSxcXG4gIDYwOlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXFxuICA2MTpcXHR7XFxuICA2MjpcXHRcXHRlbnRyeS1cXHUwMDNldG9rZW4gPSBzdWJmbG93X3JlcS1cXHUwMDNldG9rZW47XFxuICA2MzpcXHRcXHRlbnRyeS1cXHUwMDNlcmVtb3RlX25vbmNlID0gc3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9ub25jZTtcXG4gIDY0OlxcdFxcdGVudHJ5LVxcdTAwM2Vsb2NhbF9ub25jZSA9IHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9ub25jZTtcXG4gIDY1OlxcdFxcdGVudHJ5LVxcdTAwM2ViYWNrdXAgPSBzdWJmbG93X3JlcS1cXHUwMDNlYmFja3VwO1xcbiAgNjY6XFx0XFx0ZW50cnktXFx1MDAzZWpvaW5faWQgPSBzdWJmbG93X3JlcS1cXHUwMDNlcmVtb3RlX2lkO1xcbiAgNjc6XFx0XFx0ZW50cnktXFx1MDAzZWxvY2FsX2lkID0gc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkO1xcbiAgNjg6XFx0XFx0ZW50cnktXFx1MDAzZXZhbGlkID0gMTtcXG4gIDY5OlxcdH1cXG4gIDcwOlxcdFxcbiAgNzE6XFx0dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG4gIDcyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgNzM6XFx0e1xcbiAgNzQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcXG4gIDc1OlxcdFxcdHUzMiBpID0gbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHNrYiwgbmV0KTtcXG4gIDc2OlxcdFxcbiAgNzc6XFx0XFx0LyogTm8gdXNlIGluIHdhaXRpbmcgaWYgb3RoZXIgY3B1IGlzIGFscmVhZHkgdXNpbmcgdGhpcyBzbG90IC0tXFxuICA3ODpcXHRcXHQgKiB3b3VsZCBvdmVyd3JpdGUgdGhlIGRhdGEgdGhhdCBnb3Qgc3RvcmVkLlxcbiAgNzk6XFx0XFx0ICovXFxuICA4MDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xcbiAgODE6XFx0XFx0bXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShcXHUwMDI2am9pbl9lbnRyaWVzW2ldLCBzdWJmbG93X3JlcSk7XFxuICA4MjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XFxuICA4MzpcXHR9XFxuICA4NDpcXHRcXG4gIDg1OlxcdC8qIENhbGxlZCBmb3IgYSBjb29raWUtYWNrIHdpdGggTVBfSk9JTiBvcHRpb24gcHJlc2VudC5cXG4gIDg2OlxcdCAqIExvb2sgdXAgdGhlIHNhdmVkIHN0YXRlIGJhc2VkIG9uIHNrYiBoYXNoIFxcdTAwMjYgY2hlY2sgdG9rZW4gbWF0Y2hlcyBtc2tcXG4gIDg3OlxcdCAqIGluIHNhbWUgbmV0bnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjIyLjYyNjcxNDY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTkxNzgzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgTVBUQ1AgVG9rZW4gSm9pbiBDb29raWUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgY2hhbmdlIHdpdGhpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAuIFRoZSBrZXkgYWRkaXRpb24gaXMgYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gZS1cdTAwM2Vsb2NhbF9pZDtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJ3JlIGVzc2VudGlhbGx5IGxpbmtpbmcgdGhlIGBsb2NhbF9pZGAgZnJvbSBzb21lIGVsZW1lbnQgYGVgIHRvIHRoZSBgc3ViZmxvd19yZXFgIHN0cnVjdHVyZSBkdXJpbmcgdGhlIHRva2VuIGpvaW4gY29va2llIGluaXRpYWxpemF0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgZGlyZWN0IG1hcHBpbmcgb3IgYXNzb2NpYXRpb24gaXMgYmVpbmcgY3JlYXRlZC4gSSBoYXZlIHRvIGxvb2sgZGVlcGVyIGludG8gd2hhdCBgZWAgcmVwcmVzZW50cyBhbmQgd2hhdCB0aGUgYHN1YmZsb3dfcmVxYCBjb250ZXh0IGlzIHRvIGRldGVybWluZSB0aGUgKndoeSouIElzIGl0IHNldHRpbmcgdXAgYSBwZXItc3ViZmxvdyBjb250ZXh0LCBhc3NvY2lhdGluZyBhIGxvY2FsIGlkZW50aWZpZXIgd2l0aCB0aGUgc3RhdGU/IElzIHRoZXJlIGEgc3VidGxlIGltcGFjdCBvbiBjb25jdXJyZW5jeSBvciB0aGUgd2F5IHdlJ3JlIGhhbmRsaW5nIGlkZW50aWZpZXJzPyBMZXQgbWUgY2hlY2sgaG93IGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBpcyBhY3R1YWxseSB1c2VkIGFuZCB3aGF0IGBlYCBhbmQgYHN1YmZsb3dfcmVxYCBhcmUgZGVmaW5lZCBhcyB0byBkZXRlcm1pbmUgaXRzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6MjYuNzg1ODk1Njg2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9zeW5jb29raWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTIsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTI6XFx0Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxuICA5MzpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgOTQ6XFx0e1xcbiAgOTU6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNlc2sucmVxLmlyZXFfbmV0KTtcXG4gIDk2OlxcdFxcdHUzMiBpID0gbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHNrYiwgbmV0KTtcXG4gIDk3OlxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XFxuICA5ODpcXHRcXHRzdHJ1Y3Qgam9pbl9lbnRyeSAqZTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0ZSA9IFxcdTAwMjZqb2luX2VudHJpZXNbaV07XFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdGlmIChlLVxcdTAwM2V2YWxpZCA9PSAwKSB7XFxuIDEwNTpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2am9pbl9lbnRyeV9sb2Nrc1tpXSk7XFxuIDEwNjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEwNzpcXHRcXHR9XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdGUtXFx1MDAzZXZhbGlkID0gMDtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0bXNrID0gbXB0Y3BfdG9rZW5fZ2V0X3NvY2sobmV0LCBlLVxcdTAwM2V0b2tlbik7XFxuIDExMjpcXHRcXHRpZiAoIW1zaykge1xcbiAxMTM6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmpvaW5fZW50cnlfbG9ja3NbaV0pO1xcbiAxMTQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMTU6XFx0XFx0fVxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlcmVtb3RlX25vbmNlID0gZS1cXHUwMDNlcmVtb3RlX25vbmNlO1xcbiAxMTg6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX25vbmNlID0gZS1cXHUwMDNlbG9jYWxfbm9uY2U7XFxuIDExOTpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlYmFja3VwID0gZS1cXHUwMDNlYmFja3VwO1xcbiAxMjA6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9pZCA9IGUtXFx1MDAzZWpvaW5faWQ7XFxuIDEyMTpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWQgPSBlLVxcdTAwM2Vsb2NhbF9pZDtcXG4gMTIyOlxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbiA9IGUtXFx1MDAzZXRva2VuO1xcbiAxMjM6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZW1zayA9IG1zaztcXG4gMTI0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZqb2luX2VudHJ5X2xvY2tzW2ldKTtcXG4gMTI1OlxcdFxcdHJldHVybiB0cnVlO1xcbiAxMjY6XFx0fVxcbiAxMjc6XFx0XFxuIDEyODpcXHR2b2lkIF9faW5pdCBtcHRjcF9qb2luX2Nvb2tpZV9pbml0KHZvaWQpXFxuIDEyOTpcXHR7XFxuIDEzMDpcXHRcXHRpbnQgaTtcXG4gMTMxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMToyNi43ODU5ODAyMzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQwMDY2NDcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBQb3RlbnRpYWwgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXQgc2VlbXMgbGlrZSBpdCdzIHJlc3RvcmluZyBgbG9jYWxfaWRgIGZyb20gdGhlIGBqb2luX2VudHJ5YCBzdHJ1Y3QgdG8gYHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkYC4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGBlLVx1MDAzZWxvY2FsX2lkYCB3YXMgaW5pdGlhbGx5IHNldCB1c2luZyBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIHZpYSBgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIHRoZXJlIGEgcmlzayBvZiB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlP1wiIFdlJ3JlIGRlYWxpbmcgd2l0aCBnbG9iYWwgYXJyYXkgYGpvaW5fZW50cmllc2AsIHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQsIHNvIHRoYXQncyBub3QgYSBjb25jZXJuLiBBbmQgYHN1YmZsb3dfcmVxYD8gSXQncyBwYXJ0IG9mIGEgcmVxdWVzdCBzb2NrZXQsIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLiBUaGlzIHBhdGNoIGlzIGJhc2ljYWxseSBqdXN0IGNvcHlpbmcgYSB2YWx1ZSB0aGF0IHdhcyBwcmV2aW91c2x5IGFzc2lnbmVkLlxuXG5UaGUgcG90ZW50aWFsIGlzc3VlIEkgc2VlIGlzIGlmIGBsb2NhbF9pZGAgKndhc24ndCogcmVzdG9yZWQuIFdoYXQgd291bGQgaXQgYmU/IFplcm8/IFVuaW5pdGlhbGl6ZWQgZ2FyYmFnZT8gSWYgd2UgZGlkbid0IHJlc3RvcmUgaXQsIHdoYXRldmVyIHdhcyBpbiBtZW1vcnkgYXQgdGhlIHRpbWUgYHN1YmZsb3dfcmVxYCB3YXMgYWxsb2NhdGVkIGlzIHdoYXQgd2UnZCBiZSB1c2luZyBsYXRlci4gVGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gQnV0IHdhaXQsIHR5cGljYWxseSwgcmVxdWVzdCBzb2NrZXRzIGFyZSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBTbyBpdCdzIHByb2JhYmx5ICpub3QqIGFuIGlzc3VlLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHRha2UgYSBsb29rIGF0IHdoZXJlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBpcyBjYWxsZWQgYW5kIGhvdyB0aGUgYHN1YmZsb3dfcmVxYCBpcyBjcmVhdGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmaW5hbCBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyOTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTozMy4xODY2NDc3MDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDkwNTk3NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmg9MTM2Mj12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjQ6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNzE9c3RhdGljIGlubGluZSBib29sXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MjptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjM9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjg5LVxcdH0gZWxzZSBpZiAob3B0X21wX2pvaW4gXFx1MDAyNlxcdTAwMjYgbGlzdGVuZXItXFx1MDAzZXJlcXVlc3RfbXB0Y3ApIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjI5MDpcXHRcXHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTcxPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkxLSAqL1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTI6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTozNC44MzU3MTI3OTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2NjkwMjc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBcInRob3VnaHRzXCIgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCoqXG5cblJpZ2h0LCBzbyB0aGUgc3lzdGVtIGlzIHRlbGxpbmcgbWUgdG8gY2hlY2sgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYC4gVGhhdCBsaWtlbHkgbWVhbnMgdGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIHN1YmZsb3csIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGNvb2tpZSByZXF1ZXN0IG1lY2hhbmlzbS4gR2l2ZW4gdGhlIG5hbWUsIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgdGhlIGluaXRpYXRpbmcgZW5kcG9pbnQgb2YgYSBzdWJmbG93IGlzIGhhbmRsaW5nIHRoZSBpbml0aWFsIGNvb2tpZSBleGNoYW5nZSB3aXRoIHRoZSBwZWVyLiBXZSBrbm93IHRoZSBjb29raWUgaXMgZnVuZGFtZW50YWwgZm9yIE1QVENQIHNlY3VyaXR5IGFuZCBzdWJmbG93IGlkZW50aWZpY2F0aW9uLCBzbyBwcm9ibGVtcyB0aGVyZSBhcmUgZ29pbmcgdG8gcXVpY2tseSBiZWNvbWUgY2F0YXN0cm9waGljIGZvciBNUFRDUCBvcGVyYXRpb24uIEknbGwgbmVlZCB0byBsb29rIGF0OlxuXG4qICAgKipUaGUgY29udGV4dCoqOiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBmcm9tPyBJcyBpdCBkdXJpbmcgdGhlIGluaXRpYWwgY29ubmVjdGlvbiBzZXR1cCwgYSByZS1lc3RhYmxpc2htZW50IGF0dGVtcHQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjbHVlcy5cbiogICAqKlRoZSBpbnB1dCBkYXRhKio6IFdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgcGFzc2VkIHRvIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWA/IFRoYXQgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGluaXRpYXRvciBpcyBhdHRlbXB0aW5nIHRvIGNvbW11bmljYXRlIHRvIHRoZSBvdGhlciBzaWRlLCBhbmQgd2hhdCBkZXRhaWxzIGFyZSBwZXJ0aW5lbnQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGZvcm1hdCBhbmQgdmFsaWRpdHkgb2YgdGhlIGNvb2tpZSBkYXRhIChpZiBhbnkpLlxuKiAgICoqVGhlIGZ1bmN0aW9uIGxvZ2ljKio6IFdoYXQgc3RlcHMgZG9lcyB0aGlzIGZ1bmN0aW9uIHRha2U/IEhvdyBkb2VzIGl0IGdlbmVyYXRlL2hhbmRsZS92YWxpZGF0ZSB0aGUgY29va2llIHJlcXVlc3Q/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaGVyZSAoZS5nLiwgd2VhayBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IsIGltcHJvcGVyIGhhbmRsaW5nIG9mIGJ1ZmZlciBvdmVyZmxvd3MsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzKT9cbiogICAqKlRoZSBlcnJvciBoYW5kbGluZyoqOiBXaGF0IGhhcHBlbnMgaWYgdGhlIGNvb2tpZSByZXF1ZXN0IGZhaWxzPyBBcmUgdGhlcmUgYXBwcm9wcmlhdGUgZmFsbGJhY2sgbWVjaGFuaXNtcyBvciBlcnJvciBtZXNzYWdlcz8gQXJlIHBvdGVudGlhbCBlcnJvcnMgYmVpbmcgbG9nZ2VkIGFkZXF1YXRlbHkgZm9yIGRlYnVnZ2luZz8gSXMgdGhlIGZ1bmN0aW9uIHJlc2lsaWVudCB0byBtYWxpY2lvdXMgYXR0ZW1wdHMgdG8gY29ycnVwdCB0aGUgZGF0YT9cbiogICAqKlBlcmZvcm1hbmNlIGFzcGVjdHMqKjogSXMgdGhpcyBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s/IEFyZSB0aGVyZSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24/IFRoaXMgaXMgYSBjb3JlIHBhcnQgb2Ygc3ViZmxvdyBpbml0aWFsaXphdGlvbiBzbyBzbG93IGluaXRpYWwgc2V0dXAgY291bGQgYmUgZGV0cmltZW50YWwgdG8gdGhlIHBlcmZvcm1hbmNlIG9mIE1QVENQLlxuKiAgICoqU2VjdXJpdHkgaW1wbGljYXRpb25zKio6IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgc3VjaCBhcyBhIG1hbGljaW91cyBhY3RvciBiZWluZyBhYmxlIHRvIG1hbmlwdWxhdGUgdGhlIHN1YmZsb3cgY29va2llLlxuXG5JbiBzdW1tYXJ5LCBJIGV4cGVjdCB0aGlzIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgaXMgYSB2aXRhbCBwaWVjZSBvZiB0aGUgTVBUQ1AgcHV6emxlLCBzbyBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5LCBpbiBhbGwgb2YgaXRzIGFzcGVjdHMsIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYnVncywgdnVsbmVyYWJpbGl0aWVzLCBvciBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTozOS44MDI2MTg0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3N1YmZsb3cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjMsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjM6XFx0aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gMjY0OlxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbiAyNjU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyNjY6XFx0e1xcbiAyNjc6XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChza19saXN0ZW5lcik7XFxuIDI2ODpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG4gMjY5OlxcdFxcdHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkIG1wX29wdDtcXG4gMjcwOlxcdFxcdGJvb2wgb3B0X21wX2NhcGFibGUsIG9wdF9tcF9qb2luO1xcbiAyNzE6XFx0XFx0aW50IGVycjtcXG4gMjcyOlxcdFxcbiAyNzM6XFx0XFx0c3ViZmxvd19pbml0X3JlcShyZXEsIHNrX2xpc3RlbmVyKTtcXG4gMjc0OlxcdFxcdG1wdGNwX2dldF9vcHRpb25zKHNrYiwgXFx1MDAyNm1wX29wdCk7XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdG9wdF9tcF9jYXBhYmxlID0gISEobXBfb3B0LnN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSyk7XFxuIDI3NzpcXHRcXHRvcHRfbXBfam9pbiA9ICEhKG1wX29wdC5zdWJvcHRpb25zIFxcdTAwMjYgT1BUSU9OX01QVENQX01QSl9BQ0spO1xcbiAyNzg6XFx0XFx0aWYgKG9wdF9tcF9jYXBhYmxlIFxcdTAwMjZcXHUwMDI2IGxpc3RlbmVyLVxcdTAwM2VyZXF1ZXN0X21wdGNwKSB7XFxuIDI3OTpcXHRcXHRcXHRpZiAobXBfb3B0LnNuZHJfa2V5ID09IDApXFxuIDI4MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2tleSA9IG1wX29wdC5yY3ZyX2tleTtcXG4gMjgzOlxcdFxcdFxcdGVyciA9IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHJlcSk7XFxuIDI4NDpcXHRcXHRcXHRpZiAoZXJyKVxcbiAyODU6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZW1wX2NhcGFibGUgPSAxO1xcbiAyODg6XFx0XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZXNzbl9vZmZzZXQgPSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSAtIDE7XFxuIDI4OTpcXHRcXHR9IGVsc2UgaWYgKG9wdF9tcF9qb2luIFxcdTAwMjZcXHUwMDI2IGxpc3RlbmVyLVxcdTAwM2VyZXF1ZXN0X21wdGNwKSB7XFxuIDI5MDpcXHRcXHRcXHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXFxuIDI5MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZW1wX2pvaW4gPSAxO1xcbiAyOTQ6XFx0XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZXNzbl9vZmZzZXQgPSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSAtIDE7XFxuIDI5NTpcXHRcXHR9XFxuIDI5NjpcXHRcXG4gMjk3OlxcdFxcdHJldHVybiAwO1xcbiAyOTg6XFx0fVxcbiAyOTk6XFx0RVhQT1JUX1NZTUJPTF9HUEwobXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEpO1xcbiAzMDA6XFx0XFxuIDMwMTpcXHRzdGF0aWMgZW51bSBza19yc3RfcmVhc29uIG1wdGNwX2dldF9yc3RfcmVhc29uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDMwMjpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjM5LjgwMjc4MDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMTE3NTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gU3ViZmxvdyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIHN0YXJ0aW5nIHRoaXMgc3ViZmxvdy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIGhvdyB0aGUgYHN1YmZsb3dfaW5pdF9yZXFgIGludGVyYWN0cyB3aXRoIGFuZCBpbml0aWFsaXplcyB0aGUgY29yZSBgc3ViZmxvd19yZXFgLiBMZXQncyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGF0IHNldHVwIGlzIGNsZWFuIGFuZCBlZmZpY2llbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZm91bmRhdGlvbmFsIHJlcXVlc3QgaXMgYmVpbmcgZm9ybWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTo0My4yMTM5NjAxMTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NzI5NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN1YmZsb3dfaW5pdF9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3N1YmZsb3cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jPTg1PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqc3ViZmxvd190b2tlbl9qb2luX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDctXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMDg6c3RhdGljIHZvaWQgc3ViZmxvd19pbml0X3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEwOS17XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE0Nz1zdGF0aWMgaW50IHN1YmZsb3dfY2hlY2tfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjUyLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjUzOlxcdFxcdFxcdHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShzdWJmbG93X3JlcSwgc2tiKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI1NC1cXHRcXHR9XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTI2Mz1pbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNzItXFxubmV0L21wdGNwL3N1YmZsb3cuYzoyNzM6XFx0c3ViZmxvd19pbml0X3JlcShyZXEsIHNrX2xpc3RlbmVyKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTI3NC1cXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFxcdTAwMjZtcF9vcHQpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0zMTE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnN1YmZsb3dfdjRfcm91dGVfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzIwLVxcdHRjcF9yc2socmVxKS1cXHUwMDNlaXNfbXB0Y3AgPSAxO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MzIxOlxcdHN1YmZsb3dfaW5pdF9yZXEocmVxLCBzayk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0zMjItXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM4MD1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqc3ViZmxvd192Nl9yb3V0ZV9yZXEoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0zODktXFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vpc19tcHRjcCA9IDE7XFxubmV0L21wdGNwL3N1YmZsb3cuYzozOTA6XFx0c3ViZmxvd19pbml0X3JlcShyZXEsIHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM5MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTI6MzE6NDMuMjkyNzAzNjUzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzUxODY5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEluaXRpYWxpemF0aW9uIFJlcXVlc3QqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBhbHdheXMgbWV0aG9kaWNhbCwgYW5kIHJpZ2h0IG5vdywgSSdtIHplcm9pbmcgaW4gb24gYHN1YmZsb3dfaW5pdF9yZXFgLiBUaGF0IHNwZWNpZmljIHJlcXVlc3Qgc3RydWN0dXJlIGlzIHRoZSBjb3JuZXJzdG9uZSBvZiBob3cgb3VyIHN1YmZsb3dzIGFyZSBsYXVuY2hlZCwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNvbnRlbnRzIGlzIGNydWNpYWwuIFdoYXQgYXJlIHRoZSBrZXkgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgcGVyaGFwcyByZWxhdGVkIHRvIGRhdGEgc2FuaXRpemF0aW9uIG9yIGFjY2VzcyBjb250cm9sPyBJcyB0aGUgcmVxdWVzdCBmdWxseSBjb21wbGlhbnQgd2l0aCB0aGUgcHJvdG9jb2wgd2UndmUgZGVmaW5lZD8gVGhlIGRldmlsLCBhcyB0aGV5IHNheSwgaXMgaW4gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgaW50ZW5kZWQgdXNhZ2UgdG8gZW5zdXJlIGl0cyBvcGVyYXRpb24gYWxpZ25zIHdpdGggdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLCB3aXRob3V0IGV4cG9zaW5nIGFueSB3ZWFrbmVzc2VzLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjQ3LjUyNzg5OTM5OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3N1YmZsb3cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDg6XFx0c3RhdGljIHZvaWQgc3ViZmxvd19pbml0X3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcilcXG4gMTA5OlxcdHtcXG4gMTEwOlxcdFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlbXBfY2FwYWJsZSA9IDA7XFxuIDExMzpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlbXBfam9pbiA9IDA7XFxuIDExNDpcXHRcXHRzdWJmbG93X3JlcS1cXHUwMDNlY3N1bV9yZXFkID0gbXB0Y3BfaXNfY2hlY2tzdW1fZW5hYmxlZChzb2NrX25ldChza19saXN0ZW5lcikpO1xcbiAxMTU6XFx0XFx0c3ViZmxvd19yZXEtXFx1MDAzZWFsbG93X2pvaW5faWQwID0gbXB0Y3BfYWxsb3dfam9pbl9pZDAoc29ja19uZXQoc2tfbGlzdGVuZXIpKTtcXG4gMTE2OlxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2sgPSBOVUxMO1xcbiAxMTc6XFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHJlcSk7XFxuIDExODpcXHR9XFxuIDExOTpcXHRcXG4gMTIwOlxcdHN0YXRpYyBib29sIHN1YmZsb3dfdXNlX2RpZmZlcmVudF9zcG9ydChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuIDEyMTpcXHR7XFxuIDEyMjpcXHRcXHRyZXR1cm4gaW5ldF9zayhzayktXFx1MDAzZWluZXRfc3BvcnQgIT0gaW5ldF9zaygoc3RydWN0IHNvY2sgKiltc2spLVxcdTAwM2VpbmV0X3Nwb3J0O1xcbiAxMjM6XFx0fVxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRzdGF0aWMgdm9pZCBzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcmVhc29uKVxcbiAxMjY6XFx0e1xcbiAxMjc6XFx0XFx0c3RydWN0IG1wdGNwX2V4dCAqbXBleHQgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfTVBUQ1ApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTo0Ny41MjgwMjU5MzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMzk2MzYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIFRob3VnaHRzIG9uIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgc3ViZmxvd19pbml0X3JlcWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGhlcmUuIEkgc2VlIGl0J3MgZXhwbGljaXRseSBjbGVhcmluZyB0aGUgZmllbGRzIGxpa2UgYG1wX2NhcGFibGVgLCBgbXBfam9pbmAsIGFuZCBgbXNrYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIGNsZWFuIHNsYXRlIGZvciB0aGUgc3ViZmxvdy4gQnV0IGhvbGQgb24uLi4gaXQgKmRvZXNuJ3QqIHplcm8gYGxvY2FsX2lkYC4gVGhhdCdzIGEgcG9pbnQgb2YgcG90ZW50aWFsIGNvbmZ1c2lvbi4gV2UgbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgdGhhdCdzIGhhbmRsZWQgbGF0ZXIgb24uIEl0IGNvdWxkIGJlIGltcG9ydGFudC4gQW5kLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYCBpc24ndCBqdXN0IGhhbmdpbmcgb3V0OyBpdCdzIGJlaW5nIGFsbG9jYXRlZCB0aHJvdWdoIGByZXFza19hbGxvY2AuIFJpZ2h0LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBhcmUgaGFwcGVuaW5nIGFzIHdlIGV4cGVjdC4gVGltZSB0byBkaXZlIGludG8gYHJlcXNrX2FsbG9jYCBhbmQgc2VlIGhvdyBpdCdzIHNldHRpbmcgdGhpbmdzIHVwLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN1YmZsb3cncyBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjUxLjg0MTk5MjQ5NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3Nzc5ODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXNrX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3JlcXVlc3Rfc29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTo1MS44OTg3NzgxMTNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyOTQ3MzQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBuZXQvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgcmVxc2tfYWxsb2NgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIHJlcXVlc3Qgc29ja2V0IGFsbG9jYXRpb24uIFNpbmNlIEknbSBrbmVlLWRlZXAgaW4gbmV0d29ya2luZywgaXQncyBwcmV0dHkgY2xlYXIgd2hlcmUgSSBzaG91bGQgc3RhcnQgLSB0aGUgYG5ldC9gIGRpcmVjdG9yeSBpcyB3aGVyZSB0aGUgY29yZSBuZXR3b3JrIHN0YWNrIHJlc2lkZXMuIE5vdywgbGV0J3MgemVybyBpbiBvbiBgcmVxc2tfYWxsb2NgLiBUaGlzIGZ1bmN0aW9uJ3MgbmFtZSBhbG9uZSBoaW50cyBpdCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyByZXNvdXJjZXMgZm9yIHJlcXVlc3Qgc29ja2V0cyDigJMgdGhhdCBpcywgZm9yIHRoZSBpbml0aWFsIGhhbmRzaGFrZSBvZiBhIGNvbm5lY3Rpb24uIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGlzIGJlY2F1c2UsIGxpa2VseSwgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgYWxsIGluY29taW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuIEknbGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW55IGluaXRpYWxpemF0aW9uIGhhcHBlbmluZywgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3RydWN0dXJlcywgYW5kLCBjcml0aWNhbGx5LCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMTo1NS41MjgyNTQ4NDVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTc5NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXNrX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTIzNDY9X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNDEwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNDExOlxcdHJlcSA9IGluZXRfcmVxc2tfYWxsb2Mob3BzLCBzaywgZmFsc2UpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNDEyLVxcdGlmICghcmVxKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz04NDk9c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKlxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODUwOnJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NTEtXFx0XFx0ICAgYm9vbCBhdHRhY2hfbGlzdGVuZXIpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg3OC19XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4Nzk6I2RlZmluZSByZXFza19hbGxvYyguLi4pXFx0YWxsb2NfaG9va3MocmVxc2tfYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4MC1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4MTpzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODQte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODg1OlxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IHJlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGF0dGFjaF9saXN0ZW5lcik7XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MzAyPXN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMxNy1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzE4OnN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE5LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzI3LVxcdGlmIChza19pc19tcHRjcChzaykpXFxubmV0L2lwdjQvc3luY29va2llcy5jOjMyODpcXHRcXHRyZXEgPSBtcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKG9wcywgc2ssIGZhbHNlKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzI5LVxcdGVsc2VcXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzMwOlxcdFxcdHJlcSA9IGluZXRfcmVxc2tfYWxsb2Mob3BzLCBzaywgZmFsc2UpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMzEtXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MzU4PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5NC1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6Mzk1OlxcdHJldHVybiBjb29raWVfdGNwX3JlcXNrX2FsbG9jKFxcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcywgc2ssIHNrYixcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzk2LVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0Y3Bfb3B0LCBtc3MsIHRzb2ZmKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc2MjA9aW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjYwLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc2NjE6XFx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhyc2tfb3BzLCBzaywgIXdhbnRfY29va2llKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjYyLVxcdGlmICghcmVxKVxcbi0tXFxubmV0L2lwdjYvc3luY29va2llcy5jPTEzMT1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0xNjctXFxubmV0L2lwdjYvc3luY29va2llcy5jOjE2ODpcXHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzLCBzaywgc2tiLFxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0xNjktXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRjcF9vcHQsIG1zcywgdHNvZmYpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz03MjU9c3RhdGljIHZvaWQgc3ViZmxvd192Nl9yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTczMS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjczMjpzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxubmV0L21wdGNwL3N1YmZsb3cuYy03MzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQyLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQzOlxcdHJldHVybiBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsIGF0dGFjaF9saXN0ZW5lcik7XFxubmV0L21wdGNwL3N1YmZsb3cuYy03NDQtfVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQ1OkVYUE9SVF9TWU1CT0wobXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy03NDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjU1LjYxNDQ0MDIyNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE5NzYxNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIGluZXRfY29ubmVjdGlvbl9zb2NrLmM6IEEgRGVlcCBEaXZlIGludG8gU29ja2V0IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYHJlcXNrX2FsbG9jX25vcHJvZmAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYCBhbmQgaXMgaW5zdHJ1bWVudGFsIGluIGFsbG9jYXRpbmcgcmVxdWVzdCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBhcmVuJ3Qgc3ViamVjdCB0byB0aGUgdXN1YWwgcHJvZmlsaW5nIG92ZXJoZWFkLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGVzcGVjaWFsbHkgaW4gaGlnaC1sb2FkIHNjZW5hcmlvcyB3aGVyZSBwcm9maWxpbmcgY2FuIGJlY29tZSBhIGJvdHRsZW5lY2suIEkgd2FudCB0byBzZWUgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgYW55IHJlbGV2YW50IGZsYWdzIG9yIGNoZWNrcyBpbnZvbHZlZC4gVGhpcyBzaG91bGQgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIHBvdGVudGlhbCByZXNvdXJjZSBjb250ZW50aW9uIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjU4LjczNDIwNDY4MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDksXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDk6XFx0c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKlxcbiA4NTA6XFx0cmVxc2tfYWxsb2Nfbm9wcm9mKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4gODUxOlxcdFxcdFxcdCAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKVxcbiA4NTI6XFx0e1xcbiA4NTM6XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xcbiA4NTQ6XFx0XFxuIDg1NTpcXHRcXHRyZXEgPSBrbWVtX2NhY2hlX2FsbG9jX25vcHJvZihvcHMtXFx1MDAzZXNsYWIsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xcbiA4NTY6XFx0XFx0aWYgKCFyZXEpXFxuIDg1NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gODU4OlxcdFxcdHJlcS1cXHUwMDNlcnNrX2xpc3RlbmVyID0gTlVMTDtcXG4gODU5OlxcdFxcdGlmIChhdHRhY2hfbGlzdGVuZXIpIHtcXG4gODYwOlxcdFxcdFxcdGlmICh1bmxpa2VseSghcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZza19saXN0ZW5lci1cXHUwMDNlc2tfcmVmY250KSkpIHtcXG4gODYxOlxcdFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShvcHMtXFx1MDAzZXNsYWIsIHJlcSk7XFxuIDg2MjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gODYzOlxcdFxcdFxcdH1cXG4gODY0OlxcdFxcdFxcdHJlcS1cXHUwMDNlcnNrX2xpc3RlbmVyID0gc2tfbGlzdGVuZXI7XFxuIDg2NTpcXHRcXHR9XFxuIDg2NjpcXHRcXHRyZXEtXFx1MDAzZXJza19vcHMgPSBvcHM7XFxuIDg2NzpcXHRcXHRyZXFfdG9fc2socmVxKS1cXHUwMDNlc2tfcHJvdCA9IHNrX2xpc3RlbmVyLVxcdTAwM2Vza19wcm90O1xcbiA4Njg6XFx0XFx0c2tfbm9kZV9pbml0KFxcdTAwMjZyZXFfdG9fc2socmVxKS1cXHUwMDNlc2tfbm9kZSk7XFxuIDg2OTpcXHRcXHRza190eF9xdWV1ZV9jbGVhcihyZXFfdG9fc2socmVxKSk7XFxuIDg3MDpcXHRcXHRyZXEtXFx1MDAzZXNhdmVkX3N5biA9IE5VTEw7XFxuIDg3MTpcXHRcXHRyZXEtXFx1MDAzZXN5bmNvb2tpZSA9IDA7XFxuIDg3MjpcXHRcXHRyZXEtXFx1MDAzZW51bV90aW1lb3V0ID0gMDtcXG4gODczOlxcdFxcdHJlcS1cXHUwMDNlbnVtX3JldHJhbnMgPSAwO1xcbiA4NzQ6XFx0XFx0cmVxLVxcdTAwM2VzayA9IE5VTEw7XFxuIDg3NTpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnJlcS1cXHUwMDNlcnNrX3JlZmNudCwgMCk7XFxuIDg3NjpcXHRcXG4gODc3OlxcdFxcdHJldHVybiByZXE7XFxuIDg3ODpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMxOjU4LjczNDMyMzc0MVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk1OTAxODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyB0ZWNobmljYWwgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk1lbW9yeSBBbGxvY2F0aW9uIENvbmNlcm5zIGZvciBNUFRDUCBTdWJmbG93IFJlcXVlc3QgU29ja2V0cyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBpcyBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyB1c2luZyBga21lbV9jYWNoZV9hbGxvY19ub3Byb2ZgIGZyb20gdGhlIHNsYWIgYWxsb2NhdG9yLCBzcGVjaWZpY2FsbHkgZnJvbSBgb3BzLVx1MDAzZXNsYWJgLiBUaGUgcHJvYmxlbSBqdW1wcyBvdXQgaW1tZWRpYXRlbHk6IGl0J3MgbWlzc2luZyB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcuIFRoYXQgbWVhbnMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKmlzbid0KiBiZWluZyB6ZXJvZWQgb3V0LiBUaGlzIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYW5kIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQuXG5cbk5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdHVyZS4gSSBrbm93IHRoaXMgaXMgZWl0aGVyIGVtYmVkZGVkIGRpcmVjdGx5IHdpdGhpbiwgb3IgYWxsb2NhdGVkIGFsb25nc2lkZSwgYSBgcmVxdWVzdF9zb2NrYC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSBmb3IgYXNzb2NpYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3RydWN0dXJlIHRvIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AuLi5JIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXQgY29udGFpbnMgYW5kIGhvdyBpdCdzIHVzZWQuIFRoaXMgY291bGQgYmUgY3JpdGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzczLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMjowMi41MzAyMjgyODJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjcwOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmM9OTQ2PWJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk0OC17XFxubmV0L21wdGNwL29wdGlvbnMuYzo5NDk6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL29wdGlvbnMuYy05NTAtXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNTY0PXN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1Njgte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1Njk6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3MC1cXHRzdHJ1Y3Qgc29jayAqbnNrID0gc2tfY2xvbmVfbG9jayhzaywgR0ZQX0FUT01JQyk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD00OTU9c3RydWN0IGNzdW1fcHNldWRvX2hlYWRlciB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MDEtXFxubmV0L21wdGNwL3Byb3RvY29sLmg6NTAyOnN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayB7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtNTAzLVxcdHN0cnVjdFxcdHRjcF9yZXF1ZXN0X3NvY2sgc2s7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjItXFxubmV0L21wdGNwL3Byb3RvY29sLmg6NTIzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjQtbXB0Y3Bfc3ViZmxvd19yc2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcnNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUyNS17XFxubmV0L21wdGNwL3Byb3RvY29sLmg6NTI2OlxcdHJldHVybiAoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICopcnNrO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUyNy19XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMDgwPWludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMDgxOnZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMDgyLVxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTM1Mz1zdGF0aWMgaW5saW5lIGJvb2wgc3ViZmxvd19zaW11bHRhbmVvdXNfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzYxLSNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzYyOnZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2My1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM2NDpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzY1LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTM2OD1zdGF0aWMgaW5saW5lIHZvaWRcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzY5OnN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNzAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7fVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNzE9c3RhdGljIGlubGluZSBib29sXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MjptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0zOD1zdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM5LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjQwOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDEtXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTYxPXN0YXRpYyBib29sIG1wdGNwX2Nhbl9hY2NlcHRfbmV3X3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjktLyogdmFsaWRhdGUgcmVjZWl2ZWQgdG9rZW4gYW5kIGNyZWF0ZSB0cnVuY2F0ZWQgaG1hYyBhbmQgbm9uY2UgZm9yIFNZTi1BQ0sgKi9cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjcwOnN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2NyZWF0ZV90aG1hYyhzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzEte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz04NT1zdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg2LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg3OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODgtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTA4PXN0YXRpYyB2b2lkIHN1YmZsb3dfaW5pdF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDkte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTEwOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTExLVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNDc9c3RhdGljIGludCBzdWJmbG93X2NoZWNrX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MS1cXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrX2xpc3RlbmVyKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1MjpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1My1cXHRzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCBtcF9vcHQ7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTI2Mz1pbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNjctXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChza19saXN0ZW5lcik7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyNjg6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yNjktXFx0c3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgbXBfb3B0O1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz03NDU9RVhQT1JUX1NZTUJPTChtcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQ3LS8qIHZhbGlkYXRlIGhtYWMgcmVjZWl2ZWQgaW4gdGhpcmQgQUNLICovXFxubmV0L21wdGNwL3N1YmZsb3cuYzo3NDg6c3RhdGljIGJvb2wgc3ViZmxvd19obWFjX3ZhbGlkKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N1YmZsb3cuYy03NDktXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTgwMT1zdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTgxMC1cXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjgxMTpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODEyLVxcdHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkIG1wX29wdDtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjAzMD1zdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwMzMte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjAzNDpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwMzUtXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqb2xkX2N0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KG5ld3NrKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjEyMT1zdGF0aWMgaW50IHN1YmZsb3dfb3BzX2luaXQoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnN1YmZsb3dfb3BzKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjEyMi17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTIzOlxcdHN1YmZsb3dfb3BzLVxcdTAwM2VvYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjEyNC1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE3MD12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzEte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE3MjpcXHQvKiBJbiBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2ssIHdlIGFzc3VtZSB0aGUgVENQIHJlcXVlc3Qgc29ja1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3My1cXHQgKiBzdHJ1Y3R1cmVzIGZvciB2NCBhbmQgdjYgaGF2ZSB0aGUgc2FtZSBzaXplLiBJdCBzaG91bGQgbm90IGNoYW5nZWQgaW5cXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NTk9c3RhdGljIHZvaWQgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShzdHJ1Y3Qgam9pbl9lbnRyeSAqZW50cnksXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo2MDpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxKVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNjEte1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03MC1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjcxOnZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03Mi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTEtICovXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo5Mjpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYz00OD1zdGF0aWMgc3RydWN0IHRva2VuX2J1Y2tldCAqdG9rZW5fYnVja2V0KHUzMiB0b2tlbilcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jLTUzLS8qIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIGhlbGQgKi9cXG5uZXQvbXB0Y3AvdG9rZW4uYzo1NDpzdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcXG5uZXQvbXB0Y3AvdG9rZW4uYy01NS1fX3Rva2VuX2xvb2t1cF9yZXEoc3RydWN0IHRva2VuX2J1Y2tldCAqdCwgdTMyIHRva2VuKVxcbm5ldC9tcHRjcC90b2tlbi5jLTU2LXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzo1NzpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcTtcXG5uZXQvbXB0Y3AvdG9rZW4uYy01OC1cXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqcG9zO1xcbi0tXFxubmV0L21wdGNwL3Rva2VuLmM9MTA4PWludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxubmV0L21wdGNwL3Rva2VuLmMtMTA5LXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoxMTA6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3Rva2VuLmMtMTExLVxcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jPTE1MT1pbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jLTE5MC0gKi9cXG5uZXQvbXB0Y3AvdG9rZW4uYzoxOTE6dm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L21wdGNwL3Rva2VuLmMtMTkyLVxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3Rva2VuLmMtMTkzLXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoxOTQ6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XFxubmV0L21wdGNwL3Rva2VuLmMtMTk1LVxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jPTM1Mj12b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxubmV0L21wdGNwL3Rva2VuLmMtMzUzLXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzozNTQ6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3Rva2VuLmM6MzU1OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbm5ldC9tcHRjcC90b2tlbi5jLTM1Ni1cXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTUtXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzo2OnN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKmJ1aWxkX3JlcV9zb2NrKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTcte1xcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6ODpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcTtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTktXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMDpcXHRyZXEgPSBrdW5pdF9remFsbG9jKHRlc3QsIHNpemVvZihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2spLFxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTEtXFx0XFx0XFx0ICAgIEdGUF9VU0VSKTtcXG4tLVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM9MTg9c3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9yZXFfYmFzaWMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTkte1xcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6MjA6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEgPSBidWlsZF9yZXFfc29jayh0ZXN0KTtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTIxLVxcdHN0cnVjdCBtcHRjcF9zb2NrICpudWxsX21zayA9IE5VTEw7XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTk0PXN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTk1LXtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjk2OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxID0gYnVpbGRfcmVxX3NvY2sodGVzdCk7XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy05Ny1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gYnVpbGRfbXNrKHRlc3QpO1xcbi0tXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz0xMTM9c3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTE0LXtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjExNTpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSA9IGJ1aWxkX3JlcV9zb2NrKHRlc3QpO1xcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTE2LVxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBidWlsZF9tc2sodGVzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMyOjAyLjU3NDkwNTA2MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDExMTE5MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgU3RydWN0dXJlKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgTVBUQ1AgaGFuZGxlcyBzdWJmbG93IHJlcXVlc3RzLiBUaGUgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AgaXMgd2hlcmUgSSBzaG91bGQgYmVnaW4uIEknbGwgb3BlbiB1cCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLCBpdCdzIHRoZSB1c3VhbCBwbGFjZSBmb3IgY29yZSBNUFRDUCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBpdCBzaG91bGQgY29udGFpbiB0aGUgY29tcGxldGUgZGVmaW5pdGlvbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiByZW1lbWJlcmluZyB0aGUgZmllbGRzLCB0aGVpciBwdXJwb3NlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIHN1YmZsb3cgZXN0YWJsaXNobWVudCBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3RydWN0dXJlIGlzIGZ1bmRhbWVudGFsIHRvIHRyb3VibGVzaG9vdGluZyBhbmQgZGVidWdnaW5nIHN1YmZsb3ctcmVsYXRlZCBpc3N1ZXMgb3Igb3B0aW1pemluZyB0aGUgaGFuZHNoYWtlIGluIHRoZSBNUFRDUCBzdGFjay4gVGltZSB0byByZWZyZXNoIG15IGtub3dsZWRnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMjowNS41ODYwMjcyNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTAyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAyOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayB7XFxuIDUwMzpcXHRcXHRzdHJ1Y3RcXHR0Y3BfcmVxdWVzdF9zb2NrIHNrO1xcbiA1MDQ6XFx0XFx0dTE2XFx0bXBfY2FwYWJsZSA6IDEsXFxuIDUwNTpcXHRcXHRcXHRtcF9qb2luIDogMSxcXG4gNTA2OlxcdFxcdFxcdGJhY2t1cCA6IDEsXFxuIDUwNzpcXHRcXHRcXHRyZXF1ZXN0X2JrdXAgOiAxLFxcbiA1MDg6XFx0XFx0XFx0Y3N1bV9yZXFkIDogMSxcXG4gNTA5OlxcdFxcdFxcdGFsbG93X2pvaW5faWQwIDogMTtcXG4gNTEwOlxcdFxcdHU4XFx0bG9jYWxfaWQ7XFxuIDUxMTpcXHRcXHR1OFxcdHJlbW90ZV9pZDtcXG4gNTEyOlxcdFxcdHU2NFxcdGxvY2FsX2tleTtcXG4gNTEzOlxcdFxcdHU2NFxcdGlkc247XFxuIDUxNDpcXHRcXHR1MzJcXHR0b2tlbjtcXG4gNTE1OlxcdFxcdHUzMlxcdHNzbl9vZmZzZXQ7XFxuIDUxNjpcXHRcXHR1NjRcXHR0aG1hYztcXG4gNTE3OlxcdFxcdHUzMlxcdGxvY2FsX25vbmNlO1xcbiA1MTg6XFx0XFx0dTMyXFx0cmVtb3RlX25vbmNlO1xcbiA1MTk6XFx0XFx0c3RydWN0IG1wdGNwX3NvY2tcXHQqbXNrO1xcbiA1MjA6XFx0XFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgdG9rZW5fbm9kZTtcXG4gNTIxOlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMyOjA1LjU4NjEzMjYzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTM2NzYyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTVBUQ1AgU3ViZmxvdyBSZXF1ZXN0IFNvY2tldCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIGBsb2NhbF9pZGAgZmllbGQgd2l0aGluIHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdCBpcyBpbml0aWFsaXplZCwgYW5kIEknbSBzZWVpbmcgYSBwb3RlbnRpYWwgaXNzdWUuIEl0J3MgYSBgdThgLCBzbyBhIHNpbmdsZSBieXRlLCBidXQgaXRzIGluaXRpYWxpemF0aW9uIGlzIGEgYml0IHNjYXR0ZXJlZC5cblxuSW5pdGlhbGx5LCBgcmVxc2tfYWxsb2NgIGFsbG9jYXRlcyB0aGUgcmVxdWVzdCBzb2NrZXQsIGFuZCBjcnVjaWFsbHksIGl0ICpkb2Vzbid0KiB6ZXJvIHRoZSBtZW1vcnkuIFRoYXQgbWVhbnMgd2hhdGV2ZXIgZ2FyYmFnZSBoYXBwZW5lZCB0byBiZSB0aGVyZSBiZWZvcmUgcmVtYWlucy4gVGhlbiBgc3ViZmxvd19pbml0X3JlcWAgZ2V0cyBjYWxsZWQsIGFuZCBpdCBzZXRzIGEgZmV3IGZsYWdzIGFuZCBzb21lIG90aGVyIGZpZWxkcyBsaWtlIGBtcF9jYXBhYmxlYCwgYG1wX2pvaW5gLCBhbmQgc28gb24uIEJ1dCBpdCAqZG9lc24ndCogdG91Y2ggYGxvY2FsX2lkYCwgbm9yIGByZW1vdGVfaWRgLCBvciBgbG9jYWxfa2V5YCwgYW5kIHRoZSByZXN0LiBNeSBTcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZy5cblxuQWgsIGJ1dCB3YWl0Li4uIHRoZXJlJ3MgYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYC4gVGhhdCdzIHdoZXJlIFNZTiBjb29raWVzIGdldCBoYW5kbGVkLiBJZiBhbiBgb3B0X21wX2pvaW5gIG9wdGlvbiBpcyBwcmVzZW50LCB3ZSBjYWxsIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCwgYW5kICp0aGF0J3MqIHdoZXJlIHdlJ3JlIHN1cHBvc2VkIHRvIGluaXRpYWxpemUgYGxvY2FsX2lkYCBhbG9uZyB3aXRoIHRoaW5ncyBsaWtlIGByZW1vdGVfbm9uY2VgLCBgbG9jYWxfbm9uY2VgLCBldGMuXG5cblRoZSBjcml0aWNhbCB0aGluZywgYmVmb3JlIHRoZSBwYXRjaCBJJ20gZXhhbWluaW5nLCBpcyB0aGF0IGBsb2NhbF9pZGAgKndhc24ndCogYmVpbmcgaW5pdGlhbGl6ZWQgaW5zaWRlIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gVGhhdCBtZWFucyBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIHdvdWxkIGJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByaWdodCBhZnRlciB0aGUgY2FsbCB0byBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBhbmQgdGhpcyBjcmVhdGVzIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgbG9jYWxfaWRgIGlzIHVzZWQsIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBvZiB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXaGVyZSBkb2VzIHRoaXMgYnl0ZSBnZXQgYWNjZXNzZWQsIGFuZCBob3c/IFRoaXMgcGF0Y2ggYmV0dGVyIGZpeCBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NDIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxMjozMjoxMi4xMzk4MTI1NDFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNjc5NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2FsX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL2RpYWcuYz0xNT1zdGF0aWMgaW50IHN1YmZsb3dfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG5ldF9hZG1pbilcXG4tLVxcbm5ldC9tcHRjcC9kaWFnLmMtNjAtXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBNUFRDUF9TVUJGTE9XX0FUVFJfSURfUkVNLCBzZi1cXHUwMDNlcmVtb3RlX2lkKSB8fFxcbm5ldC9tcHRjcC9kaWFnLmM6NjE6XFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBNUFRDUF9TVUJGTE9XX0FUVFJfSURfTE9DLCBzdWJmbG93X2dldF9sb2NhbF9pZChzZikpKSB7XFxubmV0L21wdGNwL2RpYWcuYy02Mi1cXHRcXHRlcnIgPSAtRU1TR1NJWkU7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTQ2ND1ib29sIG1wdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNDkyLVxcdFxcdG9wdHMtXFx1MDAzZXN1Ym9wdGlvbnMgPSBPUFRJT05fTVBUQ1BfTVBKX1NZTjtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjQ5MzpcXHRcXHRvcHRzLVxcdTAwM2Vqb2luX2lkID0gc3ViZmxvdy1cXHUwMDNlbG9jYWxfaWQ7XFxubmV0L21wdGNwL29wdGlvbnMuYy00OTQtXFx0XFx0b3B0cy1cXHUwMDNldG9rZW4gPSBzdWJmbG93LVxcdTAwM2VyZW1vdGVfdG9rZW47XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTk0Nj1ib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy05NjItXFx0XFx0b3B0cy1cXHUwMDNlYmFja3VwID0gc3ViZmxvd19yZXEtXFx1MDAzZXJlcXVlc3RfYmt1cDtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjk2MzpcXHRcXHRvcHRzLVxcdTAwM2Vqb2luX2lkID0gc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkO1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTY0LVxcdFxcdG9wdHMtXFx1MDAzZXRobWFjID0gc3ViZmxvd19yZXEtXFx1MDAzZXRobWFjO1xcbi0tXFxubmV0L21wdGNwL3BtLmM9MjUwPXN0YXRpYyBib29sIHN1YmZsb3dfaW5fcm1fbGlzdChjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxcbi0tXFxubmV0L21wdGNwL3BtLmMtMjUyLXtcXG5uZXQvbXB0Y3AvcG0uYzoyNTM6XFx0dTggaSwgaWQgPSBzdWJmbG93X2dldF9sb2NhbF9pZChzdWJmbG93KTtcXG5uZXQvbXB0Y3AvcG0uYy0yNTQtXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz00OTg9aW50IG1wdGNwX3BtX2Fubm91bmNlX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTUwMy1cXG5uZXQvbXB0Y3AvcG0uYzo1MDQ6XFx0cHJfZGVidWcoXFxcIm1zaz0lcCwgbG9jYWxfaWQ9JWQsIGVjaG89JWRcXFxcblxcXCIsIG1zaywgYWRkci1cXHUwMDNlaWQsIGVjaG8pO1xcbm5ldC9tcHRjcC9wbS5jLTUwNS1cXG4tLVxcbm5ldC9tcHRjcC9wbS5jPTc2ND1zdGF0aWMgdm9pZCBtcHRjcF9wbV9ybV9hZGRyX29yX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTc5My1cXHRcXHRcXHRpbnQgaG93ID0gUkNWX1NIVVRET1dOIHwgU0VORF9TSFVURE9XTjtcXG5uZXQvbXB0Y3AvcG0uYzo3OTQ6XFx0XFx0XFx0dTggaWQgPSBzdWJmbG93X2dldF9sb2NhbF9pZChzdWJmbG93KTtcXG5uZXQvbXB0Y3AvcG0uYy03OTUtXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy04MDMtXFxubmV0L21wdGNwL3BtLmM6ODA0OlxcdFxcdFxcdHByX2RlYnVnKFxcXCIgLVxcdTAwM2UgJXMgcm1fbGlzdF9pZHNbJWRdPSV1IGxvY2FsX2lkPSV1IHJlbW90ZV9pZD0ldSBtcGNfaWQ9JXVcXFxcblxcXCIsXFxubmV0L21wdGNwL3BtLmMtODA1LVxcdFxcdFxcdFxcdCBybV90eXBlID09IE1QVENQX01JQl9STUFERFIgPyBcXFwiYWRkcmVzc1xcXCIgOiBcXFwic3ViZmxvd1xcXCIsXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz0xMDAxPWJvb2wgbXB0Y3BfcG1fcm1fYWRkcl9zaWduYWwoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTEwMzEtXFxubmV0L21wdGNwL3BtLmM6MTAzMjppbnQgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjKVxcbm5ldC9tcHRjcC9wbS5jLTEwMzMte1xcbi0tXFxubmV0L21wdGNwL3BtLmMtMTA1MS1cXHRpZiAobXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpXFxubmV0L21wdGNwL3BtLmM6MTA1MjpcXHRcXHRyZXR1cm4gbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZChtc2ssIFxcdTAwMjZza2NfbG9jYWwpO1xcbm5ldC9tcHRjcC9wbS5jOjEwNTM6XFx0cmV0dXJuIG1wdGNwX3BtX25sX2dldF9sb2NhbF9pZChtc2ssIFxcdTAwMjZza2NfbG9jYWwpO1xcbm5ldC9tcHRjcC9wbS5jLTEwNTQtfVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTIwMz1maWxsX3JlbW90ZV9hZGRyZXNzZXNfZnVsbG1lc2goc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0yMTktXFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjIyMDpcXHRcXHRpZiAoUkVBRF9PTkNFKHN1YmZsb3ctXFx1MDAzZWxvY2FsX2lkKSA9PSBsb2NhbC1cXHUwMDNlaWQpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTIyMS1cXHRcXHRcXHRfX3NldF9iaXQoc3ViZmxvdy1cXHUwMDNlcmVtb3RlX2lkLCB1bmF2YWlsX2lkKTtcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0yODE9X19sb29rdXBfYWRkcihzdHJ1Y3QgcG1fbmxfcGVybmV0ICpwZXJuZXQsIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMjkyLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoyOTM6c3RhdGljIHU4IG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTI5NC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9NTA3PWZpbGxfbG9jYWxfbGFtaW5hcl9lbmRwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbW90ZSxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy01MjktXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjUzMDpcXHRcXHRfX3NldF9iaXQoc3ViZmxvd19nZXRfbG9jYWxfaWQoc3ViZmxvdyksIHVuYXZhaWxfaWQpO1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy01MzEtXFx0fVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTU0MC1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NTQxOlxcdFxcdGlmICh0ZXN0X2JpdChtcHRjcF9lbmRwX2dldF9sb2NhbF9pZChtc2ssIFxcdTAwMjZlbnRyeS1cXHUwMDNlYWRkciksXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTU0Mi1cXHRcXHRcXHQgICAgIHVuYXZhaWxfaWQpKVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTg1Mj1zdGF0aWMgaW50IG1wdGNwX3BtX25sX2NyZWF0ZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MTctXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjkxODppbnQgbXB0Y3BfcG1fbmxfZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTkxOS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICpza2MpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9MTA1Nj1zdGF0aWMgdm9pZCBtcHRjcF9wbV9yZW1vdmVfYW5ub3VuY2VkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTA2Mi1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTA2MzpcXHRsaXN0Lmlkc1tsaXN0Lm5yKytdID0gbXB0Y3BfZW5kcF9nZXRfbG9jYWxfaWQobXNrLCBhZGRyKTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTA2NC1cXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xMDgzPXN0YXRpYyBpbnQgbXB0Y3BfbmxfcmVtb3ZlX3N1YmZsb3dfYW5kX3NpZ25hbF9hZGRyKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMTA0LVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoxMTA1OlxcdFxcdGxpc3QuaWRzWzBdID0gbXB0Y3BfZW5kcF9nZXRfbG9jYWxfaWQobXNrLCBhZGRyKTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTEwNi1cXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xMjI1PXN0YXRpYyB2b2lkIG1wdGNwX3BtX2ZsdXNoX2FkZHJzX2FuZF9zdWJmbG93cyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEyMzktXFx0XFx0aWYgKG1wdGNwX3BtX2hhc19zdWJmbG93X3NhZGRyKG1zaywgXFx1MDAyNmVudHJ5LVxcdTAwM2VhZGRyKSlcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTI0MDpcXHRcXHRcXHRzbGlzdC5pZHNbc2xpc3QubnIrK10gPSBtcHRjcF9lbmRwX2dldF9sb2NhbF9pZChtc2ssIFxcdTAwMjZlbnRyeS1cXHUwMDNlYWRkcik7XFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEyNDEtXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEyNDItXFx0XFx0aWYgKG1wdGNwX3BtX2Fubm91bmNlZF9yZW1vdmUobXNrLCBcXHUwMDI2ZW50cnktXFx1MDAzZWFkZHIpKVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoxMjQzOlxcdFxcdFxcdGFsaXN0Lmlkc1thbGlzdC5ucisrXSA9IG1wdGNwX2VuZHBfZ2V0X2xvY2FsX2lkKG1zaywgXFx1MDAyNmVudHJ5LVxcdTAwM2VhZGRyKTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTI0NC1cXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xNDY3PXN0YXRpYyB2b2lkIG1wdGNwX3BtX25sX2Z1bGxtZXNoKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTQ3MS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTQ3MjpcXHRsaXN0Lmlkc1tsaXN0Lm5yKytdID0gbXB0Y3BfZW5kcF9nZXRfbG9jYWxfaWQobXNrLCBhZGRyKTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTQ3My1cXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjk4PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfYWRkX3N1YmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzM1LVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MzM2OlxcdGlmIChubGFfcHV0X3U4KHNrYiwgTVBUQ1BfQVRUUl9MT0NfSUQsIHN1YmZsb3dfZ2V0X2xvY2FsX2lkKHNmKSkpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0zMzctXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0xMjI9bXB0Y3BfdXNlcnNwYWNlX3BtX2xvb2t1cF9hZGRyX2J5X2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHVuc2lnbmVkIGludCBpZClcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xMzItXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjEzMzppbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xMzQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICpza2MpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MjUzPXN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0yNjItXFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6MjYzOlxcdFxcdGlmIChSRUFEX09OQ0Uoc3ViZmxvdy1cXHUwMDNlbG9jYWxfaWQpID09IDApIHtcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjY0LVxcdFxcdFxcdGhhc19pZF8wID0gdHJ1ZTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwMz1zdGF0aWMgaW50IF9fbXB0Y3Bfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTIyLVxcdC8qIFRoaXMgaXMgdGhlIGZpcnN0IHN1YmZsb3csIGFsd2F5cyB3aXRoIGlkIDAgKi9cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMjM6XFx0V1JJVEVfT05DRShzdWJmbG93LVxcdTAwM2Vsb2NhbF9pZCwgMCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTI0LVxcdG1wdGNwX3NvY2tfZ3JhZnQobXNrLVxcdTAwM2VmaXJzdCwgc2stXFx1MDAzZXNrX3NvY2tldCk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjg0PXZvaWQgbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODctXFx0LyogVGhlIGZpcnN0IHN1YmZsb3cgY2FuIGFscmVhZHkgYmUgY2xvc2VkIG9yIGRpc2Nvbm5lY3RlZCAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2ODg6XFx0aWYgKHN1YmZsb3ctXFx1MDAzZWNsb3NlX2V2ZW50X2RvbmUgfHwgUkVBRF9PTkNFKHN1YmZsb3ctXFx1MDAzZWxvY2FsX2lkKSBcXHUwMDNjIDApXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY4OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNTY0PXN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM2MjctXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzYyODpcXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNjI5LVxcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9NTAyPXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MDktXFx0XFx0YWxsb3dfam9pbl9pZDAgOiAxO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUxMDpcXHR1OFxcdGxvY2FsX2lkO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUxMS1cXHR1OFxcdHJlbW90ZV9pZDtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTU0ND1zdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTYwMS1cXHR9O1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjYwMjpcXHRzMTZcXHRsb2NhbF9pZDtcXHQgICAgLyogaWYgbmVnYXRpdmUgbm90IGluaXRpYWxpemVkIHlldCAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTYwMy1cXHR1OFxcdHJlbW90ZV9pZDtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTY0OT1tcHRjcF9zdWJmbG93X2N0eF9yZXNldChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtNjUyLVxcdHN1YmZsb3ctXFx1MDAzZXJlcXVlc3RfbXB0Y3AgPSAxO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjY1MzpcXHRXUklURV9PTkNFKHN1YmZsb3ctXFx1MDAzZWxvY2FsX2lkLCAtMSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtNjU0LX1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEyMTE9Ym9vbCBtcHRjcF9wbV9ybV9hZGRyX3NpZ25hbChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMTItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCwgaW50ICpsZW4pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMTM6aW50IG1wdGNwX3BtX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTIxNDppbnQgbXB0Y3BfcG1fbmxfZ2V0X2xvY2FsX2lkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTIxNS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICpza2MpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMTY6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjE3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqc2tjKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEyMjc9aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfYWRkcih1OCBpZCwgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmFkZHIsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjI5LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMzA6c3RhdGljIGlubGluZSB1OCBzdWJmbG93X2dldF9sb2NhbF9pZChjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMzEte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMzI6XFx0aW50IGxvY2FsX2lkID0gUkVBRF9PTkNFKHN1YmZsb3ctXFx1MDAzZWxvY2FsX2lkKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjMzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMzQ6XFx0aWYgKGxvY2FsX2lkIFxcdTAwM2MgMClcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMjM1LVxcdFxcdHJldHVybiAwO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEyMzY6XFx0cmV0dXJuIGxvY2FsX2lkO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEyMzctfVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz04NT1zdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtODgtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg5OlxcdGludCBsb2NhbF9pZDtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTkwLVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy05Ni1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjk3OlxcdGxvY2FsX2lkID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXJlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo5ODpcXHRpZiAobG9jYWxfaWQgXFx1MDAzYyAwKSB7XFxubmV0L21wdGNwL3N1YmZsb3cuYy05OS1cXHRcXHRzb2NrX3B1dCgoc3RydWN0IHNvY2sgKiltc2spO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDEtXFx0fVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTAyOlxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9pZCA9IGxvY2FsX2lkO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTAzLVxcdHN1YmZsb3dfcmVxLVxcdTAwM2VyZXF1ZXN0X2JrdXAgPSBtcHRjcF9wbV9pc19iYWNrdXAobXNrLCAoc3RydWN0IHNvY2tfY29tbW9uICopcmVxKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NTIxPXN0YXRpYyB2b2lkIHN1YmZsb3dfZmluaXNoX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy02MTgtXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2MTk6c3RhdGljIHZvaWQgc3ViZmxvd19zZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdywgaW50IGxvY2FsX2lkKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjIwLXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjYyMTpcXHRXQVJOX09OX09OQ0UobG9jYWxfaWQgXFx1MDAzYyAwIHx8IGxvY2FsX2lkIFxcdTAwM2UgMjU1KTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjYyMjpcXHRXUklURV9PTkNFKHN1YmZsb3ctXFx1MDAzZWxvY2FsX2lkLCBsb2NhbF9pZCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy02MjMtfVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjI0LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NjI1OnN0YXRpYyBpbnQgc3ViZmxvd19jaGtfbG9jYWxfaWQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjI2LXtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjMwLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NjMxOlxcdGlmIChsaWtlbHkoc3ViZmxvdy1cXHUwMDNlbG9jYWxfaWQgXFx1MDAzZT0gMCkpXFxubmV0L21wdGNwL3N1YmZsb3cuYy02MzItXFx0XFx0cmV0dXJuIDA7XFxubmV0L21wdGNwL3N1YmZsb3cuYy02MzMtXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2MzQ6XFx0ZXJyID0gbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTYzNS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjM3LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NjM4OlxcdHN1YmZsb3dfc2V0X2xvY2FsX2lkKHN1YmZsb3csIGVycik7XFxubmV0L21wdGNwL3N1YmZsb3cuYy02MzktXFx0c3ViZmxvdy1cXHUwMDNlcmVxdWVzdF9ia3VwID0gbXB0Y3BfcG1faXNfYmFja3VwKG1zaywgKHN0cnVjdCBzb2NrX2NvbW1vbiAqKXNrKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NjQ0PXN0YXRpYyBpbnQgc3ViZmxvd19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3N1YmZsb3cuYy02NDUte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6NjQ2OlxcdGludCBlcnIgPSBzdWJmbG93X2Noa19sb2NhbF9pZChzayk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy02NDctXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY1NT1zdGF0aWMgaW50IHN1YmZsb3dfdjZfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjU2LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY1NzpcXHRpbnQgZXJyID0gc3ViZmxvd19jaGtfbG9jYWxfaWQoc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjU4LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjA4PWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2MTItXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2MTM6XFx0aW50IGxvY2FsX2lkID0gbG9jYWwtXFx1MDAzZWFkZHIuaWQ7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjE0LVxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2MjktXFx0XFx0cHJfZGVidWcoXFxcIm1zaz0lcCBsb2NhbD0lZCByZW1vdGU9JWQgY3JlYXRlIHNvY2sgZXJyb3I6ICVkXFxcXG5cXFwiLFxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTYzMDpcXHRcXHRcXHQgbXNrLCBsb2NhbF9pZCwgcmVtb3RlX2lkLCBlcnIpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYzMS1cXHRcXHRnb3RvIGVycl9vdXQ7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDItXFx0XFx0aWYgKCFsb2NhbC1cXHUwMDNlYWRkci5hZGRyLnNfYWRkcilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NDM6XFx0XFx0XFx0bG9jYWxfaWQgPSAtMTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDQtI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDYtXFx0XFx0aWYgKGlwdjZfYWRkcl9hbnkoXFx1MDAyNmxvY2FsLVxcdTAwM2VhZGRyLmFkZHI2KSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NDc6XFx0XFx0XFx0bG9jYWxfaWQgPSAtMTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDgtI2VuZGlmXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NTAtXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjUxOlxcdGlmIChsb2NhbF9pZCBcXHUwMDNlPSAwKVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY1MjpcXHRcXHRzdWJmbG93X3NldF9sb2NhbF9pZChzdWJmbG93LCBsb2NhbF9pZCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjUzLVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjY5LVxcdFxcdHByX2RlYnVnKFxcXCJtc2s9JXAgbG9jYWw9JWQgcmVtb3RlPSVkIGJpbmQgZXJyb3I6ICVkXFxcXG5cXFwiLFxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY3MDpcXHRcXHRcXHQgbXNrLCBsb2NhbF9pZCwgcmVtb3RlX2lkLCBlcnIpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY3MS1cXHRcXHRnb3RvIGZhaWxlZDtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY3NC1cXHRtcHRjcF9jcnlwdG9fa2V5X3NoYShzdWJmbG93LVxcdTAwM2VyZW1vdGVfa2V5LCBcXHUwMDI2cmVtb3RlX3Rva2VuLCBOVUxMKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NzU6XFx0cHJfZGVidWcoXFxcIm1zaz0lcCByZW1vdGVfdG9rZW49JXUgbG9jYWxfaWQ9JWQgcmVtb3RlX2lkPSVkXFxcXG5cXFwiLCBtc2ssXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjc2OlxcdFxcdCByZW1vdGVfdG9rZW4sIGxvY2FsX2lkLCByZW1vdGVfaWQpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY3Ny1cXHRzdWJmbG93LVxcdTAwM2VyZW1vdGVfdG9rZW4gPSByZW1vdGVfdG9rZW47XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2ODktXFx0XFx0cHJfZGVidWcoXFxcIm1zaz0lcCBsb2NhbD0lZCByZW1vdGU9JWQgY29ubmVjdCBlcnJvcjogJWRcXFxcblxcXCIsXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjkwOlxcdFxcdFxcdCBtc2ssIGxvY2FsX2lkLCByZW1vdGVfaWQsIGVycik7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjkxLVxcdFxcdGdvdG8gZmFpbGVkX3VubGluaztcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTgzNj1zdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvd19jcmVhdGVfY3R4KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg1Mi1cXHRjdHgtXFx1MDAzZXRjcF9zb2NrID0gc2s7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxODUzOlxcdFdSSVRFX09OQ0UoY3R4LVxcdTAwM2Vsb2NhbF9pZCwgLTEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg1NC1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjAzMD1zdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwNjYtXFx0XFx0LyogdGhpcyBpcyB0aGUgZmlyc3Qgc3ViZmxvdywgaWQgaXMgYWx3YXlzIDAgKi9cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwNjc6XFx0XFx0c3ViZmxvd19zZXRfbG9jYWxfaWQobmV3X2N0eCwgMCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDY4LVxcdH0gZWxzZSBpZiAoc3ViZmxvd19yZXEtXFx1MDAzZW1wX2pvaW4pIHtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjA4MS1cXHRcXHQgKi9cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwODI6XFx0XFx0c3ViZmxvd19zZXRfbG9jYWxfaWQobmV3X2N0eCwgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwODMtXFx0fVxcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz0yMz1zdHJ1Y3Qgam9pbl9lbnRyeSB7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTI3LVxcdHU4IGpvaW5faWQ7XFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzoyODpcXHR1OCBsb2NhbF9pZDtcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTI5LVxcdHU4IGJhY2t1cDtcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NTk9c3RhdGljIHZvaWQgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShzdHJ1Y3Qgam9pbl9lbnRyeSAqZW50cnksXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTY2LVxcdGVudHJ5LVxcdTAwM2Vqb2luX2lkID0gc3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9pZDtcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjY3OlxcdGVudHJ5LVxcdTAwM2Vsb2NhbF9pZCA9IHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9pZDtcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTY4LVxcdGVudHJ5LVxcdTAwM2V2YWxpZCA9IDE7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTkyPWJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0xMjAtXFx0c3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9pZCA9IGUtXFx1MDAzZWpvaW5faWQ7XFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzoxMjE6XFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkID0gZS1cXHUwMDNlbG9jYWxfaWQ7XFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy0xMjItXFx0c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuID0gZS1cXHUwMDNldG9rZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMyOjEyLjIwMDQ5NzM5MVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDE1NTM3NjI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmluaXRpYWxpemVkIE1lbW9yeSBJbmZvLUxlYWsgaW4gTVBUQ1AgU1lOIENvb2tpZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0IEkndmUgZ290LiBJJ20gbG9va2luZyBhdCBob3cgTVBUQ1AgaGFuZGxlcyBzdWJmbG93cywgc3BlY2lmaWNhbGx5IHdoZW4gYSBTWU4gY29va2llIGlzIGludm9sdmVkLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYG1wdGNwX3N5bmFja19vcHRpb25zYCwgd2hpY2ggZGVhbHMgd2l0aCBTWU4tQUNLIHBhY2tldHMsIGFuZCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzZXJ2ZXIgcmVjZWl2ZXMgdGhlIEFDSyBpbiBhIFNZTiBjb29raWUgaGFuZHNoYWtlLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBpc3N1ZSBpbW1lZGlhdGVseS5cblxuV2hlbiBhbiBBQ0sgd2l0aCBhIFNZTiBjb29raWUgY29tZXMgaW4sIHRoZSBzZXJ2ZXIgcmVjb25zdHJ1Y3RzIHRoZSByZXF1ZXN0IHNvY2tldC4gVGhlIGZ1bmN0aW9uIGBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcWAgY3JlYXRlcyBhIG5ldyBgcmVxdWVzdF9zb2NrYCwgYW5kIHRoZW4gY2FsbHMgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIHRvIHBvcHVsYXRlIGl0IHVzaW5nIHRoZSBjb29raWUgZGF0YS4gVGhlbiwgdGhpcyByZWNvbnN0cnVjdGVkIHJlcXVlc3Qgc29ja2V0IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBhY3R1YWwgc3ViZmxvdyBzb2NrZXQuIFRoaXMgaXMgaGFuZGxlZCBieSBgc3ViZmxvd191bHBfY2xvbmVgLlxuXG5Ob3csIGlmIHdlIGRpdmUgaW50byB0aGUgY29kZSwgZXNwZWNpYWxseSBgc3ViZmxvd191bHBfY2xvbmVgLCBpdCBjb3BpZXMgZGF0YSBmcm9tIHRoZSBgc3ViZmxvd19yZXFgIHN0cnVjdHVyZSBpbnRvIHRoZSBuZXcgc3ViZmxvdyBjb250ZXh0LiBJIG5vdGljZWQgdGhhdCBgc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWRgIGlzIHBhcnQgb2YgdGhpcyBjb3B5aW5nLiBJZiB0aGlzIHZhbHVlIGlzIHVuaW5pdGlhbGl6ZWQsIHRoZSBjb2RlIHVzZXMgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSwgYmVjYXVzZSBpdCBjYW4gYmUgdXNlZCBmb3IgdGhpbmdzIGxpa2UgbmV0bGluayBtZXNzYWdlcyBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgcGFja2V0cy5cblxuSGVyZSdzIHRoZSBwcm9ibGVtOiBgc3ViZmxvd19yZXFgIGNvbWVzIGZyb20gYHJlcXNrX2FsbG9jYCwgYW5kIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmcm9tIGEgc2xhYiBjYWNoZS4gSW1wb3J0YW50bHksIHRoaXMgYWxsb2NhdGlvbiBkb2VzICpub3QqIHplcm8gdGhlIG1lbW9yeSBieSBkZWZhdWx0LiBUaGlzIG1lYW5zIHRoYXQgaWYgc29tZXRoaW5nIGlzbid0IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGl0IHdpbGwgaG9sZCB3aGF0ZXZlciBnYXJiYWdlIHZhbHVlIHdhcyBwcmV2aW91c2x5IGluIHRoYXQgbWVtb3J5IGxvY2F0aW9uLiBTbyBJIHN0YXJ0IHRvIHRoaW5rIHRoaXMgYGxvY2FsX2lkYCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLlxuXG5Ob3csIGlmIGBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9pZGAgaXMgdW5pbml0aWFsaXplZCB3aGVuIGBzdWJmbG93X3VscF9jbG9uZWAgaXMgY2FsbGVkIGFuZCBgbG9jYWxfaWRgIGlzICpub3QqIHNwZWNpZmljYWxseSBhc3NpZ25lZCBlbHNld2hlcmUsIHRoZW4gdGhpcyB1bmluaXRpYWxpemVkIGRhdGEgZ2V0cyBjb3BpZWQgaW50byB0aGUgbmV3IHN1YmZsb3cgY29udGV4dCwgdGhlbiB1c2VkIGluIHZhcmlvdXMgcGxhY2VzIGxpa2UgbmV0bGluayBtZXNzYWdlcywgdGhlIG5ldHdvcmssIGV0Yy4gSSd2ZSBmb3VuZCBwbGFjZXMgd2hlcmUgdGhlIGBsb2NhbF9pZGAgaXMgc2VudCB0byB1c2Vyc3BhY2UgdmlhIGBubGFfcHV0X3U4YCB3aGljaCB0cmFuc2xhdGVzIHRvIGEgcG90ZW50aWFsIG9uZS1ieXRlIGluZm8tbGVhay5cblxuVGhlIGNyaXRpY2FsIGJpdCBpcyB0aGF0IHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlbiBzZW50IG91dCB0byB1c2Vyc3BhY2UuIEknbSB3b25kZXJpbmcgaWYgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiB3b3VsZCBjYXRjaCB0aGlzLCBidXQgbm8sIEtBU0FOIGRvZXNuJ3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBPbmx5IEtNU0FOIGRvZXMuIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgS01TQU4gcmVhbGx5IHNoaW5lcy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBgcmVxdWVzdF9zb2NrYC4gSSBzZWUgdGhhdCBga21lbV9jYWNoZV9hbGxvY19ub3Byb2ZgIGRvZXMgKm5vdCogaGF2ZSBgX19HRlBfWkVST2Agd2hpY2ggY29uZmlybXMgaXQgZG9lc24ndCB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBJIHZlcmlmeSB0aGF0IGBzdWJmbG93X2luaXRfcmVxYCBkb2Vzbid0IHNldCBgbG9jYWxfaWRgLiBUaGVyZWZvcmUgYGxvY2FsX2lkYCBpcyBpbmRlZWQgdW5pbml0aWFsaXplZC5cblxuU28sIHRoZSBwYXRjaCBoZXJlIGlzIGNydWNpYWwuIFRoZSBwYXRjaCBhZGRzIGFuIGFzc2lnbm1lbnQgb2YgYGxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYC4gU28gYmVmb3JlIHRoZSBwYXRjaCwgYGxvY2FsX2lkYCB3YXMgdW5pbml0aWFsaXplZCBmcm9tIHRoZSBgcmVxc2tfYWxsb2MoKWAgYWxsb2NhdGlvbi4gVGhpcyB3b3VsZCBiZSBhIHBlcmZlY3Qgc3BvdCB0byB0ZXN0IHdpdGggS01TQU4sIGdpdmVuIHRoZSB2dWxuZXJhYmlsaXR5IHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVha3MuXG5cbkkgY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIGVmZmVjdGl2ZWx5IGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHRoYXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlIG9yIHRoZSBuZXR3b3JrLCB0aGVyZWZvcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IHJlY29tbWVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA2NSwiT3V0cHV0VG9rZW5zIjozNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDEyOjMyOjM2LjM1NTg3NzE3OFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBhc3NpZ25tZW50IHRvIGBzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWRgIGluIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgLiBgc3ViZmxvd19yZXFgIGlzIGEgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYHJlcXNrX2FsbG9jKClgLiBUaGUgYHJlcXNrX2FsbG9jKClgIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgZnJvbSBhIHNsYWIgY2FjaGUgd2l0aG91dCB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLlxcblxcbldoaWxlIGBzdWJmbG93X2luaXRfcmVxKClgIGluaXRpYWxpemVzIHNldmVyYWwgZmllbGRzIG9mIHRoZSByZXF1ZXN0IHNvY2tldCwgaXQgZG9lcyBub3QgaW5pdGlhbGl6ZSBgbG9jYWxfaWRgLiBEdXJpbmcgYSBTWU4gY29va2llIE1QX0pPSU4sIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKClgIGlzIGNhbGxlZCB0byByZWNvbnN0cnVjdCB0aGUgcmVxdWVzdCBzb2NrZXQgc3RhdGUgZnJvbSB0aGUgY29va2llLiBCZWZvcmUgdGhpcyBwYXRjaCwgaXQgZmFpbGVkIHRvIHJlc3RvcmUgYGxvY2FsX2lkYCwgbGVhdmluZyBgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkYCB1bmluaXRpYWxpemVkLlxcblxcblRoaXMgdW5pbml0aWFsaXplZCAxLWJ5dGUgdmFsdWUgaXMgbGF0ZXIgY29waWVkIHRvIHRoZSBzdWJmbG93IGNvbnRleHQgKGBuZXdfY3R4LVxcdTAwM2Vsb2NhbF9pZGApIGluIGBzdWJmbG93X3VscF9jbG9uZSgpYC4gRnJvbSB0aGVyZSwgdGhlIHVuaW5pdGlhbGl6ZWQga2VybmVsIGhlYXAgbWVtb3J5IGNhbiBiZSBsZWFrZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChlLmcuLCBgTVBUQ1BfU1VCRkxPV19BVFRSX0lEX0xPQ2AgaW4gYHN1YmZsb3dfZ2V0X2luZm8oKWApIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yayBpbiBNUFRDUCBUQ1Agb3B0aW9ucy5cXG5cXG5TdGFuZGFyZCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk7IGl0IG9ubHkgZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZXMgYW5kIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgYnVncy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gYXNzaWdubWVudCB0byBgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkYCBpbiBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYC4gYHN1YmZsb3dfcmVxYCBpcyBhIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGByZXFza19hbGxvYygpYC4gVGhlIGByZXFza19hbGxvYygpYCBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gYSBzbGFiIGNhY2hlIHdpdGhvdXQgdGhlIGBfX0dGUF9aRVJPYCBmbGFnLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC5cXG5cXG5XaGlsZSBgc3ViZmxvd19pbml0X3JlcSgpYCBpbml0aWFsaXplcyBzZXZlcmFsIGZpZWxkcyBvZiB0aGUgcmVxdWVzdCBzb2NrZXQsIGl0IGRvZXMgbm90IGluaXRpYWxpemUgYGxvY2FsX2lkYC4gRHVyaW5nIGEgU1lOIGNvb2tpZSBNUF9KT0lOLCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZSgpYCBpcyBjYWxsZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIHJlcXVlc3Qgc29ja2V0IHN0YXRlIGZyb20gdGhlIGNvb2tpZS4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGZhaWxlZCB0byByZXN0b3JlIGBsb2NhbF9pZGAsIGxlYXZpbmcgYHN1YmZsb3dfcmVxLVxcdTAwM2Vsb2NhbF9pZGAgdW5pbml0aWFsaXplZC5cXG5cXG5UaGlzIHVuaW5pdGlhbGl6ZWQgMS1ieXRlIHZhbHVlIGlzIGxhdGVyIGNvcGllZCB0byB0aGUgc3ViZmxvdyBjb250ZXh0IChgbmV3X2N0eC1cXHUwMDNlbG9jYWxfaWRgKSBpbiBgc3ViZmxvd191bHBfY2xvbmUoKWAuIEZyb20gdGhlcmUsIHRoZSB1bmluaXRpYWxpemVkIGtlcm5lbCBoZWFwIG1lbW9yeSBjYW4gYmUgbGVha2VkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoZS5nLiwgYE1QVENQX1NVQkZMT1dfQVRUUl9JRF9MT0NgIGluIGBzdWJmbG93X2dldF9pbmZvKClgKSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsgaW4gTVBUQ1AgVENQIG9wdGlvbnMuXFxuXFxuU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OyBpdCBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIGFuZCBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIGJ1Z3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowjc9kg[1] Phase: Succeeded StartedAt: 2026-08-15 12:32:48 +0000 UTC FinishedAt: 2026-08-15 12:32:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-15 12:32:48 +0000 UTC FinishedAt: 2026-08-15 12:32:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2] Phase: Succeeded StartedAt: 2026-08-15 12:32:48 +0000 UTC FinishedAt: 2026-08-15 14:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-15 12:32:48 +0000 UTC FinishedAt: 2026-08-15 14:03:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-15 12:32:48 +0000 UTC FinishedAt: 2026-08-15 12:32:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-15 12:32:48 +0000 UTC FinishedAt: 2026-08-15 12:32:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowjc9kg/series-workflowjc9kg-convert-artifact-497374116/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-15 12:32:58 +0000 UTC FinishedAt: 2026-08-15 12:49:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-15 12:32:58 +0000 UTC FinishedAt: 2026-08-15 12:49:27 +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:*e2f5d8f4-b38f-468b-afee-2c01160f192f,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-workflowjc9kg/series-workflowjc9kg-convert-artifact-497374116/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": "8a02a277-e26f-4725-9d01-165ca51a377b", "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-workflowjc9kg/series-workflowjc9kg-build-action-2519000546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-15 12:32:58 +0000 UTC FinishedAt: 2026-08-15 12:49:17 +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:*e2f5d8f4-b38f-468b-afee-2c01160f192f,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-workflowjc9kg/series-workflowjc9kg-convert-artifact-497374116/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": "8a02a277-e26f-4725-9d01-165ca51a377b", "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-workflowjc9kg/series-workflowjc9kg-build-action-2519000546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-15 12:49:27 +0000 UTC FinishedAt: 2026-08-15 12:49:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-15 12:49:27 +0000 UTC FinishedAt: 2026-08-15 12:49:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-15 12:49:27 +0000 UTC FinishedAt: 2026-08-15 12:49:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-15 12:49:27 +0000 UTC FinishedAt: 2026-08-15 12:49:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowjc9kg/series-workflowjc9kg-convert-artifact-3623694755/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-15 12:49:37 +0000 UTC FinishedAt: 2026-08-15 12:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-15 12:49:37 +0000 UTC FinishedAt: 2026-08-15 12:51:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a02a277-e26f-4725-9d01-165ca51a377b,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-workflowjc9kg/series-workflowjc9kg-build-action-2519000546/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-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-15 12:51:31 +0000 UTC FinishedAt: 2026-08-15 12:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-15 12:51:31 +0000 UTC FinishedAt: 2026-08-15 12:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-15 12:51:31 +0000 UTC FinishedAt: 2026-08-15 13:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-15 12:51:31 +0000 UTC FinishedAt: 2026-08-15 13:08:33 +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:*e2f5d8f4-b38f-468b-afee-2c01160f192f,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-workflowjc9kg/series-workflowjc9kg-convert-artifact-3623694755/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": "da77e4d7-c6a2-46be-83ee-25ab8c757897", "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-workflowjc9kg/series-workflowjc9kg-build-action-4294456919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-15 12:51:31 +0000 UTC FinishedAt: 2026-08-15 13:08:23 +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:*e2f5d8f4-b38f-468b-afee-2c01160f192f,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-workflowjc9kg/series-workflowjc9kg-convert-artifact-3623694755/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": "da77e4d7-c6a2-46be-83ee-25ab8c757897", "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-workflowjc9kg/series-workflowjc9kg-build-action-4294456919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-15 13:08:33 +0000 UTC FinishedAt: 2026-08-15 13:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-15 13:08:33 +0000 UTC FinishedAt: 2026-08-15 13:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-15 13:08:33 +0000 UTC FinishedAt: 2026-08-15 13:10:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-15 13:08:33 +0000 UTC FinishedAt: 2026-08-15 13:10:20 +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:*da77e4d7-c6a2-46be-83ee-25ab8c757897,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-workflowjc9kg/series-workflowjc9kg-build-action-4294456919/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-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-15 13:10:30 +0000 UTC FinishedAt: 2026-08-15 14:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-15 13:10:30 +0000 UTC FinishedAt: 2026-08-15 14:03:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"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:*8a02a277-e26f-4725-9d01-165ca51a377b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*da77e4d7-c6a2-46be-83ee-25ab8c757897,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-workflowjc9kg/series-workflowjc9kg-build-action-2519000546/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-workflowjc9kg/series-workflowjc9kg-build-action-4294456919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-15 13:10:30 +0000 UTC FinishedAt: 2026-08-15 13:10:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-15 13:10:30 +0000 UTC FinishedAt: 2026-08-15 13:10:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"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-workflowjc9kg/series-workflowjc9kg-convert-artifact-554561980/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-15 13:10:30 +0000 UTC FinishedAt: 2026-08-15 13:10:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-15 13:10:30 +0000 UTC FinishedAt: 2026-08-15 13:10:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-15 13:10:30 +0000 UTC FinishedAt: 2026-08-15 13:10:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-15 13:10:40 +0000 UTC FinishedAt: 2026-08-15 14:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjc9kg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_token_join_cookie_init_state","mptcp_subflow_init_cookie_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"5625f0e2-6bdc-45cb-a48a-297494f07c1b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-15 13:10:40 +0000 UTC FinishedAt: 2026-08-15 14:03:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a02a277-e26f-4725-9d01-165ca51a377b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*da77e4d7-c6a2-46be-83ee-25ab8c757897,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-workflowjc9kg/series-workflowjc9kg-build-action-2519000546/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-workflowjc9kg/series-workflowjc9kg-build-action-4294456919/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-workflowjc9kg/series-workflowjc9kg-convert-artifact-554561980/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,}