Name: series-workflowv8tbm Phase: Running StartedAt: 2026-08-24 19:21:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8tbm[0] Phase: Running StartedAt: 2026-08-24 19:21:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8tbm[0].run-triage Phase: Running StartedAt: 2026-08-24 19:21:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv8tbm[0].run-triage(0) Phase: Running StartedAt: 2026-08-24 19:21:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "30fdb70f-8581-4b4e-90c1-6d3312fd35c7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_pm_announced_alloc", "__mptcp_try_fallback", "mptcp_set_state", "mptcp_token_join_cookie_init_state" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jJiMzNDssCiAgICAmIzM0O19fbXB0Y3BfdHJ5X2ZhbGxiYWNrJiMzNDssCiAgICAmIzM0O21wdGNwX3NldF9zdGF0ZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1wdGNwX3dyaXRlX2RhdGFfZmluKClgIGluIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYGV4dC1cdTAwM2Vjc3VtID0gMDtgLiBUaGUgYGV4dGAgcG9pbnRlciByZWZlcnMgdG8gYG9wdHMtXHUwMDNlZXh0X2NvcHlgLCB3aGljaCBpcyBwYXJ0IG9mIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgb3B0cy5tcHRjcGAuIFxuXG5UcmFjaW5nIHRoZSBhbGxvY2F0aW9uLCBgb3B0c2AgaXMgaW5zdGFudGlhdGVkIGFzIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgaW4gYF9fdGNwX3RyYW5zbWl0X3NrYigpYCAoYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2ApLiBDcnVjaWFsbHksIGBfX3RjcF90cmFuc21pdF9za2IoKWAgb25seSBjbGVhcnMgYSBzcGVjaWZpYyBzdWJzZXQgb2YgZmllbGRzIGluIGBvcHRzYCAoYG9wdHMuY2xlYXJlZGApLCBhbmQgZXhwbGljaXRseSBsZWF2ZXMgYG9wdHMubXB0Y3BgIHVuaW5pdGlhbGl6ZWQgKGFzIG5vdGVkIGJ5IHRoZSBjb21tZW50OiBcJiMzNDtDYXV0aW9uOiBmb2xsb3dpbmcgZmllbGRzIGFyZSBub3QgY2xlYXJlZCBpbiBfX3RjcF90cmFuc21pdF9za2IoKVwmIzM0OykuXG5cbldoZW4gYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKClgIHByb2Nlc3NlcyBvcHRpb25zIHdpdGhvdXQgYW4gZXhpc3RpbmcgYG1wZXh0YCwgaXQgemVyb2VzIHRoZSBgZmxhZ3NgIG9mIGBvcHRzLVx1MDAzZWV4dF9jb3B5YCBidXQgbGVhdmVzIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3QgKGluY2x1ZGluZyBgY3N1bWApIHVuaW5pdGlhbGl6ZWQuIElmIGEgREFUQV9GSU4gbmVlZHMgdG8gYmUgc2VudCwgYG1wdGNwX3dyaXRlX2RhdGFfZmluKClgIGlzIGNhbGxlZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGluaXRpYWxpemVkIHNldmVyYWwgZmllbGRzIG9mIGBleHRgIGJ1dCBtaXNzZWQgYGNzdW1gLiBcblxuU3Vic2VxdWVudGx5LCBgbXB0Y3Bfd3JpdGVfb3B0aW9ucygpYCBjYWxscyBgbXB0Y3BfbWFrZV9jc3VtKG1wZXh0KWAsIHdoaWNoIHJlYWRzIHRoZSB1bmluaXRpYWxpemVkIGBtcGV4dC1cdTAwM2Vjc3VtYCBzdGFjayBtZW1vcnkgdG8gY29tcHV0ZSB0aGUgTVBUQ1AgY2hlY2tzdW0uIFRoaXMgY2hlY2tzdW0gaXMgdGhlbiB3cml0dGVuIGludG8gdGhlIFRDUCBoZWFkZXIgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgcmVzdWx0aW5nIGluIGEga2VybmVsIHN0YWNrIG1lbW9yeSBpbmZvLWxlYWsuXG5cblN0YW5kYXJkIEtBU0FOIG9ubHkgZGV0ZWN0cyBzcGF0aWFsIChvdXQtb2YtYm91bmRzKSBhbmQgdGVtcG9yYWwgKHVzZS1hZnRlci1mcmVlKSBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSXQgZG9lcyBub3QgdHJhY2sgbWVtb3J5IGluaXRpYWxpemF0aW9uIHN0YXRlIGFuZCBjYW5ub3QgZGV0ZWN0IHJlYWRzIG9mIGxlZ2FsbHkgYWxsb2NhdGVkIGJ1dCB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYnVnIGFuZCB2ZXJpZnkgdGhhdCBubyBvdGhlciB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgbGVha2VkIGluIE1QVENQIG9wdGlvbnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSwgaW5jbHVkaW5nIG9wdGlvbnMgcGFyc2luZywgcGF0aCBtYW5hZ2VtZW50IChib3RoIGtlcm5lbCBhbmQgdXNlcnNwYWNlKSwgcHJvdG9jb2wgc3RhdGUgaGFuZGxpbmcsIGFuZCBzeW5jb29raWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY2NWI3MDlkMTRhMzM3NzIxZjlkNDYyZDU4ODZiOGQ0YWVkZWY2YzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxOToyMzowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggYjgzMThlMDMwMTM4OS4uY2UwZGUwMmY1YTNhMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC05Myw3ICYjNDM7OTMsOCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICogSW4gb3RoZXIgd29yZHMsIHRoZSBvbmx5IHdheSBmb3IgY2hlY2tzdW1zIG5vdCB0byBiZSB1c2VkXG4gXHRcdCAqIGlzIGlmIGJvdGggaG9zdHMgaW4gdGhlaXIgU1lOcyBzZXQgQT0wLlwmIzM0O1xuIFx0XHQgKi9cbi1cdFx0aWYgKGZsYWdzIFx1MDAyNiBNUFRDUF9DQVBfQ0hFQ0tTVU1fUkVRRClcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1QVENQX0NBUF9DSEVDS1NVTV9SRVFEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBvcHNpemUgXHUwMDNjIFRDUE9MRU5fTVBUQ1BfTVBDX0FDS19EQVRBKVxuIFx0XHRcdG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIHw9IE9QVElPTl9NUFRDUF9DU1VNUkVRRDtcbiBcbiBcdFx0bXBfb3B0LVx1MDAzZWRlbnlfam9pbl9pZDAgPSAhIShmbGFncyBcdTAwMjYgTVBUQ1BfQ0FQX0RFTllfSk9JTl9JRDApO1xuQEAgLTUyOSw3ICYjNDM7NTMwLDcgQEAgc3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIE1QQy9NUEogbmVlZGVkIG9ubHkgb24gM3JkIGFjayBwYWNrZXQsIERBVEFfRklOIGFuZCBUQ1Agc2h1dGRvd24gdGFrZSBwcmVjZWRlbmNlICovXG4tXHRpZiAoUkVBRF9PTkNFKHN1YmZsb3ctXHUwMDNlZnVsbHlfZXN0YWJsaXNoZWQpIHx8IHNuZF9kYXRhX2Zpbl9lbmFibGUgfHxcbiYjNDM7XHRpZiAoc3ViZmxvdy1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZCB8fCBzbmRfZGF0YV9maW5fZW5hYmxlIHx8XG4gXHQgICAgc3ViZmxvdy1cdTAwM2VzbmRfaXNuICE9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgfHxcbiBcdCAgICBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC02MTEsNiAmIzQzOzYxMiw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3dyaXRlX2RhdGFfZmluKHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXG4gXHRcdGV4dC1cdTAwM2VkYXRhX3NlcSA9IGRhdGFfZmluX3R4X3NlcTtcbiBcdFx0ZXh0LVx1MDAzZXN1YmZsb3dfc2VxID0gMDtcbiBcdFx0ZXh0LVx1MDAzZWRhdGFfbGVuID0gMTtcbiYjNDM7XHRcdGV4dC1cdTAwM2Vjc3VtID0gMDtcbiBcdH0gZWxzZSBpZiAoZXh0LVx1MDAzZWRhdGFfc2VxICYjNDM7IGV4dC1cdTAwM2VkYXRhX2xlbiA9PSBkYXRhX2Zpbl90eF9zZXEpIHtcbiBcdFx0LyogSWYgdGhlcmUmIzM5O3MgYW4gZXhpc3RpbmcgRFNTIG1hcHBpbmcgYW5kIGl0IGlzIHRoZVxuIFx0XHQgKiBmaW5hbCBtYXBwaW5nLCBEQVRBX0ZJTiBjb25zdW1lcyAxIGFkZGl0aW9uYWwgYnl0ZSBvZlxuQEAgLTk4MCw3ICYjNDM7OTgyLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzayxcbiBcdC8qIGhlcmUgd2UgY2FuIHByb2Nlc3MgT29PLCBpbi13aW5kb3cgcGt0cywgb25seSBpbi1zZXF1ZW5jZSA0dGggYWNrXG4gXHQgKiB3aWxsIG1ha2UgdGhlIHN1YmZsb3cgZnVsbHkgZXN0YWJsaXNoZWRcbiBcdCAqL1xuLVx0aWYgKGxpa2VseShSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZCkpKSB7XG4mIzQzO1x0aWYgKGxpa2VseShzdWJmbG93LVx1MDAzZWZ1bGx5X2VzdGFibGlzaGVkKSkge1xuIFx0XHQvKiBvbiBwYXNzaXZlIHNvY2tldHMsIGNoZWNrIGZvciAzcmQgYWNrIHJldHJhbnNtaXNzaW9uXG4gXHRcdCAqIG5vdGUgdGhhdCBtc2sgaXMgYWx3YXlzIHNldCBieSBzdWJmbG93X3N5bl9yZWN2X3NvY2soKVxuIFx0XHQgKiBmb3IgbXBfam9pbiBzdWJmbG93c1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDhiNjg4NjgyNTVjNTAuLmIwYjcxYWRlZmI4ZmUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtLmNcbkBAIC00NjIsMTAgJiM0Mzs0NjIsMTAgQEAgYm9vbCBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2Moc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcbiBcdGFkZF9lbnRyeS1cdTAwM2VhZGRyID0gKmFkZHI7XG4gXHRhZGRfZW50cnktXHUwMDNlc29jayA9IG1zaztcbi1cdGFkZF9lbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzID0gMDtcbiBcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmFkZF9lbnRyeS1cdTAwM2V0aW1lciwgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIsIDApO1xuIHJlc2V0X3RpbWVyOlxuJiM0MztcdGFkZF9lbnRyeS1cdTAwM2VyZXRyYW5zX3RpbWVzID0gMDtcbiBcdGFkZF9lbnRyeS1cdTAwM2V0aW1lcl9kb25lID0gZmFsc2U7XG4gXHR0aW1lb3V0ID0gbXB0Y3BfYWRqdXN0X2FkZF9hZGRyX3RpbWVvdXQobXNrKTtcbiBcdGlmICh0aW1lb3V0KVxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV9rZXJuZWwuYyBiL25ldC9tcHRjcC9wbV9rZXJuZWwuY1xuaW5kZXggNDI0ZjFhN2Y5MjQ4Mi4uMWE3NzUwODEzMjM1NCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wbV9rZXJuZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtX2tlcm5lbC5jXG5AQCAtMTEzNyw2ICYjNDM7MTEzNyw4IEBAIHN0YXRpYyBpbnQgbXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR3aGlsZSAoKG1zayA9IG1wdGNwX3Rva2VuX2l0ZXJfbmV4dChuZXQsIFx1MDAyNnNfc2xvdCwgXHUwMDI2c19udW0pKSAhPSBOVUxMKSB7XG4gXHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcbiBcdFx0c3RydWN0IG1wdGNwX2FkZHJfaW5mbyBtc2tfbG9jYWw7XG4mIzQzO1x0XHRzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvIGFubm9fYWRkcjtcbiYjNDM7XHRcdGJvb2wgYW5ub3VuY2VkO1xuIFxuIFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlY29ubl9saXN0KSB8fCBtcHRjcF9wbV9pc191c2Vyc3BhY2UobXNrKSlcbiBcdFx0XHRnb3RvIG5leHQ7XG5AQCAtMTE0Niw3ICYjNDM7MTE0OCwxMyBAQCBzdGF0aWMgaW50IG1wdGNwX25sX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0bG9ja19zb2NrKHNrKTtcbiYjNDM7XHRcdC8qIERyb3AgYSBwb3NzaWJseSBwZW5kaW5nIEFERF9BRERSIGZvciB0aGlzIGFkZHJlc3MuICovXG4mIzQzO1x0XHRhbm5vX2FkZHIgPSBtc2tfbG9jYWw7XG4mIzQzO1x0XHRhbm5vX2FkZHIucG9ydCA9IDA7XG4mIzQzO1x0XHRhbm5vdW5jZWQgPSBtcHRjcF9wbV9hbm5vdW5jZWRfcmVtb3ZlKG1zaywgXHUwMDI2YW5ub19hZGRyKTtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VwbS5sb2NrKTtcbiYjNDM7XHRcdGlmIChhbm5vdW5jZWQpXG4mIzQzO1x0XHRcdG1zay1cdTAwM2VwbS5hZGRfYWRkcl9zaWduYWxlZC0tO1xuIFx0XHRtcHRjcF9wbV9yZW1vdmVfYWRkcihtc2ssIFx1MDAyNmxpc3QpO1xuIFx0XHRtcHRjcF9wbV9ybV9zdWJmbG93KG1zaywgXHUwMDI2bGlzdCk7XG4gXHRcdF9fbWFya19zdWJmbG93X2VuZHBfYXZhaWxhYmxlKG1zaywgMCk7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5pbmRleCBiOTRmYmI0ODNiZjk0Li5mYWIxNmQ5NTNkYmZlIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbkBAIC02OSw2ICYjNDM7NjksMTkgQEAgc3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHR9XG4gXG4gXHRpZiAoIWFkZHJfbWF0Y2ggXHUwMDI2XHUwMDI2ICFpZF9tYXRjaCkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGlkO1xuJiM0MztcbiYjNDM7XHRcdGlmICghZW50cnktXHUwMDNlYWRkci5pZCBcdTAwMjZcdTAwMjYgbmVlZHNfaWQpIHtcbiYjNDM7XHRcdFx0aWQgPSBmaW5kX25leHRfemVyb19iaXQoaWRfYml0bWFwLFxuJiM0MztcdFx0XHRcdFx0XHRNUFRDUF9QTV9NQVhfQUREUl9JRCAmIzQzOyAxLCAxKTtcbiYjNDM7XHRcdFx0aWYgKGlkIFx1MDAzZSBNUFRDUF9QTV9NQVhfQUREUl9JRCkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FTk9TUEM7XG4mIzQzO1x0XHRcdFx0Z290byBhcHBlbmRfZXJyO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRpZCA9IGVudHJ5LVx1MDAzZWFkZHIuaWQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKiBNZW1vcnkgZm9yIHRoZSBlbnRyeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGVcbiBcdFx0ICogc29jayBvcHRpb24gYnVmZmVyLlxuIFx0XHQgKi9cbkBAIC03OCwxMCAmIzQzOzkxLDcgQEAgc3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXHRcdFx0Z290byBhcHBlbmRfZXJyO1xuIFx0XHR9XG4gXG4tXHRcdGlmICghZS1cdTAwM2VhZGRyLmlkIFx1MDAyNlx1MDAyNiBuZWVkc19pZClcbi1cdFx0XHRlLVx1MDAzZWFkZHIuaWQgPSBmaW5kX25leHRfemVyb19iaXQoaWRfYml0bWFwLFxuLVx0XHRcdFx0XHRcdFx0TVBUQ1BfUE1fTUFYX0FERFJfSUQgJiM0MzsgMSxcbi1cdFx0XHRcdFx0XHRcdDEpO1xuJiM0MztcdFx0ZS1cdTAwM2VhZGRyLmlkID0gaWQ7XG4gXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bXNrLVx1MDAzZXBtLnVzZXJzcGFjZV9wbV9sb2NhbF9hZGRyX2xpc3QpO1xuIFx0XHRtc2stXHUwMDNlcG0ubG9jYWxfYWRkcl91c2VkJiM0MzsmIzQzOztcbiBcdFx0cmV0ID0gZS1cdTAwM2VhZGRyLmlkO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGI0NzRkMDM2MjBhNzUuLmIyNmE4ZDU2MDYxMjUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC05NSw2ICYjNDM7OTUsNyBAQCBib29sIF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBmYl9taWIpXG4gXG4gXHRtc2stXHUwMDNlYWxsb3dfc3ViZmxvd3MgPSBmYWxzZTtcbiBcdHNldF9iaXQoTVBUQ1BfRkFMTEJBQ0tfRE9ORSwgXHUwMDI2bXNrLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRzZXRfYml0KE1QVENQX1JUWF9ESVNBQkxFRCwgXHUwMDI2bXNrLVx1MDAzZWZsYWdzKTtcbiBcdF9fTVBUQ1BfSU5DX1NUQVRTKG5ldCwgZmJfbWliKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VmYWxsYmFja19sb2NrKTtcbiBcdHJldHVybiB0cnVlO1xuQEAgLTI4OCw4ICYjNDM7Mjg5LDggQEAgc3RhdGljIHZvaWQgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHN0cnVjdCBzb2NrICpzayxcbiAgKi9cbiBzdGF0aWMgYm9vbCBtcHRjcF9jYW5faW5nZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiB7XG4tXHRyZXR1cm4gdW5saWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYz0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpIHx8XG4tXHRcdFx0X19tcHRjcF9jaGVja19mYWxsYmFjayhtcHRjcF9zayhzaykpO1xuJiM0MztcdHJldHVybiBsaWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYz0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpIHx8XG4mIzQzO1x0ICAgICAgIF9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXB0Y3Bfc2soc2spKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuQEAgLTMxMiwxMiAmIzQzOzMxMyw2IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR1NjQgc2VxLCBlbmRfc2VxLCBtYXhfc2VxO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjE7XG4gXG4tXHRpZiAoIW1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHNrLCBza2IpKSB7XG4tXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xuLVx0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4gXHRzZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuIFx0ZW5kX3NlcSA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXE7XG4gXHRtYXhfc2VxID0gYXRvbWljNjRfcmVhZChcdTAwMjZtc2stXHUwMDNlcmN2X3duZF9zZW50KTtcbkBAIC0zMzQsNiAmIzQzOzMyOSwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xuJiM0MztcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4mIzQzO1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwID0gXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZS5yYl9ub2RlO1xuIFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT1FVRVVFKTtcbiBcdGlmIChSQl9FTVBUWV9ST09UKFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKSB7XG5AQCAtMTA4NCwxMyAmIzQzOzEwODUsMTQgQEAgc3RhdGljIGJvb2wgbXB0Y3BfcnR4X3RpbWVyX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrKVxuIFxuIHN0YXRpYyB2b2lkIG1wdGNwX3Jlc2V0X3J0eF90aW1lcihzdHJ1Y3Qgc29jayAqc2spXG4ge1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHR1bnNpZ25lZCBsb25nIHRvdXQ7XG4gXG4tXHQvKiBwcmV2ZW50IHJlc2NoZWR1bGluZyBvbiBjbG9zZSAqL1xuLVx0aWYgKHVubGlrZWx5KGluZXRfc2tfc3RhdGVfbG9hZChzaykgPT0gVENQX0NMT1NFKSlcbiYjNDM7XHQvKiBQcmV2ZW50IHJlc2NoZWR1bGluZyBvbiBjbG9zZSBhbmQgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cbiYjNDM7XHRpZiAodGVzdF9iaXQoTVBUQ1BfUlRYX0RJU0FCTEVELCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR0b3V0ID0gbXB0Y3Bfc2soc2spLVx1MDAzZXRpbWVyX2l2YWw7XG4mIzQzO1x0dG91dCA9IG1zay1cdTAwM2V0aW1lcl9pdmFsO1xuIFx0c2tfcmVzZXRfdGltZXIoc2ssIFx1MDAyNnNrLVx1MDAzZW1wdGNwX3JldHJhbnNtaXRfdGltZXIsIGppZmZpZXMgJiM0MzsgdG91dCk7XG4gfVxuIFxuQEAgLTMzMjQsNiAmIzQzOzMzMjYsOSBAQCB2b2lkIG1wdGNwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSlcbiBcdFx0ICogdHJhbnNpdGlvbiBmcm9tIFRDUF9TWU5fUkVDViB0byBUQ1BfQ0xPU0VfV0FJVC5cbiBcdFx0ICovXG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVENQX0NMT1NFOlxuJiM0MztcdFx0c2V0X2JpdChNUFRDUF9SVFhfRElTQUJMRUQsIFx1MDAyNm1wdGNwX3NrKHNrKS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiBcdGRlZmF1bHQ6XG4gXHRcdGlmIChvbGRzdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQgfHwgb2xkc3RhdGUgPT0gVENQX0NMT1NFX1dBSVQpXG4gXHRcdFx0TVBUQ1BfREVDX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0NVUlJFU1RBQik7XG5AQCAtMzg3Niw3ICYjNDM7Mzg4MSw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkdWxlXzNyZGFja19yZXRyYW5zbWlzc2lvbihzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzc2spO1xuIFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0O1xuIFxuLVx0aWYgKFJFQURfT05DRShtcHRjcF9zdWJmbG93X2N0eChzc2spLVx1MDAzZWZ1bGx5X2VzdGFibGlzaGVkKSlcbiYjNDM7XHRpZiAobXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogcmVzY2hlZHVsZSB3aXRoIGEgdGltZW91dCBhYm92ZSBSVFQsIGFzIHdlIG11c3QgbG9vayBvbmx5IGZvciBkcm9wICovXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggMDZhMTA3ZDRlODM5Mi4uNmMwMGE4MDM0NGY5MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTExNiw2ICYjNDM7MTE2LDcgQEBcbiAjZGVmaW5lIE1QVENQX1dPUktfUlRYXHRcdDFcbiAjZGVmaW5lIE1QVENQX0ZBTExCQUNLX0RPTkVcdDJcbiAjZGVmaW5lIE1QVENQX1dPUktfQ0xPU0VfU1VCRkxPVyAzXG4mIzQzOyNkZWZpbmUgTVBUQ1BfUlRYX0RJU0FCTEVEXHQ0XG4gXG4gLyogTVBUQ1Agc29ja2V0IHJlbGVhc2UgY2IgZmxhZ3MgKi9cbiAjZGVmaW5lIE1QVENQX1BVU0hfUEVORElOR1x0MVxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5pbmRleCBhZjgxYWQ1ZTY5OWQxLi4wMWRiN2VkY2UxOGE2IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuQEAgLTIwODQsNyAmIzQzOzIwODQsNiBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHRcdG5ld19jdHgtXHUwMDNlcmVxdWVzdF9ia3VwID0gc3ViZmxvd19yZXEtXHUwMDNlcmVxdWVzdF9ia3VwO1xuIFx0XHRXUklURV9PTkNFKG5ld19jdHgtXHUwMDNlcmVtb3RlX2lkLCBzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQpO1xuIFx0XHRuZXdfY3R4LVx1MDAzZXRva2VuID0gc3ViZmxvd19yZXEtXHUwMDNldG9rZW47XG4tXHRcdG5ld19jdHgtXHUwMDNldGhtYWMgPSBzdWJmbG93X3JlcS1cdTAwM2V0aG1hYztcbiBcbiBcdFx0LyogdGhlIHN1YmZsb3cgcmVxIGlkIGlzIHZhbGlkLCBmZXRjaGVkIHZpYSBzdWJmbG93X2NoZWNrX3JlcSgpXG4gXHRcdCAqIGFuZCBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdCgpXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmNcbmluZGV4IGI1Y2FjNTcwMTEyMjEuLjk0NzQ3MDY2NDFjMTEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3luY29va2llcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jXG5AQCAtMjYsNyAmIzQzOzI2LDggQEAgc3RydWN0IGpvaW5fZW50cnkge1xuIFx0dTMyIGxvY2FsX25vbmNlO1xuIFx0dTggam9pbl9pZDtcbiBcdHU4IGxvY2FsX2lkO1xuLVx0dTggYmFja3VwO1xuJiM0MztcdHU4IGJhY2t1cDoxLFxuJiM0MztcdCAgIHJlcXVlc3RfYmt1cDoxO1xuIFx0dTggdmFsaWQ7XG4gfTtcbiBcbkBAIC02Myw2ICYjNDM7NjQsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSxcbiBcdGVudHJ5LVx1MDAzZXJlbW90ZV9ub25jZSA9IHN1YmZsb3dfcmVxLVx1MDAzZXJlbW90ZV9ub25jZTtcbiBcdGVudHJ5LVx1MDAzZWxvY2FsX25vbmNlID0gc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfbm9uY2U7XG4gXHRlbnRyeS1cdTAwM2ViYWNrdXAgPSBzdWJmbG93X3JlcS1cdTAwM2ViYWNrdXA7XG4mIzQzO1x0ZW50cnktXHUwMDNlcmVxdWVzdF9ia3VwID0gc3ViZmxvd19yZXEtXHUwMDNlcmVxdWVzdF9ia3VwO1xuIFx0ZW50cnktXHUwMDNlam9pbl9pZCA9IHN1YmZsb3dfcmVxLVx1MDAzZXJlbW90ZV9pZDtcbiBcdGVudHJ5LVx1MDAzZWxvY2FsX2lkID0gc3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQ7XG4gXHRlbnRyeS1cdTAwM2V2YWxpZCA9IDE7XG5AQCAtMTE3LDYgJiM0MzsxMTksNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbFxuIFx0c3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX25vbmNlID0gZS1cdTAwM2VyZW1vdGVfbm9uY2U7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9ub25jZSA9IGUtXHUwMDNlbG9jYWxfbm9uY2U7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2ViYWNrdXAgPSBlLVx1MDAzZWJhY2t1cDtcbiYjNDM7XHRzdWJmbG93X3JlcS1cdTAwM2VyZXF1ZXN0X2JrdXAgPSBlLVx1MDAzZXJlcXVlc3RfYmt1cDtcbiBcdHN1YmZsb3dfcmVxLVx1MDAzZXJlbW90ZV9pZCA9IGUtXHUwMDNlam9pbl9pZDtcbiBcdHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkID0gZS1cdTAwM2Vsb2NhbF9pZDtcbiBcdHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuID0gZS1cdTAwM2V0b2tlbjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY1xuaW5kZXggZWE0Y2I2YzFiZDVlMi4uMTc4ZDk4ZDkxZmVhMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNcbkBAIC0zODEsNiAmIzQzOzM4MSw5IEBAIHN0YXRpYyBpbnQgc29ja19jb25uZWN0X21wdGNwKGNvbnN0IGNoYXIgKiBjb25zdCByZW1vdGVhZGRyLFxuIFxuIFx0aGludHMuYWlfZmFtaWx5ID0gcGY7XG4gXG4mIzQzO1x0LyogS2VlcCB0aGUgcmVzb2x2ZWQgYWRkcmVzcyBhbGl2ZSBmb3IgdGhlIHdob2xlIGV4ZWN1dGlvbjogaXQgaXNcbiYjNDM7XHQgKiB1c2VkIGFnYWluIHdoZW4gcmVjb25uZWN0aW5nLCBhbmQgd2lsbCBiZSByZWxlYXNlZCBhdCBleGl0IHRpbWUuXG4mIzQzO1x0ICovXG4gXHR4Z2V0YWRkcmluZm8ocmVtb3RlYWRkciwgcG9ydCwgXHUwMDI2aGludHMsIFx1MDAyNmFkZHIpO1xuIFx0Zm9yIChhID0gYWRkcjsgYTsgYSA9IGEtXHUwMDNlYWlfbmV4dCkge1xuIFx0XHRzb2NrID0gc29ja2V0KGEtXHUwMDNlYWlfZmFtaWx5LCBhLVx1MDAzZWFpX3NvY2t0eXBlLCBwcm90byk7XG5AQCAtNDIxLDcgJiM0Mzs0MjQsNiBAQCBzdGF0aWMgaW50IHNvY2tfY29ubmVjdF9tcHRjcChjb25zdCBjaGFyICogY29uc3QgcmVtb3RlYWRkcixcbiBcdFx0c29jayA9IC0xO1xuIFx0fVxuIFxuLVx0ZnJlZWFkZHJpbmZvKGFkZHIpO1xuIFx0aWYgKHNvY2sgIT0gLTEpXG4gXHRcdFNPQ0tfVEVTVF9UQ1BVTFAoc29jaywgcHJvdG8pO1xuIFx0cmV0dXJuIHNvY2s7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2xpYi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9saWIuc2hcbmluZGV4IDVlZjYwMzM3NzVjODYuLmI5ZDE0NjQ3ZjQwMTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoXG5AQCAtMTA4LDEyICYjNDM7MTA4LDE0IEBAIG1wdGNwX2xpYl9wcl9pbmZvKCkge1xuIFxuIG1wdGNwX2xpYl9wcl9uc3RhdCgpIHtcbiBcdGxvY2FsIG5zPVwmIzM0OyR7MX1cJiMzNDtcbi1cdGxvY2FsIGhpc3Q9XCYjMzQ7L3RtcC8ke25zfS5vdXRcJiMzNDtcbiYjNDM7XHRsb2NhbCBjYWNoZT1cJiMzNDsvdG1wLyR7bnN9Lm91dFwmIzM0O1xuJiM0MztcdGxvY2FsIGhpc3Q9XCYjMzQ7L3RtcC8ke25zfS5uc3RhdFwmIzM0O1xuIFxuLVx0aWYgWyAtZiBcJiMzNDske2hpc3R9XCYjMzQ7IF07IHRoZW5cbi1cdFx0YXdrICYjMzk7JDIgIT0gMCB7IHByaW50IFwmIzM0OyAgXCYjMzQ7JDAgfSYjMzk7IFwmIzM0OyR7aGlzdH1cJiMzNDtcbiYjNDM7XHRpZiBbIC1mIFwmIzM0OyR7Y2FjaGV9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGF3ayAmIzM5OyQyICE9IDAgeyBwcmludCBcJiMzNDsgIFwmIzM0OyQwIH0mIzM5OyBcJiMzNDske2NhY2hlfVwmIzM0O1xuIFx0ZWxzZVxuLVx0XHRpcCBuZXRucyBleGVjIFwmIzM0OyR7bnN9XCYjMzQ7IG5zdGF0IC1hcyB8IGdyZXAgVGNwXG4mIzQzO1x0XHROU1RBVF9ISVNUT1JZPVwmIzM0OyR7aGlzdH1cJiMzNDsgaXAgbmV0bnMgZXhlYyBcJiMzNDske25zfVwmIzM0OyBuc3RhdCAtcyB8XG4mIzQzO1x0XHRcdGdyZXAgVGNwXG4gXHRmaVxuIH1cbiBcbkBAIC00MTQsMTkgJiM0Mzs0MTYsMjEgQEAgbXB0Y3BfbGliX25zdGF0X2dldCgpIHtcbiB9XG4gXG4gIyAkMTogbnMsICQyOiBNSUIgY291bnRlclxuLSMgR2V0IHRoZSBjb3VudGVyIGZyb20gdGhlIGhpc3RvcnkgKG1wdGNwX2xpYl9uc3RhdF97aW5pdCxnZXR9KCkpIGlmIGF2YWlsYWJsZS5cbi0jIElmIG5vdCwgZ2V0IHRoZSBjb3VudGVyIGZyb20gbnN0YXQgaWdub3JpbmcgYW55IGhpc3RvcnkuXG4mIzQzOyMgR2V0IHRoZSBjb3VudGVyIGZyb20gdGhlIGNhY2hlIChtcHRjcF9saWJfbnN0YXRfe2luaXQsZ2V0fSgpKSBpZiBhdmFpbGFibGUuXG4mIzQzOyMgSWYgbm90LCBnZXQgdGhlIGNvdW50ZXIgZnJvbSBuc3RhdCBpZ25vcmluZyBhbnkgY2FjaGUsIGJ1dCB1c2luZyB0aGUgaGlzdG9yeS5cbiBtcHRjcF9saWJfZ2V0X2NvdW50ZXIoKSB7XG4gXHRsb2NhbCBucz1cJiMzNDskezF9XCYjMzQ7XG4gXHRsb2NhbCBjb3VudGVyPVwmIzM0OyR7Mn1cJiMzNDtcbi1cdGxvY2FsIGhpc3Q9XCYjMzQ7L3RtcC8ke25zfS5vdXRcJiMzNDtcbiYjNDM7XHRsb2NhbCBjYWNoZT1cJiMzNDsvdG1wLyR7bnN9Lm91dFwmIzM0O1xuJiM0MztcdGxvY2FsIGhpc3Q9XCYjMzQ7L3RtcC8ke25zfS5uc3RhdFwmIzM0O1xuIFx0bG9jYWwgY291bnRcbiBcbi1cdGlmIFtbIC1zIFwmIzM0OyR7aGlzdH1cJiMzNDsgXHUwMDI2XHUwMDI2IFwmIzM0OyR7Y291bnRlcn1cJiMzNDsgPT0gKlwmIzM0O1RjcFwmIzM0OyogXV07IHRoZW5cbi1cdFx0Y291bnQ9JChhd2sgXCYjMzQ7L14ke2NvdW50ZXJ9IC8ge3ByaW50IFxcJDI7IGV4aXR9XCYjMzQ7IFwmIzM0OyR7aGlzdH1cJiMzNDspXG4mIzQzO1x0aWYgW1sgLXMgXCYjMzQ7JHtjYWNoZX1cJiMzNDsgXHUwMDI2XHUwMDI2IFwmIzM0OyR7Y291bnRlcn1cJiMzNDsgPT0gKlwmIzM0O1RjcFwmIzM0OyogXV07IHRoZW5cbiYjNDM7XHRcdGNvdW50PSQoYXdrIFwmIzM0Oy9eJHtjb3VudGVyfSAvIHtwcmludCBcXCQyOyBleGl0fVwmIzM0OyBcJiMzNDske2NhY2hlfVwmIzM0OylcbiBcdGVsc2Vcbi1cdFx0Y291bnQ9JChpcCBuZXRucyBleGVjIFwmIzM0OyR7bnN9XCYjMzQ7IG5zdGF0IC1hc3ogXCYjMzQ7JHtjb3VudGVyfVwmIzM0OyB8XG4tXHRcdFx0YXdrICYjMzk7TlI9PTEge25leHR9IHtwcmludCAkMn0mIzM5OylcbiYjNDM7XHRcdGNvdW50PSQoTlNUQVRfSElTVE9SWT1cJiMzNDske2hpc3R9XCYjMzQ7IGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JHtuc31cJiMzNDsgXFxcbiYjNDM7XHRcdFx0bnN0YXQgLXN6IFwmIzM0OyR7Y291bnRlcn1cJiMzNDsgfFxuJiM0MztcdFx0XHRcdGF3ayAmIzM5O05SPT0xIHtuZXh0fSB7cHJpbnQgJDJ9JiMzOTspXG4gXHRmaVxuIFx0aWYgWyAteiBcJiMzNDske2NvdW50fVwmIzM0OyBdOyB0aGVuXG4gXHRcdG1wdGNwX2xpYl9mYWlsX2lmX2V4cGVjdGVkX2ZlYXR1cmUgXCYjMzQ7JHtjb3VudGVyfSBjb3VudGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jJiMzNDssCiAgICAmIzM0O19fbXB0Y3BfdHJ5X2ZhbGxiYWNrJiMzNDssCiAgICAmIzM0O21wdGNwX3NldF9zdGF0ZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0sIGluY2x1ZGluZyBvcHRpb25zIHBhcnNpbmcsIHBhdGggbWFuYWdlbWVudCAoYm90aCBrZXJuZWwgYW5kIHVzZXJzcGFjZSksIHByb3RvY29sIHN0YXRlIGhhbmRsaW5nLCBhbmQgc3luY29va2llcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNjViNzA5ZDE0YTMzNzcyMWY5ZDQ2MmQ1ODg2YjhkNGFlZGVmNmMzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTk6MjM6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuYwppbmRleCBiODMxOGUwMzAxMzg5Li5jZTBkZTAyZjVhM2ExIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3Avb3B0aW9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9vcHRpb25zLmMKQEAgLTkzLDcgJiM0Mzs5Myw4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgKiBJbiBvdGhlciB3b3JkcywgdGhlIG9ubHkgd2F5IGZvciBjaGVja3N1bXMgbm90IHRvIGJlIHVzZWQKIAkJICogaXMgaWYgYm90aCBob3N0cyBpbiB0aGVpciBTWU5zIHNldCBBPTAuJiMzNDsKIAkJICovCi0JCWlmIChmbGFncyAmYW1wOyBNUFRDUF9DQVBfQ0hFQ0tTVU1fUkVRRCkKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgTVBUQ1BfQ0FQX0NIRUNLU1VNX1JFUUQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBvcHNpemUgJmx0OyBUQ1BPTEVOX01QVENQX01QQ19BQ0tfREFUQSkKIAkJCW1wX29wdC0mZ3Q7c3Vib3B0aW9ucyB8PSBPUFRJT05fTVBUQ1BfQ1NVTVJFUUQ7CiAKIAkJbXBfb3B0LSZndDtkZW55X2pvaW5faWQwID0gISEoZmxhZ3MgJmFtcDsgTVBUQ1BfQ0FQX0RFTllfSk9JTl9JRDApOwpAQCAtNTI5LDcgJiM0Mzs1MzAsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogTVBDL01QSiBuZWVkZWQgb25seSBvbiAzcmQgYWNrIHBhY2tldCwgREFUQV9GSU4gYW5kIFRDUCBzaHV0ZG93biB0YWtlIHByZWNlZGVuY2UgKi8KLQlpZiAoUkVBRF9PTkNFKHN1YmZsb3ctJmd0O2Z1bGx5X2VzdGFibGlzaGVkKSB8fCBzbmRfZGF0YV9maW5fZW5hYmxlIHx8CiYjNDM7CWlmIChzdWJmbG93LSZndDtmdWxseV9lc3RhYmxpc2hlZCB8fCBzbmRfZGF0YV9maW5fZW5hYmxlIHx8CiAJICAgIHN1YmZsb3ctJmd0O3NuZF9pc24gIT0gVENQX1NLQl9DQihza2IpLSZndDtzZXEgfHwKIAkgICAgc2stJmd0O3NrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNjExLDYgJiM0Mzs2MTIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF93cml0ZV9kYXRhX2ZpbihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LAogCQlleHQtJmd0O2RhdGFfc2VxID0gZGF0YV9maW5fdHhfc2VxOwogCQlleHQtJmd0O3N1YmZsb3dfc2VxID0gMDsKIAkJZXh0LSZndDtkYXRhX2xlbiA9IDE7CiYjNDM7CQlleHQtJmd0O2NzdW0gPSAwOwogCX0gZWxzZSBpZiAoZXh0LSZndDtkYXRhX3NlcSAmIzQzOyBleHQtJmd0O2RhdGFfbGVuID09IGRhdGFfZmluX3R4X3NlcSkgewogCQkvKiBJZiB0aGVyZSYjMzk7cyBhbiBleGlzdGluZyBEU1MgbWFwcGluZyBhbmQgaXQgaXMgdGhlCiAJCSAqIGZpbmFsIG1hcHBpbmcsIERBVEFfRklOIGNvbnN1bWVzIDEgYWRkaXRpb25hbCBieXRlIG9mCkBAIC05ODAsNyAmIzQzOzk4Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2ssCiAJLyogaGVyZSB3ZSBjYW4gcHJvY2VzcyBPb08sIGluLXdpbmRvdyBwa3RzLCBvbmx5IGluLXNlcXVlbmNlIDR0aCBhY2sKIAkgKiB3aWxsIG1ha2UgdGhlIHN1YmZsb3cgZnVsbHkgZXN0YWJsaXNoZWQKIAkgKi8KLQlpZiAobGlrZWx5KFJFQURfT05DRShzdWJmbG93LSZndDtmdWxseV9lc3RhYmxpc2hlZCkpKSB7CiYjNDM7CWlmIChsaWtlbHkoc3ViZmxvdy0mZ3Q7ZnVsbHlfZXN0YWJsaXNoZWQpKSB7CiAJCS8qIG9uIHBhc3NpdmUgc29ja2V0cywgY2hlY2sgZm9yIDNyZCBhY2sgcmV0cmFuc21pc3Npb24KIAkJICogbm90ZSB0aGF0IG1zayBpcyBhbHdheXMgc2V0IGJ5IHN1YmZsb3dfc3luX3JlY3Zfc29jaygpCiAJCSAqIGZvciBtcF9qb2luIHN1YmZsb3dzCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jCmluZGV4IDhiNjg4NjgyNTVjNTAuLmIwYjcxYWRlZmI4ZmUgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbS5jCkBAIC00NjIsMTAgJiM0Mzs0NjIsMTAgQEAgYm9vbCBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaywKIAogCWFkZF9lbnRyeS0mZ3Q7YWRkciA9ICphZGRyOwogCWFkZF9lbnRyeS0mZ3Q7c29jayA9IG1zazsKLQlhZGRfZW50cnktJmd0O3JldHJhbnNfdGltZXMgPSAwOwogCiAJdGltZXJfc2V0dXAoJmFtcDthZGRfZW50cnktJmd0O3RpbWVyLCBtcHRjcF9wbV9hZGRfYWRkcl90aW1lciwgMCk7CiByZXNldF90aW1lcjoKJiM0MzsJYWRkX2VudHJ5LSZndDtyZXRyYW5zX3RpbWVzID0gMDsKIAlhZGRfZW50cnktJmd0O3RpbWVyX2RvbmUgPSBmYWxzZTsKIAl0aW1lb3V0ID0gbXB0Y3BfYWRqdXN0X2FkZF9hZGRyX3RpbWVvdXQobXNrKTsKIAlpZiAodGltZW91dCkKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV9rZXJuZWwuYyBiL25ldC9tcHRjcC9wbV9rZXJuZWwuYwppbmRleCA0MjRmMWE3ZjkyNDgyLi4xYTc3NTA4MTMyMzU0IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcG1fa2VybmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtX2tlcm5lbC5jCkBAIC0xMTM3LDYgJiM0MzsxMTM3LDggQEAgc3RhdGljIGludCBtcHRjcF9ubF9yZW1vdmVfaWRfemVyb19hZGRyZXNzKHN0cnVjdCBuZXQgKm5ldCwKIAl3aGlsZSAoKG1zayA9IG1wdGNwX3Rva2VuX2l0ZXJfbmV4dChuZXQsICZhbXA7c19zbG90LCAmYW1wO3NfbnVtKSkgIT0gTlVMTCkgewogCQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7CiAJCXN0cnVjdCBtcHRjcF9hZGRyX2luZm8gbXNrX2xvY2FsOwomIzQzOwkJc3RydWN0IG1wdGNwX2FkZHJfaW5mbyBhbm5vX2FkZHI7CiYjNDM7CQlib29sIGFubm91bmNlZDsKIAogCQlpZiAobGlzdF9lbXB0eSgmYW1wO21zay0mZ3Q7Y29ubl9saXN0KSB8fCBtcHRjcF9wbV9pc191c2Vyc3BhY2UobXNrKSkKIAkJCWdvdG8gbmV4dDsKQEAgLTExNDYsNyAmIzQzOzExNDgsMTMgQEAgc3RhdGljIGludCBtcHRjcF9ubF9yZW1vdmVfaWRfemVyb19hZGRyZXNzKHN0cnVjdCBuZXQgKm5ldCwKIAkJCWdvdG8gbmV4dDsKIAogCQlsb2NrX3NvY2soc2spOwomIzQzOwkJLyogRHJvcCBhIHBvc3NpYmx5IHBlbmRpbmcgQUREX0FERFIgZm9yIHRoaXMgYWRkcmVzcy4gKi8KJiM0MzsJCWFubm9fYWRkciA9IG1za19sb2NhbDsKJiM0MzsJCWFubm9fYWRkci5wb3J0ID0gMDsKJiM0MzsJCWFubm91bmNlZCA9IG1wdGNwX3BtX2Fubm91bmNlZF9yZW1vdmUobXNrLCAmYW1wO2Fubm9fYWRkcik7CiAJCXNwaW5fbG9ja19iaCgmYW1wO21zay0mZ3Q7cG0ubG9jayk7CiYjNDM7CQlpZiAoYW5ub3VuY2VkKQomIzQzOwkJCW1zay0mZ3Q7cG0uYWRkX2FkZHJfc2lnbmFsZWQtLTsKIAkJbXB0Y3BfcG1fcmVtb3ZlX2FkZHIobXNrLCAmYW1wO2xpc3QpOwogCQltcHRjcF9wbV9ybV9zdWJmbG93KG1zaywgJmFtcDtsaXN0KTsKIAkJX19tYXJrX3N1YmZsb3dfZW5kcF9hdmFpbGFibGUobXNrLCAwKTsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYwppbmRleCBiOTRmYmI0ODNiZjk0Li5mYWIxNmQ5NTNkYmZlIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jCkBAIC02OSw2ICYjNDM7NjksMTkgQEAgc3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAJfQogCiAJaWYgKCFhZGRyX21hdGNoICZhbXA7JmFtcDsgIWlkX21hdGNoKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgaWQ7CiYjNDM7CiYjNDM7CQlpZiAoIWVudHJ5LSZndDthZGRyLmlkICZhbXA7JmFtcDsgbmVlZHNfaWQpIHsKJiM0MzsJCQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChpZF9iaXRtYXAsCiYjNDM7CQkJCQkJTVBUQ1BfUE1fTUFYX0FERFJfSUQgJiM0MzsgMSwgMSk7CiYjNDM7CQkJaWYgKGlkICZndDsgTVBUQ1BfUE1fTUFYX0FERFJfSUQpIHsKJiM0MzsJCQkJcmV0ID0gLUVOT1NQQzsKJiM0MzsJCQkJZ290byBhcHBlbmRfZXJyOwomIzQzOwkJCX0KJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWQgPSBlbnRyeS0mZ3Q7YWRkci5pZDsKJiM0MzsJCX0KJiM0MzsKIAkJLyogTWVtb3J5IGZvciB0aGUgZW50cnkgaXMgYWxsb2NhdGVkIGZyb20gdGhlCiAJCSAqIHNvY2sgb3B0aW9uIGJ1ZmZlci4KIAkJICovCkBAIC03OCwxMCAmIzQzOzkxLDcgQEAgc3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAJCQlnb3RvIGFwcGVuZF9lcnI7CiAJCX0KIAotCQlpZiAoIWUtJmd0O2FkZHIuaWQgJmFtcDsmYW1wOyBuZWVkc19pZCkKLQkJCWUtJmd0O2FkZHIuaWQgPSBmaW5kX25leHRfemVyb19iaXQoaWRfYml0bWFwLAotCQkJCQkJCU1QVENQX1BNX01BWF9BRERSX0lEICYjNDM7IDEsCi0JCQkJCQkJMSk7CiYjNDM7CQllLSZndDthZGRyLmlkID0gaWQ7CiAJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7ZS0mZ3Q7bGlzdCwgJmFtcDttc2stJmd0O3BtLnVzZXJzcGFjZV9wbV9sb2NhbF9hZGRyX2xpc3QpOwogCQltc2stJmd0O3BtLmxvY2FsX2FkZHJfdXNlZCYjNDM7JiM0Mzs7CiAJCXJldCA9IGUtJmd0O2FkZHIuaWQ7CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGI0NzRkMDM2MjBhNzUuLmIyNmE4ZDU2MDYxMjUgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC05NSw2ICYjNDM7OTUsNyBAQCBib29sIF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBmYl9taWIpCiAKIAltc2stJmd0O2FsbG93X3N1YmZsb3dzID0gZmFsc2U7CiAJc2V0X2JpdChNUFRDUF9GQUxMQkFDS19ET05FLCAmYW1wO21zay0mZ3Q7ZmxhZ3MpOwomIzQzOwlzZXRfYml0KE1QVENQX1JUWF9ESVNBQkxFRCwgJmFtcDttc2stJmd0O2ZsYWdzKTsKIAlfX01QVENQX0lOQ19TVEFUUyhuZXQsIGZiX21pYik7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDttc2stJmd0O2ZhbGxiYWNrX2xvY2spOwogCXJldHVybiB0cnVlOwpAQCAtMjg4LDggJiM0MzsyODksOCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLAogICovCiBzdGF0aWMgYm9vbCBtcHRjcF9jYW5faW5nZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKLQlyZXR1cm4gdW5saWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spICZsdDs9IFJFQURfT05DRShzay0mZ3Q7c2tfcmN2YnVmKSkgfHwKLQkJCV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXB0Y3Bfc2soc2spKTsKJiM0MzsJcmV0dXJuIGxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgJmx0Oz0gUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSB8fAomIzQzOwkgICAgICAgX19tcHRjcF9jaGVja19mYWxsYmFjayhtcHRjcF9zayhzaykpOwogfQogCiBzdGF0aWMgYm9vbCBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCkBAIC0zMTIsMTIgJiM0MzszMTMsNiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXU2NCBzZXEsIGVuZF9zZXEsIG1heF9zZXE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CiAKLQlpZiAoIW1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHNrLCBza2IpKSB7Ci0JCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpOwotCQltcHRjcF9kcm9wKHNrLCBza2IpOwotCQlyZXR1cm47Ci0JfQotCiAJc2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXE7CiAJZW5kX3NlcSA9IE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxOwogCW1heF9zZXEgPSBhdG9taWM2NF9yZWFkKCZhbXA7bXNrLSZndDtyY3Zfd25kX3NlbnQpOwpAQCAtMzM0LDYgJiM0MzszMjksMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJcmV0dXJuOwogCX0KIAomIzQzOwlpZiAoIW1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHNrLCBza2IpKSB7CiYjNDM7CQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTsKJiM0MzsJCW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlwID0gJmFtcDttc2stJmd0O291dF9vZl9vcmRlcl9xdWV1ZS5yYl9ub2RlOwogCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9RVUVVRSk7CiAJaWYgKFJCX0VNUFRZX1JPT1QoJmFtcDttc2stJmd0O291dF9vZl9vcmRlcl9xdWV1ZSkpIHsKQEAgLTEwODQsMTMgJiM0MzsxMDg1LDE0IEBAIHN0YXRpYyBib29sIG1wdGNwX3J0eF90aW1lcl9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaykKIAogc3RhdGljIHZvaWQgbXB0Y3BfcmVzZXRfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaykKIHsKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKIAl1bnNpZ25lZCBsb25nIHRvdXQ7CiAKLQkvKiBwcmV2ZW50IHJlc2NoZWR1bGluZyBvbiBjbG9zZSAqLwotCWlmICh1bmxpa2VseShpbmV0X3NrX3N0YXRlX2xvYWQoc2spID09IFRDUF9DTE9TRSkpCiYjNDM7CS8qIFByZXZlbnQgcmVzY2hlZHVsaW5nIG9uIGNsb3NlIGFuZCBpbiBjYXNlIG9mIGZhbGxiYWNrLiAqLwomIzQzOwlpZiAodGVzdF9iaXQoTVBUQ1BfUlRYX0RJU0FCTEVELCAmYW1wO21zay0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm47CiAKLQl0b3V0ID0gbXB0Y3Bfc2soc2spLSZndDt0aW1lcl9pdmFsOwomIzQzOwl0b3V0ID0gbXNrLSZndDt0aW1lcl9pdmFsOwogCXNrX3Jlc2V0X3RpbWVyKHNrLCAmYW1wO3NrLSZndDttcHRjcF9yZXRyYW5zbWl0X3RpbWVyLCBqaWZmaWVzICYjNDM7IHRvdXQpOwogfQogCkBAIC0zMzI0LDYgJiM0MzszMzI2LDkgQEAgdm9pZCBtcHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpCiAJCSAqIHRyYW5zaXRpb24gZnJvbSBUQ1BfU1lOX1JFQ1YgdG8gVENQX0NMT1NFX1dBSVQuCiAJCSAqLwogCQlicmVhazsKJiM0MzsJY2FzZSBUQ1BfQ0xPU0U6CiYjNDM7CQlzZXRfYml0KE1QVENQX1JUWF9ESVNBQkxFRCwgJmFtcDttcHRjcF9zayhzayktJmd0O2ZsYWdzKTsKJiM0MzsJCWZhbGx0aHJvdWdoOwogCWRlZmF1bHQ6CiAJCWlmIChvbGRzdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQgfHwgb2xkc3RhdGUgPT0gVENQX0NMT1NFX1dBSVQpCiAJCQlNUFRDUF9ERUNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfQ1VSUkVTVEFCKTsKQEAgLTM4NzYsNyAmIzQzOzM4ODEsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb24oc3RydWN0IHNvY2sgKnNzaykKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNzayk7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCi0JaWYgKFJFQURfT05DRShtcHRjcF9zdWJmbG93X2N0eChzc2spLSZndDtmdWxseV9lc3RhYmxpc2hlZCkpCiYjNDM7CWlmIChtcHRjcF9zdWJmbG93X2N0eChzc2spLSZndDtmdWxseV9lc3RhYmxpc2hlZCkKIAkJcmV0dXJuOwogCiAJLyogcmVzY2hlZHVsZSB3aXRoIGEgdGltZW91dCBhYm92ZSBSVFQsIGFzIHdlIG11c3QgbG9vayBvbmx5IGZvciBkcm9wICovCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oCmluZGV4IDA2YTEwN2Q0ZTgzOTIuLjZjMDBhODAzNDRmOTIgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5oCkBAIC0xMTYsNiAmIzQzOzExNiw3IEBACiAjZGVmaW5lIE1QVENQX1dPUktfUlRYCQkxCiAjZGVmaW5lIE1QVENQX0ZBTExCQUNLX0RPTkUJMgogI2RlZmluZSBNUFRDUF9XT1JLX0NMT1NFX1NVQkZMT1cgMwomIzQzOyNkZWZpbmUgTVBUQ1BfUlRYX0RJU0FCTEVECTQKIAogLyogTVBUQ1Agc29ja2V0IHJlbGVhc2UgY2IgZmxhZ3MgKi8KICNkZWZpbmUgTVBUQ1BfUFVTSF9QRU5ESU5HCTEKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCmluZGV4IGFmODFhZDVlNjk5ZDEuLjAxZGI3ZWRjZTE4YTYgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuYwpAQCAtMjA4NCw3ICYjNDM7MjA4NCw2IEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfdWxwX2Nsb25lKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJbmV3X2N0eC0mZ3Q7cmVxdWVzdF9ia3VwID0gc3ViZmxvd19yZXEtJmd0O3JlcXVlc3RfYmt1cDsKIAkJV1JJVEVfT05DRShuZXdfY3R4LSZndDtyZW1vdGVfaWQsIHN1YmZsb3dfcmVxLSZndDtyZW1vdGVfaWQpOwogCQluZXdfY3R4LSZndDt0b2tlbiA9IHN1YmZsb3dfcmVxLSZndDt0b2tlbjsKLQkJbmV3X2N0eC0mZ3Q7dGhtYWMgPSBzdWJmbG93X3JlcS0mZ3Q7dGhtYWM7CiAKIAkJLyogdGhlIHN1YmZsb3cgcmVxIGlkIGlzIHZhbGlkLCBmZXRjaGVkIHZpYSBzdWJmbG93X2NoZWNrX3JlcSgpCiAJCSAqIGFuZCBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdCgpCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3luY29va2llcy5jIGIvbmV0L21wdGNwL3N5bmNvb2tpZXMuYwppbmRleCBiNWNhYzU3MDExMjIxLi45NDc0NzA2NjQxYzExIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3Avc3luY29va2llcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmMKQEAgLTI2LDcgJiM0MzsyNiw4IEBAIHN0cnVjdCBqb2luX2VudHJ5IHsKIAl1MzIgbG9jYWxfbm9uY2U7CiAJdTggam9pbl9pZDsKIAl1OCBsb2NhbF9pZDsKLQl1OCBiYWNrdXA7CiYjNDM7CXU4IGJhY2t1cDoxLAomIzQzOwkgICByZXF1ZXN0X2JrdXA6MTsKIAl1OCB2YWxpZDsKIH07CiAKQEAgLTYzLDYgJiM0Mzs2NCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2pvaW5fc3RvcmVfc3RhdGUoc3RydWN0IGpvaW5fZW50cnkgKmVudHJ5LAogCWVudHJ5LSZndDtyZW1vdGVfbm9uY2UgPSBzdWJmbG93X3JlcS0mZ3Q7cmVtb3RlX25vbmNlOwogCWVudHJ5LSZndDtsb2NhbF9ub25jZSA9IHN1YmZsb3dfcmVxLSZndDtsb2NhbF9ub25jZTsKIAllbnRyeS0mZ3Q7YmFja3VwID0gc3ViZmxvd19yZXEtJmd0O2JhY2t1cDsKJiM0MzsJZW50cnktJmd0O3JlcXVlc3RfYmt1cCA9IHN1YmZsb3dfcmVxLSZndDtyZXF1ZXN0X2JrdXA7CiAJZW50cnktJmd0O2pvaW5faWQgPSBzdWJmbG93X3JlcS0mZ3Q7cmVtb3RlX2lkOwogCWVudHJ5LSZndDtsb2NhbF9pZCA9IHN1YmZsb3dfcmVxLSZndDtsb2NhbF9pZDsKIAllbnRyeS0mZ3Q7dmFsaWQgPSAxOwpAQCAtMTE3LDYgJiM0MzsxMTksNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbAogCXN1YmZsb3dfcmVxLSZndDtyZW1vdGVfbm9uY2UgPSBlLSZndDtyZW1vdGVfbm9uY2U7CiAJc3ViZmxvd19yZXEtJmd0O2xvY2FsX25vbmNlID0gZS0mZ3Q7bG9jYWxfbm9uY2U7CiAJc3ViZmxvd19yZXEtJmd0O2JhY2t1cCA9IGUtJmd0O2JhY2t1cDsKJiM0MzsJc3ViZmxvd19yZXEtJmd0O3JlcXVlc3RfYmt1cCA9IGUtJmd0O3JlcXVlc3RfYmt1cDsKIAlzdWJmbG93X3JlcS0mZ3Q7cmVtb3RlX2lkID0gZS0mZ3Q7am9pbl9pZDsKIAlzdWJmbG93X3JlcS0mZ3Q7bG9jYWxfaWQgPSBlLSZndDtsb2NhbF9pZDsKIAlzdWJmbG93X3JlcS0mZ3Q7dG9rZW4gPSBlLSZndDt0b2tlbjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jCmluZGV4IGVhNGNiNmMxYmQ1ZTIuLjE3OGQ5OGQ5MWZlYTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYwpAQCAtMzgxLDYgJiM0MzszODEsOSBAQCBzdGF0aWMgaW50IHNvY2tfY29ubmVjdF9tcHRjcChjb25zdCBjaGFyICogY29uc3QgcmVtb3RlYWRkciwKIAogCWhpbnRzLmFpX2ZhbWlseSA9IHBmOwogCiYjNDM7CS8qIEtlZXAgdGhlIHJlc29sdmVkIGFkZHJlc3MgYWxpdmUgZm9yIHRoZSB3aG9sZSBleGVjdXRpb246IGl0IGlzCiYjNDM7CSAqIHVzZWQgYWdhaW4gd2hlbiByZWNvbm5lY3RpbmcsIGFuZCB3aWxsIGJlIHJlbGVhc2VkIGF0IGV4aXQgdGltZS4KJiM0MzsJICovCiAJeGdldGFkZHJpbmZvKHJlbW90ZWFkZHIsIHBvcnQsICZhbXA7aGludHMsICZhbXA7YWRkcik7CiAJZm9yIChhID0gYWRkcjsgYTsgYSA9IGEtJmd0O2FpX25leHQpIHsKIAkJc29jayA9IHNvY2tldChhLSZndDthaV9mYW1pbHksIGEtJmd0O2FpX3NvY2t0eXBlLCBwcm90byk7CkBAIC00MjEsNyAmIzQzOzQyNCw2IEBAIHN0YXRpYyBpbnQgc29ja19jb25uZWN0X21wdGNwKGNvbnN0IGNoYXIgKiBjb25zdCByZW1vdGVhZGRyLAogCQlzb2NrID0gLTE7CiAJfQogCi0JZnJlZWFkZHJpbmZvKGFkZHIpOwogCWlmIChzb2NrICE9IC0xKQogCQlTT0NLX1RFU1RfVENQVUxQKHNvY2ssIHByb3RvKTsKIAlyZXR1cm4gc29jazsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9saWIuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoCmluZGV4IDVlZjYwMzM3NzVjODYuLmI5ZDE0NjQ3ZjQwMTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9saWIuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2xpYi5zaApAQCAtMTA4LDEyICYjNDM7MTA4LDE0IEBAIG1wdGNwX2xpYl9wcl9pbmZvKCkgewogCiBtcHRjcF9saWJfcHJfbnN0YXQoKSB7CiAJbG9jYWwgbnM9JiMzNDskezF9JiMzNDsKLQlsb2NhbCBoaXN0PSYjMzQ7L3RtcC8ke25zfS5vdXQmIzM0OwomIzQzOwlsb2NhbCBjYWNoZT0mIzM0Oy90bXAvJHtuc30ub3V0JiMzNDsKJiM0MzsJbG9jYWwgaGlzdD0mIzM0Oy90bXAvJHtuc30ubnN0YXQmIzM0OwogCi0JaWYgWyAtZiAmIzM0OyR7aGlzdH0mIzM0OyBdOyB0aGVuCi0JCWF3ayAmIzM5OyQyICE9IDAgeyBwcmludCAmIzM0OyAgJiMzNDskMCB9JiMzOTsgJiMzNDske2hpc3R9JiMzNDsKJiM0MzsJaWYgWyAtZiAmIzM0OyR7Y2FjaGV9JiMzNDsgXTsgdGhlbgomIzQzOwkJYXdrICYjMzk7JDIgIT0gMCB7IHByaW50ICYjMzQ7ICAmIzM0OyQwIH0mIzM5OyAmIzM0OyR7Y2FjaGV9JiMzNDsKIAllbHNlCi0JCWlwIG5ldG5zIGV4ZWMgJiMzNDske25zfSYjMzQ7IG5zdGF0IC1hcyB8IGdyZXAgVGNwCiYjNDM7CQlOU1RBVF9ISVNUT1JZPSYjMzQ7JHtoaXN0fSYjMzQ7IGlwIG5ldG5zIGV4ZWMgJiMzNDske25zfSYjMzQ7IG5zdGF0IC1zIHwKJiM0MzsJCQlncmVwIFRjcAogCWZpCiB9CiAKQEAgLTQxNCwxOSAmIzQzOzQxNiwyMSBAQCBtcHRjcF9saWJfbnN0YXRfZ2V0KCkgewogfQogCiAjICQxOiBucywgJDI6IE1JQiBjb3VudGVyCi0jIEdldCB0aGUgY291bnRlciBmcm9tIHRoZSBoaXN0b3J5IChtcHRjcF9saWJfbnN0YXRfe2luaXQsZ2V0fSgpKSBpZiBhdmFpbGFibGUuCi0jIElmIG5vdCwgZ2V0IHRoZSBjb3VudGVyIGZyb20gbnN0YXQgaWdub3JpbmcgYW55IGhpc3RvcnkuCiYjNDM7IyBHZXQgdGhlIGNvdW50ZXIgZnJvbSB0aGUgY2FjaGUgKG1wdGNwX2xpYl9uc3RhdF97aW5pdCxnZXR9KCkpIGlmIGF2YWlsYWJsZS4KJiM0MzsjIElmIG5vdCwgZ2V0IHRoZSBjb3VudGVyIGZyb20gbnN0YXQgaWdub3JpbmcgYW55IGNhY2hlLCBidXQgdXNpbmcgdGhlIGhpc3RvcnkuCiBtcHRjcF9saWJfZ2V0X2NvdW50ZXIoKSB7CiAJbG9jYWwgbnM9JiMzNDskezF9JiMzNDsKIAlsb2NhbCBjb3VudGVyPSYjMzQ7JHsyfSYjMzQ7Ci0JbG9jYWwgaGlzdD0mIzM0Oy90bXAvJHtuc30ub3V0JiMzNDsKJiM0MzsJbG9jYWwgY2FjaGU9JiMzNDsvdG1wLyR7bnN9Lm91dCYjMzQ7CiYjNDM7CWxvY2FsIGhpc3Q9JiMzNDsvdG1wLyR7bnN9Lm5zdGF0JiMzNDsKIAlsb2NhbCBjb3VudAogCi0JaWYgW1sgLXMgJiMzNDske2hpc3R9JiMzNDsgJmFtcDsmYW1wOyAmIzM0OyR7Y291bnRlcn0mIzM0OyA9PSAqJiMzNDtUY3AmIzM0OyogXV07IHRoZW4KLQkJY291bnQ9JChhd2sgJiMzNDsvXiR7Y291bnRlcn0gLyB7cHJpbnQgXCQyOyBleGl0fSYjMzQ7ICYjMzQ7JHtoaXN0fSYjMzQ7KQomIzQzOwlpZiBbWyAtcyAmIzM0OyR7Y2FjaGV9JiMzNDsgJmFtcDsmYW1wOyAmIzM0OyR7Y291bnRlcn0mIzM0OyA9PSAqJiMzNDtUY3AmIzM0OyogXV07IHRoZW4KJiM0MzsJCWNvdW50PSQoYXdrICYjMzQ7L14ke2NvdW50ZXJ9IC8ge3ByaW50IFwkMjsgZXhpdH0mIzM0OyAmIzM0OyR7Y2FjaGV9JiMzNDspCiAJZWxzZQotCQljb3VudD0kKGlwIG5ldG5zIGV4ZWMgJiMzNDske25zfSYjMzQ7IG5zdGF0IC1hc3ogJiMzNDske2NvdW50ZXJ9JiMzNDsgfAotCQkJYXdrICYjMzk7TlI9PTEge25leHR9IHtwcmludCAkMn0mIzM5OykKJiM0MzsJCWNvdW50PSQoTlNUQVRfSElTVE9SWT0mIzM0OyR7aGlzdH0mIzM0OyBpcCBuZXRucyBleGVjICYjMzQ7JHtuc30mIzM0OyBcCiYjNDM7CQkJbnN0YXQgLXN6ICYjMzQ7JHtjb3VudGVyfSYjMzQ7IHwKJiM0MzsJCQkJYXdrICYjMzk7TlI9PTEge25leHR9IHtwcmludCAkMn0mIzM5OykKIAlmaQogCWlmIFsgLXogJiMzNDske2NvdW50fSYjMzQ7IF07IHRoZW4KIAkJbXB0Y3BfbGliX2ZhaWxfaWZfZXhwZWN0ZWRfZmVhdHVyZSAmIzM0OyR7Y291bnRlcn0gY291bnRlciYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgTVBUQ1AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiB0aGUgTVBUQ1Agc3Vic3lzdGVtLiBMb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGlzIHNwcmVhZCBhY3Jvc3MgYG9wdGlvbnMuY2AsIGBwbS5jYCwgYHBtX2tlcm5lbC5jYCwgYHBtX3VzZXJzcGFjZS5jYCwgYHByb3RvY29sLmNgLCBgcHJvdG9jb2wuaGAsIGBzdWJmbG93LmNgLCBhbmQgYHN5bmNvb2tpZXMuY2AsIHBsdXMgc29tZSBzZWxmdGVzdHMuIEEgZ29vZCBzaWduLCB0aGF0IG1lYW5zIHRoZXkmIzM5O3JlIGFpbWluZyBmb3Igd2lkZXNwcmVhZCBpbXByb3ZlbWVudHMuCgpGaXJzdCwgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgaW4gYG9wdGlvbnMuY2A6IEkgc2VlIGEgYm91bmRzIGNoZWNrIGFkZGVkIGluIGBtcHRjcF9wYXJzZV9vcHRpb25gLCB3aGljaCBpcyBzbWFydCBmb3IgYXZvaWRpbmcgcG90ZW50aWFsIG92ZXJmbG93cywgYW5kIGEgZGlyZWN0IGFjY2VzcyBpbiBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcGAgYW5kIGBjaGVja19mdWxseV9lc3RhYmxpc2hlZGAuIFRoZXkmIzM5O3JlIGFsc28gemVyb2luZyBvdXQgdGhlIGNoZWNrc3VtIGluIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAgd2hlbiB3cml0aW5nIERBVEFfRklOIHdoaWNoIG1ha2VzIHNlbnNlLiBMb29rcyBsaWtlIHNvbWUgcG90ZW50aWFsIGF0b21pY2l0eSBpc3N1ZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgoKTW92aW5nIG9udG8gYHBtLmNgLCBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBzZWVtcyB0byBiZSBqdXN0IHJlLWFycmFuZ2luZyB0aGUgb3JkZXIgb2YgdGhlIGNvZGUuCgpgcG1fa2VybmVsLmNgIGlzIGRyb3BwaW5nIGEgcGVuZGluZyBBRERfQUREUiwgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgcmVtb3ZpbmcgYWRkcmVzc2VzLCBwcmV2ZW50aW5nIGEgcmFjZS4gYHBtX3VzZXJzcGFjZS5jYCBmaXhlcyBzb21lIElEIGFzc2lnbm1lbnQuCgpJbiBgcHJvdG9jb2wuY2AsIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGEgYE1QVENQX1JUWF9ESVNBQkxFRGAgZmxhZy4gVGhpcyBzZWVtcyB0byBiZSBwYXJ0IG9mIHRoZSBmYWxsYmFjay9yZXRyYW5zbWlzc2lvbiBsb2dpYy4gSSBzZWUgaXQgYmVpbmcgc2V0IGluIGBfX21wdGNwX3RyeV9mYWxsYmFja2AgYW5kIGBtcHRjcF9zZXRfc3RhdGVgIHdoZW4gYSBjb25uZWN0aW9uIGlzIGNsb3NlZC4gVGhlIGNvZGUgaXMgYWxzbyBiZWluZyBvcHRpbWl6ZWQgd2l0aCBgbGlrZWx5YCBhbmQgYHVubGlrZWx5YCBoaW50cywgYW5kIHNvbWUgcmUtb3JkZXJpbmcgaW4gYG1wdGNwX2RhdGFfcXVldWVfb2ZvYC4gR29vZCB0byBzZWUgdGhlIGBSRUFEX09OQ0VgIHVzYWdlIGJlaW5nIGNsZWFuZWQgdXAuCgpUaGUgYWRkaXRpb24gb2YgYE1QVENQX1JUWF9ESVNBQkxFRGAgaW4gYHByb3RvY29sLmhgIG1ha2VzIHRoZSBwdXJwb3NlIG9mIHRoZSBmbGFnIGNsZWFyLCBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIHN1YmZsb3cgcmVxdWVzdCBjbG9uaW5nIGluIGBzdWJmbG93LmNgIGlzIHdvcnRoIGV4YW1pbmluZyBmdXJ0aGVyLgoKRmluYWxseSwgaW4gYHN5bmNvb2tpZXMuY2AsIHRoZXkmIzM5O3JlIGFkZGluZyBhIGByZXF1ZXN0X2JrdXBgIGZpZWxkIHRvIHRoZSBgam9pbl9lbnRyeWAgc3RydWN0IGFuZCBzdG9yaW5nL3Jlc3RvcmluZyBpdHMgc3RhdGUuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gaG93IGJhY2t1cCBzdWJmbG93cyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4KCk92ZXJhbGwsIHRoZXNlIGxvb2sgbGlrZSBmdW5jdGlvbmFsIGltcHJvdmVtZW50cywgYW5kIEkgc2VlIHBvdGVudGlhbCBvcHBvcnR1bml0aWVzIGZvciBmdXp6aW5nIGhlcmUsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBuZXcgZmxhZyBhbmQgYW55IGNoYW5nZXMgaW4gdGhlIGZhbGxiYWNrIG1lY2hhbmlzbXMuIEl04oCZcyBjcml0aWNhbCB0byBpZGVudGlmeSB0aGUgYENPTkZJR19NUFRDUGAgYW5kIHNlZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IHR1bmFibGUgcGFyYW1ldGVycyBhbmQvb3IgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIGludHJvZHVjZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzYxCgkJCQkJCQlvdXRwdXQ6IDU5CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVBUQ1AgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgTVBUQ1BgIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjb3JlIGZvY3VzIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMgY2VudGVycyBhcm91bmQgYSBzcGVjaWZpYyBzZXQgb2YgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGJlZW4gdHdlYWtlZCwgYW5kIHRoZSBrZXkgZW50cnlwb2ludHMgYXJlIHNjYXR0ZXJlZCBhY3Jvc3MgdmFyaW91cyBwYXJ0cyBvZiB0aGUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUuLi4gdGhlIHByaW1hcnkgZnVuY3Rpb24gYG1wdGNwX3BhcnNlX29wdGlvbmAganVtcHMgb3V0IGFzIGxpa2VseSBiZWluZyBhIHNpZ25pZmljYW50IGFyZWEgb2YgaW50ZXJlc3QsIGdpdmVuIHRoYXQgaXQgZGVhbHMgd2l0aCBwYXJzaW5nIHRoZSBvcHRpb25zIGRpcmVjdGx5LiBUaGVuIHRoZXJlIGFyZSBvdGhlciBlc3RhYmxpc2hlZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBvcHRpb25zLCBzdWNoIGFzIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wYC4KCkkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBhbmQgRklOIGhhbmRsaW5nIGluIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAsIGFsb25nIHdpdGggYGNoZWNrX2Z1bGx5X2VzdGFibGlzaGVkYCBhcyB3ZWxsLiBUaGUgYWxsb2NhdGlvbiBtYW5hZ2VtZW50IGluIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgIGlzIGFub3RoZXIgb2J2aW91cyBjYW5kaWRhdGUuIFRoZSByZW1vdmFsIG9mIHRoZSBpZC16ZXJvIGFkZHJlc3MgaW4gYG1wdGNwX25sX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3NgIGZlZWxzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIGNyaXRpY2FsIGNvcm5lciBjYXNlLiBGdXJ0aGVybW9yZSwgY2hhbmdlcyB0byB0aGUgbG9jYWwgYWRkcmVzcyBhcHBlbmRpbmcgaW4gYG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHJgIHNob3VsZCBwcm92ZSBzaWduaWZpY2FudCBhcyB3ZWxsLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBmYWxsYmFjayBsb2dpYyBpbiBgX19tcHRjcF90cnlfZmFsbGJhY2tgIGFuZCBob3cgdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBpbiBhZGRpdGlvbiB0byB0aGUgZGF0YSBoYW5kbGluZyBjaGFuZ2VzIHdpdGhpbiBgbXB0Y3BfY2FuX2luZ2VzdGAgYW5kIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AuIFBsdXMsIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVzZXQgdGltZXIgZnVuY3Rpb24gYG1wdGNwX3Jlc2V0X3J0eF90aW1lcmAsIHRoZSBzdGF0ZSBjaGFuZ2VzIGluIGBtcHRjcF9zZXRfc3RhdGVgLCBhbmQgdGhlIHJldHJhbnNtaXNzaW9uIGluIGBzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb25gLiBGaW5hbGx5LCBsZXQmIzM5O3Mgbm90IG92ZXJsb29rIGBzdWJmbG93X3VscF9jbG9uZWAsIGBtcHRjcF9qb2luX3N0b3JlX3N0YXRlYCwgYW5kIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCwgYXMgdGhvc2UgYXJlIGFsbCByZWxldmFudC4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZXNlIGFyZSBhY3R1YWxseSBleHBvc2VkIEFQSSBlbnRyeXBvaW50cy4gSSBuZWVkIHRvIGZpbHRlciBvdXQgYW55IGludGVybmFsIGZ1bmN0aW9ucyBvciBpbmxpbmVkIGNvZGUgdG8gZ2V0IGEgdHJ1ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXcgZXh0ZXJuYWwgaW50ZXJmYWNlIG9mIHRoaXMgc2VjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBhcyB0aGUgcHJpbWFyeSBwb2ludHMgb2YgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbHxzdHJ1Y3QgW2EtekEtWjAtOV9dJiM0MzsgXFwqKSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwNjMgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9tcHRjcC9jcnlwdG8uYy0yOS1cbm5ldC9tcHRjcC9jcnlwdG8uYzozMDp2b2lkIG1wdGNwX2NyeXB0b19rZXlfc2hhKHU2NCBrZXksIHUzMiAqdG9rZW4sIHU2NCAqaWRzbilcbm5ldC9tcHRjcC9jcnlwdG8uYy0zMS17XG4tLVxubmV0L21wdGNwL2NyeXB0by5jLTQyLVxubmV0L21wdGNwL2NyeXB0by5jOjQzOnZvaWQgbXB0Y3BfY3J5cHRvX2htYWNfc2hhKHU2NCBrZXkxLCB1NjQga2V5MiwgdTggKm1zZywgaW50IGxlbiwgdm9pZCAqaG1hYylcbm5ldC9tcHRjcC9jcnlwdG8uYy00NC17XG4tLVxubmV0L21wdGNwL2N0cmwuYz00Nj1zdGF0aWMgc3RydWN0IG1wdGNwX3Blcm5ldCAqbXB0Y3BfZ2V0X3Blcm5ldChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L21wdGNwL2N0cmwuYy01MC1cbm5ldC9tcHRjcC9jdHJsLmM6NTE6aW50IG1wdGNwX2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L21wdGNwL2N0cmwuYy01Mi17XG4tLVxubmV0L21wdGNwL2N0cmwuYz01Nj11bnNpZ25lZCBpbnQgbXB0Y3BfZ2V0X2FkZF9hZGRyX3RpbWVvdXQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9tcHRjcC9jdHJsLmMtNjAtXG5uZXQvbXB0Y3AvY3RybC5jOjYxOmludCBtcHRjcF9pc19jaGVja3N1bV9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbm5ldC9tcHRjcC9jdHJsLmMtNjIte1xuLS1cbm5ldC9tcHRjcC9jdHJsLmMtNjUtXG5uZXQvbXB0Y3AvY3RybC5jOjY2OmludCBtcHRjcF9hbGxvd19qb2luX2lkMChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbXB0Y3AvY3RybC5jLTY3LXtcbi0tXG5uZXQvbXB0Y3AvY3RybC5jPTc2PXVuc2lnbmVkIGludCBtcHRjcF9jbG9zZV90aW1lb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvY3RybC5jLTgyLVxubmV0L21wdGNwL2N0cmwuYzo4MzppbnQgbXB0Y3BfZ2V0X3BtX3R5cGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L21wdGNwL2N0cmwuYy04NC17XG4tLVxubmV0L21wdGNwL2N0cmwuYz00NDE9c3RhdGljIHZvaWQgbXB0Y3BfcGVybmV0X2RlbF90YWJsZShzdHJ1Y3QgbXB0Y3BfcGVybmV0ICpwZXJuZXQpIHt9XG4tLVxubmV0L21wdGNwL2N0cmwuYy00NTUtLyogRGlzYWJsZSBhY3RpdmUgTVBUQ1AgYW5kIHJlY29yZCBjdXJyZW50IGppZmZpZXMgYW5kIGFjdGl2ZV9kaXNhYmxlX3RpbWVzICovXG5uZXQvbXB0Y3AvY3RybC5jOjQ1Njp2b2lkIG1wdGNwX2FjdGl2ZV9kaXNhYmxlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9jdHJsLmMtNDU3LXtcbi0tXG5uZXQvbXB0Y3AvY3RybC5jLTQ4MS0gKi9cbm5ldC9tcHRjcC9jdHJsLmM6NDgyOmJvb2wgbXB0Y3BfYWN0aXZlX3Nob3VsZF9kaXNhYmxlKHN0cnVjdCBzb2NrICpzc2spXG5uZXQvbXB0Y3AvY3RybC5jLTQ4My17XG4tLVxubmV0L21wdGNwL2N0cmwuYy01MTQtLyogRW5hYmxlIGFjdGl2ZSBNUFRDUCBhbmQgcmVzZXQgYWN0aXZlX2Rpc2FibGVfdGltZXMgaWYgbmVlZGVkICovXG5uZXQvbXB0Y3AvY3RybC5jOjUxNTp2b2lkIG1wdGNwX2FjdGl2ZV9lbmFibGUoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL2N0cmwuYy01MTYte1xuLS1cbm5ldC9tcHRjcC9jdHJsLmMtNTMyLS8qIENoZWNrIHRoZSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zLCBhbmQgZmFsbGJhY2sgdG8gVENQIGlmIG5lZWRlZCAqL1xubmV0L21wdGNwL2N0cmwuYzo1MzM6dm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc3NrLCBib29sIGV4cGlyZWQpXG5uZXQvbXB0Y3AvY3RybC5jLTUzNC17XG4tLVxubmV0L21wdGNwL2RpYWcuYz05Mz1zdGF0aWMgc2l6ZV90IHN1YmZsb3dfZ2V0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbmV0X2FkbWluKVxuLS1cbm5ldC9tcHRjcC9kaWFnLmMtMTE1LVxubmV0L21wdGNwL2RpYWcuYzoxMTY6dm9pZCBtcHRjcF9kaWFnX3N1YmZsb3dfaW5pdChzdHJ1Y3QgdGNwX3VscF9vcHMgKm9wcylcbm5ldC9tcHRjcC9kaWFnLmMtMTE3LXtcbi0tXG5uZXQvbXB0Y3AvZmFzdG9wZW4uYy04LVxubmV0L21wdGNwL2Zhc3RvcGVuLmM6OTp2b2lkIG1wdGNwX2Zhc3RvcGVuX3N1YmZsb3dfc3luYWNrX3NldF9wYXJhbXMoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcbm5ldC9tcHRjcC9mYXN0b3Blbi5jLTEwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxubmV0L21wdGNwL21pYi5jPTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7XG4tLVxubmV0L21wdGNwL21pYi5jLTEwNC0gKi9cbm5ldC9tcHRjcC9taWIuYzoxMDU6Ym9vbCBtcHRjcF9taWJfYWxsb2Moc3RydWN0IG5ldCAqbmV0KVxubmV0L21wdGNwL21pYi5jLTEwNi17XG4tLVxubmV0L21wdGNwL21pYi5jLTExNy1cbm5ldC9tcHRjcC9taWIuYzoxMTg6dm9pZCBtcHRjcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbm5ldC9tcHRjcC9taWIuYy0xMTkte1xuLS1cbm5ldC9tcHRjcC9taWIuaD0xMzE9c3RhdGljIGlubGluZSB2b2lkIE1QVENQX0RFQ19TVEFUUyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L21wdGNwL21pYi5oLTEzNy1cbm5ldC9tcHRjcC9taWIuaDoxMzg6Ym9vbCBtcHRjcF9taWJfYWxsb2Moc3RydWN0IG5ldCAqbmV0KTtcbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg9NDE9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBtcHRjcF9wbV9ubF9vcHNbMTFdO1xubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oLTQyLVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjQzOmludCBtcHRjcF9wbV9ubF9hZGRfYWRkcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjQ0OmludCBtcHRjcF9wbV9ubF9kZWxfYWRkcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjQ1OmludCBtcHRjcF9wbV9ubF9nZXRfYWRkcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjQ2OmludCBtcHRjcF9wbV9ubF9nZXRfYWRkcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uaC00Ny1cdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg6NDg6aW50IG1wdGNwX3BtX25sX2ZsdXNoX2FkZHJzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg6NDk6aW50IG1wdGNwX3BtX25sX3NldF9saW1pdHNfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uaDo1MDppbnQgbXB0Y3BfcG1fbmxfZ2V0X2xpbWl0c19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjUxOmludCBtcHRjcF9wbV9ubF9zZXRfZmxhZ3NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uaDo1MjppbnQgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uaDo1MzppbnQgbXB0Y3BfcG1fbmxfcmVtb3ZlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg6NTQ6aW50IG1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uaC01NS1cdFx0XHRcdCAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uaDo1NjppbnQgbXB0Y3BfcG1fbmxfc3ViZmxvd19kZXN0cm95X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uaC01Ny1cdFx0XHRcdCAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0yMz1zdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQyMi1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NDIzOnZvaWQgbXB0Y3BfZ2V0X29wdGlvbnMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9tcHRjcC9vcHRpb25zLmMtNDI0LVx0XHQgICAgICAgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdClcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2NC1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NDY1OmJvb2wgbXB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21wdGNwL29wdGlvbnMuYy00NjYtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTg1MD1zdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy04NzEtXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjg3MjppbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg3My1cdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk0Ny1cbm5ldC9tcHRjcC9vcHRpb25zLmM6OTQ4OmJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk0OS1cdFx0XHQgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTExMTg9c3RhdGljIHZvaWQgYWNrX3VwZGF0ZV9tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNTktXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExNjA6Ym9vbCBtcHRjcF91cGRhdGVfcmN2X2RhdGFfZmluKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHU2NCBkYXRhX2Zpbl9zZXEsIGJvb2wgdXNlXzY0Yml0KVxubmV0L21wdGNwL29wdGlvbnMuYy0xMTYxLXtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTExOTU9c3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIzLSAqL1xubmV0L21wdGNwL29wdGlvbnMuYzoxMjI0OmJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjUte1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTQ2Mj1zdGF0aWMgdm9pZCBwdXRfbGVuX2NzdW0odTE2IGxlbiwgX19zdW0xNiBjc3VtLCB2b2lkICpkYXRhKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ3MS1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTQ3Mjp2b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxubmV0L21wdGNwL29wdGlvbnMuYy0xNDczLVx0XHRcdCBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG4tLVxubmV0L21wdGNwL3BtLmM9MjY9c3RhdGljIExJU1RfSEVBRChtcHRjcF9wbV9saXN0KTtcbi0tXG5uZXQvbXB0Y3AvcG0uYy0zMi0gKi9cbm5ldC9tcHRjcC9wbS5jOjMzOmJvb2wgbXB0Y3BfcG1fYWRkcl9mYW1pbGllc19tYXRjaChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvbXB0Y3AvcG0uYy0zNC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqbG9jLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTU0LVxubmV0L21wdGNwL3BtLmM6NTU6Ym9vbCBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYSxcbm5ldC9tcHRjcC9wbS5jLTU2LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmIsIGJvb2wgdXNlX3BvcnQpXG4tLVxubmV0L21wdGNwL3BtLmMtODItXG5uZXQvbXB0Y3AvcG0uYzo4Mzp2b2lkIG1wdGNwX2xvY2FsX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNvY2tfY29tbW9uICpza2MsXG5uZXQvbXB0Y3AvcG0uYy04NC1cdFx0XHQgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcilcbi0tXG5uZXQvbXB0Y3AvcG0uYy05NS1cbm5ldC9tcHRjcC9wbS5jOjk2OnZvaWQgbXB0Y3BfcmVtb3RlX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNvY2tfY29tbW9uICpza2MsXG5uZXQvbXB0Y3AvcG0uYy05Ny1cdFx0XHQgIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpXG4tLVxubmV0L21wdGNwL3BtLmM9MTA5PXN0YXRpYyBib29sIG1wdGNwX3BtX2lzX2luaXRfcmVtb3RlX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMTctXG5uZXQvbXB0Y3AvcG0uYzoxMTg6Ym9vbCBtcHRjcF9wbV9oYXNfc3ViZmxvd19zYWRkcihjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3BtLmMtMTE5LVx0XHRcdFx0Y29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqc2FkZHIpXG4tLVxubmV0L21wdGNwL3BtLmM9MTUzPW1wdGNwX3BtX2Fubm91bmNlZF9kZWxfdGltZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xODUtXG5uZXQvbXB0Y3AvcG0uYzoxODY6Ym9vbCBtcHRjcF9wbV9hbm5vdW5jZWRfcmVtb3ZlKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG0uYy0xODctXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpXG4tLVxubmV0L21wdGNwL3BtLmMtMTk4LVxubmV0L21wdGNwL3BtLmM6MTk5OmJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2hhc19zc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcbm5ldC9tcHRjcC9wbS5jLTIwMC17XG4tLVxubmV0L21wdGNwL3BtLmM9MjIwPXN0YXRpYyB2b2lkIF9fbXB0Y3BfcG1fc2VuZF9hY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG0uYy0yNDAtXG5uZXQvbXB0Y3AvcG0uYzoyNDE6dm9pZCBtcHRjcF9wbV9zZW5kX2FjayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3BtLmMtMjQyLVx0XHQgICAgICAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcbi0tXG5uZXQvbXB0Y3AvcG0uYz0yNjU9bXB0Y3BfcG1fYWRkcl9zZW5kX2Fja19hdm9pZF9saXN0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtLmMtMzAzLVxubmV0L21wdGNwL3BtLmM6MzA0OnZvaWQgbXB0Y3BfcG1fYWRkcl9zZW5kX2FjayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtMzA1LXtcbi0tXG5uZXQvbXB0Y3AvcG0uYy0zMDgtXG5uZXQvbXB0Y3AvcG0uYzozMDk6aW50IG1wdGNwX3BtX21wX3ByaW9fc2VuZF9hY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbS5jLTMxMC1cdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyLFxuLS1cbm5ldC9tcHRjcC9wbS5jPTM3Nj1zdGF0aWMgdm9pZCBtcHRjcF9wbV9hZGRfYWRkcl90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4tLVxubmV0L21wdGNwL3BtLmMtNDM2LVxubmV0L21wdGNwL3BtLmM6NDM3OmJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG0uYy00MzgtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcilcbi0tXG5uZXQvbXB0Y3AvcG0uYz00Nzc9c3RhdGljIHZvaWQgbXB0Y3BfcG1fZnJlZV9hbm5vdW5jZWRfbGlzdChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wbS5jLTQ5Ny1cbm5ldC9tcHRjcC9wbS5jOjQ5ODppbnQgbXB0Y3BfcG1fYW5ub3VuY2VfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3BtLmMtNDk5LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIsXG4tLVxubmV0L21wdGNwL3BtLmMtNTI1LVxubmV0L21wdGNwL3BtLmM6NTI2OmludCBtcHRjcF9wbV9yZW1vdmVfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdClcbm5ldC9tcHRjcC9wbS5jLTUyNy17XG4tLVxubmV0L21wdGNwL3BtLmMtNTQ2LVxubmV0L21wdGNwL3BtLmM6NTQ3OnZvaWQgbXB0Y3BfcG1fbmV3X2Nvbm5lY3Rpb24oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzaywgaW50IHNlcnZlcl9zaWRlKVxubmV0L21wdGNwL3BtLmMtNTQ4LXtcbi0tXG5uZXQvbXB0Y3AvcG0uYy01NTYtXG5uZXQvbXB0Y3AvcG0uYzo1NTc6Ym9vbCBtcHRjcF9wbV9hbGxvd19uZXdfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtNTU4LXtcbi0tXG5uZXQvbXB0Y3AvcG0uYz01OTc9c3RhdGljIGJvb2wgbXB0Y3BfcG1fc2NoZWR1bGVfd29yayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTYwOS1cbm5ldC9tcHRjcC9wbS5jOjYxMDp2b2lkIG1wdGNwX3BtX2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2spXG5uZXQvbXB0Y3AvcG0uYy02MTEte1xuLS1cbm5ldC9tcHRjcC9wbS5jLTYzNi1cbm5ldC9tcHRjcC9wbS5jOjYzNzp2b2lkIG1wdGNwX3BtX2Nvbm5lY3Rpb25fY2xvc2VkKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG5uZXQvbXB0Y3AvcG0uYy02Mzgte1xuLS1cbm5ldC9tcHRjcC9wbS5jLTY0NC1cbm5ldC9tcHRjcC9wbS5jOjY0NTp2b2lkIG1wdGNwX3BtX3N1YmZsb3dfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbm5ldC9tcHRjcC9wbS5jLTY0Ni17XG4tLVxubmV0L21wdGNwL3BtLmMtNjYxLVxubmV0L21wdGNwL3BtLmM6NjYyOnZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGVja19uZXh0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG0uYy02NjMtXHRcdFx0XHQgY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcbi0tXG5uZXQvbXB0Y3AvcG0uYy02OTYtXG5uZXQvbXB0Y3AvcG0uYzo2OTc6dm9pZCBtcHRjcF9wbV9hZGRfYWRkcl9yZWNlaXZlZChjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLFxubmV0L21wdGNwL3BtLmMtNjk4LVx0XHRcdFx0Y29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcilcbi0tXG5uZXQvbXB0Y3AvcG0uYy03MzQtXG5uZXQvbXB0Y3AvcG0uYzo3MzU6dm9pZCBtcHRjcF9wbV9hZGRfYWRkcl9lY2hvZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbS5jLTczNi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxuLS1cbm5ldC9tcHRjcC9wbS5jPTgyOD1zdGF0aWMgdm9pZCBtcHRjcF9wbV9ybV9hZGRyX3JlY3Yoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcG0uYy04MzItXG5uZXQvbXB0Y3AvcG0uYzo4MzM6dm9pZCBtcHRjcF9wbV9ybV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG0uYy04MzQtXHRcdFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9ybV9saXN0ICpybV9saXN0KVxuLS1cbm5ldC9tcHRjcC9wbS5jLTgzOC1cbm5ldC9tcHRjcC9wbS5jOjgzOTp2b2lkIG1wdGNwX3BtX3JtX2FkZHJfcmVjZWl2ZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbS5jLTg0MC1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX3JtX2xpc3QgKnJtX2xpc3QpXG4tLVxubmV0L21wdGNwL3BtLmMtODU3LVxubmV0L21wdGNwL3BtLmM6ODU4OnZvaWQgbXB0Y3BfcG1fbXBfcHJpb19yZWNlaXZlZChzdHJ1Y3Qgc29jayAqc3NrLCB1OCBia3VwKVxubmV0L21wdGNwL3BtLmMtODU5LXtcbi0tXG5uZXQvbXB0Y3AvcG0uYy04NzEtXG5uZXQvbXB0Y3AvcG0uYzo4NzI6dm9pZCBtcHRjcF9wbV9tcF9mYWlsX3JlY2VpdmVkKHN0cnVjdCBzb2NrICpzaywgdTY0IGZhaWxfc2VxKVxubmV0L21wdGNwL3BtLmMtODczLXtcbi0tXG5uZXQvbXB0Y3AvcG0uYz05MDA9c3RhdGljIGludCBtcHRjcF9hZGRfYWRkcl9sZW4oaW50IGZhbWlseSwgYm9vbCBlY2hvLCBib29sIHBvcnQpXG4tLVxubmV0L21wdGNwL3BtLmMtOTE0LVxubmV0L21wdGNwL3BtLmM6OTE1OmJvb2wgbXB0Y3BfcG1fYWRkX2FkZHJfc2lnbmFsKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCAqc2l6ZSwgaW50IHJlbWFpbmluZyxcbm5ldC9tcHRjcC9wbS5jLTkxNi1cdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyLCBib29sICplY2hvLFxuLS1cbm5ldC9tcHRjcC9wbS5jPTk5ND1zdGF0aWMgaW50IG1wdGNwX3JtX2FkZHJfbGVuKGNvbnN0IHN0cnVjdCBtcHRjcF9ybV9saXN0ICpybV9saXN0KVxuLS1cbm5ldC9tcHRjcC9wbS5jLTEwMDEtXG5uZXQvbXB0Y3AvcG0uYzoxMDAyOmJvb2wgbXB0Y3BfcG1fcm1fYWRkcl9zaWduYWwoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcbm5ldC9tcHRjcC9wbS5jLTEwMDMtXHRcdFx0ICAgICBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCwgaW50ICpzaXplKVxuLS1cbm5ldC9tcHRjcC9wbS5jLTEwMzItXG5uZXQvbXB0Y3AvcG0uYzoxMDMzOmludCBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2tfY29tbW9uICpza2MpXG5uZXQvbXB0Y3AvcG0uYy0xMDM0LXtcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMDU2LVxubmV0L21wdGNwL3BtLmM6MTA1Nzpib29sIG1wdGNwX3BtX2lzX2JhY2t1cChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYylcbm5ldC9tcHRjcC9wbS5jLTEwNTgte1xuLS1cbm5ldC9tcHRjcC9wbS5jPTEwNzA9bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMTA2LVxubmV0L21wdGNwL3BtLmM6MTEwNzp2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtMTEwOC17XG4tLVxubmV0L21wdGNwL3BtLmMtMTEzNy1cbm5ldC9tcHRjcC9wbS5jOjExMzg6dm9pZCBtcHRjcF9wbV93b3JrZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbm5ldC9tcHRjcC9wbS5jLTExMzkte1xuLS1cbm5ldC9tcHRjcC9wbS5jLTExNjItXG5uZXQvbXB0Y3AvcG0uYzoxMTYzOnZvaWQgbXB0Y3BfcG1fZGVzdHJveShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtMTE2NC17XG4tLVxubmV0L21wdGNwL3BtLmMtMTE3Ni1cbm5ldC9tcHRjcC9wbS5jOjExNzc6dm9pZCBtcHRjcF9wbV9kYXRhX3Jlc2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG5uZXQvbXB0Y3AvcG0uYy0xMTc4LXtcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMjA1LVxubmV0L21wdGNwL3BtLmM6MTIwNjp2b2lkIG1wdGNwX3BtX2RhdGFfaW5pdChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtMTIwNy17XG4tLVxubmV0L21wdGNwL3BtLmM9MTIyMj1zdHJ1Y3QgbXB0Y3BfcG1fb3BzICptcHRjcF9wbV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L21wdGNwL3BtLmMtMTIzMy1cbm5ldC9tcHRjcC9wbS5jOjEyMzQ6aW50IG1wdGNwX3BtX3ZhbGlkYXRlKHN0cnVjdCBtcHRjcF9wbV9vcHMgKnBtX29wcylcbm5ldC9tcHRjcC9wbS5jLTEyMzUte1xuLS1cbm5ldC9tcHRjcC9wbS5jLTEyMzgtXG5uZXQvbXB0Y3AvcG0uYzoxMjM5OmludCBtcHRjcF9wbV9yZWdpc3RlcihzdHJ1Y3QgbXB0Y3BfcG1fb3BzICpwbV9vcHMpXG5uZXQvbXB0Y3AvcG0uYy0xMjQwLXtcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMjU4LVxubmV0L21wdGNwL3BtLmM6MTI1OTp2b2lkIG1wdGNwX3BtX3VucmVnaXN0ZXIoc3RydWN0IG1wdGNwX3BtX29wcyAqcG1fb3BzKVxubmV0L21wdGNwL3BtLmMtMTI2MC17XG4tLVxubmV0L21wdGNwL3BtLmMtMTI3Mi0gKi9cbm5ldC9tcHRjcC9wbS5jOjEyNzM6dm9pZCBtcHRjcF9wbV9nZXRfYXZhaWxhYmxlKGNoYXIgKmJ1Ziwgc2l6ZV90IG1heGxlbilcbm5ldC9tcHRjcC9wbS5jLTEyNzQte1xuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz02NTc9c3RhdGljIHZvaWQgbXB0Y3BfcG1fbmxfYWRkX2FkZHJfcmVjZWl2ZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNzA1LVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjcwNjp2b2lkIG1wdGNwX3BtX25sX3JtX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdTggcm1faWQpXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNzA3LXtcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9ODUyPXN0YXRpYyBpbnQgbXB0Y3BfcG1fbmxfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MTctXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6OTE4OmludCBtcHRjcF9wbV9ubF9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MTktXHRcdFx0ICAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqc2tjKVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05NDYtXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6OTQ3OmJvb2wgbXB0Y3BfcG1fbmxfaXNfYmFja3VwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnNrYylcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05NDgte1xuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz05NjE9c3RhdGljIGludCBtcHRjcF9ubF9hZGRfc3ViZmxvd19vcl9zaWduYWxfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTk5NC0vKiBBZGQgYW4gTVBUQ1AgZW5kcG9pbnQgKi9cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo5OTU6aW50IG1wdGNwX3BtX25sX2FkZF9hZGRyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05OTYte1xuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xMTI4PXN0YXRpYyBpbnQgbXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTExNzItLyogUmVtb3ZlIGFuIE1QVENQIGVuZHBvaW50ICovXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTE3MzppbnQgbXB0Y3BfcG1fbmxfZGVsX2FkZHJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTExNzQte1xuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xMzE0PXN0YXRpYyB2b2lkIF9fcmVzZXRfY291bnRlcnMoc3RydWN0IHBtX25sX3Blcm5ldCAqcGVybmV0KVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMzIyLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjEzMjM6aW50IG1wdGNwX3BtX25sX2ZsdXNoX2FkZHJzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMzI0LXtcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTM0OS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoxMzUwOmludCBtcHRjcF9wbV9ubF9nZXRfYWRkcih1OCBpZCwgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKmFkZHIsXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTM1MS1cdFx0XHQgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTM2Ny1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoxMzY4OmludCBtcHRjcF9wbV9ubF9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMzY5LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xNDAxPXN0YXRpYyBpbnQgcGFyc2VfbGltaXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGlkLCB1bnNpZ25lZCBpbnQgKmxpbWl0KVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xNDE3LVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjE0MTg6aW50IG1wdGNwX3BtX25sX3NldF9saW1pdHNfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE0MTkte1xuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xNDQyLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjE0NDM6aW50IG1wdGNwX3BtX25sX2dldF9saW1pdHNfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE0NDQte1xuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xNDg5PXN0YXRpYyB2b2lkIG1wdGNwX3BtX25sX3NldF9mbGFnc19hbGwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xNTIwLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjE1MjE6aW50IG1wdGNwX3BtX25sX3NldF9mbGFncyhzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqbG9jYWwsXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTUyMi1cdFx0XHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE1NzktXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTU4MDpib29sIG1wdGNwX3BtX25sX2NoZWNrX3dvcmtfcGVuZGluZyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE1ODEte1xuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xNTkzLS8qIENhbGxlZCB1bmRlciBQTSBsb2NrICovXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTU5NDp2b2lkIF9fbXB0Y3BfcG1fa2VybmVsX3dvcmtlcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE1OTUte1xuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MzE9c3RhdGljIGludCBtcHRjcF9wbV9wYXJzZV9wbV9hZGRyX2F0dHIoc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTkxLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo5MjppbnQgbXB0Y3BfcG1fcGFyc2VfYWRkcihzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy05My1cdFx0XHRzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMTAxLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYzoxMDI6aW50IG1wdGNwX3BtX3BhcnNlX2VudHJ5KHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTEwMy1cdFx0XHQgYm9vbCByZXF1aXJlX2ZhbWlseSxcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTE3MD1zdGF0aWMgaW50IG1wdGNwX3BtX2dldF9hZGRyKHU4IGlkLCBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqYWRkcixcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE3Ny1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MTc4OmludCBtcHRjcF9wbV9ubF9nZXRfYWRkcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE3OS17XG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yMjQtXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjIyNTppbnQgbXB0Y3BfcG1fZ2VubF9maWxsX2FkZHIoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMjI2LVx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yNDY9c3RhdGljIGludCBtcHRjcF9wbV9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMjU0LVxubmV0L21wdGNwL3BtX25ldGxpbmsuYzoyNTU6aW50IG1wdGNwX3BtX25sX2dldF9hZGRyX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yNTYtXHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yNjE9c3RhdGljIGludCBtcHRjcF9wbV9zZXRfZmxhZ3Moc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTI3OS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MjgwOmludCBtcHRjcF9wbV9ubF9zZXRfZmxhZ3NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yODEte1xuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjg1PXN0YXRpYyB2b2lkIG1wdGNwX25sX21jYXN0X3NlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsIGdmcF90IGdmcClcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTI5MC1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MjkxOmJvb2wgbXB0Y3BfdXNlcnNwYWNlX3BtX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yOTIte1xuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NDA3PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfY3JlYXRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNDMzLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo0MzQ6dm9pZCBtcHRjcF9ldmVudF9hZGRyX3JlbW92ZWQoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdWludDhfdCBpZClcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNDM1LXtcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTQ2NC1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NDY1OnZvaWQgbXB0Y3BfZXZlbnRfYWRkcl9hbm5vdW5jZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNDY2LVx0XHRcdFx0Y29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqaW5mbylcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTUyMS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NTIyOnZvaWQgbXB0Y3BfZXZlbnRfcG1fbGlzdGVuZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTIzLVx0XHRcdCAgICAgZW51bSBtcHRjcF9ldmVudF90eXBlIGV2ZW50KVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTcxLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo1NzI6dm9pZCBtcHRjcF9ldmVudChlbnVtIG1wdGNwX2V2ZW50X3R5cGUgdHlwZSwgY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTczLVx0XHQgY29uc3Qgc3RydWN0IHNvY2sgKnNzaywgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xNC1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxNTp2b2lkIG1wdGNwX3VzZXJzcGFjZV9wbV9mcmVlX2xvY2FsX2FkZHJfbGlzdChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTE2LXtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTMyPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcl9ieV9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgaWQpXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTE0Mi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxNDM6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xNDQtXHRcdFx0XHQgICAgc3RydWN0IG1wdGNwX3BtX2FkZHJfZW50cnkgKnNrYylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTY0LVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjE2NTpib29sIG1wdGNwX3VzZXJzcGFjZV9wbV9pc19iYWNrdXAoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xNjYtXHRcdFx0XHQgIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnNrYylcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTc5PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9zb2NrKGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTIwMy1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoyMDQ6aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0yMDUte1xuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0yOTU9bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTMxNC1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzozMTU6aW50IG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzE2LXtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzc0LVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjM3NTppbnQgbXB0Y3BfcG1fbmxfc3ViZmxvd19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTM3Ni17XG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTQ1MD1zdGF0aWMgc3RydWN0IHNvY2sgKm1wdGNwX25sX2ZpbmRfc3NrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQ5NS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo0OTY6aW50IG1wdGNwX3BtX25sX3N1YmZsb3dfZGVzdHJveV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDk3LXtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTc0LVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjU3NTppbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX3NldF9mbGFncyhzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqbG9jYWwsXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTc2LVx0XHRcdFx0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTY0MC1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo2NDE6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy02NDItXHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy02ODEtXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NjgyOmludCBtcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2FkZHIodTggaWQsIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICphZGRyLFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTY4My1cdFx0XHRcdHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm1wdGNwX2ZhbGxiYWNrX3RjcF9vcHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6NzY6Ym9vbCBfX21wdGNwX3RyeV9mYWxsYmFjayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgZmJfbWliKVxubmV0L21wdGNwL3Byb3RvY29sLmMtNzcte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTYyMj1zdGF0aWMgaW5saW5lIGJvb2wgdGNwX2Nhbl9zZW5kX2Fjayhjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTYyNy1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjYyODp2b2lkIF9fbXB0Y3Bfc3ViZmxvd19zZW5kX2FjayhzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtNjI5LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05MjI9c3RhdGljIGJvb2wgX19tcHRjcF9zdWJmbG93X2Vycm9yX3JlcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtOTUyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6OTUzOnZvaWQgX19tcHRjcF9lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtOTU0LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODY9c3RhdGljIHZvaWQgbXB0Y3BfcmN2X3J0dF91cGRhdGUoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDExLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTAxMjp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAxMy17XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk3NgoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaDogQSBGb2N1c2VkIEFwcHJvYWNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgY2hhbmdlcyB0aGF0ICpyZWFsbHkqIG1hdHRlciDigJMgdGhlIG9uZXMgdGhhdCBkaXJlY3RseSB0b3VjaCB0aGUgZnVuY3Rpb25zLiBUaGUgYnJvYWRlciBjb250ZXh0IGlzIGludGVyZXN0aW5nLCBzdXJlLCBidXQgcmlnaHQgbm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbCBpbXBhY3QsIGFuZCBmYXN0LiAgU28sIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB1c2UgYGdyZXBgIHRvIHN0cmVhbWxpbmUgdGhpcy4gIEluc3RlYWQgb2Ygc2lmdGluZyB0aHJvdWdoICpldmVyeXRoaW5nKiB0aGF0IGNoYW5nZWQgaW4gdGhlIHBhdGNoLCBsZXQmIzM5O3MgdGFyZ2V0IHRoZSBsaW5lcyB0aGF0IGFyZSBhY3R1YWxseSByZWxhdGVkIHRvIGZ1bmN0aW9uIGRlZmluaXRpb25zIG9yIG1vZGlmaWNhdGlvbnMuIFdlIHdpbGwgdGhlbiBoYXZlIGEgbXVjaCBtb3JlIHVzZWZ1bCB2aWV3IG9uIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sfHN0cnVjdCBbYS16QS1aMC05X10mIzQzOyBcXCopIChtcHRjcF9wYXJzZV9vcHRpb258bXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcHxtcHRjcF93cml0ZV9kYXRhX2ZpbnxjaGVja19mdWxseV9lc3RhYmxpc2hlZHxtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2N8bXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzc3xtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyfF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrfG1wdGNwX2Nhbl9pbmdlc3R8bXB0Y3BfZGF0YV9xdWV1ZV9vZm98bXB0Y3BfcmVzZXRfcnR4X3RpbWVyfG1wdGNwX3NldF9zdGF0ZXxzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb258c3ViZmxvd191bHBfY2xvbmV8bXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZXxtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtLmM9Mzc2PXN0YXRpYyB2b2lkIG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcbi0tXG5uZXQvbXB0Y3AvcG0uYy00MzYtXG5uZXQvbXB0Y3AvcG0uYzo0Mzc6Ym9vbCBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2Moc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbm5ldC9tcHRjcC9wbS5jLTQzOC1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc2OmJvb2wgX19tcHRjcF90cnlfZmFsbGJhY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IGZiX21pYilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMjc5PXZvaWQgbXB0Y3Bfc3ViZmxvd19zaHV0ZG93bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssIGludCBob3cpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzMxMy1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMzMTQ6dm9pZCBtcHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMzE1LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04MzI9dm9pZCBfX21wdGNwX3VuYWNjZXB0ZWRfZm9yY2VfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjgzMzp2b2lkIG1wdGNwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC04MzQtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTEzND1pbnQgbXB0Y3BfcG1fbXBfcHJpb19zZW5kX2FjayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMzctXHRcdFx0ICAgICAgdTggYmt1cCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMTM4OmJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMTM5LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEyOTg9c3RhdGljIGlubGluZSBib29sIF9fbXB0Y3BfaGFzX2luaXRpYWxfc3ViZmxvdyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzMDYtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzA3OmJvb2wgX19tcHRjcF90cnlfZmFsbGJhY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IGZiX21pYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzA4LVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNjU9dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjYtXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzY3OmJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2OC1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz03Mz12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTMtICovXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjk0OmJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05NS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyMAoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCBJJiMzOTttIHRoaW5raW5nIGhlcmUsIGZyb20gYSBzeXN0ZW0gYXJjaGl0ZWN0dXJlIHBlcnNwZWN0aXZlOgoKKipJZGVudGlmeWluZyBLZXkgTVBUQ1AgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gbmFtZXM6IGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgLCBgX19tcHRjcF90cnlfZmFsbGJhY2tgLCBgbXB0Y3Bfc2V0X3N0YXRlYCwgYW5kIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gVGhlIGZhY3QgdGhhdCB0aGV5IGFyZW4mIzM5O3Qgc3RhdGljIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIGNyaXRpY2FsIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IGFyZSBtZWFudCB0byBiZSBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhleSYjMzk7cmUgcHJvYmFibHkgY29yZSB0byB0aGUgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIHByb3RvY29sJiMzOTtzIGZ1bmN0aW9uYWxpdHkg4oCTIGRlYWxpbmcgd2l0aCBwYXRoIG1hbmFnZW1lbnQsIGNvbm5lY3Rpb24gc3RhdGUsIGFuZCBwb3NzaWJseSBzZWN1cml0eSBvciBzZXNzaW9uIGVzdGFibGlzaG1lbnQuIEkgc2hvdWxkIHByb2JhYmx5IHBheSBjbG9zZXIgYXR0ZW50aW9uIHRvIHRoZXNlLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoaXMgb3RoZXIgc2V0IG9mIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBhbHNvIHB1YmxpYy1mYWNpbmcgb3IgaWYgdGhleSB0b3VjaCBzaW1pbGFyIGRvbWFpbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6IGBtcHRjcF9ubF9yZW1vdmVfaWRfemVyb19hZGRyZXNzYCwgYG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHJgLCBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gLCBgbXB0Y3BfcmVzZXRfcnR4X3RpbWVyYCwgYHNjaGVkdWxlXzNyZGFja19yZXRyYW5zbWlzc2lvbmAsIGBzdWJmbG93X3VscF9jbG9uZWAsIGFuZCBgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZWAuIFRoZXNlIHNlZW0gdG8gYmUgaW52b2x2ZWQgaW4gbmV0d29yayBsYXllciBvcGVyYXRpb25zLCBwb3RlbnRpYWxseSB3aXRoIGhhbmRsaW5nIG5ldHdvcmsgYWRkcmVzc2VzLCBvdXQtb2Ytb3JkZXIgZGF0YSwgcmV0cmFuc21pc3Npb24sIGFuZCBmbG93IHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyh2b2lkfGludHxib29sfHN0cnVjdCBbYS16QS1aMC05X10mIzQzOyBcXCopIChtcHRjcF9ubF9yZW1vdmVfaWRfemVyb19hZGRyZXNzfG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHJ8bXB0Y3BfZGF0YV9xdWV1ZV9vZm98bXB0Y3BfcmVzZXRfcnR4X3RpbWVyfHNjaGVkdWxlXzNyZGFja19yZXRyYW5zbWlzc2lvbnxzdWJmbG93X3VscF9jbG9uZXxtcHRjcF9qb2luX3N0b3JlX3N0YXRlKVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtX2tlcm5lbC5jPTEwODM9c3RhdGljIGludCBtcHRjcF9ubF9yZW1vdmVfc3ViZmxvd19hbmRfc2lnbmFsX2FkZHIoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMTI3LVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjExMjg6c3RhdGljIGludCBtcHRjcF9ubF9yZW1vdmVfaWRfemVyb19hZGRyZXNzKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMTI5LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0zMT1tcHRjcF91c2Vyc3BhY2VfcG1fbG9va3VwX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDItXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NDM6c3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDQtXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yOTY9c3RhdGljIGJvb2wgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMwOC0gKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMwOTpzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMDgxPXN0YXRpYyBib29sIG1wdGNwX3J0eF90aW1lcl9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDg1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA4NjpzdGF0aWMgdm9pZCBtcHRjcF9yZXNldF9ydHhfdGltZXIoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA4Ny17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzgxMj1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODc3LSAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mzg3ODpzdGF0aWMgdm9pZCBzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb24oc3RydWN0IHNvY2sgKnNzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4Nzkte1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjAwOT1zdGF0aWMgdm9pZCBzdWJmbG93X3VscF9yZWxlYXNlKHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDM5LVxubmV0L21wdGNwL3N1YmZsb3cuYzoyMDQwOnN0YXRpYyB2b2lkIHN1YmZsb3dfdWxwX2Nsb25lKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjA0MS1cdFx0XHQgICAgICBzdHJ1Y3Qgc29jayAqbmV3c2ssXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz0zOT1zdGF0aWMgdTMyIG1wdGNwX2pvaW5fZW50cnlfaGFzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy01OS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6NjA6c3RhdGljIHZvaWQgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShzdHJ1Y3Qgam9pbl9lbnRyeSAqZW50cnksXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTYxLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NjgKCQkJCQkJCW91dHB1dDogODYKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgdGhpbmtpbmcgdGhlbSB0aHJvdWdoIGFzIEkgYW5hbHl6ZSB0aGUgY29kZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBTdGF0aWMgUHJvcGVydGllcyoqCgpBbHJpZ2h0LCBJIHNlZSB0aGVzZSBmdW5jdGlvbnMgbGlzdGVkIGFzIHBvdGVudGlhbGx5IHJlbGV2YW50LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGV5IHNlZW0gc3RhdGljLiBUaGF0JiMzOTtzIG15IGZpcnN0IGh5cG90aGVzaXMsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIHRoZW0gZG93biBpbmRpdmlkdWFsbHkuIEkgaW1tZWRpYXRlbHkgc3RhcnQgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZWlyIGZ1bmN0aW9uIG5hbWVzIGFuZCB0aGVpciBsaWtlbHkgcHVycG9zZXMuIFdoYXQgYWJvdXQgYG1wdGNwX3BhcnNlX29wdGlvbmA/IFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgYSByb2xlIGluIGRpc3NlY3RpbmcgTVBUQ1Agb3B0aW9ucyB3aXRoaW4gYSBwYWNrZXQuIFRoZW4gYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXBgIGxpa2VseSBkZWFscyB3aXRoIG9wdGlvbnMgcmVsYXRlZCB0byBtdWx0aS1wYXRoIGVzdGFibGlzaG1lbnQuIEkgaW1hZ2luZSBpdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgaW5pdGlhbCBoYW5kc2hha2UgYW5kIG5lZ290aWF0aW9uLiBOZXh0IGlzIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAsIHRoaXMgb25lIGhpbnRzIGF0IGZpbmFsIGRhdGEgdHJhbnNtaXNzaW9uIGFuZCBwZXJoYXBzLCBhIEZJTiBtZXNzYWdlIHdpdGggTVBUQ1Agc3VwcG9ydC4gRmluYWxseSwgYGNoZWNrX2Z1bGx5X2VzdGFibGlzaGVkYCBtdXN0IGJlIHVzZWQgdG8gZW5zdXJlIHRoZSBNUFRDUCBjb25uZWN0aW9uIGlzIGNvbXBsZXRlbHkgc2V0dXAgYW5kIHJlYWR5IGZvciBkYXRhIHRyYW5zZmVyLiBCYXNlZCBvbiB0aGUgbmFtaW5nIGFsb25lLCBJJiMzOTttIGFscmVhZHkgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSBNUFRDUCBzdGFjay4gRWFjaCBvZiB0aGVzZSBmdW5jdGlvbiBuYW1lcyBzdWdnZXN0cyBpdCBoYXMgc29tZSBkZXBlbmRlbmN5IG9uIGEgc3RhdGUgb3IgY29ubmVjdGlvbiB2YXJpYWJsZS4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHZvaWR8aW50fGJvb2x8c3RydWN0IFthLXpBLVowLTlfXSYjNDM7IFxcKikgKG1wdGNwX3BhcnNlX29wdGlvbnxtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wfG1wdGNwX3dyaXRlX2RhdGFfZmlufGNoZWNrX2Z1bGx5X2VzdGFibGlzaGVkKVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYz0xOD1zdGF0aWMgYm9vbCBtcHRjcF9jYXBfZmxhZ19zaGEyNTYodTggZmxhZ3MpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0yMi1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MjM6c3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI0LVx0XHRcdCAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsIGludCBvcHNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz01MDQ9c3RhdGljIHZvaWQgY2xlYXJfM3JkYWNrX3JldHJhbnNtaXNzaW9uKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTUxMi1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NTEzOnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21wdGNwL29wdGlvbnMuYy01MTQtXHRcdFx0XHRcdCBib29sIHNuZF9kYXRhX2Zpbl9lbmFibGUsIGludCAqc2l6ZSxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTU5Ni1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NTk3OnN0YXRpYyB2b2lkIG1wdGNwX3dyaXRlX2RhdGFfZmluKHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTU5OC1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbXB0Y3BfZXh0ICpleHQpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz05NDg9Ym9vbCBtcHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHVuc2lnbmVkIGludCAqc2l6ZSxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk3Ni1cbm5ldC9tcHRjcC9vcHRpb25zLmM6OTc3OnN0YXRpYyBib29sIGNoZWNrX2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2ssXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk3OC1cdFx0XHRcdCAgICBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYxNQoJCQkJCQkJb3V0cHV0OiA1OQoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgdmFzdCBtYWpvcml0eSBvZiB0aGUgZnVuY3Rpb25zIGFyZSB1bmNoYW5nZWQsIHJlbWFpbmluZyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24sIHN1Z2dlc3RzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaXNuJiMzOTt0IGJlaW5nIGRyYXN0aWNhbGx5IGFsdGVyZWQuIEhvd2V2ZXIsIEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5IHdoYXQgKmhhcyogYmVlbiB0b3VjaGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIG9uZXMgdGhhdCBoYXZlIGNoYW5nZWQsIGFyZTogYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AsIGBfX21wdGNwX3RyeV9mYWxsYmFja2AsIGBtcHRjcF9zZXRfc3RhdGVgLCBhbmQgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLgoKTm93LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGFjdCBvZiB0aGVzZSBzcGVjaWZpYyBhcmVhcy4gV2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBsb2NhdGVkPyBPa2F5LCBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBpcyBpbiBgbmV0L21wdGNwL3BtLmNgLiBgX19tcHRjcF90cnlfZmFsbGJhY2tgIGFuZCBgbXB0Y3Bfc2V0X3N0YXRlYCBhcmUgYm90aCB3aXRoaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYC4gQW5kIGZpbmFsbHksIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBpcyBpbiBgbmV0L21wdGNwL3N5bmNvb2tpZXMuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBnZW5lcmFsIGlkZWEgb2YgdGhlIGFmZmVjdGVkIHN1YnN5c3RlbXMuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBgbXB0Y3BfY2FuX2luZ2VzdGAuIEkgbmVlZCB0byByZXZpZXcgaXRzIHN0YXR1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8odm9pZHxpbnR8Ym9vbHxzdHJ1Y3QgW2EtekEtWjAtOV9dJiM0MzsgXFwqKSBtcHRjcF9jYW5faW5nZXN0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDk9c3RhdGljIHZvaWQgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODktICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTA6c3RhdGljIGJvb2wgbXB0Y3BfY2FuX2luZ2VzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDI2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgdGhpbmdzIHNlZW0gcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuIEl0IGxvb2tzIGxpa2UgdGhlIHN5c3RlbSBpcyBmb2N1c2luZyBvbiB3aGljaCBNUFRDUCBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMg4oCTIHNwZWNpZmljYWxseSBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCwgYF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrYCwgYG1wdGNwX3NldF9zdGF0ZWAsIGFuZCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBgTVBUQ1BfS1VOSVRfVEVTVGAsIHdoaWNoIGlzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5IGZvciBLVW5pdCB0ZXN0aW5nLiBgSU5FVF9NUFRDUF9ESUFHYCBvYnZpb3VzbHkgaGFuZGxlcyBkaWFnbm9zdGljcy4gQW5kIHdlIGhhdmUgYE1QVENQX0lQVjZgIGZvciBJUHY2IHN1cHBvcnQsIHdoaWNoIEkmIzM5O2xsIGRlZmluaXRlbHkgd2FudCB0byBpbmNsdWRlLgoKSSB3aWxsIGFsc28gaW5jbHVkZSBgTVBUQ1BgLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgaXNuJiMzOTt0IGNhbGxlZCBmcm9tIG91dHNpZGU7IHRoaXMgaGFzIHNvbWUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTM3Nj1zdGF0aWMgdm9pZCBtcHRjcF9wbV9hZGRfYWRkcl90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4tLVxubmV0L21wdGNwL3BtLmMtNDM2LVxubmV0L21wdGNwL3BtLmM6NDM3OmJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcG0uYy00MzgtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcilcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9MzMzPXN0YXRpYyB2b2lkIG1wdGNwX3BtX2NyZWF0ZV9zdWJmbG93X29yX3NpZ25hbF9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTM3Ni1cdFx0ICovXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6Mzc3Olx0XHRpZiAoIW1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhtc2ssIFx1MDAyNmxvY2FsLmFkZHIpKVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTM3OC1cdFx0XHRyZXR1cm47XG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTIwND1pbnQgbXB0Y3BfcG1fbmxfYW5ub3VuY2VfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0yNDctXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6MjQ4Olx0aWYgKG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhtc2ssIFx1MDAyNmFkZHJfdmFsLmFkZHIpKSB7XG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjQ5LVx0XHRtc2stXHUwMDNlcG0uYWRkX2FkZHJfc2lnbmFsZWQmIzQzOyYjNDM7O1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTExMzQ9aW50IG1wdGNwX3BtX21wX3ByaW9fc2VuZF9hY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMTM3LVx0XHRcdCAgICAgIHU4IGJrdXApO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTEzODpib29sIG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTEzOS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGxlYWRzIG1lIHRvIGJlbGlldmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGtlcm5lbC1sZXZlbCBjb21wb25lbnRzLCBgcG1fa2VybmVsLmNgIGFuZCBwb3RlbnRpYWxseSBhbHNvIGZyb20gdGhlIHVzZXJzcGFjZSBzaWRlLCBgcG1fdXNlcnNwYWNlLmNgLiBJJiMzOTtsbCB3YW50IHRvIHZlcmlmeSB0aGF0IGFuZCwgaWYgaXQgaXMsIEkgY2FuIHRoZW4gemVybyBpbiBvbiB0aGUgZXhhY3QgY29udGV4dC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSYjMzk7cyBjYWxsIGdyYXBoIHNob3VsZCBjbGVhciB0aGF0IHJpZ2h0IHVwLiBOZXh0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSwgc28gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF90cnlfZmFsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc2OmJvb2wgX19tcHRjcF90cnlfZmFsbGJhY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IGZiX21pYilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjk4PXN0YXRpYyBpbmxpbmUgYm9vbCBfX21wdGNwX2hhc19pbml0aWFsX3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzA2LVxubmV0L21wdGNwL3Byb3RvY29sLmg6MTMwNzpib29sIF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBmYl9taWIpO1xubmV0L21wdGNwL3Byb3RvY29sLmgtMTMwOC1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzMDk9c3RhdGljIGlubGluZSBib29sIG1wdGNwX3RyeV9mYWxsYmFjayhzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgZmJfbWliKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzMTUtXHRtc2sgPSBtcHRjcF9zayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzE2Olx0aWYgKCFfX21wdGNwX3RyeV9mYWxsYmFjayhtc2ssIGZiX21pYikpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzE3LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTMzMj1zdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfZWFybHlfZmFsbGJhY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzM2LVx0c3ViZmxvdy1cdTAwM2VyZXF1ZXN0X21wdGNwID0gMDtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzMzc6XHRXQVJOX09OX09OQ0UoIV9fbXB0Y3BfdHJ5X2ZhbGxiYWNrKG1zaywgZmJfbWliKSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzM4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHByb3RvY29sLmhgIGFuZCBgbXB0Y3Bfc2V0X3N0YXRlYCoqCgpSaWdodCwgc28gdGhlIGZpcnN0IHRob3VnaHQgaXMgYSBzaW1wbGUgY29uZmlybWF0aW9uLCBpbmxpbmUgZnVuY3Rpb25zIGluIGBwcm90b2NvbC5oYCwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIHRoZXJlIGNvdWxkIGJlIHNvbWV0aGluZyBtb3JlIHRvIGJlIHNhaWQuIElmIHRoZXJlJiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBpdCBkb2luZyBhIGpvYiB0aGF0JiMzOTtzIGNyaXRpY2FsIHRvIHBlcmZvcm1hbmNlLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gYG1wdGNwX3NldF9zdGF0ZWAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiAqc3RhdGUgY2hhbmdlcyogaW4gYW4gTVBUQ1AgY29udGV4dC4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgY29udHJvbHMgdGhlIHRyYW5zaXRpb24gb2YgYSBjb25uZWN0aW9uLCBzdWJmbG93LCBvciBhZGRyZXNzIGZyb20gb25lIHN0YXRlIHRvIGFub3RoZXIgKGUuZy4sIGFjdGl2ZSwgcGFzc2l2ZSwgZXN0YWJsaXNoZWQsIGNsb3NpbmcsIGV0Yy4pLiBUaGlua2luZyBhYm91dCBpdCwgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50OiByYWNlIGNvbmRpdGlvbnM/IENvbmN1cnJlbmN5IGlzc3Vlcz8gU3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW4gcGxheT8gV2hhdCYjMzk7cyB0aGUgbG9jayBncmFudWxhcml0eT8gSXMgaXQgdGhyZWFkLXNhZmU/IEhvdyBkbyB0aGVzZSBzdGF0ZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIE1QVENQIGNvbnRyb2wgcGxhbmUgYW5kIGRhdGEgcGxhbmU/CgpJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgdG8gdW5kZXJzdGFuZCBob3cgc3RhdGUgY2hhbmdlcyB0aGVyZSBhZmZlY3QgdGhlIE1QVENQIG92ZXJhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NldF9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3BtX2tlcm5lbC5jPTg1Mj1zdGF0aWMgaW50IG1wdGNwX3BtX25sX2NyZWF0ZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTAyLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjkwMzpcdC8qIFdlIGRvbiYjMzk7dCB1c2UgbXB0Y3Bfc2V0X3N0YXRlKCkgaGVyZSBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIGNhbGxlZFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTkwNC1cdCAqIHVuZGVyIHRoZSBtc2sgc29ja2V0IGxvY2suIEZvciB0aGUgbW9tZW50LCB0aGF0IHdpbGwgbm90IGJyaW5nXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NTM4PXN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2RhdGFfZmluX2FjayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNTQ3LVx0XHRjYXNlIFRDUF9GSU5fV0FJVDE6XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo1NDg6XHRcdFx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfRklOX1dBSVQyKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTU0OS1cdFx0XHRicmVhaztcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy01NTItXHRcdFx0bXB0Y3Bfc2h1dGRvd25fc3ViZmxvd3MobXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjU1MzpcdFx0XHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy01NTQtXHRcdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NjkzPXN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2RhdGFfZmluKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MTktXHRcdGNhc2UgVENQX0VTVEFCTElTSEVEOlxubmV0L21wdGNwL3Byb3RvY29sLmM6NzIwOlx0XHRcdG1wdGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFX1dBSVQpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtNzIxLVx0XHRcdGJyZWFrO1xubmV0L21wdGNwL3Byb3RvY29sLmMtNzIyLVx0XHRjYXNlIFRDUF9GSU5fV0FJVDE6XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3MjM6XHRcdFx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0lORyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjQtXHRcdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNzI2LVx0XHRcdG1wdGNwX3NodXRkb3duX3N1YmZsb3dzKG1zayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3Mjc6XHRcdFx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtNzI4LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTkyMj1zdGF0aWMgYm9vbCBfX21wdGNwX3N1YmZsb3dfZXJyb3JfcmVwb3J0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NDMtXHRpZiAoc3NrX3N0YXRlID09IFRDUF9DTE9TRSBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk0NDpcdFx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBzc2tfc3RhdGUpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIC1lcnIpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI2NDA9c3RhdGljIHZvaWQgX19tcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI3MzctXHRcdCAgICBtc2stXHUwMDNlaW5fYWNjZXB0X3F1ZXVlIHx8IHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjczODpcdFx0XHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNzM5LVx0XHRcdG1wdGNwX2Nsb3NlX3dha2VfdXAoc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4MDc9c3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg0Mi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4NDM6XHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODQ0LVx0V1JJVEVfT05DRShzay1cdTAwM2Vza19zaHV0ZG93biwgU0hVVERPV05fTUFTSyk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzA4NT1zdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMwODktXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMDkwOlx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzA5MS1cdG1wdGNwX2JhY2tsb2dfcHVyZ2Uoc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMyNzk9dm9pZCBtcHRjcF9zdWJmbG93X3NodXRkb3duKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgaW50IGhvdylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMzEzLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzMxNDp2b2lkIG1wdGNwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMzMTUte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMzNTc9c3RhdGljIGludCBtcHRjcF9jbG9zZV9zdGF0ZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzM2MS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMzNjI6XHRtcHRjcF9zZXRfc3RhdGUoc2ssIG5zKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMzNjMtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzQ2MD1ib29sIF9fbXB0Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzQ3MC1cdFx0bXB0Y3BfY2hlY2tfbGlzdGVuX3N0b3Aoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzQ3MTpcdFx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzQ3Mi1cdFx0Z290byBjbGVhbnVwO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MTQtXHRpZiAoc3ViZmxvd3NfYWxpdmUgPT0gMClcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1MTU6XHRcdG1wdGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MTYtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU5MD1zdGF0aWMgaW50IG1wdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzYwMS1cdG1wdGNwX2NoZWNrX2xpc3Rlbl9zdG9wKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM2MDI6XHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNjAzLVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3MDE9c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3NTEtXHQgKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM3NTI6XHRtcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfRVNUQUJMSVNIRUQpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzc1My1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTM4PXN0YXRpYyBpbnQgbXB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTQ5LVxubmV0L21wdGNwL3Byb3RvY29sLmM6NDE1MDpcdG1wdGNwX3NldF9zdGF0ZShzaywgVENQX1NZTl9TRU5UKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxNTEtXHRzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjA3LVx0XHRtcHRjcF90b2tlbl9kZXN0cm95KG1zayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjA4Olx0XHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjA5LVx0XHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQyNzY9c3RhdGljIGludCBtcHRjcF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDI5Ni1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQyOTc6XHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9MSVNURU4pO1xubmV0L21wdGNwL3Byb3RvY29sLmMtNDI5OC1cdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfUkNVX0ZSRUUpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQzMDItXHRyZWxlYXNlX3NvY2soc3NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQzMDM6XHRtcHRjcF9zZXRfc3RhdGUoc2ssIGluZXRfc2tfc3RhdGVfbG9hZChzc2spKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQzMDQtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDM3OT1zdGF0aWMgaW50IG1wdGNwX3N0cmVhbV9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NDM0LVx0XHRcdGlmICh1bmxpa2VseShsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNm1zay1cdTAwM2Vjb25uX2xpc3QpKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ0MzU6XHRcdFx0XHRtcHRjcF9zZXRfc3RhdGUobmV3c2ssIFRDUF9DTE9TRSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NDM2LVx0XHRcdG1wdGNwX2Nsb3NlX3NzayhuZXdzaywgbXNrLVx1MDAzZWZpcnN0LFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTgzMj12b2lkIF9fbXB0Y3BfdW5hY2NlcHRlZF9mb3JjZV9jbG9zZShzdHJ1Y3Qgc29jayAqc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmg6ODMzOnZvaWQgbXB0Y3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgzNC1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTQ1ND12b2lkIF9fbXB0Y3Bfc3luY19zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSlcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTQ2OC1cdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgbXNrLVx1MDAzZXdyaXRlX3NlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjQ2OTpcdFx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBzdGF0ZSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTQ3MC1cdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NjUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBNUFRDUCBTdGF0ZSBJbml0aWFsaXphdGlvbioqCgpSaWdodCwgYG1wdGNwX3NldF9zdGF0ZWAgaXMgYSBjb3JlIGZ1bmN0aW9uLCB1c2VkIGV2ZXJ5d2hlcmUuIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgbWFuYWdpbmcgTVBUQ1AmIzM5O3MgY29ubmVjdGlvbiBsaWZlY3ljbGUuIFRoYXQgbWVhbnMgYW55IGlzc3VlcyB0aGVyZSB3b3VsZCBiZSBhIHJlYWwgaGVhZGFjaGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGluZ3MgYXJlIGJlaW5nIGhhbmRsZWQgYXQgdGhlIGluaXRpYWxpemF0aW9uIHN0YWdlIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4KClNpbmNlIGl0JiMzOTtzIHNvIGZ1bmRhbWVudGFsLCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSByZWxhdGVkIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGpvaW4gY29va2llIHN0YXRlIGlzIGluaXRpYWxpemVkIGlzIGNydWNpYWwuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaW5pdGlhbCBoYW5kc2hha2UgYW5kIG5lZ290aWF0aW9uIOKAkyB3aGljaCBpbiB0dXJuIGlzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQgZm9yIE1QVENQLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzY1PXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzY2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTM2Nzpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjgtXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNzQ9c3RhdGljIGlubGluZSBib29sXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzc1Om1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNzYtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjY1PWludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTEtXHR9IGVsc2UgaWYgKG9wdF9tcF9qb2luIFx1MDAyNlx1MDAyNiBsaXN0ZW5lci1cdTAwM2VyZXF1ZXN0X21wdGNwKSB7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjI5MjpcdFx0aWYgKCFtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN1YmZsb3dfcmVxLCBza2IpKVxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTMtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz03Mz12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxuLS1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTMtICovXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjk0OmJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05NS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MzkKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVBUQ1AgU3ViZmxvdyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgd2hhdCBoYXBwZW5zIHdoZW4gYG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxYCBpcyBjYWxsZWQuIFRoYXQgdGVsbHMgbWUgd2hlcmUgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHM6IGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgLCBgX19tcHRjcF90cnlfZmFsbGJhY2tgLCBgbXB0Y3Bfc2V0X3N0YXRlYCwgYW5kIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gVGhvc2UgYXJlIG15IGltbWVkaWF0ZSBhcmVhcyBvZiBpbnRlcmVzdC4KCkJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSBzaG91bGQgY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBidXQgSSB0aGluayB0aGUgYE1QVENQYCBmbGFnIHNob3VsZCBiZSBzdWZmaWNpZW50IGhlcmUuCgpJJiMzOTttIHJldmlzaXRpbmcgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AuLi4gWXVwLCBpdCYjMzk7cyBhbiBBUEkgZW50cnlwb2ludCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIERvdWJsZS1jaGVja2luZyB0aGUgb3RoZXIgdGhyZWU6IGBfX21wdGNwX3RyeV9mYWxsYmFja2Ag4oCTIGVudHJ5cG9pbnQuIGBtcHRjcF9zZXRfc3RhdGVgIOKAkyBlbnRyeXBvaW50LiBBbmQgZmluYWxseSwgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgIOKAkyBhbm90aGVyIGVudHJ5cG9pbnQuIEFsbCBnb29kLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MsIHNvIEkmIzM5O2xsIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jJiMzNDssCiAgICAmIzM0O19fbXB0Y3BfdHJ5X2ZhbGxiYWNrJiMzNDssCiAgICAmIzM0O21wdGNwX3NldF9zdGF0ZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0sIGluY2x1ZGluZyBvcHRpb25zIHBhcnNpbmcsIHBhdGggbWFuYWdlbWVudCAoYm90aCBrZXJuZWwgYW5kIHVzZXJzcGFjZSksIHByb3RvY29sIHN0YXRlIGhhbmRsaW5nLCBhbmQgc3luY29va2llcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jJiMzNDssCiAgICAmIzM0O19fbXB0Y3BfdHJ5X2ZhbGxiYWNrJiMzNDssCiAgICAmIzM0O21wdGNwX3NldF9zdGF0ZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0sIGluY2x1ZGluZyBvcHRpb25zIHBhcnNpbmcsIHBhdGggbWFuYWdlbWVudCAoYm90aCBrZXJuZWwgYW5kIHVzZXJzcGFjZSksIHByb3RvY29sIHN0YXRlIGhhbmRsaW5nLCBhbmQgc3luY29va2llcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1wdGNwX3dyaXRlX2RhdGFfZmluKClgIGluIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYGV4dC1cdTAwM2Vjc3VtID0gMDtgLiBUaGUgYGV4dGAgcG9pbnRlciByZWZlcnMgdG8gYG9wdHMtXHUwMDNlZXh0X2NvcHlgLCB3aGljaCBpcyBwYXJ0IG9mIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgb3B0cy5tcHRjcGAuIFxuXG5UcmFjaW5nIHRoZSBhbGxvY2F0aW9uLCBgb3B0c2AgaXMgaW5zdGFudGlhdGVkIGFzIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgaW4gYF9fdGNwX3RyYW5zbWl0X3NrYigpYCAoYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2ApLiBDcnVjaWFsbHksIGBfX3RjcF90cmFuc21pdF9za2IoKWAgb25seSBjbGVhcnMgYSBzcGVjaWZpYyBzdWJzZXQgb2YgZmllbGRzIGluIGBvcHRzYCAoYG9wdHMuY2xlYXJlZGApLCBhbmQgZXhwbGljaXRseSBsZWF2ZXMgYG9wdHMubXB0Y3BgIHVuaW5pdGlhbGl6ZWQgKGFzIG5vdGVkIGJ5IHRoZSBjb21tZW50OiBcJiMzNDtDYXV0aW9uOiBmb2xsb3dpbmcgZmllbGRzIGFyZSBub3QgY2xlYXJlZCBpbiBfX3RjcF90cmFuc21pdF9za2IoKVwmIzM0OykuXG5cbldoZW4gYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKClgIHByb2Nlc3NlcyBvcHRpb25zIHdpdGhvdXQgYW4gZXhpc3RpbmcgYG1wZXh0YCwgaXQgemVyb2VzIHRoZSBgZmxhZ3NgIG9mIGBvcHRzLVx1MDAzZWV4dF9jb3B5YCBidXQgbGVhdmVzIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3QgKGluY2x1ZGluZyBgY3N1bWApIHVuaW5pdGlhbGl6ZWQuIElmIGEgREFUQV9GSU4gbmVlZHMgdG8gYmUgc2VudCwgYG1wdGNwX3dyaXRlX2RhdGFfZmluKClgIGlzIGNhbGxlZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGluaXRpYWxpemVkIHNldmVyYWwgZmllbGRzIG9mIGBleHRgIGJ1dCBtaXNzZWQgYGNzdW1gLiBcblxuU3Vic2VxdWVudGx5LCBgbXB0Y3Bfd3JpdGVfb3B0aW9ucygpYCBjYWxscyBgbXB0Y3BfbWFrZV9jc3VtKG1wZXh0KWAsIHdoaWNoIHJlYWRzIHRoZSB1bmluaXRpYWxpemVkIGBtcGV4dC1cdTAwM2Vjc3VtYCBzdGFjayBtZW1vcnkgdG8gY29tcHV0ZSB0aGUgTVBUQ1AgY2hlY2tzdW0uIFRoaXMgY2hlY2tzdW0gaXMgdGhlbiB3cml0dGVuIGludG8gdGhlIFRDUCBoZWFkZXIgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgcmVzdWx0aW5nIGluIGEga2VybmVsIHN0YWNrIG1lbW9yeSBpbmZvLWxlYWsuXG5cblN0YW5kYXJkIEtBU0FOIG9ubHkgZGV0ZWN0cyBzcGF0aWFsIChvdXQtb2YtYm91bmRzKSBhbmQgdGVtcG9yYWwgKHVzZS1hZnRlci1mcmVlKSBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSXQgZG9lcyBub3QgdHJhY2sgbWVtb3J5IGluaXRpYWxpemF0aW9uIHN0YXRlIGFuZCBjYW5ub3QgZGV0ZWN0IHJlYWRzIG9mIGxlZ2FsbHkgYWxsb2NhdGVkIGJ1dCB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYnVnIGFuZCB2ZXJpZnkgdGhhdCBubyBvdGhlciB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgbGVha2VkIGluIE1QVENQIG9wdGlvbnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjY1YjcwOWQxNGEzMzc3MjFmOWQ0NjJkNTg4NmI4ZDRhZWRlZjZjMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE5OjIzOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmMKaW5kZXggYjgzMThlMDMwMTM4OS4uY2UwZGUwMmY1YTNhMSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCkBAIC05Myw3ICYjNDM7OTMsOCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICogSW4gb3RoZXIgd29yZHMsIHRoZSBvbmx5IHdheSBmb3IgY2hlY2tzdW1zIG5vdCB0byBiZSB1c2VkCiAJCSAqIGlzIGlmIGJvdGggaG9zdHMgaW4gdGhlaXIgU1lOcyBzZXQgQT0wLiYjMzQ7CiAJCSAqLwotCQlpZiAoZmxhZ3MgJmFtcDsgTVBUQ1BfQ0FQX0NIRUNLU1VNX1JFUUQpCiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IE1QVENQX0NBUF9DSEVDS1NVTV9SRVFEKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgb3BzaXplICZsdDsgVENQT0xFTl9NUFRDUF9NUENfQUNLX0RBVEEpCiAJCQltcF9vcHQtJmd0O3N1Ym9wdGlvbnMgfD0gT1BUSU9OX01QVENQX0NTVU1SRVFEOwogCiAJCW1wX29wdC0mZ3Q7ZGVueV9qb2luX2lkMCA9ICEhKGZsYWdzICZhbXA7IE1QVENQX0NBUF9ERU5ZX0pPSU5fSUQwKTsKQEAgLTUyOSw3ICYjNDM7NTMwLDcgQEAgc3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIE1QQy9NUEogbmVlZGVkIG9ubHkgb24gM3JkIGFjayBwYWNrZXQsIERBVEFfRklOIGFuZCBUQ1Agc2h1dGRvd24gdGFrZSBwcmVjZWRlbmNlICovCi0JaWYgKFJFQURfT05DRShzdWJmbG93LSZndDtmdWxseV9lc3RhYmxpc2hlZCkgfHwgc25kX2RhdGFfZmluX2VuYWJsZSB8fAomIzQzOwlpZiAoc3ViZmxvdy0mZ3Q7ZnVsbHlfZXN0YWJsaXNoZWQgfHwgc25kX2RhdGFfZmluX2VuYWJsZSB8fAogCSAgICBzdWJmbG93LSZndDtzbmRfaXNuICE9IFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7c2VxIHx8CiAJICAgIHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpCiAJCXJldHVybiBmYWxzZTsKQEAgLTYxMSw2ICYjNDM7NjEyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdywKIAkJZXh0LSZndDtkYXRhX3NlcSA9IGRhdGFfZmluX3R4X3NlcTsKIAkJZXh0LSZndDtzdWJmbG93X3NlcSA9IDA7CiAJCWV4dC0mZ3Q7ZGF0YV9sZW4gPSAxOwomIzQzOwkJZXh0LSZndDtjc3VtID0gMDsKIAl9IGVsc2UgaWYgKGV4dC0mZ3Q7ZGF0YV9zZXEgJiM0MzsgZXh0LSZndDtkYXRhX2xlbiA9PSBkYXRhX2Zpbl90eF9zZXEpIHsKIAkJLyogSWYgdGhlcmUmIzM5O3MgYW4gZXhpc3RpbmcgRFNTIG1hcHBpbmcgYW5kIGl0IGlzIHRoZQogCQkgKiBmaW5hbCBtYXBwaW5nLCBEQVRBX0ZJTiBjb25zdW1lcyAxIGFkZGl0aW9uYWwgYnl0ZSBvZgpAQCAtOTgwLDcgJiM0Mzs5ODIsNyBAQCBzdGF0aWMgYm9vbCBjaGVja19mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrLAogCS8qIGhlcmUgd2UgY2FuIHByb2Nlc3MgT29PLCBpbi13aW5kb3cgcGt0cywgb25seSBpbi1zZXF1ZW5jZSA0dGggYWNrCiAJICogd2lsbCBtYWtlIHRoZSBzdWJmbG93IGZ1bGx5IGVzdGFibGlzaGVkCiAJICovCi0JaWYgKGxpa2VseShSRUFEX09OQ0Uoc3ViZmxvdy0mZ3Q7ZnVsbHlfZXN0YWJsaXNoZWQpKSkgewomIzQzOwlpZiAobGlrZWx5KHN1YmZsb3ctJmd0O2Z1bGx5X2VzdGFibGlzaGVkKSkgewogCQkvKiBvbiBwYXNzaXZlIHNvY2tldHMsIGNoZWNrIGZvciAzcmQgYWNrIHJldHJhbnNtaXNzaW9uCiAJCSAqIG5vdGUgdGhhdCBtc2sgaXMgYWx3YXlzIHNldCBieSBzdWJmbG93X3N5bl9yZWN2X3NvY2soKQogCQkgKiBmb3IgbXBfam9pbiBzdWJmbG93cwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uYwppbmRleCA4YjY4ODY4MjU1YzUwLi5iMGI3MWFkZWZiOGZlIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcG0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcG0uYwpAQCAtNDYyLDEwICYjNDM7NDYyLDEwIEBAIGJvb2wgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAKIAlhZGRfZW50cnktJmd0O2FkZHIgPSAqYWRkcjsKIAlhZGRfZW50cnktJmd0O3NvY2sgPSBtc2s7Ci0JYWRkX2VudHJ5LSZndDtyZXRyYW5zX3RpbWVzID0gMDsKIAogCXRpbWVyX3NldHVwKCZhbXA7YWRkX2VudHJ5LSZndDt0aW1lciwgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIsIDApOwogcmVzZXRfdGltZXI6CiYjNDM7CWFkZF9lbnRyeS0mZ3Q7cmV0cmFuc190aW1lcyA9IDA7CiAJYWRkX2VudHJ5LSZndDt0aW1lcl9kb25lID0gZmFsc2U7CiAJdGltZW91dCA9IG1wdGNwX2FkanVzdF9hZGRfYWRkcl90aW1lb3V0KG1zayk7CiAJaWYgKHRpbWVvdXQpCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG1fa2VybmVsLmMgYi9uZXQvbXB0Y3AvcG1fa2VybmVsLmMKaW5kZXggNDI0ZjFhN2Y5MjQ4Mi4uMWE3NzUwODEzMjM1NCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3BtX2tlcm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbV9rZXJuZWwuYwpAQCAtMTEzNyw2ICYjNDM7MTEzNyw4IEBAIHN0YXRpYyBpbnQgbXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbmV0ICpuZXQsCiAJd2hpbGUgKChtc2sgPSBtcHRjcF90b2tlbl9pdGVyX25leHQobmV0LCAmYW1wO3Nfc2xvdCwgJmFtcDtzX251bSkpICE9IE5VTEwpIHsKIAkJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrOwogCQlzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvIG1za19sb2NhbDsKJiM0MzsJCXN0cnVjdCBtcHRjcF9hZGRyX2luZm8gYW5ub19hZGRyOwomIzQzOwkJYm9vbCBhbm5vdW5jZWQ7CiAKIAkJaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2Nvbm5fbGlzdCkgfHwgbXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpCiAJCQlnb3RvIG5leHQ7CkBAIC0xMTQ2LDcgJiM0MzsxMTQ4LDEzIEBAIHN0YXRpYyBpbnQgbXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbmV0ICpuZXQsCiAJCQlnb3RvIG5leHQ7CiAKIAkJbG9ja19zb2NrKHNrKTsKJiM0MzsJCS8qIERyb3AgYSBwb3NzaWJseSBwZW5kaW5nIEFERF9BRERSIGZvciB0aGlzIGFkZHJlc3MuICovCiYjNDM7CQlhbm5vX2FkZHIgPSBtc2tfbG9jYWw7CiYjNDM7CQlhbm5vX2FkZHIucG9ydCA9IDA7CiYjNDM7CQlhbm5vdW5jZWQgPSBtcHRjcF9wbV9hbm5vdW5jZWRfcmVtb3ZlKG1zaywgJmFtcDthbm5vX2FkZHIpOwogCQlzcGluX2xvY2tfYmgoJmFtcDttc2stJmd0O3BtLmxvY2spOwomIzQzOwkJaWYgKGFubm91bmNlZCkKJiM0MzsJCQltc2stJmd0O3BtLmFkZF9hZGRyX3NpZ25hbGVkLS07CiAJCW1wdGNwX3BtX3JlbW92ZV9hZGRyKG1zaywgJmFtcDtsaXN0KTsKIAkJbXB0Y3BfcG1fcm1fc3ViZmxvdyhtc2ssICZhbXA7bGlzdCk7CiAJCV9fbWFya19zdWJmbG93X2VuZHBfYXZhaWxhYmxlKG1zaywgMCk7CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMKaW5kZXggYjk0ZmJiNDgzYmY5NC4uZmFiMTZkOTUzZGJmZSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYwpAQCAtNjksNiAmIzQzOzY5LDE5IEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAogCX0KIAogCWlmICghYWRkcl9tYXRjaCAmYW1wOyZhbXA7ICFpZF9tYXRjaCkgewomIzQzOwkJdW5zaWduZWQgaW50IGlkOwomIzQzOwomIzQzOwkJaWYgKCFlbnRyeS0mZ3Q7YWRkci5pZCAmYW1wOyZhbXA7IG5lZWRzX2lkKSB7CiYjNDM7CQkJaWQgPSBmaW5kX25leHRfemVyb19iaXQoaWRfYml0bWFwLAomIzQzOwkJCQkJCU1QVENQX1BNX01BWF9BRERSX0lEICYjNDM7IDEsIDEpOwomIzQzOwkJCWlmIChpZCAmZ3Q7IE1QVENQX1BNX01BWF9BRERSX0lEKSB7CiYjNDM7CQkJCXJldCA9IC1FTk9TUEM7CiYjNDM7CQkJCWdvdG8gYXBwZW5kX2VycjsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWlkID0gZW50cnktJmd0O2FkZHIuaWQ7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIE1lbW9yeSBmb3IgdGhlIGVudHJ5IGlzIGFsbG9jYXRlZCBmcm9tIHRoZQogCQkgKiBzb2NrIG9wdGlvbiBidWZmZXIuCiAJCSAqLwpAQCAtNzgsMTAgJiM0Mzs5MSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAogCQkJZ290byBhcHBlbmRfZXJyOwogCQl9CiAKLQkJaWYgKCFlLSZndDthZGRyLmlkICZhbXA7JmFtcDsgbmVlZHNfaWQpCi0JCQllLSZndDthZGRyLmlkID0gZmluZF9uZXh0X3plcm9fYml0KGlkX2JpdG1hcCwKLQkJCQkJCQlNUFRDUF9QTV9NQVhfQUREUl9JRCAmIzQzOyAxLAotCQkJCQkJCTEpOwomIzQzOwkJZS0mZ3Q7YWRkci5pZCA9IGlkOwogCQlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO2UtJmd0O2xpc3QsICZhbXA7bXNrLSZndDtwbS51c2Vyc3BhY2VfcG1fbG9jYWxfYWRkcl9saXN0KTsKIAkJbXNrLSZndDtwbS5sb2NhbF9hZGRyX3VzZWQmIzQzOyYjNDM7OwogCQlyZXQgPSBlLSZndDthZGRyLmlkOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBiNDc0ZDAzNjIwYTc1Li5iMjZhOGQ1NjA2MTI1IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtOTUsNiAmIzQzOzk1LDcgQEAgYm9vbCBfX21wdGNwX3RyeV9mYWxsYmFjayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgZmJfbWliKQogCiAJbXNrLSZndDthbGxvd19zdWJmbG93cyA9IGZhbHNlOwogCXNldF9iaXQoTVBUQ1BfRkFMTEJBQ0tfRE9ORSwgJmFtcDttc2stJmd0O2ZsYWdzKTsKJiM0MzsJc2V0X2JpdChNUFRDUF9SVFhfRElTQUJMRUQsICZhbXA7bXNrLSZndDtmbGFncyk7CiAJX19NUFRDUF9JTkNfU1RBVFMobmV0LCBmYl9taWIpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7bXNrLSZndDtmYWxsYmFja19sb2NrKTsKIAlyZXR1cm4gdHJ1ZTsKQEAgLTI4OCw4ICYjNDM7Mjg5LDggQEAgc3RhdGljIHZvaWQgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHN0cnVjdCBzb2NrICpzaywKICAqLwogc3RhdGljIGJvb2wgbXB0Y3BfY2FuX2luZ2VzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JcmV0dXJuIHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmbHQ7PSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpIHx8Ci0JCQlfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1wdGNwX3NrKHNrKSk7CiYjNDM7CXJldHVybiBsaWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spICZsdDs9IFJFQURfT05DRShzay0mZ3Q7c2tfcmN2YnVmKSkgfHwKJiM0MzsJICAgICAgIF9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXB0Y3Bfc2soc2spKTsKIH0KIAogc3RhdGljIGJvb2wgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMzEyLDEyICYjNDM7MzEzLDYgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl1NjQgc2VxLCBlbmRfc2VxLCBtYXhfc2VxOwogCXN0cnVjdCBza19idWZmICpza2IxOwogCi0JaWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkgewotCQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTsKLQkJbXB0Y3BfZHJvcChzaywgc2tiKTsKLQkJcmV0dXJuOwotCX0KLQogCXNlcSA9IE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwogCWVuZF9zZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcTsKIAltYXhfc2VxID0gYXRvbWljNjRfcmVhZCgmYW1wO21zay0mZ3Q7cmN2X3duZF9zZW50KTsKQEAgLTMzNCw2ICYjNDM7MzI5LDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJaWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkgewomIzQzOwkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7CiYjNDM7CQltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJcCA9ICZhbXA7bXNrLSZndDtvdXRfb2Zfb3JkZXJfcXVldWUucmJfbm9kZTsKIAlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfT0ZPUVVFVUUpOwogCWlmIChSQl9FTVBUWV9ST09UKCZhbXA7bXNrLSZndDtvdXRfb2Zfb3JkZXJfcXVldWUpKSB7CkBAIC0xMDg0LDEzICYjNDM7MTA4NSwxNCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9ydHhfdGltZXJfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spCiAKIHN0YXRpYyB2b2lkIG1wdGNwX3Jlc2V0X3J0eF90aW1lcihzdHJ1Y3Qgc29jayAqc2spCiB7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiAJdW5zaWduZWQgbG9uZyB0b3V0OwogCi0JLyogcHJldmVudCByZXNjaGVkdWxpbmcgb24gY2xvc2UgKi8KLQlpZiAodW5saWtlbHkoaW5ldF9za19zdGF0ZV9sb2FkKHNrKSA9PSBUQ1BfQ0xPU0UpKQomIzQzOwkvKiBQcmV2ZW50IHJlc2NoZWR1bGluZyBvbiBjbG9zZSBhbmQgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi8KJiM0MzsJaWYgKHRlc3RfYml0KE1QVENQX1JUWF9ESVNBQkxFRCwgJmFtcDttc2stJmd0O2ZsYWdzKSkKIAkJcmV0dXJuOwogCi0JdG91dCA9IG1wdGNwX3NrKHNrKS0mZ3Q7dGltZXJfaXZhbDsKJiM0MzsJdG91dCA9IG1zay0mZ3Q7dGltZXJfaXZhbDsKIAlza19yZXNldF90aW1lcihzaywgJmFtcDtzay0mZ3Q7bXB0Y3BfcmV0cmFuc21pdF90aW1lciwgamlmZmllcyAmIzQzOyB0b3V0KTsKIH0KIApAQCAtMzMyNCw2ICYjNDM7MzMyNiw5IEBAIHZvaWQgbXB0Y3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlKQogCQkgKiB0cmFuc2l0aW9uIGZyb20gVENQX1NZTl9SRUNWIHRvIFRDUF9DTE9TRV9XQUlULgogCQkgKi8KIAkJYnJlYWs7CiYjNDM7CWNhc2UgVENQX0NMT1NFOgomIzQzOwkJc2V0X2JpdChNUFRDUF9SVFhfRElTQUJMRUQsICZhbXA7bXB0Y3Bfc2soc2spLSZndDtmbGFncyk7CiYjNDM7CQlmYWxsdGhyb3VnaDsKIAlkZWZhdWx0OgogCQlpZiAob2xkc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEIHx8IG9sZHN0YXRlID09IFRDUF9DTE9TRV9XQUlUKQogCQkJTVBUQ1BfREVDX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0NVUlJFU1RBQik7CkBAIC0zODc2LDcgJiM0MzszODgxLDcgQEAgc3RhdGljIHZvaWQgc2NoZWR1bGVfM3JkYWNrX3JldHJhbnNtaXNzaW9uKHN0cnVjdCBzb2NrICpzc2spCiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzc2spOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAotCWlmIChSRUFEX09OQ0UobXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS0mZ3Q7ZnVsbHlfZXN0YWJsaXNoZWQpKQomIzQzOwlpZiAobXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS0mZ3Q7ZnVsbHlfZXN0YWJsaXNoZWQpCiAJCXJldHVybjsKIAogCS8qIHJlc2NoZWR1bGUgd2l0aCBhIHRpbWVvdXQgYWJvdmUgUlRULCBhcyB3ZSBtdXN0IGxvb2sgb25seSBmb3IgZHJvcCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAwNmExMDdkNGU4MzkyLi42YzAwYTgwMzQ0ZjkyIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMTE2LDYgJiM0MzsxMTYsNyBAQAogI2RlZmluZSBNUFRDUF9XT1JLX1JUWAkJMQogI2RlZmluZSBNUFRDUF9GQUxMQkFDS19ET05FCTIKICNkZWZpbmUgTVBUQ1BfV09SS19DTE9TRV9TVUJGTE9XIDMKJiM0MzsjZGVmaW5lIE1QVENQX1JUWF9ESVNBQkxFRAk0CiAKIC8qIE1QVENQIHNvY2tldCByZWxlYXNlIGNiIGZsYWdzICovCiAjZGVmaW5lIE1QVENQX1BVU0hfUEVORElORwkxCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuYwppbmRleCBhZjgxYWQ1ZTY5OWQxLi4wMWRiN2VkY2UxOGE2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9zdWJmbG93LmMKQEAgLTIwODQsNyAmIzQzOzIwODQsNiBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJCW5ld19jdHgtJmd0O3JlcXVlc3RfYmt1cCA9IHN1YmZsb3dfcmVxLSZndDtyZXF1ZXN0X2JrdXA7CiAJCVdSSVRFX09OQ0UobmV3X2N0eC0mZ3Q7cmVtb3RlX2lkLCBzdWJmbG93X3JlcS0mZ3Q7cmVtb3RlX2lkKTsKIAkJbmV3X2N0eC0mZ3Q7dG9rZW4gPSBzdWJmbG93X3JlcS0mZ3Q7dG9rZW47Ci0JCW5ld19jdHgtJmd0O3RobWFjID0gc3ViZmxvd19yZXEtJmd0O3RobWFjOwogCiAJCS8qIHRoZSBzdWJmbG93IHJlcSBpZCBpcyB2YWxpZCwgZmV0Y2hlZCB2aWEgc3ViZmxvd19jaGVja19yZXEoKQogCQkgKiBhbmQgc3ViZmxvd190b2tlbl9qb2luX3JlcXVlc3QoKQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmMKaW5kZXggYjVjYWM1NzAxMTIyMS4uOTQ3NDcwNjY0MWMxMSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jCkBAIC0yNiw3ICYjNDM7MjYsOCBAQCBzdHJ1Y3Qgam9pbl9lbnRyeSB7CiAJdTMyIGxvY2FsX25vbmNlOwogCXU4IGpvaW5faWQ7CiAJdTggbG9jYWxfaWQ7Ci0JdTggYmFja3VwOwomIzQzOwl1OCBiYWNrdXA6MSwKJiM0MzsJICAgcmVxdWVzdF9ia3VwOjE7CiAJdTggdmFsaWQ7CiB9OwogCkBAIC02Myw2ICYjNDM7NjQsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSwKIAllbnRyeS0mZ3Q7cmVtb3RlX25vbmNlID0gc3ViZmxvd19yZXEtJmd0O3JlbW90ZV9ub25jZTsKIAllbnRyeS0mZ3Q7bG9jYWxfbm9uY2UgPSBzdWJmbG93X3JlcS0mZ3Q7bG9jYWxfbm9uY2U7CiAJZW50cnktJmd0O2JhY2t1cCA9IHN1YmZsb3dfcmVxLSZndDtiYWNrdXA7CiYjNDM7CWVudHJ5LSZndDtyZXF1ZXN0X2JrdXAgPSBzdWJmbG93X3JlcS0mZ3Q7cmVxdWVzdF9ia3VwOwogCWVudHJ5LSZndDtqb2luX2lkID0gc3ViZmxvd19yZXEtJmd0O3JlbW90ZV9pZDsKIAllbnRyeS0mZ3Q7bG9jYWxfaWQgPSBzdWJmbG93X3JlcS0mZ3Q7bG9jYWxfaWQ7CiAJZW50cnktJmd0O3ZhbGlkID0gMTsKQEAgLTExNyw2ICYjNDM7MTE5LDcgQEAgYm9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmwKIAlzdWJmbG93X3JlcS0mZ3Q7cmVtb3RlX25vbmNlID0gZS0mZ3Q7cmVtb3RlX25vbmNlOwogCXN1YmZsb3dfcmVxLSZndDtsb2NhbF9ub25jZSA9IGUtJmd0O2xvY2FsX25vbmNlOwogCXN1YmZsb3dfcmVxLSZndDtiYWNrdXAgPSBlLSZndDtiYWNrdXA7CiYjNDM7CXN1YmZsb3dfcmVxLSZndDtyZXF1ZXN0X2JrdXAgPSBlLSZndDtyZXF1ZXN0X2JrdXA7CiAJc3ViZmxvd19yZXEtJmd0O3JlbW90ZV9pZCA9IGUtJmd0O2pvaW5faWQ7CiAJc3ViZmxvd19yZXEtJmd0O2xvY2FsX2lkID0gZS0mZ3Q7bG9jYWxfaWQ7CiAJc3ViZmxvd19yZXEtJmd0O3Rva2VuID0gZS0mZ3Q7dG9rZW47CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYwppbmRleCBlYTRjYjZjMWJkNWUyLi4xNzhkOThkOTFmZWEyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMKQEAgLTM4MSw2ICYjNDM7MzgxLDkgQEAgc3RhdGljIGludCBzb2NrX2Nvbm5lY3RfbXB0Y3AoY29uc3QgY2hhciAqIGNvbnN0IHJlbW90ZWFkZHIsCiAKIAloaW50cy5haV9mYW1pbHkgPSBwZjsKIAomIzQzOwkvKiBLZWVwIHRoZSByZXNvbHZlZCBhZGRyZXNzIGFsaXZlIGZvciB0aGUgd2hvbGUgZXhlY3V0aW9uOiBpdCBpcwomIzQzOwkgKiB1c2VkIGFnYWluIHdoZW4gcmVjb25uZWN0aW5nLCBhbmQgd2lsbCBiZSByZWxlYXNlZCBhdCBleGl0IHRpbWUuCiYjNDM7CSAqLwogCXhnZXRhZGRyaW5mbyhyZW1vdGVhZGRyLCBwb3J0LCAmYW1wO2hpbnRzLCAmYW1wO2FkZHIpOwogCWZvciAoYSA9IGFkZHI7IGE7IGEgPSBhLSZndDthaV9uZXh0KSB7CiAJCXNvY2sgPSBzb2NrZXQoYS0mZ3Q7YWlfZmFtaWx5LCBhLSZndDthaV9zb2NrdHlwZSwgcHJvdG8pOwpAQCAtNDIxLDcgJiM0Mzs0MjQsNiBAQCBzdGF0aWMgaW50IHNvY2tfY29ubmVjdF9tcHRjcChjb25zdCBjaGFyICogY29uc3QgcmVtb3RlYWRkciwKIAkJc29jayA9IC0xOwogCX0KIAotCWZyZWVhZGRyaW5mbyhhZGRyKTsKIAlpZiAoc29jayAhPSAtMSkKIAkJU09DS19URVNUX1RDUFVMUChzb2NrLCBwcm90byk7CiAJcmV0dXJuIHNvY2s7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2xpYi5zaAppbmRleCA1ZWY2MDMzNzc1Yzg2Li5iOWQxNDY0N2Y0MDE5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9saWIuc2gKQEAgLTEwOCwxMiAmIzQzOzEwOCwxNCBAQCBtcHRjcF9saWJfcHJfaW5mbygpIHsKIAogbXB0Y3BfbGliX3ByX25zdGF0KCkgewogCWxvY2FsIG5zPSYjMzQ7JHsxfSYjMzQ7Ci0JbG9jYWwgaGlzdD0mIzM0Oy90bXAvJHtuc30ub3V0JiMzNDsKJiM0MzsJbG9jYWwgY2FjaGU9JiMzNDsvdG1wLyR7bnN9Lm91dCYjMzQ7CiYjNDM7CWxvY2FsIGhpc3Q9JiMzNDsvdG1wLyR7bnN9Lm5zdGF0JiMzNDsKIAotCWlmIFsgLWYgJiMzNDske2hpc3R9JiMzNDsgXTsgdGhlbgotCQlhd2sgJiMzOTskMiAhPSAwIHsgcHJpbnQgJiMzNDsgICYjMzQ7JDAgfSYjMzk7ICYjMzQ7JHtoaXN0fSYjMzQ7CiYjNDM7CWlmIFsgLWYgJiMzNDske2NhY2hlfSYjMzQ7IF07IHRoZW4KJiM0MzsJCWF3ayAmIzM5OyQyICE9IDAgeyBwcmludCAmIzM0OyAgJiMzNDskMCB9JiMzOTsgJiMzNDske2NhY2hlfSYjMzQ7CiAJZWxzZQotCQlpcCBuZXRucyBleGVjICYjMzQ7JHtuc30mIzM0OyBuc3RhdCAtYXMgfCBncmVwIFRjcAomIzQzOwkJTlNUQVRfSElTVE9SWT0mIzM0OyR7aGlzdH0mIzM0OyBpcCBuZXRucyBleGVjICYjMzQ7JHtuc30mIzM0OyBuc3RhdCAtcyB8CiYjNDM7CQkJZ3JlcCBUY3AKIAlmaQogfQogCkBAIC00MTQsMTkgJiM0Mzs0MTYsMjEgQEAgbXB0Y3BfbGliX25zdGF0X2dldCgpIHsKIH0KIAogIyAkMTogbnMsICQyOiBNSUIgY291bnRlcgotIyBHZXQgdGhlIGNvdW50ZXIgZnJvbSB0aGUgaGlzdG9yeSAobXB0Y3BfbGliX25zdGF0X3tpbml0LGdldH0oKSkgaWYgYXZhaWxhYmxlLgotIyBJZiBub3QsIGdldCB0aGUgY291bnRlciBmcm9tIG5zdGF0IGlnbm9yaW5nIGFueSBoaXN0b3J5LgomIzQzOyMgR2V0IHRoZSBjb3VudGVyIGZyb20gdGhlIGNhY2hlIChtcHRjcF9saWJfbnN0YXRfe2luaXQsZ2V0fSgpKSBpZiBhdmFpbGFibGUuCiYjNDM7IyBJZiBub3QsIGdldCB0aGUgY291bnRlciBmcm9tIG5zdGF0IGlnbm9yaW5nIGFueSBjYWNoZSwgYnV0IHVzaW5nIHRoZSBoaXN0b3J5LgogbXB0Y3BfbGliX2dldF9jb3VudGVyKCkgewogCWxvY2FsIG5zPSYjMzQ7JHsxfSYjMzQ7CiAJbG9jYWwgY291bnRlcj0mIzM0OyR7Mn0mIzM0OwotCWxvY2FsIGhpc3Q9JiMzNDsvdG1wLyR7bnN9Lm91dCYjMzQ7CiYjNDM7CWxvY2FsIGNhY2hlPSYjMzQ7L3RtcC8ke25zfS5vdXQmIzM0OwomIzQzOwlsb2NhbCBoaXN0PSYjMzQ7L3RtcC8ke25zfS5uc3RhdCYjMzQ7CiAJbG9jYWwgY291bnQKIAotCWlmIFtbIC1zICYjMzQ7JHtoaXN0fSYjMzQ7ICZhbXA7JmFtcDsgJiMzNDske2NvdW50ZXJ9JiMzNDsgPT0gKiYjMzQ7VGNwJiMzNDsqIF1dOyB0aGVuCi0JCWNvdW50PSQoYXdrICYjMzQ7L14ke2NvdW50ZXJ9IC8ge3ByaW50IFwkMjsgZXhpdH0mIzM0OyAmIzM0OyR7aGlzdH0mIzM0OykKJiM0MzsJaWYgW1sgLXMgJiMzNDske2NhY2hlfSYjMzQ7ICZhbXA7JmFtcDsgJiMzNDske2NvdW50ZXJ9JiMzNDsgPT0gKiYjMzQ7VGNwJiMzNDsqIF1dOyB0aGVuCiYjNDM7CQljb3VudD0kKGF3ayAmIzM0Oy9eJHtjb3VudGVyfSAvIHtwcmludCBcJDI7IGV4aXR9JiMzNDsgJiMzNDske2NhY2hlfSYjMzQ7KQogCWVsc2UKLQkJY291bnQ9JChpcCBuZXRucyBleGVjICYjMzQ7JHtuc30mIzM0OyBuc3RhdCAtYXN6ICYjMzQ7JHtjb3VudGVyfSYjMzQ7IHwKLQkJCWF3ayAmIzM5O05SPT0xIHtuZXh0fSB7cHJpbnQgJDJ9JiMzOTspCiYjNDM7CQljb3VudD0kKE5TVEFUX0hJU1RPUlk9JiMzNDske2hpc3R9JiMzNDsgaXAgbmV0bnMgZXhlYyAmIzM0OyR7bnN9JiMzNDsgXAomIzQzOwkJCW5zdGF0IC1zeiAmIzM0OyR7Y291bnRlcn0mIzM0OyB8CiYjNDM7CQkJCWF3ayAmIzM5O05SPT0xIHtuZXh0fSB7cHJpbnQgJDJ9JiMzOTspCiAJZmkKIAlpZiBbIC16ICYjMzQ7JHtjb3VudH0mIzM0OyBdOyB0aGVuCiAJCW1wdGNwX2xpYl9mYWlsX2lmX2V4cGVjdGVkX2ZlYXR1cmUgJiMzNDske2NvdW50ZXJ9IGNvdW50ZXImIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb246IE1QVENQIFBhdGNoIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGlzIHRhcmdldHMgTVBUQ1AsIHNvIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2AuIFRoZSBhZGRpdGlvbiBvZiBgb3BzaXplICZsdDsgVENQT0xFTl9NUFRDUF9NUENfQUNLX0RBVEFgIGluIGBtcHRjcF9wYXJzZV9vcHRpb25gIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYm91bmRzIGNoZWNraW5nIGlzIGFsd2F5cyB3ZWxjb21lLiBUaGUgcmVtb3ZhbCBvZiBgUkVBRF9PTkNFYCBmcm9tIGBzdWJmbG93LSZndDtmdWxseV9lc3RhYmxpc2hlZGAgZG9lc24mIzM5O3Qgc2NyZWFtIHZ1bG5lcmFiaWxpdHksIGJ1dCB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBtZW1vcnkgbW9kZWwgaW1wbGljYXRpb25zLiBCdXQgdGhhdCBgZXh0LSZndDtjc3VtID0gMDtgIGluIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAuLi4gdGhhdCYjMzk7cyB0aGUgaW50ZXJlc3Rpbmcgb25lLiAgYGV4dGAgaXMgYSBwb2ludGVyIHRvIGBzdHJ1Y3QgbXB0Y3BfZXh0YCwgYW5kIHdlJiMzOTtyZSAqaW5pdGlhbGl6aW5nKiBgY3N1bWAuIElzIHRoaXMgYSBmaXggZm9yIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mbyBsZWFrPyBUaGUgY29uY2VybiBpcywgaWYgYGNzdW1gIHdhcyB1bmluaXRpYWxpemVkIGJlZm9yZSwgaXQgY291bGQgaGF2ZSBiZWVuIHNlbnQgb3ZlciB0aGUgbmV0d29yayBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuICBTaW5jZSBpdCYjMzk7cyBhIGNoZWNrc3VtIGZpZWxkLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGludm9sdmVkIGluIG5ldHdvcmsgY29tbXVuaWNhdGlvbiwgYmVjYXVzZSBNUFRDUCBvcHRpb25zIGFyZSB3cml0dGVuIHRvIHRoZSBUQ1AgaGVhZGVyLiAgSWYgaXQgd2FzIHVuaW5pdGlhbGl6ZWQgYmVmb3JlLCBpdCB3b3VsZCBoYXZlIGJlZW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgKnJlYWQqIHdoZW4gd3JpdGluZyB0aGUgVENQIG9wdGlvbi4gIEkgbmVlZCB0byBkaWcgaW50byBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gIGFuZCB2ZXJpZnkgaG93IGBleHRgIGlzIG9idGFpbmVkIGFuZCBpZiB0aGlzIGluaXRpYWxpemF0aW9uIGFjdHVhbGx5IHJlc29sdmVzIGEgcG90ZW50aWFsIGlzc3VlLgoKTW92aW5nIG9uIHRvIGBuZXQvbXB0Y3AvcG0uY2AsIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgIGhhcyBhIHNpbXBsZSByZW9yZGVyaW5nIHdoaWNoIGlzIHVubGlrZWx5IHRvIGJlIHNlY3VyaXR5IHJlbGV2YW50LCBidXQgd2Ugc2hvdWxkIGFsd2F5cyBjaGVjayB0aGUgY2hhbmdlcy4gIEluIGBuZXQvbXB0Y3AvcG1fa2VybmVsLmNgLCB0aGUgY2hhbmdlcyB3aXRoaW4gYG1wdGNwX25sX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3NgIHJhaXNlIGEgcXVlc3Rpb24gYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBtc2tfbG9jYWxgLiBJcyBpdCBpbml0aWFsaXplZCBiZWZvcmUgYGFubm9fYWRkciA9IG1za19sb2NhbDsgYW5ub19hZGRyLnBvcnQgPSAwOyBhbm5vdW5jZWQgPSBtcHRjcF9wbV9hbm5vdW5jZWRfcmVtb3ZlKG1zaywgJmFtcDthbm5vX2FkZHIpO2AgaXMgY2FsbGVkPyBHb3R0YSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0aGVyZS4gIGBuZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNgLCBpcyBtb2RpZnlpbmcgaG93IGBpZGAgaXMgYWxsb2NhdGVkLiBUaGF0JiMzOTtzIHdvcnRoIGEgcXVpY2sgbG9vayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgb2ZmLWJ5LW9uZSBlcnJvcnMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbiBpc3N1ZXMgaW50cm9kdWNlZC4KCk5vdywgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBzaG93cyBhIGZldyBjaGFuZ2VzOiBzZXR0aW5nIGBNUFRDUF9SVFhfRElTQUJMRURgIGluIGEgZmV3IHBsYWNlcywgYWx0ZXJpbmcgYGxpa2VseS91bmxpa2VseWAgd2hpY2ggcHJvYmFibHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIFRoZSBjaGFuZ2UgaW4gYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiAgVGhleSYjMzk7cmUgc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZWAgYW5kIGBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcWAgcmVhZHMuIFRoZXkgYXJlIG1vdmluZyBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgICphZnRlciogcmVhZGluZyBgc2VxYCwgYGVuZF9zZXFgLCBgbWF4X3NlcWAgYW5kIGNoZWNraW5nIGBhZnRlcihzZXEsIG1heF9zZXEpYC4gVGhhdCB3YXJyYW50cyBjbG9zZXIgc2NydXRpbnksIGFzIGl0IGNvdWxkIGJlIGEgc3VidGxlIGRhdGEgcmFjZSBvciBpbmNvcnJlY3Qgc2NoZWR1bGluZyBzY2VuYXJpby4gYG1wdGNwX3Jlc2V0X3J0eF90aW1lcmAgY2hlY2tzIGBNUFRDUF9SVFhfRElTQUJMRURgLCB3aGljaCBzaG91bGQgYmUgZmluZS4gTGlrZXdpc2UsIHNldHRpbmcgYE1QVENQX1JUWF9ESVNBQkxFRGAgb24gYFRDUF9DTE9TRWAgaW4gYG1wdGNwX3NldF9zdGF0ZWAgaXMgcHJvYmFibHkgb2theS4gIFJlbW92aW5nIGBSRUFEX09OQ0VgIGluIGBzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb25gIHNob3VsZCBiZSB2ZXJpZmllZCBmb3IgcG90ZW50aWFsIG1lbW9yeSBtb2RlbCBpc3N1ZXMuCgpgbmV0L21wdGNwL3N1YmZsb3cuY2AgcmVtb3ZlcyBgbmV3X2N0eC0mZ3Q7dGhtYWMgPSBzdWJmbG93X3JlcS0mZ3Q7dGhtYWM7YCBpbiBgc3ViZmxvd191bHBfY2xvbmVgLiBTZWVtcyBsaWtlIGEgY2xlYW51cC4gTm8gaW1tZWRpYXRlIGFsYXJtcy4gIGBuZXQvbXB0Y3Avc3luY29va2llcy5jYCBjaGFuZ2VzIHRoZSBgam9pbl9lbnRyeWAgc3RydWN0IGFuZCBhZGRzL21vZGlmaWVzIGEgZmV3IGxpbmVzIHdoaWNoIGlzIGxpa2VseSByZWxhdGVkIHRvIGNvb2tpZSBzdGF0ZSBtYW5hZ2VtZW50LiAgTmVlZCB0byBjb25maXJtIHRoYXQgY2hhbmdlcyB0byB0aGUgYGJhY2t1cGAgYW5kIGByZXF1ZXN0X2JrdXBgIGZpZWxkcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgdG8gcHJldmVudCBhbnkgbG9naWMgZXJyb3JzLgoKRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiB0ZXN0IGNoYW5nZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmNgIGFuZCBgbXB0Y3BfbGliLnNoYCBpcyBlbmNvdXJhZ2luZy4gVGhhdCBtZWFucyB0aGVyZSYjMzk7cyBhIGJhc2VsaW5lIHRvIGp1ZGdlIHRoZSBpbXBhY3QuCgpTbywgdGhlIGtleSBhcmVhcyBmb3IgS01TQU4gZnV6emluZywgYmFzZWQgb24gbXkgaW5pdGlhbCByZXZpZXcsIGFyZToKMS4gYGV4dC0mZ3Q7Y3N1bSA9IDA7YCBpbiBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gOiBIaWdoIHByaW9yaXR5LiBUaGlzIGhhcyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgZmluZGluZyBhbiBpbml0aWFsaXphdGlvbiBwcm9ibGVtLgoyLiBgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfd3JpdGVfZGF0YV9maW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmM9NTEzPXN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNTk2LVxubmV0L21wdGNwL29wdGlvbnMuYzo1OTc6c3RhdGljIHZvaWQgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTk4LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtcHRjcF9leHQgKmV4dClcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTYyNj1zdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy02NTQtXHRcdGlmIChza2IgXHUwMDI2XHUwMDI2IHNuZF9kYXRhX2Zpbl9lbmFibGUpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjY1NTpcdFx0XHRtcHRjcF93cml0ZV9kYXRhX2ZpbihzdWJmbG93LCBza2IsIFx1MDAyNm9wdHMtXHUwMDNlZXh0X2NvcHkpO1xubmV0L21wdGNwL29wdGlvbnMuYy02NTYtXHRcdG9wdHMtXHUwMDNlc3Vib3B0aW9ucyA9IE9QVElPTl9NUFRDUF9EU1M7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhlIE1QVENQIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gIEZ1bmN0aW9uIENhbGwqKgoKQWxyaWdodCwgc28gYG1wdGNwX3dyaXRlX2RhdGFfZmluYCBpcyBiZWluZyBpbnZva2VkLCBhbmQgaXQmIzM5O3MgcGFzc2luZyBpbiB0aGUgYWRkcmVzcyBvZiBgb3B0cy0mZ3Q7ZXh0X2NvcHlgIGFzIGFuIGFyZ3VtZW50LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB2ZXJpZnlpbmcgaG93IHRoaXMgZml0cyB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlIG9mIGVzdGFibGlzaGVkIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcsIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7T2theSwgbGV0JiMzOTtzIGNvcnJlbGF0ZSB0aGlzIHdpdGggdGhlIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc2AgZnVuY3Rpb24gYW5kIHdoYXQgYG9wdHMtJmd0O2V4dF9jb3B5YCBhY3R1YWxseSAqcmVwcmVzZW50cyogYXQgdGhpcyBwb2ludC4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29ubmVjdGlvbiBzdGF0ZS4gSSYjMzk7bSBjaGVja2luZywgaXMgYG9wdHMtJmd0O2V4dF9jb3B5YCBob2xkaW5nIHRoZSBleHBlY3RlZCBkYXRhIHJlZ2FyZGluZyB0aGUgbmVnb3RpYXRlZCBleHRlbnNpb25zPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJvbGUgaXQgcGxheXMgaW4gdGhlIGZsb3cgYW5kIGRldGVybWluZSBpZiB0aGVyZSBtaWdodCBiZSBhbnkgcG90ZW50aWFsIGluY29uc2lzdGVuY2llcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyBJIHNob3VsZCBsb29rIGZvci4gVGhpcyBwYXJ0aWN1bGFyIGNhbGwgd2l0aCB0aGlzIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGlzIGEga2V5IGp1bmN0dXJlIHRvIGFuYWx5emUuIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhlc2UgdHdvIGRhdGEgc3RydWN0dXJlcyBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmM9NTEzPXN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNTI2LVx0ICogdGVsbCB0aGUgY2FsbGVyIHRvIGRlZmVyIHRoZSBlc3RpbWF0ZSB0b1xubmV0L21wdGNwL29wdGlvbnMuYzo1Mjc6XHQgKiBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcygpLCB3aGljaCB3aWxsIHJlc2VydmUgZW5vdWdoIHNwYWNlLlxubmV0L21wdGNwL29wdGlvbnMuYy01MjgtXHQgKi9cbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTU5Nz1zdGF0aWMgdm9pZCBtcHRjcF93cml0ZV9kYXRhX2ZpbihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNjI1LVxubmV0L21wdGNwL29wdGlvbnMuYzo2MjY6c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21wdGNwL29wdGlvbnMuYy02MjctXHRcdFx0XHRcdCAgYm9vbCBzbmRfZGF0YV9maW5fZW5hYmxlLCBpbnQgKnNpemUsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz04NzI9aW50IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTA3LVx0XHRyZXQgPSB0cnVlO1xubmV0L21wdGNwL29wdGlvbnMuYzo5MDg6XHRlbHNlIGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzcyhzaywgc2tiLCBzbmRfZGF0YV9maW4sIFx1MDAyNm9wdF9zaXplLCBvcHRzKSkge1xubmV0L21wdGNwL29wdGlvbnMuYy05MDktXHRcdGludCBtcF9mYWlsX3NpemU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTk2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBxdWl0ZSBmYW1pbGlhciB3aXRoIG5ldHdvcmtpbmcgYW5kIE1QVENQIGludGVybmFsczoKCioqRGl2aW5nIGludG8gYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHRob3VnaHQgcHJvY2VzcyB3ZW50IHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBNUFRDUCYjMzk7cyBlc3RhYmxpc2hlZCBvcHRpb25zIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHksIHRoZSBEYXRhIFNlcXVlbmNlIFNpemUgKERTUykgb3B0aW9uLiBTbywgdGhlIGRpcmVjdCByb3V0ZSBpcyB0byBsb29rIGF0IGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc2Agd2l0aGluIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGlzIGZlYXR1cmUuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgaG93IERTUyBpcyBuZWdvdGlhdGVkIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGhvdyBpdCYjMzk7cyBzdG9yZWQgYW5kIG1hbmFnZWQgb24gZXN0YWJsaXNoZWQgY29ubmVjdGlvbnMsIGFuZCBob3cgaXQgaW1wYWN0cyBkYXRhIHRyYW5zbWlzc2lvbi4gS25vd2luZyB0aGUgZXhhY3QgY29kZSBsb2NhdGlvbiBnaXZlcyBtZSBhIHZlcnkgZWZmaWNpZW50IHN0YXJ0aW5nIHBvaW50IGZvciBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nLCBvciByZWZyZXNoaW5nIG15IG1lbW9yeSBvZiwgdGhlIGZpbmUgZGV0YWlscyBvZiB0aGUgRFNTIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyNjpcdHN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA2Mjc6XHRcdFx0XHRcdFx0ICBib29sIHNuZF9kYXRhX2Zpbl9lbmFibGUsIGludCAqc2l6ZSxcbiA2Mjg6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG4gNjI5Olx0e1xuIDYzMDpcdFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTtcbiA2MzE6XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuIDYzMjpcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gNjMzOlx0XHR1bnNpZ25lZCBpbnQgZHNzX3NpemUgPSAwO1xuIDYzNDpcdFx0c3RydWN0IG1wdGNwX2V4dCAqbXBleHQ7XG4gNjM1Olx0XHR1bnNpZ25lZCBpbnQgYWNrX3NpemU7XG4gNjM2Olx0XHRib29sIHJldCA9IGZhbHNlO1xuIDYzNzpcdFxuIDYzODpcdFx0LyogWmVybyBgdXNlX2Fja2AgYW5kIGB1c2VfbWFwYCBmbGFncyB3aXRoIG9uZSBzaG90LiAqL1xuIDYzOTpcdFx0bWVtc2V0KFx1MDAyNm9wdHMtXHUwMDNlZXh0X2NvcHkuZmxhZ3MsIDAsIHNpemVvZihvcHRzLVx1MDAzZWV4dF9jb3B5LmZsYWdzKSk7XG4gNjQwOlx0XHRvcHRzLVx1MDAzZWNzdW1fcmVxZCA9IFJFQURfT05DRShtc2stXHUwMDNlY3N1bV9lbmFibGVkKTtcbiA2NDE6XHRcdG1wZXh0ID0gc2tiID8gbXB0Y3BfZ2V0X2V4dChza2IpIDogTlVMTDtcbiA2NDI6XHRcbiA2NDM6XHRcdGlmICghc2tiIHx8IChtcGV4dCBcdTAwMjZcdTAwMjYgbXBleHQtXHUwMDNldXNlX21hcCkgfHwgc25kX2RhdGFfZmluX2VuYWJsZSkge1xuIDY0NDpcdFx0XHR1bnNpZ25lZCBpbnQgbWFwX3NpemUgPSBUQ1BPTEVOX01QVENQX0RTU19CQVNFICYjNDM7IFRDUE9MRU5fTVBUQ1BfRFNTX01BUDY0O1xuIDY0NTpcdFxuIDY0NjpcdFx0XHRpZiAobXBleHQpIHtcbiA2NDc6XHRcdFx0XHRpZiAob3B0cy1cdTAwM2Vjc3VtX3JlcWQpXG4gNjQ4Olx0XHRcdFx0XHRtYXBfc2l6ZSAmIzQzOz0gVENQT0xFTl9NUFRDUF9EU1NfQ0hFQ0tTVU07XG4gNjQ5Olx0XG4gNjUwOlx0XHRcdFx0b3B0cy1cdTAwM2VleHRfY29weSA9ICptcGV4dDtcbiA2NTE6XHRcdFx0fVxuIDY1MjpcdFxuIDY1MzpcdFx0XHRkc3Nfc2l6ZSA9IG1hcF9zaXplO1xuIDY1NDpcdFx0XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiBzbmRfZGF0YV9maW5fZW5hYmxlKVxuIDY1NTpcdFx0XHRcdG1wdGNwX3dyaXRlX2RhdGFfZmluKHN1YmZsb3csIHNrYiwgXHUwMDI2b3B0cy1cdTAwM2VleHRfY29weSk7XG4gNjU2Olx0XHRcdG9wdHMtXHUwMDNlc3Vib3B0aW9ucyA9IE9QVElPTl9NUFRDUF9EU1M7XG4gNjU3Olx0XHRcdHJldCA9IHRydWU7XG4gNjU4Olx0XHR9XG4gNjU5Olx0XG4gNjYwOlx0XHQvKiBwYXNzaXZlIHNvY2tldHMgbXNrIHdpbGwgc2V0IHRoZSAmIzM5O2Nhbl9hY2smIzM5OyBhZnRlciBhY2NlcHQoKSwgZXZlblxuIDY2MTpcdFx0ICogaWYgdGhlIGZpcnN0IHN1YmZsb3cgbWF5IGhhdmUgdGhlIGFscmVhZHkgdGhlIHJlbW90ZSBrZXkgaGFuZHlcbiA2NjI6XHRcdCAqL1xuIDY2MzpcdFx0aWYgKCFSRUFEX09OQ0UobXNrLVx1MDAzZWNhbl9hY2spKSB7XG4gNjY0Olx0XHRcdCpzaXplID0gQUxJR04oZHNzX3NpemUsIDQpO1xuIDY2NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDY2NjpcdFx0fVxuIDY2NzpcdFxuIDY2ODpcdFx0aWYgKFJFQURfT05DRShtc2stXHUwMDNldXNlXzY0Yml0X2FjaykpIHtcbiA2Njk6XHRcdFx0YWNrX3NpemUgPSBUQ1BPTEVOX01QVENQX0RTU19BQ0s2NDtcbiA2NzA6XHRcdFx0b3B0cy1cdTAwM2VleHRfY29weS5hY2s2NCA9IDE7XG4gNjcxOlx0XHR9IGVsc2Uge1xuIDY3MjpcdFx0XHRhY2tfc2l6ZSA9IFRDUE9MRU5fTVBUQ1BfRFNTX0FDSzMyO1xuIDY3MzpcdFx0XHRvcHRzLVx1MDAzZWV4dF9jb3B5LmFjazY0ID0gMDtcbiA2NzQ6XHRcdH1cbiA2NzU6XHRcdG9wdHMtXHUwMDNlZXh0X2NvcHkudXNlX2FjayA9IDE7XG4gNjc2Olx0XHRvcHRzLVx1MDAzZXN1Ym9wdGlvbnMgPSBPUFRJT05fTVBUQ1BfRFNTO1xuIDY3NzpcdFxuIDY3ODpcdFx0LyogQWRkIGtpbmQvbGVuZ3RoL3N1YnR5cGUvZmxhZyBvdmVyaGVhZCBpZiBtYXBwaW5nIGlzIG5vdCBwb3B1bGF0ZWQgKi9cbiA2Nzk6XHRcdGlmIChkc3Nfc2l6ZSA9PSAwKVxuIDY4MDpcdFx0XHRhY2tfc2l6ZSAmIzQzOz0gVENQT0xFTl9NUFRDUF9EU1NfQkFTRTtcbiA2ODE6XHRcbiA2ODI6XHRcdC8qIFRoZSBjYWxsZXIgaXMgX190Y3BfdHJhbnNtaXRfc2tiKCksIGFuZCB3aWxsIGNvbXB1dGUgdGhlIG5ldyByY3ZcbiA2ODM6XHRcdCAqIHduZCBzb29uOiBlbnN1cmUgdGhhdCB0aGUgd2luZG93IGNhbiBzaHJpbmsuXG4gNjg0Olx0XHQgKi9cbiA2ODU6XHRcdGlmIChza2IpXG4gNjg2Olx0XHRcdHRwLVx1MDAzZXJjdl93bmQgPSB0cC1cdTAwM2VyY3Zfbnh0IC0gdHAtXHUwMDNlcmN2X3d1cDtcbiA2ODc6XHRcbiA2ODg6XHRcdGRzc19zaXplICYjNDM7PSBhY2tfc2l6ZTtcbiA2ODk6XHRcbiA2OTA6XHRcdCpzaXplID0gQUxJR04oZHNzX3NpemUsIDQpO1xuIDY5MTpcdFx0cmV0dXJuIHRydWU7XG4gNjkyOlx0fVxuIDY5MzpcdFxuIDY5NDpcdHN0YXRpYyB1NjQgYWRkX2FkZHJfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsXG4gNjk1Olx0XHRcdFx0XHQgIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpXG4gNjk2Olx0e1xuIDY5NzpcdFx0dTE2IHBvcnQgPSBudG9ocyhhZGRyLVx1MDAzZXBvcnQpO1xuIDY5ODpcdFx0dTggaG1hY1tTSEEyNTZfRElHRVNUX1NJWkVdO1xuIDY5OTpcdFx0dTggbXNnWzE5XTtcbiA3MDA6XHRcdGludCBpID0gMDtcbiA3MDE6XHRcbiA3MDI6XHRcdG1zZ1tpJiM0MzsmIzQzO10gPSBhZGRyLVx1MDAzZWlkO1xuIDcwMzpcdFx0aWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQpIHtcbiA3MDQ6XHRcdFx0bWVtY3B5KFx1MDAyNm1zZ1tpXSwgXHUwMDI2YWRkci1cdTAwM2VhZGRyLnNfYWRkciwgNCk7XG4gNzA1Olx0XHRcdGkgJiM0Mzs9IDQ7XG4gNzA2Olx0XHR9XG4gNzA3Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG4gNzA4Olx0XHRlbHNlIGlmIChhZGRyLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNikge1xuIDcwOTpcdFx0XHRtZW1jcHkoXHUwMDI2bXNnW2ldLCBcdTAwMjZhZGRyLVx1MDAzZWFkZHI2LnM2X2FkZHIsIDE2KTtcbiA3MTA6XHRcdFx0aSAmIzQzOz0gMTY7XG4gNzExOlx0XHR9XG4gNzEyOlx0I2VuZGlmXG4gNzEzOlx0XHRtc2dbaSYjNDM7JiM0MztdID0gcG9ydCBcdTAwM2VcdTAwM2UgODtcbiA3MTQ6XHRcdG1zZ1tpJiM0MzsmIzQzO10gPSBwb3J0IFx1MDAyNiAweEZGO1xuIDcxNTpcdFxuIDcxNjpcdFx0bXB0Y3BfY3J5cHRvX2htYWNfc2hhKGtleTEsIGtleTIsIG1zZywgaSwgaG1hYyk7XG4gNzE3Olx0XG4gNzE4Olx0XHRyZXR1cm4gZ2V0X3VuYWxpZ25lZF9iZTY0KFx1MDAyNmhtYWNbU0hBMjU2X0RJR0VTVF9TSVpFIC0gc2l6ZW9mKHU2NCldKTtcbiA3MTk6XHR9XG4gNzIwOlx0XG4gNzIxOlx0c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19hZGRfYWRkcihzdHJ1Y3Qgc29jayAqc2ssXG4gNzIyOlx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnNpemUsXG4gNzIzOlx0XHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxuIDcyNDpcdFx0XHRcdFx0XHQgICAgICAgYm9vbCBoYXNfdHMsXG4gNzI1Olx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmNlcm5zIFJlZ2FyZGluZyBEU1MgT3B0aW9ucyBpbiBNUFRDUCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3NgIGZ1bmN0aW9uIGFuZCBmb2N1c2luZyBvbiBob3cgdGhlIERTUyBvcHRpb25zIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IGBvcHRzLSZndDtleHRfY29weWAgaXMgaW5pdGlhbGl6ZWQgYXMgYSBjb3B5IG9mIGAqbXBleHRgIGlmIGBtcGV4dGAgaXNuJiMzOTt0IE5VTEwuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCB0aGVuLCBJIHJlYWxpemUgdGhhdCBpZiBgbXBleHRgICppcyogTlVMTCwgYG9wdHMtJmd0O2V4dF9jb3B5YCBpc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXQgYWxsISBJdCYjMzk7cyBqdXN0IGxlZnQgZGFuZ2xpbmcuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgcHJvYmxlbSByaWdodCB0aGVyZS4KClRoZW4gSSBnZXQgZGlzdHJhY3RlZCBieSBzZWVpbmcgYG1lbXNldGAgb2YgdGhlIGZsYWdzLiBUaGF0IHplcm9lcyB0aG9zZS4gQnV0IHdoYXQgYWJvdXQgdGhlICpyZXN0KiBvZiB0aGUgc3RydWN0dXJlPyBJZiBgbXBleHRgIGlzIE5VTEwsIGFsbCB0aGUgb3RoZXIgZmllbGRzIGluIGBvcHRzLSZndDtleHRfY29weWAgY291bGQgY29udGFpbiBnYXJiYWdlLiBUaGF0JiMzOTtzIG5vdCBnb29kLiBXZSYjMzk7cmUgcmVseWluZyBvbiBgb3B0cy0mZ3Q7ZXh0X2NvcHlgIGxhdGVyLgoKQW5kIHRoZW4gSSBjYXRjaCBteXNlbGY7IHRoZSBmdW5jdGlvbiBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gICp0YWtlcyogYCZhbXA7b3B0cy0mZ3Q7ZXh0X2NvcHlgLCBhbmQgSSBzZWUgdGhhdCBpdCBtb2RpZmllcyBpdCwgaXQgc2VlbXMgbGlrZSB0aGUgbGFjayBvZiBpbml0aWFsaXphdGlvbiBpcyBhIHJlYWwgYnVnIGhlcmUuIFRoYXQmIzM5O3MgY3JpdGljYWwgYmVjYXVzZSB3ZSYjMzk7cmUgcGFzc2luZyBpdCBieSByZWZlcmVuY2UuIEkgdGhpbmsgSSBuZWVkIHRvIGRpZyBpbnRvIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAgcmlnaHQgYXdheSBhbmQgc2VlIHdoYXQgaXQgZXhwZWN0cyBhbmQgaWYgaXQgY2FuIGhhbmRsZSBhbiB1bmluaXRpYWxpemVkIGBvcHRzLSZndDtleHRfY29weWAuIFRoaXMgbmVlZHMgYSBjbG9zZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3Avb3B0aW9ucy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTc6XHRzdGF0aWMgdm9pZCBtcHRjcF93cml0ZV9kYXRhX2ZpbihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxuIDU5ODpcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtcHRjcF9leHQgKmV4dClcbiA1OTk6XHR7XG4gNjAwOlx0XHQvKiBUaGUgd3JpdGVfc2VxIHZhbHVlIGhhcyBhbHJlYWR5IGJlZW4gaW5jcmVtZW50ZWQsIHNvIHRoZSBhY3R1YWxcbiA2MDE6XHRcdCAqIHNlcXVlbmNlIG51bWJlciBmb3IgdGhlIERBVEFfRklOIGlzIG9uZSBsZXNzLlxuIDYwMjpcdFx0ICovXG4gNjAzOlx0XHR1NjQgZGF0YV9maW5fdHhfc2VxID0gUkVBRF9PTkNFKG1wdGNwX3NrKHN1YmZsb3ctXHUwMDNlY29ubiktXHUwMDNld3JpdGVfc2VxKSAtIDE7XG4gNjA0Olx0XG4gNjA1Olx0XHRpZiAoIWV4dC1cdTAwM2V1c2VfbWFwIHx8ICFza2ItXHUwMDNlbGVuKSB7XG4gNjA2Olx0XHRcdC8qIFJGQzY4MjQgcmVxdWlyZXMgYSBEU1MgbWFwcGluZyB3aXRoIHNwZWNpZmljIHZhbHVlc1xuIDYwNzpcdFx0XHQgKiBpZiBEQVRBX0ZJTiBpcyBzZXQgYnV0IG5vIGRhdGEgcGF5bG9hZCBpcyBtYXBwZWRcbiA2MDg6XHRcdFx0ICovXG4gNjA5Olx0XHRcdGV4dC1cdTAwM2VkYXRhX2ZpbiA9IDE7XG4gNjEwOlx0XHRcdGV4dC1cdTAwM2V1c2VfbWFwID0gMTtcbiA2MTE6XHRcdFx0ZXh0LVx1MDAzZWRzbjY0ID0gMTtcbiA2MTI6XHRcdFx0ZXh0LVx1MDAzZWRhdGFfc2VxID0gZGF0YV9maW5fdHhfc2VxO1xuIDYxMzpcdFx0XHRleHQtXHUwMDNlc3ViZmxvd19zZXEgPSAwO1xuIDYxNDpcdFx0XHRleHQtXHUwMDNlZGF0YV9sZW4gPSAxO1xuIDYxNTpcdFx0XHRleHQtXHUwMDNlY3N1bSA9IDA7XG4gNjE2Olx0XHR9IGVsc2UgaWYgKGV4dC1cdTAwM2VkYXRhX3NlcSAmIzQzOyBleHQtXHUwMDNlZGF0YV9sZW4gPT0gZGF0YV9maW5fdHhfc2VxKSB7XG4gNjE3Olx0XHRcdC8qIElmIHRoZXJlJiMzOTtzIGFuIGV4aXN0aW5nIERTUyBtYXBwaW5nIGFuZCBpdCBpcyB0aGVcbiA2MTg6XHRcdFx0ICogZmluYWwgbWFwcGluZywgREFUQV9GSU4gY29uc3VtZXMgMSBhZGRpdGlvbmFsIGJ5dGUgb2ZcbiA2MTk6XHRcdFx0ICogbWFwcGluZyBzcGFjZS5cbiA2MjA6XHRcdFx0ICovXG4gNjIxOlx0XHRcdGV4dC1cdTAwM2VkYXRhX2ZpbiA9IDE7XG4gNjIyOlx0XHRcdGV4dC1cdTAwM2VkYXRhX2xlbiYjNDM7JiM0Mzs7XG4gNjIzOlx0XHR9XG4gNjI0Olx0fVxuIDYyNTpcdFxuIDYyNjpcdHN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTVBUQ1AgRGF0YSBIYW5kbGluZyoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgcnVubmluZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBleGFtaW5lIHRoaXMgYG1wdGNwX3dyaXRlX2RhdGFfZmluYCBmdW5jdGlvbjogSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgTVBUQ1AgaGFuZGxlcyB0aGUgREFUQV9GSU4gZmxhZywgc3BlY2lmaWNhbGx5IGluIHRoZSBhYnNlbmNlIG9yIHByZXNlbmNlIG9mIGFjdHVhbCBkYXRhIGluIGEgcGFja2V0LiBJIHNlZSB0aGF0IGlmIGBleHQtJmd0O3VzZV9tYXBgIGlzIHplcm8gb3IgdGhlIHBhY2tldCBsZW5ndGggaXMgYWxzbyB6ZXJvICh3aGljaCwgb2YgY291cnNlLCBpbXBsaWVzIG5vIGRhdGEpLCB0aGUgY29kZSBwcm9jZWVkcyB0byBzZXQgYSBidW5jaCBvZiBleHRlbnNpb24gZmllbGRzLiBJbnRlcmVzdGluZy4uLml0IGxvb2tzIGxpa2UgdGhpcyBwYXJ0IGlzIHNwZWNpZmljYWxseSBhZGhlcmluZyB0byBSRkM2ODI0LCB3aGljaCByZXF1aXJlcyBhIERTUyAoRGF0YSBTZXF1ZW5jZSBTcGFjZSkgbWFwcGluZyB3aXRoIHZlcnkgcHJlY2lzZSB2YWx1ZXMgd2hlbiBEQVRBX0ZJTiBpcyBzZXQgYnV0IHRoZSBkYXRhIHBheWxvYWQgaXRzZWxmIGlzIGVtcHR5LiBUaGUgY29kZSBzZXRzIGBkYXRhX2ZpbmAgdG8gMSwgY29uZmlybXMgd2UgYXJlIHVzaW5nIHRoZSBtYXAsIHNldHMgdXAgYSBEU04gKERhdGEgU2VxdWVuY2UgTnVtYmVyKSB2YWx1ZSwgdGhlIHN1YmZsb3cgc2VxdWVuY2UgbnVtYmVyIHRvIDAsIGRhdGEgbGVuZ3RoIHRvIDEgYW5kIGZpbmFsbHkgY29tcHV0ZXMgYSBjaGVja3N1bS4KCk5vdywgdGhlcmUmIzM5O3MgYSBxdWljayBjb25kaXRpb25hbCwgYW5kIHRoZW4gaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhbiBgZWxzZSBpZmAgYmxvY2ssIHdoZXJlIGl0IHNlZW1zIHRoYXQgd2UgYXJlIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkYXRhIGhhcyBhcnJpdmVkIGluIHRoZSBjb3JyZWN0IHNlcXVlbmNlLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmFja3RyYWNrIGhlcmUuIFdoeSB3b3VsZCBgZXh0LSZndDt1c2VfbWFwYCAqZXZlciogYmUgemVybyBpbiB0aGlzIGNvbnRleHQ/IEkmIzM5O20gcHJldHR5IHN1cmUgSSBzYXcgc29tZXRoaW5nIGluaXRpYWxpemUgdGhpcy4gQWgsIHJpZ2h0ISBJIHJlbWVtYmVyIG5vdywgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IG15IHRyYWluIG9mIHRob3VnaHQuIEFoIHllcywgSSByZW1lbWJlciBub3csIGl0JiMzOTtzIGdldHRpbmcgemVyb2VkIGJ5IGBtZW1zZXQoJmFtcDtvcHRzLSZndDtleHRfY29weS5mbGFncywgMCwgc2l6ZW9mKG9wdHMtJmd0O2V4dF9jb3B5LmZsYWdzKSlgIGluIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc2AuIE9rYXksIHNvIGl0IGFsbCBtYWtlcyBzZW5zZSBub3cuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHN0cnVjdCBtcHRjcF9leHRgIGlzIGRlZmluZWQgY29ycmVjdGx5IHRvIGJlIGFibGUgdG8gZm9sbG93IHRoaXMgY29kZSBtb3JlIGNsb3NlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBtcHRjcF9leHQgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbXB0Y3AuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9tcHRjcC5oPTE4PXN0cnVjdCBzZXFfZmlsZTtcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oLTIwLS8qIE1QVENQIHNrX2J1ZmYgZXh0ZW5zaW9uIGRhdGEgKi9cbmluY2x1ZGUvbmV0L21wdGNwLmg6MjE6c3RydWN0IG1wdGNwX2V4dCB7XG5pbmNsdWRlL25ldC9tcHRjcC5oLTIyLVx0dTY0XHRcdGRhdGFfc2VxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0cnVjdCBtcHRjcF9leHRgKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gVGltZSB0byBkaXNzZWN0IGBzdHJ1Y3QgbXB0Y3BfZXh0YC4gSSBrbm93IHRoaXMgc3RydWN0dXJlIGlzIGZ1bmRhbWVudGFsIHRvIE11bHRpUGF0aCBUQ1AgKE1QVENQKSBvcGVyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbXBvbmVudHMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgcHJvdG9jb2wmIzM5O3MgaW1wbGVtZW50YXRpb24uIEkgZXhwZWN0IHRvIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGZsYWdzLCBzZXF1ZW5jZSBudW1iZXJzLCBjaGVja3N1bXMgKHRob3VnaCB0aG9zZSBtaWdodCBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IGF0IHRoaXMgbGV2ZWwpLCBhbmQgcG9pbnRlcnMgb3Igb2Zmc2V0cyB0byBvdGhlciByZWxhdGVkIGRhdGEgc3RydWN0dXJlcy4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIGV4dGVuc2lvbiBtZWNoYW5pc20uIE1QVENQIHJlbGllcyBoZWF2aWx5IG9uIGV4dGVuc2lvbnMgZm9yIHRoaW5ncyBsaWtlIHN1YmZsb3ctc3BlY2lmaWMgY29uZ2VzdGlvbiBjb250cm9sLCBwYXRoIG1hbmFnZW1lbnQsIGFuZCBjb25uZWN0aW9uIGF1dGhlbnRpY2F0aW9uLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGl0JiMzOTtzIGEgc2ltcGxlLCB0YWdnZWQgbGlzdCwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGEgY2hhaW5lZCBzdHJ1Y3R1cmUgd2l0aCB2ZXJzaW9uaW5nLiBUaGV5IGxpa2VseSBoYWQgdG8gYmFsYW5jZSBmbGV4aWJpbGl0eSB3aXRoIHBlcmZvcm1hbmNlIGNvbmNlcm5zLiBBIGNvbXBsZXggZXh0ZW5zaW9uIHN5c3RlbSBjYW4gYm9nIGRvd24gdGhlIGZhc3QgcGF0aCwgc28gYSB3ZWxsLWRlc2lnbmVkIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgYSBkZWxpY2F0ZSBiYWxhbmNlLgoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgVENQIHN0YWNrLiBEb2VzIHRoaXMgc3RydWN0dXJlIGRpcmVjdGx5IG1hcCB0byBvciBhdWdtZW50IFRDUCBoZWFkZXJzLCBvciBpcyBpdCBhIHNlcGFyYXRlIGVudGl0eSB0aGF0JiMzOTtzIGxpbmtlZCBpbiBzb21lIHdheT8gU2VlaW5nIGhvdyB0aGV5JiMzOTt2ZSBpbnRlZ3JhdGVkIE1QVENQLXNwZWNpZmljIGluZm9ybWF0aW9uIHdpdGhvdXQgZHJhc3RpY2FsbHkgYWx0ZXJpbmcgZXhpc3RpbmcgVENQIGNvZGUgaXMgYWx3YXlzIGZhc2NpbmF0aW5nLiBJIGFudGljaXBhdGUgdGhlcmUgYXJlIGNsZXZlciB1c2VzIG9mIGZsYWdzIG9yIHJlc2VydmVkIGZpZWxkcyB3aXRoaW4gc3RhbmRhcmQgVENQIGhlYWRlcnMgdG8gbWluaW1pemUgaW52YXNpdmUgY2hhbmdlcy4gQWxzbywgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggdGhpbmdzIGxpa2UgVENQIG9wdGlvbnMgb3IgZXh0ZW5zaW9ucz8KClVsdGltYXRlbHksIEkmIzM5O20gaG9waW5nIHRvIGdsZWFuIGluc2lnaHRzIGludG8gdGhlaXIgZGVzaWduIGNob2ljZXMg4oCTIGhvdyB0aGV5IHByaW9yaXRpemVkIGZhY3RvcnMgbGlrZSBzY2FsYWJpbGl0eSwgc2VjdXJpdHksIGFuZCBwZXJmb3JtYW5jZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGxvb2tpbmcgZm9yIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhleSBtaWdodCBoYXZlIG1hZGUgdHJhZGUtb2Zmcy4gVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIG5leHVzIG9mIGEgbG90IG9mIGludGVyZXN0aW5nIGludGVyYWN0aW9ucywgYW5kIGl0cyBkZXRhaWxzIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbXB0Y3AuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjE6XHRzdHJ1Y3QgbXB0Y3BfZXh0IHtcbiAgMjI6XHRcdHU2NFx0XHRkYXRhX3NlcTtcbiAgMjM6XHRcdHUzMlx0XHRzdWJmbG93X3NlcTtcbiAgMjQ6XHRcdHUxNlx0XHRkYXRhX2xlbjtcbiAgMjU6XHRcdF9fc3VtMTZcdFx0Y3N1bTtcbiAgMjY6XHRcbiAgMjc6XHRcdHN0cnVjdF9ncm91cChmbGFncyxcbiAgMjg6XHRcdFx0dThcdHVzZV9tYXA6MSxcbiAgMjk6XHRcdFx0XHRkc242NDoxLFxuICAzMDpcdFx0XHRcdGRhdGFfZmluOjEsXG4gIDMxOlx0XHRcdFx0dXNlX2FjazoxLFxuICAzMjpcdFx0XHRcdGFjazY0OjEsXG4gIDMzOlx0XHRcdFx0bXBjX21hcDoxLFxuICAzNDpcdFx0XHRcdGZyb3plbjoxLFxuICAzNTpcdFx0XHRcdHJlc2V0X3RyYW5zaWVudDoxO1xuICAzNjpcdFx0XHR1OFx0cmVzZXRfcmVhc29uOjQsXG4gIDM3Olx0XHRcdFx0Y3N1bV9yZXFkOjEsXG4gIDM4Olx0XHRcdFx0aW5maW5pdGVfbWFwOjE7XG4gIDM5Olx0XHQpOyAvKiBlbmQgb2YgZmxhZ3MgZ3JvdXAgKi9cbiAgNDA6XHR9O1xuICA0MTpcdFxuICA0MjpcdCNkZWZpbmUgTVBUQ1BPUFRfSE1BQ19MRU5cdDIwXG4gIDQzOlx0I2RlZmluZSBNUFRDUF9STV9JRFNfTUFYXHQ4XG4gIDQ0Olx0XG4gIDQ1Olx0c3RydWN0IG1wdGNwX3JtX2xpc3Qge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSYjMzk7cyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNraW5nIHRoaXMgYG1lbXNldGAgY2FsbDogYG1lbXNldCgmYW1wO29wdHMtJmd0O2V4dF9jb3B5LmZsYWdzLCAwLCBzaXplb2Yob3B0cy0mZ3Q7ZXh0X2NvcHkuZmxhZ3MpKTtgLiAgUmlnaHQsIHRoYXQgemVyb3Mgb3V0IHRoZSBmbGFncyB3aXRoaW4gYG9wdHMtJmd0O2V4dF9jb3B5YCwgYW5kIGltcG9ydGFudGx5LCB0aGF0IGluY2x1ZGVzIGB1c2VfbWFwYC4gU28sIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgY2FsbCwgYGV4dC0mZ3Q7dXNlX21hcGAgaXMgZWZmZWN0aXZlbHkgemVyby4KClRoZW4sIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAgZ2V0cyBjYWxsZWQuIEluc2lkZSB0aGF0IGZ1bmN0aW9uLCBpdCBzZWVzIHRoYXQgYCFleHQtJmd0O3VzZV9tYXBgICh3aGljaCB3ZSBrbm93IGlzIHRydWUgY3VycmVudGx5KS4gVGhhdCB0cmlnZ2VycyBhIHNwZWNpZmljIGJsb2NrIG9mIGNvZGUgdGhhdCBkb2VzIHNvbWUgY3JpdGljYWwgc2V0dXAuIEl0IHNldHM6CgpgYGBjCgkJZXh0LSZndDtkYXRhX2ZpbiA9IDE7CgkJZXh0LSZndDt1c2VfbWFwID0gMTsKCQlleHQtJmd0O2RzbjY0ID0gMTsKCQlleHQtJmd0O2RhdGFfc2VxID0gZGF0YV9maW5fdHhfc2VxOwoJCWV4dC0mZ3Q7c3ViZmxvd19zZXEgPSAwOwoJCWV4dC0mZ3Q7ZGF0YV9sZW4gPSAxOwoJCWV4dC0mZ3Q7Y3N1bSA9IDA7CmBgYAoKSW50ZXJlc3RpbmcuLi4gYmVmb3JlIHRoZSBwYXRjaCwgYGV4dC0mZ3Q7Y3N1bWAgd2FzbiYjMzk7dCBpbml0aWFsaXplZCBpbiB0aGlzIHNwZWNpZmljIGJyYW5jaC4gIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSB2dWxuZXJhYmlsaXR5LgoKTm93LCBJJiMzOTttIGp1c3QgbWFraW5nIHN1cmUgSSBoYXZlIG15IHZhcmlhYmxlcyBzdHJhaWdodC4gIGBvcHRzLSZndDtleHRfY29weWAgaXMgYSBsb2NhbCB2YXJpYWJsZSB3aXRoaW4gYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzYCwgaXNuJiMzOTt0IGl0PyBObywgd2FpdCBhIG1pbnV0ZSwgYG9wdHNgIGlzIHBhc3NlZCBhcyBhIHBvaW50ZXIgKnRvKiBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3NgLiBJIG5lZWQgdG8gYmFjayB1cCBhbmQgc2VlIGhvdyB0aGF0IHBvaW50ZXIgaXMgZ2V0dGluZyBjcmVhdGVkL3BvcHVsYXRlZC4gIExldCBtZSB0cmFjZSB3aGVyZSBgb3B0c2Agb3JpZ2luYXRlcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYz01MTM9c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy01MjYtXHQgKiB0ZWxsIHRoZSBjYWxsZXIgdG8gZGVmZXIgdGhlIGVzdGltYXRlIHRvXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjUyNzpcdCAqIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKCksIHdoaWNoIHdpbGwgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UuXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTUyOC1cdCAqL1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9NTk3PXN0YXRpYyB2b2lkIG1wdGNwX3dyaXRlX2RhdGFfZmluKHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy02MjUtXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjYyNjpzdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTYyNy1cdFx0XHRcdFx0ICBib29sIHNuZF9kYXRhX2Zpbl9lbmFibGUsIGludCAqc2l6ZSxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTg3Mj1pbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy05MDctXHRcdHJldCA9IHRydWU7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjkwODpcdGVsc2UgaWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHNrLCBza2IsIHNuZF9kYXRhX2ZpbiwgXHUwMDI2b3B0X3NpemUsIG9wdHMpKSB7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwOS1cdFx0aW50IG1wX2ZhaWxfc2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9yIHN0YXRlIG9mIE11bHRpcGF0aCBUQ1AgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlc3RhYmxpc2hlZC4gSSBleHBlY3QgdGhpcyBsaWtlbHkgaW52b2x2ZXMgbG9va2luZyBhdCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYW5kIGNhcGFiaWxpdGllcyB0aGF0IGhhdmUgYmVlbiBuZWdvdGlhdGVkIGFuZCBhcmUgY3VycmVudGx5IGluIHVzZSBmb3IgdGhvc2Ugc3BlY2lmaWMgY29ubmVjdGlvbnMuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgZGF0YSBvbiB0aGluZ3MgbGlrZSB0aGUgTVBUQ1AgdmVyc2lvbiBuZWdvdGlhdGVkLCB0aGUgc3ViZmxvdyBwcmlvcml0aWVzLCBwb3NzaWJseSB0aGUgdXNlIG9mIHNwZWNpZmljIGV4dGVuc2lvbnMsIG9yIGFueSBjb25uZWN0aW9uLXNwZWNpZmljIHBhcmFtZXRlcnMgdGhhdCBhcmUgYWN0aXZlbHkgaW5mbHVlbmNpbmcgdGhlIGVzdGFibGlzaGVkIGZsb3dzLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IE1QVENQIGlzICphY3R1YWxseSogYmVoYXZpbmcgaW4gYSBsaXZlIGVudmlyb25tZW50LCBub3QganVzdCB3aGF0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKnNob3VsZCogYmUuIFRoaXMgaXMgdGhlIGJlZHJvY2sgdG8gdW5kZXJzdGFuZCBhbmQgdGhlbiwgbWF5YmUsIGRlYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg3MjpcdGludCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA4NzM6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcbiA4NzQ6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG4gODc1Olx0e1xuIDg3NjpcdFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTtcbiA4Nzc6XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuIDg3ODpcdFx0aW50IHRvdGFsX3NpemUgPSAwO1xuIDg3OTpcdFx0Ym9vbCBzbmRfZGF0YV9maW47XG4gODgwOlx0XHRib29sIHJldCA9IGZhbHNlO1xuIDg4MTpcdFx0aW50IG9wdF9zaXplID0gMDtcbiA4ODI6XHRcbiA4ODM6XHRcdG9wdHMtXHUwMDNlc3Vib3B0aW9ucyA9IDA7XG4gODg0Olx0XG4gODg1Olx0XHQvKiBGb3JjZSBsYXRlciBtcHRjcF93cml0ZV9vcHRpb25zKCksIGJ1dCBkbyBub3QgdXNlIGFueSBhY3R1YWxcbiA4ODY6XHRcdCAqIG9wdGlvbiBzcGFjZS5cbiA4ODc6XHRcdCAqL1xuIDg4ODpcdFx0aWYgKHVubGlrZWx5KF9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSBcdTAwMjZcdTAwMjYgIW1wdGNwX2NoZWNrX2luZmluaXRlX21hcChza2IpKSlcbiA4ODk6XHRcdFx0cmV0dXJuIDA7XG4gODkwOlx0XG4gODkxOlx0XHRpZiAodW5saWtlbHkoc2tiIFx1MDAyNlx1MDAyNiBUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfUlNUKSkge1xuIDg5MjpcdFx0XHRpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19mYXN0Y2xvc2Uoc2ssIFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpIHx8XG4gODkzOlx0XHRcdCAgICBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc2ssIFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpKSB7XG4gODk0Olx0XHRcdFx0dG90YWxfc2l6ZSAmIzQzOz0gb3B0X3NpemU7XG4gODk1Olx0XHRcdFx0cmVtYWluaW5nIC09IG9wdF9zaXplO1xuIDg5NjpcdFx0XHR9XG4gODk3Olx0XHRcdC8qIE1QX1JTVCBjYW4gYmUgdXNlZCB3aXRoIE1QX0ZBU1RDTE9TRSBhbmQgTVBfRkFJTCBpZiB0aGVyZSBpcyByb29tICovXG4gODk4Olx0XHRcdGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX3JzdChzaywgXHUwMDI2b3B0X3NpemUsIHJlbWFpbmluZywgb3B0cykpIHtcbiA4OTk6XHRcdFx0XHR0b3RhbF9zaXplICYjNDM7PSBvcHRfc2l6ZTtcbiA5MDA6XHRcdFx0XHRyZW1haW5pbmcgLT0gb3B0X3NpemU7XG4gOTAxOlx0XHRcdH1cbiA5MDI6XHRcdFx0cmV0dXJuIHRvdGFsX3NpemU7XG4gOTAzOlx0XHR9XG4gOTA0Olx0XG4gOTA1Olx0XHRzbmRfZGF0YV9maW4gPSBtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zayk7XG4gOTA2Olx0XHRpZiAobXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcChzaywgc2tiLCBzbmRfZGF0YV9maW4sIFx1MDAyNm9wdF9zaXplLCBvcHRzKSlcbiA5MDc6XHRcdFx0cmV0ID0gdHJ1ZTtcbiA5MDg6XHRcdGVsc2UgaWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHNrLCBza2IsIHNuZF9kYXRhX2ZpbiwgXHUwMDI2b3B0X3NpemUsIG9wdHMpKSB7XG4gOTA5Olx0XHRcdGludCBtcF9mYWlsX3NpemU7XG4gOTEwOlx0XG4gOTExOlx0XHRcdHJldCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTkzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTXkgTGluZSBvZiBJbnF1aXJ5OiBUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGBvcHRzYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJJiMzOTt2ZSBnb3QgYG9wdHNgIGhlcmUsIHBhc3NlZCBmcm9tIHRoZSBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AgZnVuY3Rpb24uIE15IHByaW1hcnkgcXVlc3Rpb24gbm93IGlzOiBXaGVyZSBleGFjdGx5IGRvZXMgYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgIGdldCBpbnZva2VkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzdGFjaywgdGhlIGV4ZWN1dGlvbiBmbG93LCB0byByZWFsbHkgZ3Jhc3AgdGhlIGNvbnRleHQgaW4gd2hpY2ggYG9wdHNgIGlzIGJlaW5nIGdlbmVyYXRlZCBhbmQgdXNlZC4gS25vd2luZyB0aGUgY2FsbGVyIGlzIGFic29sdXRlbHkgY3J1Y2lhbC4gSXMgaXQgaGFwcGVuaW5nIGR1cmluZyBjb25uZWN0aW9uIHNldHVwPyBEdXJpbmcgYSBzcGVjaWZpYyBldmVudCBoYW5kbGluZyBwaGFzZT8gVGhpcyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHByb3BlcnRpZXMgYW5kIHBvdGVudGlhbCBsaW1pdGF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gYW5kIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTE1MT1zdGF0aWMgdW5zaWduZWQgaW50IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTkyOlx0XHRvcHRfc2l6ZSA9IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgcmVtYWluaW5nLCBoYXNfdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5My1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMtXHUwMDNlbXB0Y3ApO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9ODUwPXN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXBfZmFpbChzdHJ1Y3Qgc29jayAqc2ssIGludCAqc2l6ZSxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg3MS1cbm5ldC9tcHRjcC9vcHRpb25zLmM6ODcyOmludCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9tcHRjcC9vcHRpb25zLmMtODczLVx0XHRcdCAgICAgIHVuc2lnbmVkIGludCByZW1haW5pbmcsIGJvb2wgaGFzX3RzLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTQ3Mj12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ5Ny1cdCAqXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE0OTg6XHQgKiBUaGUgc2FtZSBhcHBsaWVzIGluIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoKSBmdW5jdGlvbi5cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ5OS1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gVENQIEVzdGFibGlzaGVkIE9wdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFRDUCBlc3RhYmxpc2hlZCBvcHRpb25zIGFyZSBoYW5kbGVkLiBUaGUgZmlyc3QgcGxhY2UgSSYjMzk7bSBnb2luZyB0byBsb29rIGlzIHRoZSBgbmV0L2lwdjQvdGNwX291dHB1dC5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUga2VybmVsIGxpa2VseSBjb25zdHJ1Y3RzIGFuZCBhcHBsaWVzIHRob3NlIGNydWNpYWwgb3B0aW9ucyBkdXJpbmcgZGF0YSB0cmFuc21pc3Npb24gd2hlbiBhIFRDUCBjb25uZWN0aW9uIGlzIGluIHRoZSBlc3RhYmxpc2hlZCBzdGF0ZS4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgaG9sZCB0aGUgbG9naWMgcmVzcG9uc2libGUgZm9yIHRoaW5ncyBsaWtlIHdpbmRvdyBzY2FsaW5nLCB0aW1lc3RhbXBzLCBzZWxlY3RpdmUgYWNrbm93bGVkZ21lbnRzIChTQUNLcyksIGFuZCBwb3NzaWJseSBldmVuIG1vcmUgb2JzY3VyZSBvcHRpb25zIGJhc2VkIG9uIHRoZSBUQ1Agc3RhdGUuIEkmIzM5O20ga2VlbiB0byBkaXNzZWN0IHRoZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBsb2dpYyBmbG93LCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3Bfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTE6XHRzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjExNTI6XHRcdFx0XHRcdFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbjExNTM6XHRcdFx0XHRcdFx0c3RydWN0IHRjcF9rZXkgKmtleSlcbjExNTQ6XHR7XG4xMTU1Olx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjExNTY6XHRcdHVuc2lnbmVkIGludCBzaXplID0gMDtcbjExNTc6XHRcdHVuc2lnbmVkIGludCBlZmZfc2Fja3M7XG4xMTU4Olx0XG4xMTU5Olx0XHRvcHRzLVx1MDAzZW9wdGlvbnMgPSAwO1xuMTE2MDpcdFxuMTE2MTpcdFx0LyogQmV0dGVyIHRoYW4gc3dpdGNoIChrZXkudHlwZSkgYXMgaXQgaGFzIHN0YXRpYyBicmFuY2hlcyAqL1xuMTE2MjpcdFx0aWYgKHRjcF9rZXlfaXNfbWQ1KGtleSkpIHtcbjExNjM6XHRcdFx0b3B0cy1cdTAwM2VvcHRpb25zIHw9IE9QVElPTl9NRDU7XG4xMTY0Olx0XHRcdHNpemUgJiM0Mzs9IFRDUE9MRU5fTUQ1U0lHX0FMSUdORUQ7XG4xMTY1Olx0XHR9IGVsc2UgaWYgKHRjcF9rZXlfaXNfYW8oa2V5KSkge1xuMTE2NjpcdFx0XHRvcHRzLVx1MDAzZW9wdGlvbnMgfD0gT1BUSU9OX0FPO1xuMTE2NzpcdFx0XHRzaXplICYjNDM7PSB0Y3BfYW9fbGVuX2FsaWduZWQoa2V5LVx1MDAzZWFvX2tleSk7XG4xMTY4Olx0XHR9XG4xMTY5Olx0XG4xMTcwOlx0XHRpZiAobGlrZWx5KHRwLVx1MDAzZXJ4X29wdC50c3RhbXBfb2spKSB7XG4xMTcxOlx0XHRcdG9wdHMtXHUwMDNlb3B0aW9ucyB8PSBPUFRJT05fVFM7XG4xMTcyOlx0XHRcdG9wdHMtXHUwMDNldHN2YWwgPSBza2IgPyB0Y3Bfc2tiX3RpbWVzdGFtcF90cyh0cC1cdTAwM2V0Y3BfdXNlY190cywgc2tiKSAmIzQzO1xuMTE3MzpcdFx0XHRcdFx0dHAtXHUwMDNldHNvZmZzZXQgOiAwO1xuMTE3NDpcdFx0XHRvcHRzLVx1MDAzZXRzZWNyID0gdHAtXHUwMDNlcnhfb3B0LnRzX3JlY2VudDtcbjExNzU6XHRcdFx0c2l6ZSAmIzQzOz0gVENQT0xFTl9UU1RBTVBfQUxJR05FRDtcbjExNzY6XHRcdH1cbjExNzc6XHRcbjExNzg6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG4xMTc5Olx0XHQvKiBNUFRDUCBvcHRpb25zIGhhdmUgcHJlY2VkZW5jZSBvdmVyIFNBQ0sgZm9yIHRoZSBsaW1pdGVkIFRDUFxuMTE4MDpcdFx0ICogb3B0aW9uIHNwYWNlIGJlY2F1c2UgYSBNUFRDUCBjb25uZWN0aW9uIHdvdWxkIGJlIGZvcmNlZCB0b1xuMTE4MTpcdFx0ICogZmFsbCBiYWNrIHRvIHJlZ3VsYXIgVENQIGlmIGEgcmVxdWlyZWQgbXVsdGlwYXRoIG9wdGlvbiBpc1xuMTE4MjpcdFx0ICogbWlzc2luZy4gU0FDSyBzdGlsbCBnZXRzIGEgY2hhbmNlIHRvIHVzZSB3aGF0ZXZlciBzcGFjZSBpc1xuMTE4MzpcdFx0ICogbGVmdC5cbjExODQ6XHRcdCAqL1xuMTE4NTpcdFx0aWYgKHNrX2lzX21wdGNwKHNrKSkge1xuMTE4NjpcdFx0XHR1bnNpZ25lZCBpbnQgcmVtYWluaW5nID0gTUFYX1RDUF9PUFRJT05fU1BBQ0UgLSBzaXplO1xuMTE4NzpcdFx0XHRib29sIGhhc190cyA9IG9wdHMtXHUwMDNlb3B0aW9ucyBcdTAwMjYgT1BUSU9OX1RTO1xuMTE4ODpcdFx0XHRpbnQgb3B0X3NpemU7XG4xMTg5Olx0XG4xMTkwOlx0XHRcdG9wdHMtXHUwMDNlbXB0Y3AuZHJvcF90cyA9IDA7XG4xMTkxOlx0XG4xMTkyOlx0XHRcdG9wdF9zaXplID0gbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzaywgc2tiLCByZW1haW5pbmcsIGhhc190cyxcbjExOTM6XHRcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMtXHUwMDNlbXB0Y3ApO1xuMTE5NDpcdFx0XHRpZiAob3B0X3NpemUgXHUwMDNlPSAwKSB7XG4xMTk1Olx0XHRcdFx0b3B0cy1cdTAwM2VvcHRpb25zIHw9IE9QVElPTl9NUFRDUDtcbjExOTY6XHRcdFx0XHRzaXplICYjNDM7PSBvcHRfc2l6ZTtcbjExOTc6XHRcbjExOTg6XHRcdFx0XHRpZiAob3B0cy1cdTAwM2VtcHRjcC5kcm9wX3RzKVxuMTE5OTpcdFx0XHRcdFx0b3B0cy1cdTAwM2VvcHRpb25zIFx1MDAyNj0gfk9QVElPTl9UUztcbjEyMDA6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nOgoKKipFeGFtaW5pbmcgVENQIE91dHB1dCBPcHRpb25zKioKCk9rYXksIHNvIGBvcHRzYCBoZXJlIGlzIHBvaW50aW5nIHRvIGEgYHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3RydWN0dXJlIGNvbnRhaW5zLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCB0aGlzIHN0cnVjdCBkZWZpbmVzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgVENQIHNlZ21lbnQgYmVpbmcgc2VudCBvdXQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnNgIHRvIGtub3cgd2hhdCBzcGVjaWZpYyBzZXR0aW5ncyBJJiMzOTttIGRlYWxpbmcgd2l0aC4gVGhpbmdzIGxpa2Ugd2luZG93IHNjYWxpbmcsIHRpbWVzdGFtcHMsIHNlbGVjdGl2ZSBhY2tub3dsZWRnZW1lbnRzLCBhbmQgbWF4aW11bSBzZWdtZW50IHNpemUgYWRqdXN0bWVudHMgcHJvYmFibHkgbGl2ZSBpbiB0aGlzIHN0cnVjdCwgYnV0IEkgbmVlZCB0aGUgZnVsbCBkZWZpbml0aW9uIHRvIGJlIGNlcnRhaW4uIEdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIHRoaXMgc3RydWN0dXJlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBUQ1Agb3V0cHV0IHByb2Nlc3Mgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHRjcF9vdXRfb3B0aW9ucyBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTAyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBqdXN0IHBsYXllZCBvdXQ6CgoqKkRpdmluZyBpbnRvIFRDUCBPdXRwdXQgT3B0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG91dGdvaW5nIFRDUCBvcHRpb25zIGFyZSBoYW5kbGVkLiBUaGUgYmVzdCBzdGFydGluZyBwb2ludCwgYXMgYWx3YXlzLCBpcyBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiBMZXQmIzM5O3Mgc2VlLi4uSSYjMzk7bSB0aGlua2luZywgJiMzNDsgYHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnNgICYjMzQ7LiBUaGF0IHNob3VsZCBiZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlIEkgbmVlZCB0byB0cmFjayBkb3duLiBJdCB3aWxsIGNvbnRhaW4gYWxsIHRoZSBuZWNlc3NhcnkgZmllbGRzIGFuZCBsb2dpYyByZWxhdGVkIHRvIG91dGdvaW5nIFRDUCBvcHRpb25zLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHRoYXQgc3BlY2lmaWMgc3RydWN0dXJlIGRlZmluaXRpb24gYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyB1c2VkLiBIb3BlZnVsbHksIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgbWVjaGFuaXNtcyBlbXBsb3llZCBmb3IgY29uc3RydWN0aW5nLCBmb3JtYXR0aW5nLCBhbmQgaW5zZXJ0aW5nIHRoZXNlIG9wdGlvbnMgaW50byB0aGUgb3V0Z29pbmcgVENQIHNlZ21lbnRzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgb24gdGhpbmdzIGxpa2UgTVNTLCB0aW1lc3RhbXBzLCBTQUNLIG9wdGlvbnMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoaXMgc2VhcmNoIGlzIHRoZSBsYXVuY2ggcG9pbnQsIGFuZCBzaG91bGQgbGVhZCBtZSBkb3duIHRoZSByYWJiaXQgaG9sZSB0byBmaW5kIHRoZSBzcGVjaWZpYyBmaWxlcyBhbmQgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZSBjcmVhdGlvbiBvZiBvdXRib3VuZCBwYWNrZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE2NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFRDUCBIZWFkZXIgRGVmaW5pdGlvbioqCgpIbW0sIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnNgLCBhbmQgSSBoYXZlIGEgc25lYWtpbmcgc3VzcGljaW9uIGFib3V0IHdoZXJlIGl0IG1pZ2h0IGJlLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgbGl2ZXMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgVENQIGhlYWRlcnMsIHNwZWNpZmljYWxseSBpbiBgaW5jbHVkZS9uZXQvdGNwLmhgLiBIb3dldmVyLCBJJiMzOTttIGFsc28gd29uZGVyaW5nIGlmIHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIHZhcmlhdGlvbiBpbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIENvdWxkIGl0IGJlIGRlZmluZWQgKndpdGhvdXQqIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBgc3RydWN0YCBrZXl3b3JkIGFuZCB0aGUgc3RydWN0dXJlIG5hbWUsIHBlcmhhcHMgYXMgYHN0cnVjdHRjcF9vdXRfb3B0aW9uc2A/IEl0JiMzOTtzIGEgbG9uZyBzaG90LCBidXQgc29tZXRpbWVzIHRoZXNlIHRoaW5ncyBoYXZlIHN1YnRsZSBnb3RjaGFzLCBhbmQgaXQmIzM5O3Mgd29ydGggYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhhdCYjMzk7cyB0aGUgY3VscHJpdCBpZiBJJiMzOTttIGhhdmluZyB0cm91YmxlIGxvY2F0aW5nIHRoZSBkZWNsYXJhdGlvbiBpbiB0aGUgc3RhbmRhcmQgd2F5LiBXb3J0aCBub3RpbmcsIHRoaXMga2luZCBvZiBkZWZpbml0aW9uIGVycm9yIHdvdWxkbiYjMzk7dCBiZSB0ZXJyaWJseSB1bmNvbW1vbiBhY3Jvc3MgdmVyc2lvbnMgb2YgYSBzeXN0ZW0sIG9yIGV2ZW4gZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGNwX291dF9vcHRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVENQIE91dHB1dCBNb2R1bGUgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgVENQIG91dHB1dCBwYXRoLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVB2NC4gVGhlIGB0Y3Bfb3V0cHV0LmNgIGZpbGUgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIGNvcmUgbG9naWMgZm9yIGhvdyBUQ1Agc2VnbWVudHMgYXJlIGNvbnN0cnVjdGVkLCB0cmFuc21pdHRlZCwgYW5kIHJldHJhbnNtaXR0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZSBjb25nZXN0aW9uIGNvbnRyb2wsIHNlcXVlbmNlIG51bWJlciBtYW5hZ2VtZW50LCB3aW5kb3dpbmcsIGFuZCBwb3RlbnRpYWxseSBldmVuIHRoaW5ncyByZWxhdGVkIHRvIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyBvciBvcHRpb25zIGhhbmRsaW5nLCBhbGwgd2l0aGluIHRoZSBjb250ZXh0IG9mIHNlbmRpbmcgZGF0YSBvdXQgb250byB0aGUgbmV0d29yay4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuZCBtb2RpZnlpbmcgdGhlIHJlbGV2YW50IHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB0Y3Bfb3V0X29wdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3Bfb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX291dHB1dC5jPTQxMT1zdGF0aWMgdm9pZCBzbWNfb3B0aW9uc193cml0ZShfX2JlMzIgKnB0ciwgdTE2ICpvcHRpb25zKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MjUtXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDI2OnN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMge1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTQyNy1cdC8qIEZvbGxvd2luZyBncm91cCBpcyBjbGVhcmVkIGluIF9fdGNwX3RyYW5zbWl0X3NrYigpICovXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQ0NT1zdGF0aWMgdm9pZCBtcHRjcF9vcHRpb25zX3dyaXRlKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0cixcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDYtXHRcdFx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0NzpcdFx0XHRcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQ4LXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDY5PXN0YXRpYyB1MzIgYnBmX3Nrb3BzX2hkcl9vcHRfbGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDcyLVx0XHRcdFx0IGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ3MzpcdFx0XHRcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ3NC1cdFx0XHRcdCB1MzIgcmVtYWluaW5nKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz01MzM9c3RhdGljIHZvaWQgYnBmX3Nrb3BzX3dyaXRlX2hkcl9vcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01MzYtXHRcdFx0XHQgICAgZW51bSB0Y3Bfc3luYWNrX3R5cGUgc3luYWNrX3R5cGUsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTM3Olx0XHRcdFx0ICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTM4LXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTc4PXN0YXRpYyB1MzIgYnBmX3Nrb3BzX2hkcl9vcHRfbGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTgxLVx0XHRcdFx0IGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjU4MjpcdFx0XHRcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTU4My1cdFx0XHRcdCB1MzIgcmVtYWluaW5nKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz01ODg9c3RhdGljIHZvaWQgYnBmX3Nrb3BzX3dyaXRlX2hkcl9vcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01OTEtXHRcdFx0XHQgICAgZW51bSB0Y3Bfc3luYWNrX3R5cGUgc3luYWNrX3R5cGUsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTkyOlx0XHRcdFx0ICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTkzLXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTk3PXN0YXRpYyBfX2JlMzIgKnByb2Nlc3NfdGNwX2FvX29wdGlvbnMoc3RydWN0IHRjcF9zb2NrICp0cCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01OTgtXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdGNwcnNrLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjU5OTpcdFx0XHRcdCAgICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNjAwLVx0XHRcdFx0ICAgICAgc3RydWN0IHRjcF9rZXkgKmtleSwgX19iZTMyICpwdHIpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTY1Mz1zdGF0aWMgdm9pZCB0Y3Bfb3B0aW9uc193cml0ZShzdHJ1Y3QgdGNwaGRyICp0aCwgc3RydWN0IHRjcF9zb2NrICp0cCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy02NTQtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRjcHJzayxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo2NTU6XHRcdFx0ICAgICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy02NTYtXHRcdFx0ICAgICAgc3RydWN0IHRjcF9rZXkgKmtleSlcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODMxPXN0YXRpYyB2b2lkIHNtY19zZXRfb3B0aW9uKHN0cnVjdCB0Y3Bfc29jayAqdHAsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODMyOlx0XHRcdCAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODMzLVx0XHRcdCAgIHVuc2lnbmVkIGludCAqcmVtYWluaW5nKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz04NDg9c3RhdGljIHZvaWQgc21jX3NldF9vcHRpb25fY29uZChjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg0OS1cdFx0XHRcdHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4NTA6XHRcdFx0XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg1MS1cdFx0XHRcdHVuc2lnbmVkIGludCAqcmVtYWluaW5nKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz04NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc2V0X29wdGlvbl9jb25kKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4Njc6XHRcdFx0XHQgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODY4LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgKnJlbWFpbmluZylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODgxLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg4MjpzdGF0aWMgdTMyIHRjcF9zeW5hY2tfb3B0aW9uc19jb21iaW5lX3NhdmluZyhzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4My17XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTkwMi0gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo5MDM6c3RhdGljIGludCB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsIGludCByZXF1aXJlZCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05MDQtXHRcdFx0XHQgIGludCByZW1haW5pbmcpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTk1OT1zdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5fb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTYwOlx0XHRcdFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NjEtXHRcdFx0XHRzdHJ1Y3QgdGNwX2tleSAqa2V5KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xMDYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2My1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbXNzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwNjQ6XHRcdFx0XHQgICAgICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDY1LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB0Y3Bfa2V5ICprZXksXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTExNTE9c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTE1MjpcdFx0XHRcdFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTUzLVx0XHRcdFx0XHRzdHJ1Y3QgdGNwX2tleSAqa2V5KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xNTM2PXN0YXRpYyBpbnQgX190Y3BfdHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU0Mi1cdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y2I7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTU0MzpcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgb3B0cztcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTQ0LVx0dW5zaWduZWQgaW50IHRjcF9vcHRpb25zX3NpemUsIHRjcF9oZWFkZXJfc2l6ZTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjEwMz11bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjEwOC1cdHVuc2lnbmVkIGludCBoZWFkZXJfbGVuO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIxMDk6XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zIG9wdHM7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjExMC1cdHN0cnVjdCB0Y3Bfa2V5IGtleTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzkzMT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTM4LVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzkzOTpcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgb3B0cztcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTQwLVx0c3RydWN0IHRjcF9rZXkga2V5ID0ge307XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzQ1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIFRDUCBPdXRwdXQgT3B0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzdHJ1Y3QgdGNwX291dF9vcHRpb25zIG9wdHM7YC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBhIGxvY2FsIHZhcmlhYmxlIHdpdGhpbiBgX190Y3BfdHJhbnNtaXRfc2tiYCwgYW5kIEkmIzM5O20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQsIG9yIHJhdGhlciwgaWYgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgKmF0IGFsbCouIEkgbmVlZCB0byBiZSBzdXJlLiBUaGlzIGlzIGNsYXNzaWMgQywgYWZ0ZXIgYWxsLiBVbmluaXRpYWxpemVkIGxvY2FsIHZhcmlhYmxlcyBhcmUgYSBtaW5lZmllbGQuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBzbyBsZXQgbWUganVzdCBwb3Agb3ZlciB0byBgbmV0L2lwdjQvdGNwX291dHB1dC5jYCBhbmQgdGFrZSBhIHBlZWsgYXQgYF9fdGNwX3RyYW5zbWl0X3NrYmAgdG8gY29uZmlybSB0aGlzLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IHBhc3NpbmcgZ2FyYmFnZSBhcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX291dHB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUzNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTM2Olx0c3RhdGljIGludCBfX3RjcF90cmFuc21pdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTUzNzpcdFx0XHRcdCAgICAgIGludCBjbG9uZV9pdCwgZ2ZwX3QgZ2ZwX21hc2ssIHUzMiByY3Zfbnh0KVxuMTUzODpcdHtcbjE1Mzk6XHRcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbjE1NDA6XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4xNTQxOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwO1xuMTU0MjpcdFx0c3RydWN0IHRjcF9za2JfY2IgKnRjYjtcbjE1NDM6XHRcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgb3B0cztcbjE1NDQ6XHRcdHVuc2lnbmVkIGludCB0Y3Bfb3B0aW9uc19zaXplLCB0Y3BfaGVhZGVyX3NpemU7XG4xNTQ1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqb3NrYiA9IE5VTEw7XG4xNTQ2Olx0XHRzdHJ1Y3QgdGNwX2tleSBrZXk7XG4xNTQ3Olx0XHRzdHJ1Y3QgdGNwaGRyICp0aDtcbjE1NDg6XHRcdHU2NCBwcmlvcl93c3RhbXA7XG4xNTQ5Olx0XHRpbnQgZXJyO1xuMTU1MDpcdFxuMTU1MTpcdFx0QlVHX09OKCFza2IgfHwgIXRjcF9za2JfcGNvdW50KHNrYikpO1xuMTU1MjpcdFx0dHAgPSB0Y3Bfc2soc2spO1xuMTU1MzpcdFx0cHJpb3Jfd3N0YW1wID0gdHAtXHUwMDNldGNwX3dzdGFtcF9ucztcbjE1NTQ6XHRcdHRwLVx1MDAzZXRjcF93c3RhbXBfbnMgPSBtYXgodHAtXHUwMDNldGNwX3dzdGFtcF9ucywgdHAtXHUwMDNldGNwX2Nsb2NrX2NhY2hlKTtcbjE1NTU6XHRcdHNrYl9zZXRfZGVsaXZlcnlfdGltZShza2IsIHRwLVx1MDAzZXRjcF93c3RhbXBfbnMsIFNLQl9DTE9DS19NT05PVE9OSUMpO1xuMTU1NjpcdFx0aWYgKGNsb25lX2l0KSB7XG4xNTU3Olx0XHRcdG9za2IgPSBza2I7XG4xNTU4Olx0XG4xNTU5Olx0XHRcdHRjcF9za2JfdHNvcnRlZF9zYXZlKG9za2IpIHtcbjE1NjA6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nsb25lZChvc2tiKSkpXG4xNTYxOlx0XHRcdFx0XHRza2IgPSBwc2tiX2NvcHkob3NrYiwgZ2ZwX21hc2spO1xuMTU2MjpcdFx0XHRcdGVsc2VcbjE1NjM6XHRcdFx0XHRcdHNrYiA9IHNrYl9jbG9uZShvc2tiLCBnZnBfbWFzayk7XG4xNTY0Olx0XHRcdH0gdGNwX3NrYl90c29ydGVkX3Jlc3RvcmUob3NrYik7XG4xNTY1Olx0XG4xNTY2Olx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbjE1Njc6XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xNTY4Olx0XHRcdC8qIHJldHJhbnNtaXQgc2ticyBtaWdodCBoYXZlIGEgbm9uIHplcm8gdmFsdWUgaW4gc2tiLVx1MDAzZWRldlxuMTU2OTpcdFx0XHQgKiBiZWNhdXNlIHNrYi1cdTAwM2VkZXYgaXMgYWxpYXNlZCB3aXRoIHNrYi1cdTAwM2VyYm5vZGUucmJfbGVmdFxuMTU3MDpcdFx0XHQgKi9cbjE1NzE6XHRcdFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4xNTcyOlx0XHR9XG4xNTczOlx0XG4xNTc0Olx0XHRpbmV0ID0gaW5ldF9zayhzayk7XG4xNTc1Olx0XHR0Y2IgPSBUQ1BfU0tCX0NCKHNrYik7XG4xNTc2Olx0XHRtZW1zZXQoXHUwMDI2b3B0cy5jbGVhcmVkLCAwLCBzaXplb2Yob3B0cy5jbGVhcmVkKSk7XG4xNTc3Olx0XG4xNTc4Olx0XHR0Y3BfZ2V0X2N1cnJlbnRfa2V5KHNrLCBcdTAwMjZrZXkpO1xuMTU3OTpcdFx0aWYgKHVubGlrZWx5KHRjYi1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IFRDUEhEUl9TWU4pKSB7XG4xNTgwOlx0XHRcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3Bfc3luX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbjE1ODE6XHRcdH0gZWxzZSB7XG4xNTgyOlx0XHRcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzaywgc2tiLCBcdTAwMjZvcHRzLCBcdTAwMjZrZXkpO1xuMTU4MzpcdFx0XHQvKiBGb3JjZSBhIFBTSCBmbGFnIG9uIGFsbCAoR1NPKSBwYWNrZXRzIHRvIGV4cGVkaXRlIEdSTyBmbHVzaFxuMTU4NDpcdFx0XHQgKiBhdCByZWNlaXZlciA6IFRoaXMgc2xpZ2h0bHkgaW1wcm92ZSBHUk8gcGVyZm9ybWFuY2UuXG4xNTg1Olx0XHRcdCAqIE5vdGUgdGhhdCB3ZSBkbyBub3QgZm9yY2UgdGhlIFBTSCBmbGFnIGZvciBub24gR1NPIHBhY2tldHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIEMvQyYjNDM7JiM0MzsgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG9wdGlvbiBzdHJ1Y3R1cmVzOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IENsZWFyaW5nIE1lbW9yeSoqCgpSaWdodCwgYG1lbXNldCgmYW1wO29wdHMuY2xlYXJlZCwgMCwgc2l6ZW9mKG9wdHMuY2xlYXJlZCkpO2AgaXMgYSBjbGFzc2ljIG1vdmUuIEl0JiMzOTtzIGluaXRpYWxpemluZyBvciBjbGVhcmluZyBhIGJsb2NrIG9mIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYG9wdHMuY2xlYXJlZGAuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwdXJwb3NlLiBJdCYjMzk7cyBsaWtlbHkgaW50ZW5kZWQgdG8gc2V0IGFsbCB0aGUgYml0cyBpbiB0aGF0IG1lbW9yeSByZWdpb24gdG8gemVyby4gVGhpcyBjb3VsZCBiZSBmb3IgYSB2YXJpZXR5IG9mIHJlYXNvbnM6IHRvIHplcm8gb3V0IGZsYWdzLCBjb3VudGVycywgb3IgbWF5YmUgdG8gaW5pdGlhbGl6ZSBhIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZS4gSXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBjbGVhciBtZW1vcnkgYmVmb3JlIHVzZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBvcHRpb24gc3RydWN0cyBvciBhbnl0aGluZyB3aGVyZSB5b3Ugd2FudCBhIGtub3duLCBkZWZhdWx0IHN0YXRlLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hhdCBkb2VzIGBvcHRzLmNsZWFyZWRgIGFjdHVhbGx5ICpjb250YWluKj8gS25vd2luZyB0aGUgdHlwZSBhbmQgc2l6ZSBvZiBgb3B0cy5jbGVhcmVkYCBpcyBjcnVjaWFsLiBJcyBpdCBhIHNpbmdsZSBgaW50YCwgYSBgc3RydWN0YCwgYW4gYXJyYXksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgYHNpemVvZigpYCBjYWxsIGlzIGtleSBoZXJlLCBhcyBpdCBkaWN0YXRlcyBob3cgbXVjaCBtZW1vcnkgaXMgYmVpbmcgemVyb2VkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdoYXQgZXhhY3RseSBgb3B0cy5jbGVhcmVkYCByZXByZXNlbnRzLiBUaGF0IHdpbGwgdGVsbCBtZSB3aHkgdGhpcyBjbGVhciBpcyBiZWluZyBwZXJmb3JtZWQgYW5kIHdoZXRoZXIgaXQgaXMgc3VmZmljaWVudC4gSSBhbHNvIGhhdmUgdG8ga2VlcCBpbiBtaW5kLCBpbiBsYXJnZXIgY29kZWJhc2VzLCB0aGF0IG1lbW9yeSBtYXkgYmUgdG91Y2hlZCBieSBvdGhlciB0aHJlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vdXRwdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI2Olx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyB7XG4gNDI3Olx0XHQvKiBGb2xsb3dpbmcgZ3JvdXAgaXMgY2xlYXJlZCBpbiBfX3RjcF90cmFuc21pdF9za2IoKSAqL1xuIDQyODpcdFx0c3RydWN0X2dyb3VwKGNsZWFyZWQsXG4gNDI5Olx0XHRcdHUxNiBtc3M7XHRcdC8qIDAgdG8gZGlzYWJsZSAqL1xuIDQzMDpcdFx0XHR1OCBicGZfb3B0X2xlbjtcdFx0LyogbGVuZ3RoIG9mIEJQRiBoZHIgb3B0aW9uICovXG4gNDMxOlx0XHRcdHU4IG51bV9zYWNrX2Jsb2NrcztcdC8qIG51bWJlciBvZiBTQUNLIGJsb2NrcyB0byBpbmNsdWRlICovXG4gNDMyOlx0XHQpO1xuIDQzMzpcdFxuIDQzNDpcdFx0LyogQ2F1dGlvbjogZm9sbG93aW5nIGZpZWxkcyBhcmUgbm90IGNsZWFyZWQgaW4gX190Y3BfdHJhbnNtaXRfc2tiKCkgKi9cbiA0MzU6XHRcdHUxNiBvcHRpb25zO1x0XHQvKiBiaXQgZmllbGQgb2YgT1BUSU9OXyogKi9cbiA0MzY6XHRcdHU4IHdzO1x0XHRcdC8qIHdpbmRvdyBzY2FsZSwgMCB0byBkaXNhYmxlICovXG4gNDM3Olx0XHR1OCBudW1fYWNjZWNuX2ZpZWxkczo3LFx0LyogbnVtYmVyIG9mIEFjY0VDTiBmaWVsZHMgbmVlZGVkICovXG4gNDM4Olx0XHQgICB1c2Vfc3luYWNrX2Vjbl9ieXRlczoxOyAvKiBVc2Ugc3luYWNrX2Vjbl9ieXRlcyBvciBub3QgKi9cbiA0Mzk6XHRcdF9fdTggKmhhc2hfbG9jYXRpb247XHQvKiB0ZW1wb3JhcnkgcG9pbnRlciwgb3ZlcmxvYWRlZCAqL1xuIDQ0MDpcdFx0X191MzIgdHN2YWwsIHRzZWNyO1x0LyogbmVlZCB0byBpbmNsdWRlIE9QVElPTl9UUyAqL1xuIDQ0MTpcdFx0c3RydWN0IHRjcF9mYXN0b3Blbl9jb29raWUgKmZhc3RvcGVuX2Nvb2tpZTtcdC8qIEZhc3Qgb3BlbiBjb29raWUgKi9cbiA0NDI6XHRcdHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyBtcHRjcDtcbiA0NDM6XHR9O1xuIDQ0NDpcdFxuIDQ0NTpcdHN0YXRpYyB2b2lkIG1wdGNwX29wdGlvbnNfd3JpdGUoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gdGhhdCBUQ1AgVHJhbnNtaXNzaW9uIFBhdGgqKgoKQWxyaWdodCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBqdXN0IHJlYWxpemVkIHNvbWV0aGluZyBzaWduaWZpY2FudCEgTG9va2luZyBhdCBgX190Y3BfdHJhbnNtaXRfc2tiKClgLCBpdCBzZWVtcyB0aGF0IGBvcHRzLm1wdGNwYCBpcyAqbm90KiBiZWluZyBjbGVhcmVkIG91dCBhZnRlciB1c2UuIEFuZCBoZXksIHRoZSBjb2RlIGV2ZW4gZXhwbGljaXRseSBjYWxscyBvdXQgdGhhdCBzb21lIGZpZWxkcyBhcmVuJiMzOTt0IGNsZWFyZWQgaW4gdGhhdCBmdW5jdGlvbi4gTXkgaW50dWl0aW9uIHdhcyByaWdodCEKCkFuZCBgb3B0cy5tcHRjcGAsIG9mIGNvdXJzZSwgaXMgYSBgc3RydWN0IG1wdGNwX291dF9vcHRpb25zYC4gVGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIHNvbWUgbmFzdHkgc3RhdGUgbGVha2FnZSwgZXNwZWNpYWxseSBpZiBhIHByZXZpb3VzIE1QVENQIGNvbm5lY3Rpb24mIzM5O3Mgb3B0aW9ucyBhcmUgbGluZ2VyaW5nLiBJIHNob3VsZCByZWFsbHkgZGl2ZSBpbnRvIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnNgIGFuZCB1bmRlcnN0YW5kIHdoYXQga2luZHMgb2YgaW5mb3JtYXRpb24gaXQmIzM5O3Mgc3RvcmluZy4gSXQmIzM5O3MgdGltZSB0byBmdWxseSB1bnBhY2sgd2hhdCYjMzk7cyBpbiB0aGVyZS4gSSBiZXQgdGhlcmUgYXJlIHNvbWUgc2VjdXJpdHkgaW1wbGljYXRpb25zIHRvIGNvbnNpZGVyIGlmIGl0JiMzOTtzIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGJ1Zywgb3IgYXQgbGVhc3QgYSBzdWJ0bGUgb3B0aW1pemF0aW9uIHRoYXQgbmVlZHMgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbXB0Y3AuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9tcHRjcC5oPTUwPXN0cnVjdCBtcHRjcF9hZGRyX2luZm8ge1xuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtNjEtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjYyOnN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyB7XG5pbmNsdWRlL25ldC9tcHRjcC5oLTYzLSNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxNTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnNgKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9uc2AuIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgb3V0Ym91bmQgTVBUQ1Agb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlIGl0c2VsZiwgYW5kICp0aGVuKiBJIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgcGFyYW1ldGVycyBmb3IgTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBkYXRhIHRyYW5zZmVyLiBUaGluZ3MgbGlrZSB0aGUgTVBfQ0FQQUJMRSBvcHRpb24mIzM5O3MgcGFyYW1ldGVycyBzaG91bGQgYmUgaW4gaGVyZSwgcHJvYmFibHkgdGhlIGFkZHJlc3MgZm9yIHRoZSBTVUJGTE9XX0lORk8sIGFuZCBsaWtlbHkgdGhlIGZsYWdzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb25uZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgdHlwZXMgYW5kIHRoZWlyIHNpemVzLCBhcyB0aG9zZSBjaG9pY2VzIG9mdGVuIGdpdmUgaGludHMgYWJvdXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBwb3RlbnRpYWwgbGltaXRhdGlvbnMuIEkmIzM5O20gYWxzbyBnb2luZyB0byBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBhZGRpbmcgb3IgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZGlmZmVyZW50IENQVSBhcmNoaXRlY3R1cmVzLiBUaGlzIG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZSBvcHRpb24gZGF0YSBpcyBtYXJzaGFsZWQgb3IgdW5tYXJzaGFsZWQgd2l0aGluIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBmbGFncyBpbiBoZXJlIHRoYXQgY291bGQgcmVsYXRlIHRvIHNlY3VyaXR5IG9yIGNvbmdlc3Rpb24gY29udHJvbC4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBob3BpbmcgdG8gZmluZCBjbGVhciBkb2N1bWVudGF0aW9uLCBhbHRob3VnaC4uLiB3ZWxsLCB5b3Uga25vdyBob3cgdGhhdCBnb2VzIGluIGtlcm5lbCBjb2RlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L21wdGNwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYyOlx0c3RydWN0IG1wdGNwX291dF9vcHRpb25zIHtcbiAgNjM6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG4gIDY0Olx0XHR1MTYgc3Vib3B0aW9ucztcbiAgNjU6XHRcdHN0cnVjdCBtcHRjcF9ybV9saXN0IHJtX2xpc3Q7XG4gIDY2Olx0XHR1OCBqb2luX2lkO1xuICA2NzpcdFx0dTggYmFja3VwO1xuICA2ODpcdFx0dTggcmVzZXRfcmVhc29uOjQsXG4gIDY5Olx0XHQgICByZXNldF90cmFuc2llbnQ6MSxcbiAgNzA6XHRcdCAgIGNzdW1fcmVxZDoxLFxuICA3MTpcdFx0ICAgYWxsb3dfam9pbl9pZDA6MSxcbiAgNzI6XHRcdCAgIGRyb3BfdHM6MTtcbiAgNzM6XHRcdHVuaW9uIHtcbiAgNzQ6XHRcdFx0c3RydWN0IHtcbiAgNzU6XHRcdFx0XHR1NjQgc25kcl9rZXk7XG4gIDc2Olx0XHRcdFx0dTY0IHJjdnJfa2V5O1xuICA3NzpcdFx0XHRcdHU2NCBkYXRhX3NlcTtcbiAgNzg6XHRcdFx0XHR1MzIgc3ViZmxvd19zZXE7XG4gIDc5Olx0XHRcdFx0dTE2IGRhdGFfbGVuO1xuICA4MDpcdFx0XHRcdF9fc3VtMTYgY3N1bTtcbiAgODE6XHRcdFx0fTtcbiAgODI6XHRcdFx0c3RydWN0IHtcbiAgODM6XHRcdFx0XHRzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvIGFkZHI7XG4gIDg0Olx0XHRcdFx0dTY0IGFobWFjO1xuICA4NTpcdFx0XHR9O1xuICA4NjpcdFx0XHRzdHJ1Y3Qge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDgyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIE1QVENQIGtlcm5lbCBjb2RlOgoKKipEaXZpbmcgaW50byBgbXB0Y3Bfb3V0X29wdGlvbnNgKioKCkhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhhdCByaWdodD8gVGhlIGBtcHRjcF9vdXRfb3B0aW9uc2Agc3RydWN0dXJlIGFjdHVhbGx5ICpjb250YWlucyogYSBgc3RydWN0IG1wdGNwX2V4dCBleHRfY29weWA/IEhtbS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSYjMzk7cmUgc3RydWN0dXJlZCB0aGF0IHdheSBhbmQgd2hhdCBpdCBtZWFucyBmb3IgdGhlIG92ZXJhbGwgZmxvdy4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBtZW1iZXJzLCB0aGVpciB0eXBlcywgYW5kIGhvdyB0aGlzIGVtYmVkZGVkIHN0cnVjdHVyZSBpcyB1c2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQgbWVhbnMgYW4gZXh0cmEgY29weSBpcyBiZWluZyBtYWRlIGhlcmUgd2hlbiBJIGRvbiYjMzk7dCBleHBlY3QgaXQgdG8gYmUsIG1heWJlIGZvciBzb21lIHN0cmFuZ2UgcmVhc29uLiBJIHNob3VsZCBjaGVjayB3aGVyZSB0aGlzIHN0cnVjdCBpcyB1c2VkLCB0b28uIExldCYjMzk7cyBzZWUuLi4gaXMgaXQgZm9yIHNvbWUgc29ydCBvZiBzdGF0ZSBtYW5hZ2VtZW50IG9yIG1heWJlIHNvbWUgc29ydCBvZiBjb3B5LW9uLXdyaXRlIG9wdGltaXphdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBmdW5jdGlvbnMgY291bGQgYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBzb21lIHN0cmFuZ2UgYmVoYXZpb3VyIEkmIzM5O3ZlIG9ic2VydmVkIG9yIGZpeGluZyBzb21lIHZlcnkgc3VidGxlIGJ1Zy4gSSYjMzk7dmUgZ290IHRvIGZvbGxvdyB0aGlzIHRocm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbXB0Y3AuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdFx0XHRfX3N1bTE2IGNzdW07XG4gIDgxOlx0XHRcdH07XG4gIDgyOlx0XHRcdHN0cnVjdCB7XG4gIDgzOlx0XHRcdFx0c3RydWN0IG1wdGNwX2FkZHJfaW5mbyBhZGRyO1xuICA4NDpcdFx0XHRcdHU2NCBhaG1hYztcbiAgODU6XHRcdFx0fTtcbiAgODY6XHRcdFx0c3RydWN0IHtcbiAgODc6XHRcdFx0XHRzdHJ1Y3QgbXB0Y3BfZXh0IGV4dF9jb3B5O1xuICA4ODpcdFx0XHRcdHU2NCBmYWlsX3NlcTtcbiAgODk6XHRcdFx0fTtcbiAgOTA6XHRcdFx0c3RydWN0IHtcbiAgOTE6XHRcdFx0XHR1MzIgbm9uY2U7XG4gIDkyOlx0XHRcdFx0dTMyIHRva2VuO1xuICA5MzpcdFx0XHRcdHU2NCB0aG1hYztcbiAgOTQ6XHRcdFx0XHR1OCBobWFjW01QVENQT1BUX0hNQUNfTEVOXTtcbiAgOTU6XHRcdFx0fTtcbiAgOTY6XHRcdH07XG4gIDk3Olx0I2VuZGlmXG4gIDk4Olx0fTtcbiAgOTk6XHRcbiAxMDA6XHQjZGVmaW5lIE1QVENQX1NDSEVEX05BTUVfTUFYXHQxNlxuIDEwMTpcdCNkZWZpbmUgTVBUQ1BfU0NIRURfTUFYXHRcdDEyOFxuIDEwMjpcdCNkZWZpbmUgTVBUQ1BfU0NIRURfQlVGX01BWFx0KE1QVENQX1NDSEVEX05BTUVfTUFYICogTVBUQ1BfU0NIRURfTUFYKVxuIDEwMzpcdFxuIDEwNDpcdHN0cnVjdCBtcHRjcF9zY2hlZF9vcHMge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ4OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIFN0YWNrIE1lbW9yeSBpbiBNUFRDUCBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMsIGFuZCBpdCBsb29rcyBsaWtlIGBleHRfY29weWAgKmlzKiBpbmRlZWQgbmVzdGxlZCB3aXRoaW4gYSB1bmlvbiBpbnNpZGUgYHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9uc2AuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBpZWNlLiBOb3csIEkmIzM5O20gc2VlaW5nIHRoYXQgYG9wdHMubXB0Y3BgIGlzbiYjMzk7dCBnZXR0aW5nIGNsZWFyZWQgaW4gYF9fdGNwX3RyYW5zbWl0X3NrYigpYC4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSByYWlzaW5nIGEgcmVkIGZsYWcuIFRoaXMgbWVhbnMgYG9wdHMubXB0Y3AuZXh0X2NvcHlgIHBvdGVudGlhbGx5IGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGRpcmVjdGx5IGluaGVyaXRlZCBmcm9tIGBfX3RjcF90cmFuc21pdF9za2IoKWAhCgpIb2xkIG9uLCB0aG91Z2guLi4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gSSBzZWUgdGhhdCBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3NgICpkb2VzKiBwZXJmb3JtIGEgYG1lbXNldGAgb24gYG9wdHMtJmd0O2V4dF9jb3B5LmZsYWdzYC4gQnV0IGNydWNpYWxseSwgaXQgKmRvZXNuJiMzOTt0KiB6ZXJvIHRoZSAqcmVzdCogb2YgYG9wdHMtJmd0O2V4dF9jb3B5YCBpZiBgbXBleHRgIGlzIE5VTEwhIFRoaXMgaXMga2V5LiBJZiBgbXBleHRgIGlzIG51bGwsIHdoaWNoIGlzIG5vdCB1bmNvbW1vbiBpbiBzb21lIGNvbnRleHRzLCB0aGVuIGBvcHRzLSZndDtleHRfY29weWAgcmVtYWlucyBsYXJnZWx5IHVuaW5pdGlhbGl6ZWQsIGV4Y2VwdCBmb3IgdGhhdCBpbml0aWFsIGBmbGFnc2AgbWVtYmVyLgoKTm93LCB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIHdoZW4gYG1wdGNwX3dyaXRlX2RhdGFfZmluYCBpcyBjYWxsZWQ6CgpgYGBjCgkJaWYgKHNrYiAmYW1wOyZhbXA7IHNuZF9kYXRhX2Zpbl9lbmFibGUpCgkJCW1wdGNwX3dyaXRlX2RhdGFfZmluKHN1YmZsb3csIHNrYiwgJmFtcDtvcHRzLSZndDtleHRfY29weSk7CmBgYAoKV2l0aGluIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAsIHRoZXJlJiMzOTtzIGEgcGFydGljdWxhciBicmFuY2g6CgpgYGBjCglpZiAoIWV4dC0mZ3Q7dXNlX21hcCB8fCAhc2tiLSZndDtsZW4pIHsKCQlleHQtJmd0O2RhdGFfZmluID0gMTsKCQlleHQtJmd0O3VzZV9tYXAgPSAxOwoJCWV4dC0mZ3Q7ZHNuNjQgPSAxOwoJCWV4dC0mZ3Q7ZGF0YV9zZXEgPSBkYXRhX2Zpbl90eF9zZXE7CgkJZXh0LSZndDtzdWJmbG93X3NlcSA9IDA7CgkJZXh0LSZndDtkYXRhX2xlbiA9IDE7CgkJZXh0LSZndDtjc3VtID0gMDsKCX0KYGBgCgpXYWl0IGEgbWludXRlLi4uIEJlZm9yZSB0aGlzIGNoYW5nZSwgYGV4dC0mZ3Q7Y3N1bWAgd2FzbiYjMzk7dCBiZWluZyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluICp0aGlzKiBjb2RlIHBhdGghIEFuZCByZW1lbWJlciwgYGV4dC0mZ3Q7Y3N1bWAgaXMgcGFydCBvZiBgb3B0cy0mZ3Q7ZXh0X2NvcHlgLCB3aGljaCB3ZSYjMzk7dmUgYWxyZWFkeSBlc3RhYmxpc2hlZCBtaWdodCBjb250YWluIHRoYXQganVpY3kgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkuIFNvLCB3ZSYjMzk7cmUgZ3JhYmJpbmcgYSB2YWx1ZSwgYW5kIHVzaW5nIGl0IHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLgoKQWZ0ZXIgdGhhdCwgdGhlIGBvcHRzYCBzdHJ1Y3R1cmUgZ2V0cyBwYXNzZWQgYmFjayBpbnRvIGBfX3RjcF90cmFuc21pdF9za2IoKWAsIHdoaWNoIGxlYWRzIHRvIGBtcHRjcF9vcHRpb25zX3dyaXRlKClgIGdldHRpbmcgY2FsbGVkIHRvLCBhcyBleHBlY3RlZCwgd3JpdGUgdGhlIG9wdGlvbnMgdG8gdGhlIFRDUCBoZWFkZXIuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0LCBiZWNhdXNlIHRoaXMgdW5pbml0aWFsaXplZCBzdGF0ZSBjb3VsZCBiZSBjYXVzaW5nIGFsbCBzb3J0cyBvZiBvZGQgYmVoYXZpb3JzIGRvd25zdHJlYW0uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gYG1wdGNwX29wdGlvbnNfd3JpdGUoKWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX291dHB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDU6XHRzdGF0aWMgdm9pZCBtcHRjcF9vcHRpb25zX3dyaXRlKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0cixcbiA0NDY6XHRcdFx0XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAsXG4gNDQ3Olx0XHRcdFx0XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzKVxuIDQ0ODpcdHtcbiA0NDk6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG4gNDUwOlx0XHRpZiAodW5saWtlbHkoT1BUSU9OX01QVENQIFx1MDAyNiBvcHRzLVx1MDAzZW9wdGlvbnMpKVxuIDQ1MTpcdFx0XHRtcHRjcF93cml0ZV9vcHRpb25zKHRoLCBwdHIsIHRwLCBcdTAwMjZvcHRzLVx1MDAzZW1wdGNwKTtcbiA0NTI6XHQjZW5kaWZcbiA0NTM6XHR9XG4gNDU0Olx0XG4gNDU1Olx0I2lmZGVmIENPTkZJR19DR1JPVVBfQlBGXG4gNDU2Olx0c3RhdGljIGludCBicGZfc2tvcHNfd3JpdGVfaGRyX29wdF9hcmcwKHN0cnVjdCBza19idWZmICpza2IsXG4gNDU3Olx0XHRcdFx0XHRcdGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlKVxuIDQ1ODpcdHtcbiA0NTk6XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA0NjA6XHRcdFx0cmV0dXJuIEJQRl9XUklURV9IRFJfVENQX0NVUlJFTlRfTVNTO1xuIDQ2MTpcdFxuIDQ2MjpcdFx0aWYgKHVubGlrZWx5KHN5bmFja190eXBlID09IFRDUF9TWU5BQ0tfQ09PS0lFKSlcbiA0NjM6XHRcdFx0cmV0dXJuIEJQRl9XUklURV9IRFJfVENQX1NZTkFDS19DT09LSUU7XG4gNDY0Olx0XG4gNDY1Olx0XHRyZXR1cm4gMDtcbiA0NjY6XHR9XG4gNDY3Olx0XG4gNDY4Olx0LyogcmVxLCBzeW5fc2tiIGFuZCBzeW5hY2tfdHlwZSBhcmUgdXNlZCB3aGVuIHdyaXRpbmcgc3luYWNrICovXG4gNDY5Olx0c3RhdGljIHUzMiBicGZfc2tvcHNfaGRyX29wdF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDQ3MDpcdFx0XHRcdFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiA0NzE6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc3luX3NrYixcbiA0NzI6XHRcdFx0XHRcdCBlbnVtIHRjcF9zeW5hY2tfdHlwZSBzeW5hY2tfdHlwZSxcbiA0NzM6XHRcdFx0XHRcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxuIDQ3NDpcdFx0XHRcdFx0IHUzMiByZW1haW5pbmcpXG4gNDc1Olx0e1xuIDQ3NjpcdFx0c3RydWN0IGJwZl9zb2NrX29wc19rZXJuIHNvY2tfb3BzO1xuIDQ3NzpcdFx0aW50IGVycjtcbiA0Nzg6XHRcbiA0Nzk6XHRcdGlmIChsaWtlbHkoIUJQRl9TT0NLX09QU19URVNUX0ZMQUcodGNwX3NrKHNrKSxcbiA0ODA6XHRcdFx0XHRcdFx0ICAgQlBGX1NPQ0tfT1BTX1dSSVRFX0hEUl9PUFRfQ0JfRkxBRykpIHx8XG4gNDgxOlx0XHQgICAgIXJlbWFpbmluZylcbiA0ODI6XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcbiA0ODM6XHRcbiA0ODQ6XHRcdC8qIHJlbWFpbmluZyBoYXMgYWxyZWFkeSBiZWVuIGFsaWduZWQgdG8gNCBieXRlcywgc28gcmVtYWluaW5nIFx1MDAzZT0gNCAqL1xuIDQ4NTpcdFxuIDQ4NjpcdFx0LyogaW5pdCBzb2NrX29wcyAqL1xuIDQ4NzpcdFx0bWVtc2V0KFx1MDAyNnNvY2tfb3BzLCAwLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHRlbXApKTtcbiA0ODg6XHRcbiA0ODk6XHRcdHNvY2tfb3BzLm9wID0gQlBGX1NPQ0tfT1BTX0hEUl9PUFRfTEVOX0NCO1xuIDQ5MDpcdFxuIDQ5MTpcdFx0aWYgKHJlcSkge1xuIDQ5MjpcdFx0XHQvKiBUaGUgbGlzdGVuIFwmIzM0O3NrXCYjMzQ7IGNhbm5vdCBiZSBwYXNzZWQgaGVyZSBiZWNhdXNlXG4gNDkzOlx0XHRcdCAqIGl0IGlzIG5vdCBsb2NrZWQuICBJdCB3b3VsZCBub3QgbWFrZSB0b28gbXVjaFxuIDQ5NDpcdFx0XHQgKiBzZW5zZSB0byBkbyBicGZfc2V0c29ja29wdChsaXN0ZW5fc2spIGJhc2VkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTXVsdGlwYXRoIFRDUCBXcml0ZSBPcHRpb25zKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBkZWx2ZSBpbnRvIGBtcHRjcF93cml0ZV9vcHRpb25zYC4gU3BlY2lmaWNhbGx5LCBJIGtub3cgaXQmIzM5O3MgbG9jYXRlZCB3aXRoaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSB2YXJpb3VzIHdyaXRlIG9wdGlvbnMgZm9yIE11bHRpcGF0aCBUQ1AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRoZSBkaWZmZXJlbnQgY29udHJvbCBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIG5lZ290aWF0ZWQgZHVyaW5nIHRoZSB3cml0ZSBwcm9jZXNzLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIgb3BlcmF0aW9uIGFzIGl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhcHBsaWNhdGlvbiB3cml0ZSByZXF1ZXN0cyBhcmUgcGFyc2VkIGFuZCBpbnRlcnByZXRlZCB3aXRoaW4gdGhlIE11bHRpcGF0aCBjb250ZXh0LiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgdGhleSBhcmUgZW5jb2RlZCBhbmQgZGVjb2RlZCBpbnRvIHRoZSBUQ1AgaGVhZGVyIGZvciB0cmFuc21pc3Npb24gYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgY29ubmVjdGlvbiBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3Avb3B0aW9ucy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ3MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDcyOlx0dm9pZCBtcHRjcF93cml0ZV9vcHRpb25zKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCxcbjE0NzM6XHRcdFx0XHQgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKVxuMTQ3NDpcdHtcbjE0NzU6XHRcdGNvbnN0IHN0cnVjdCBzb2NrICpzc2sgPSAoY29uc3Qgc3RydWN0IHNvY2sgKil0cDtcbjE0NzY6XHRcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4xNDc3Olx0XG4xNDc4Olx0XHQvKiBXaGljaCBvcHRpb25zIGNhbiBiZSB1c2VkIHRvZ2V0aGVyP1xuMTQ3OTpcdFx0ICpcbjE0ODA6XHRcdCAqIFg6IG11dHVhbGx5IGV4Y2x1c2l2ZVxuMTQ4MTpcdFx0ICogTzogb2Z0ZW4gdXNlZCB0b2dldGhlclxuMTQ4MjpcdFx0ICogQzogY2FuIGJlIHVzZWQgdG9nZXRoZXIgaW4gc29tZSBjYXNlc1xuMTQ4MzpcdFx0ICogUDogY291bGQgYmUgdXNlZCB0b2dldGhlciBidXQgd2UgcHJlZmVyIG5vdCB0byAob3B0aW1pc2F0aW9ucylcbjE0ODQ6XHRcdCAqXG4xNDg1Olx0XHQgKiAgT3B0OiB8IE1QQyAgfCBNUEogIHwgRFNTICB8IEFERCAgfCAgUk0gIHwgUFJJTyB8IEZBSUwgfCAgRkMgIHxcbjE0ODY6XHRcdCAqIC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuMTQ4NzpcdFx0ICogIE1QQyAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4xNDg4Olx0XHQgKiAgTVBKICB8ICBYICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbjE0ODk6XHRcdCAqICBEU1MgIHwgIFggICB8ICBYICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuMTQ5MDpcdFx0ICogIEFERCAgfCAgWCAgIHwgIFggICB8ICBQICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4xNDkxOlx0XHQgKiAgUk0gICB8ICBDICAgfCAgQyAgIHwgIEMgICB8ICBQICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbjE0OTI6XHRcdCAqICBQUklPIHwgIFggICB8ICBDICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuMTQ5MzpcdFx0ICogIEZBSUwgfCAgWCAgIHwgIFggICB8ICBDICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXwtLS0tLS18XG4xNDk0Olx0XHQgKiAgRkMgICB8ICBYICAgfCAgWCAgIHwgIFAgICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfC0tLS0tLXxcbjE0OTU6XHRcdCAqICBSU1QgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIE8gICB8ICBPICAgfFxuMTQ5NjpcdFx0ICogLS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4xNDk3Olx0XHQgKlxuMTQ5ODpcdFx0ICogVGhlIHNhbWUgYXBwbGllcyBpbiBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKCkgZnVuY3Rpb24uXG4xNDk5Olx0XHQgKi9cbjE1MDA6XHRcdGlmIChsaWtlbHkoT1BUSU9OX01QVENQX0RTUyBcdTAwMjYgb3B0cy1cdTAwM2VzdWJvcHRpb25zKSkge1xuMTUwMTpcdFx0XHRzdHJ1Y3QgbXB0Y3BfZXh0ICptcGV4dCA9IFx1MDAyNm9wdHMtXHUwMDNlZXh0X2NvcHk7XG4xNTAyOlx0XHRcdHU4IGxlbiA9IFRDUE9MRU5fTVBUQ1BfRFNTX0JBU0U7XG4xNTAzOlx0XHRcdHU4IGZsYWdzID0gMDtcbjE1MDQ6XHRcbjE1MDU6XHRcdFx0aWYgKG1wZXh0LVx1MDAzZXVzZV9hY2spIHtcbjE1MDY6XHRcdFx0XHRmbGFncyA9IE1QVENQX0RTU19IQVNfQUNLO1xuMTUwNzpcdFx0XHRcdGlmIChtcGV4dC1cdTAwM2VhY2s2NCkge1xuMTUwODpcdFx0XHRcdFx0bGVuICYjNDM7PSBUQ1BPTEVOX01QVENQX0RTU19BQ0s2NDtcbjE1MDk6XHRcdFx0XHRcdGZsYWdzIHw9IE1QVENQX0RTU19BQ0s2NDtcbjE1MTA6XHRcdFx0XHR9IGVsc2Uge1xuMTUxMTpcdFx0XHRcdFx0bGVuICYjNDM7PSBUQ1BPTEVOX01QVENQX0RTU19BQ0szMjtcbjE1MTI6XHRcdFx0XHR9XG4xNTEzOlx0XHRcdH1cbjE1MTQ6XHRcbjE1MTU6XHRcdFx0aWYgKG1wZXh0LVx1MDAzZXVzZV9tYXApIHtcbjE1MTY6XHRcdFx0XHRsZW4gJiM0Mzs9IFRDUE9MRU5fTVBUQ1BfRFNTX01BUDY0O1xuMTUxNzpcdFxuMTUxODpcdFx0XHRcdC8qIFVzZSBvbmx5IDY0LWJpdCBtYXBwaW5nIGZsYWdzIGZvciBub3csIGFkZFxuMTUxOTpcdFx0XHRcdCAqIHN1cHBvcnQgZm9yIG9wdGlvbmFsIDMyLWJpdCBtYXBwaW5ncyBsYXRlci5cbjE1MjA6XHRcdFx0XHQgKi9cbjE1MjE6XHRcdFx0XHRmbGFncyB8PSBNUFRDUF9EU1NfSEFTX01BUCB8IE1QVENQX0RTU19EU042NDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBgbXB0Y3Bfd3JpdGVfb3B0aW9uc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbXB0Y3Bfd3JpdGVfb3B0aW9uc2AuIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBNUFRDUCBhcmNoaXRlY3R1cmUsIGJ1dCBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mICpwcmVjaXNlbHkqIGhvdyB0aGVzZSB3cml0ZSBvcHRpb25zIGFyZSBoYW5kbGVkLiBXaGF0IGFyZSB0aGUgbnVhbmNlcz8gV2hhdCBlZGdlIGNhc2VzIGFtIEkgbWlzc2luZz8gSSBuZWVkIHRvIGVuc3VyZSBteSBncmFzcCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbXByZWhlbnNpdmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXRzIHJvbGUgaW4gZmxvdyBjb250cm9sLCBjb25nZXN0aW9uIG1hbmFnZW1lbnQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc3ViZmxvdyBzZWxlY3Rpb24gbG9naWMuIERvZXMgaXQgaW50ZXJhY3Qgd2l0aCByZXRyYW5zbWlzc2lvbnMgaW4gc29tZSB3YXk/IEFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSBzb21ldGhpbmcgSSBhbSBpbnRlcmVzdGVkIGluLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgYW55IHJlYWwtd29ybGQgb3B0aW1pemF0aW9uIG9yIGRlYnVnZ2luZyBlZmZvcnRzIEkgbWlnaHQgdW5kZXJ0YWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MjI6XHRcdFx0XHRpZiAobXBleHQtXHUwMDNlZGF0YV9maW4pXG4xNTIzOlx0XHRcdFx0XHRmbGFncyB8PSBNUFRDUF9EU1NfREFUQV9GSU47XG4xNTI0Olx0XG4xNTI1Olx0XHRcdFx0aWYgKG9wdHMtXHUwMDNlY3N1bV9yZXFkKVxuMTUyNjpcdFx0XHRcdFx0bGVuICYjNDM7PSBUQ1BPTEVOX01QVENQX0RTU19DSEVDS1NVTTtcbjE1Mjc6XHRcdFx0fVxuMTUyODpcdFxuMTUyOTpcdFx0XHQqcHRyJiM0MzsmIzQzOyA9IG1wdGNwX29wdGlvbihNUFRDUE9QVF9EU1MsIGxlbiwgMCwgZmxhZ3MpO1xuMTUzMDpcdFxuMTUzMTpcdFx0XHRpZiAobXBleHQtXHUwMDNldXNlX2Fjaykge1xuMTUzMjpcdFx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XG4xNTMzOlx0XHRcdFx0dTY0IGFja19zZXE7XG4xNTM0Olx0XG4xNTM1Olx0XHRcdFx0LyogRFNTIG9wdGlvbiBpcyBzZXQgb25seSBieSBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zLFxuMTUzNjpcdFx0XHRcdCAqIHRoZSBjYWxsZXIgaXMgX190Y3BfdHJhbnNtaXRfc2tiKCkgYW5kIHNzayBpcyBhbHdheXNcbjE1Mzc6XHRcdFx0XHQgKiBub3QgTlVMTC5cbjE1Mzg6XHRcdFx0XHQgKi9cbjE1Mzk6XHRcdFx0XHRzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcbjE1NDA6XHRcdFx0XHRtc2sgPSBtcHRjcF9zayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuMTU0MTpcdFx0XHRcdGFja19zZXEgPSBSRUFEX09OQ0UobXNrLVx1MDAzZWFja19zZXEpO1xuMTU0MjpcdFx0XHRcdGlmIChtcGV4dC1cdTAwM2VhY2s2NCkge1xuMTU0MzpcdFx0XHRcdFx0cHV0X3VuYWxpZ25lZF9iZTY0KGFja19zZXEsIHB0cik7XG4xNTQ0Olx0XHRcdFx0XHRwdHIgJiM0Mzs9IDI7XG4xNTQ1Olx0XHRcdFx0fSBlbHNlIHtcbjE1NDY6XHRcdFx0XHRcdHB1dF91bmFsaWduZWRfYmUzMihhY2tfc2VxLCBwdHIpO1xuMTU0NzpcdFx0XHRcdFx0cHRyICYjNDM7PSAxO1xuMTU0ODpcdFx0XHRcdH1cbjE1NDk6XHRcdFx0XHRzdWJmbG93LVx1MDAzZXJjdl93bmRfc2VudCA9IG1wdGNwX3NldF9yd2luKG1zaywgdHAsIHRoLFxuMTU1MDpcdFx0XHRcdFx0XHRcdFx0ICAgICAgIGFja19zZXEpO1xuMTU1MTpcdFx0XHR9XG4xNTUyOlx0XG4xNTUzOlx0XHRcdGlmIChtcGV4dC1cdTAwM2V1c2VfbWFwKSB7XG4xNTU0Olx0XHRcdFx0cHV0X3VuYWxpZ25lZF9iZTY0KG1wZXh0LVx1MDAzZWRhdGFfc2VxLCBwdHIpO1xuMTU1NTpcdFx0XHRcdHB0ciAmIzQzOz0gMjtcbjE1NTY6XHRcdFx0XHRwdXRfdW5hbGlnbmVkX2JlMzIobXBleHQtXHUwMDNlc3ViZmxvd19zZXEsIHB0cik7XG4xNTU3Olx0XHRcdFx0cHRyICYjNDM7PSAxO1xuMTU1ODpcdFx0XHRcdGlmIChvcHRzLVx1MDAzZWNzdW1fcmVxZCkge1xuMTU1OTpcdFx0XHRcdFx0LyogZGF0YV9sZW4gPT0gMCBpcyByZXNlcnZlZCBmb3IgdGhlIGluZmluaXRlIG1hcHBpbmcsXG4xNTYwOlx0XHRcdFx0XHQgKiB0aGUgY2hlY2tzdW0gd2lsbCBhbHNvIGJlIHNldCB0byAwLlxuMTU2MTpcdFx0XHRcdFx0ICovXG4xNTYyOlx0XHRcdFx0XHRwdXRfbGVuX2NzdW0obXBleHQtXHUwMDNlZGF0YV9sZW4sXG4xNTYzOlx0XHRcdFx0XHRcdCAgICAgKG1wZXh0LVx1MDAzZWRhdGFfbGVuID8gbXB0Y3BfbWFrZV9jc3VtKG1wZXh0KSA6IDApLFxuMTU2NDpcdFx0XHRcdFx0XHQgICAgIHB0cik7XG4xNTY1Olx0XHRcdFx0fSBlbHNlIHtcbjE1NjY6XHRcdFx0XHRcdHB1dF91bmFsaWduZWRfYmUzMihtcGV4dC1cdTAwM2VkYXRhX2xlbiBcdTAwM2NcdTAwM2MgMTYgfFxuMTU2NzpcdFx0XHRcdFx0XHRcdCAgIFRDUE9QVF9OT1AgXHUwMDNjXHUwMDNjIDggfCBUQ1BPUFRfTk9QLCBwdHIpO1xuMTU2ODpcdFx0XHRcdH1cbjE1Njk6XHRcdFx0XHRwdHIgJiM0Mzs9IDE7XG4xNTcwOlx0XHRcdH1cbjE1NzE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3NzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ2hlY2tzdW0gQ2FsY3VsYXRpb24gSW5jb21pbmcqKgoKUmlnaHQsICphaGEhKiBJJiMzOTttIHNlZWluZyB0aGUgYG1wdGNwX21ha2VfY3N1bShtcGV4dClgIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjaGVja3N1bSBnZW5lcmF0aW9uIHdpdGhpbiB0aGUgTVBUQ1AgZnJhbWV3b3JrLiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGV4YW1pbmluZyBgbXB0Y3BfbWFrZV9jc3VtYCBhbmQgZGlzc2VjdCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGludGVncml0eSB2ZXJpZmljYXRpb24gaGFwcGVucywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBjaGVja3N1bSBpcyBkZXJpdmVkLiBXaGF0IHNwZWNpZmljIGBtcGV4dGAgZGF0YSBpcyBiZWluZyBmZWQgaW4/IElzIGl0IHRoZSBjb21wbGV0ZSBNUFRDUCBoZWFkZXI/IEp1c3QgdGhlIGV4dGVuc2lvbiBkYXRhPyBBbmQsIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgYWxnb3JpdGhtIGlzIGJlaW5nIHVzZWQ/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgZmllbGRzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCBhbmQgaG93IHRoZXkgdWx0aW1hdGVseSBjb250cmlidXRlIHRvIHRoZSBmaW5hbCBjaGVja3N1bS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGx1cmtpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24uIE15IGRlZXAgZGl2ZSBiZWdpbnMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9tYWtlX2NzdW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmM9MTQyMz1zdGF0aWMgdm9pZCBtcHRjcF90cmFja19yd2luKHN0cnVjdCB0Y3Bfc29jayAqdHApXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xNDM2LVxubmV0L21wdGNwL29wdGlvbnMuYzoxNDM3Ol9fc3VtMTYgX19tcHRjcF9tYWtlX2NzdW0odTY0IGRhdGFfc2VxLCB1MzIgc3ViZmxvd19zZXEsIHUxNiBkYXRhX2xlbiwgX193c3VtIHN1bSlcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQzOC17XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xNDU1LVxubmV0L21wdGNwL29wdGlvbnMuYzoxNDU2OnN0YXRpYyBfX3N1bTE2IG1wdGNwX21ha2VfY3N1bShjb25zdCBzdHJ1Y3QgbXB0Y3BfZXh0ICptcGV4dClcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ1Ny17XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE0NTg6XHRyZXR1cm4gX19tcHRjcF9tYWtlX2NzdW0obXBleHQtXHUwMDNlZGF0YV9zZXEsIG1wZXh0LVx1MDAzZXN1YmZsb3dfc2VxLCBtcGV4dC1cdTAwM2VkYXRhX2xlbixcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ1OS1cdFx0XHRcdCB+Y3N1bV91bmZvbGQobXBleHQtXHUwMDNlY3N1bSkpO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTQ3Mj12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2Mi1cdFx0XHRcdHB1dF9sZW5fY3N1bShtcGV4dC1cdTAwM2VkYXRhX2xlbixcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTU2MzpcdFx0XHRcdFx0ICAgICAobXBleHQtXHUwMDNlZGF0YV9sZW4gPyBtcHRjcF9tYWtlX2NzdW0obXBleHQpIDogMCksXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1NjQtXHRcdFx0XHRcdCAgICAgcHRyKTtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE2MTUtXHRcdFx0cHV0X2xlbl9jc3VtKG9wdHMtXHUwMDNlZGF0YV9sZW4sXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE2MTY6XHRcdFx0XHQgICAgIF9fbXB0Y3BfbWFrZV9jc3VtKG9wdHMtXHUwMDNlZGF0YV9zZXEsXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE2MTctXHRcdFx0XHRcdFx0ICAgICAgIG9wdHMtXHUwMDNlc3ViZmxvd19zZXEsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTA5NT12b2lkIG1wdGNwX2NyeXB0b19obWFjX3NoYSh1NjQga2V5MSwgdTY0IGtleTIsIHU4ICptc2csIGludCBsZW4sIHZvaWQgKmhtYWMpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTA5NjpfX3N1bTE2IF9fbXB0Y3BfbWFrZV9jc3VtKHU2NCBkYXRhX3NlcSwgdTMyIHN1YmZsb3dfc2VxLCB1MTYgZGF0YV9sZW4sIF9fd3N1bSBzdW0pO1xubmV0L21wdGNwL3Byb3RvY29sLmgtMTA5Ny1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTEwMzQ9c3RhdGljIGVudW0gbWFwcGluZ19zdGF0dXMgdmFsaWRhdGVfZGF0YV9jc3VtKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDk5LVx0ICovXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjExMDA6XHRjc3VtID0gX19tcHRjcF9tYWtlX2NzdW0oc3ViZmxvdy1cdTAwM2VtYXBfc2VxLFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMTAxLVx0XHRcdFx0IHN1YmZsb3ctXHUwMDNlbWFwX3N1YmZsb3dfc2VxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg0NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5pbml0aWFsaXplZCBTdGFjayBNZW1vcnkgSW5mb3JtYXRpb24gTGVhayBpbiBNUFRDUCBDaGVja3N1bSBDYWxjdWxhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyByZXZlYWxzIGEgY3JpdGljYWwgZmxhdyBpbiB0aGUgTVBUQ1AgaW1wbGVtZW50YXRpb24gY29uY2VybmluZyBjaGVja3N1bSBjYWxjdWxhdGlvbnMuIEl0IGJvaWxzIGRvd24gdG8gdGhpczogYG1wdGNwX21ha2VfY3N1bWAgcmVsaWVzIG9uIGBtcGV4dC0mZ3Q7Y3N1bWAgdG8gY29tcHV0ZSB0aGUgY2hlY2tzdW0sIHJpZ2h0PyBUaGUgcHJvYmxlbSBpcyB0aGF0IGBtcGV4dC0mZ3Q7Y3N1bWAgY2FuIHJlbWFpbiB1bmluaXRpYWxpemVkLCB3aGljaCBsZWFkcyB0byBhIGNoZWNrc3VtIGNhbGN1bGF0aW9uIHVzaW5nIGdhcmJhZ2Ugc3RhY2sgbWVtb3J5LiBUaGlzIHJlc3VsdGluZyAoaW5jb3JyZWN0KSBjaGVja3N1bSBpcyB0aGVuIHdyaXR0ZW4gdG8gdGhlIFRDUCBoZWFkZXIgYW5kIHRyYW5zbWl0dGVkIGFjcm9zcyB0aGUgbmV0d29yaywgYW5kIHRoYXQmIzM5O3MgdGhlIGluZm8tbGVhay4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgY2hhaW4uIGBfX3RjcF90cmFuc21pdF9za2JgIGFsbG9jYXRlcyBgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyBvcHRzYCBvbiB0aGUgc3RhY2suIFRoZSBzdGFjayBpcyBjbGVhcmVkIGNvcnJlY3RseSwgZXhjZXB0IGZvciBgb3B0cy5tcHRjcGAuIFRoaXMgYG9wdHNgIHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBgbXB0Y3BgIG1lbWJlciwgZ2V0cyBwYXNzZWQgZG93biB0aHJvdWdoIHNldmVyYWwgZnVuY3Rpb25zOiBgdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgLCBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AsIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc2AsIHVsdGltYXRlbHkgbGVhZGluZyB0byBhIHBvdGVudGlhbCBzY2VuYXJpbyB3aGVyZSBgb3B0cy0mZ3Q7ZXh0X2NvcHlgIGlzbiYjMzk7dCBmdWxseSBpbml0aWFsaXplZCBpZiBgbXBleHRgIGlzIE5VTEwgYW5kIGBzbmRfZGF0YV9maW5fZW5hYmxlYCBpcyB0cnVlLiBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gIHNldHMgc29tZSBvZiBgb3B0cy0mZ3Q7ZXh0X2NvcHlgLCBidXQgaXQgKmRvZXNuJiMzOTt0KiBpbml0aWFsaXplIGBleHQtJmd0O2NzdW1gLgoKVGhlIGNvZGUgdGhlbiBwcm9jZWVkcywgd2l0aCBgb3B0cy0mZ3Q7Y3N1bV9yZXFkYCBiZWluZyBzZXQgdG8gdHJ1ZSAqaWYqIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCBhdCB0aGUgc29ja2V0IGxldmVsLiBUaGVuLCBgbXB0Y3Bfd3JpdGVfb3B0aW9uc2AgY2FsbHMgYG1wdGNwX21ha2VfY3N1bWAgd2l0aCB0aGUgdW5pbml0aWFsaXplZCBgbXBleHQtJmd0O2NzdW1gLiBUaGUgcmVzdWx0IGlzIGEgY2hlY2tzdW0gYmFzZWQgb24gcmFuZG9tIHN0YWNrIGRhdGEgdGhhdCBnZXRzIGVtYmVkZGVkIGluIHRoZSBUQ1AgaGVhZGVyIGFuZCwgY3J1Y2lhbGx5LCB0cmFuc21pdHRlZC4KClRoaXMgaXMgZXhhY3RseSB0aGUgdHlwZSBvZiBidWcgdGhhdCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGZsYWcuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHdvdWxkbiYjMzk7dCBjYXRjaCB0aGlzIGJlY2F1c2UgdGhlIG1lbW9yeSBpcyB0ZWNobmljYWxseSBhbGxvY2F0ZWQsIGp1c3QgdW5pbml0aWFsaXplZC4gSSBjYW4gY29uZmlybSB0aGlzIGlzIGEgcmVhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbmZvLWxlYWsuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYG9wdHMtJmd0O2NzdW1fcmVxZGAgY2FuIGFjdHVhbGx5IGJlIHRydWUuIFllcywgZnJvbSBhIHF1aWNrIGNoZWNrLCBJZiB0aGUgTVBUQ1Agc29ja2V0IGhhcyBjaGVja3N1bXMgZW5hYmxlZCwgaXQgKndpbGwqIGJlIHNldC4KCkZpbmFsbHksIEkgY2hlY2tlZCBvdGhlciBwb3RlbnRpYWwgc291cmNlcyBvZiB0aGUgc2FtZSBpc3N1ZS4gSSBkaWRuJiMzOTt0IGZpbmQgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBgZXh0LSZndDtjc3VtYCBpcyB1c2VkIHVuaW5pdGlhbGl6ZWQsIHBhcnRpY3VsYXJseSBpbiB0aGUgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AgYW5kIGBtcHRjcF9ubF9yZW1vdmVfaWRfemVyb19hZGRyZXNzYCBmdW5jdGlvbnMuIFRoZXJlIG1heSBiZSBzb21lIHNtYWxsIGZpeGVzIHRoZXJlLCBidXQgbm90aGluZyByZWxldmFudCB0byB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgZGVmaW5pdGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB3aGVyZSBhbiB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpbmZvLWxlYWsgb2NjdXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbV9rZXJuZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzNzpcdFx0d2hpbGUgKChtc2sgPSBtcHRjcF90b2tlbl9pdGVyX25leHQobmV0LCBcdTAwMjZzX3Nsb3QsIFx1MDAyNnNfbnVtKSkgIT0gTlVMTCkge1xuMTEzODpcdFx0XHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4xMTM5Olx0XHRcdHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gbXNrX2xvY2FsO1xuMTE0MDpcdFx0XHRzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvIGFubm9fYWRkcjtcbjExNDE6XHRcdFx0Ym9vbCBhbm5vdW5jZWQ7XG4xMTQyOlx0XG4xMTQzOlx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2Vjb25uX2xpc3QpIHx8IG1wdGNwX3BtX2lzX3VzZXJzcGFjZShtc2spKVxuMTE0NDpcdFx0XHRcdGdvdG8gbmV4dDtcbjExNDU6XHRcbjExNDY6XHRcdFx0bXB0Y3BfbG9jYWxfYWRkcmVzcygoc3RydWN0IHNvY2tfY29tbW9uICopbXNrLCBcdTAwMjZtc2tfbG9jYWwpO1xuMTE0NzpcdFx0XHRpZiAoIW1wdGNwX2FkZHJlc3Nlc19lcXVhbChcdTAwMjZtc2tfbG9jYWwsIGFkZHIsIGFkZHItXHUwMDNlcG9ydCkpXG4xMTQ4Olx0XHRcdFx0Z290byBuZXh0O1xuMTE0OTpcdFxuMTE1MDpcdFx0XHRsb2NrX3NvY2soc2spO1xuMTE1MTpcdFx0XHQvKiBEcm9wIGEgcG9zc2libHkgcGVuZGluZyBBRERfQUREUiBmb3IgdGhpcyBhZGRyZXNzLiAqL1xuMTE1MjpcdFx0XHRhbm5vX2FkZHIgPSBtc2tfbG9jYWw7XG4xMTUzOlx0XHRcdGFubm9fYWRkci5wb3J0ID0gMDtcbjExNTQ6XHRcdFx0YW5ub3VuY2VkID0gbXB0Y3BfcG1fYW5ub3VuY2VkX3JlbW92ZShtc2ssIFx1MDAyNmFubm9fYWRkcik7XG4xMTU1Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZtc2stXHUwMDNlcG0ubG9jayk7XG4xMTU2Olx0XHRcdGlmIChhbm5vdW5jZWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE5OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzgxCgkJCQkJCQlvdXRwdXQ6IDQ3NwoJCQkJCQkJdGhvdWdodHM6IDEwMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIE1QVENQIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWsqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzdGVwLWJ5LXN0ZXAuIEkmIzM5O3ZlIGJlZW4gZXhhbWluaW5nIHRoaXMgTVBUQ1AgcGF0Y2ggcmVsYXRlZCB0byBLTVNBTiBhbmQgaXRzIGltcGxpY2F0aW9ucy4KCkZpcnN0LCBJIGxvb2tlZCBhdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYG1za19sb2NhbGAgd2hpY2ggc2VlbXMgb2theSwgYW5kIHRoZSBgYW5ub19hZGRyYCBsb29rcyBsaWtlIGl0JiMzOTtzIHByb3Blcmx5IGluaXRpYWxpemVkLiBIb3dldmVyLCB0aGUgY2hhbmdlcyB0byBgbXB0Y3BfdXNlcnNwYWNlX3BtX2FwcGVuZF9uZXdfbG9jYWxfYWRkcmAgYXJlIGEgbG9naWMgc2hpZnQgaW4gaG93IGBpZGAgaXMgYWxsb2NhdGVkIGJ1dCBkb24mIzM5O3Qgc2VlbSBpbW1lZGlhdGVseSBjcml0aWNhbC4gQWxzbywgdGhvc2UgYml0ZmllbGQgY2hhbmdlcyBpbiBgc3luY29va2llcy5jYCBhcmUganVzdCBvcHRpbWl6aW5nIHN0cnVjdCBzaXplLCBub3QgYSBmaXggZm9yIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBTaW1pbGFybHksIHRoZSByZW1vdmFsIG9mIGFuIGFzc2lnbm1lbnQgaW4gYHN1YmZsb3dfdWxwX2Nsb25lYCBpcyBpcnJlbGV2YW50IGhlcmUuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyBpbiBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gIGFuZCB0aGUgY3JpdGljYWwgYGV4dC0mZ3Q7Y3N1bSA9IDA7YCBmaXguIFRoaXMgc2VlbXMgbGlrZSBhIHRleHRib29rIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgdG8gdGhlIG5ldHdvcmsuIGBvcHRzLm1wdGNwYCwgd2hpY2ggaXMgb24gdGhlIHN0YWNrIHdpdGhpbiBgX190Y3BfdHJhbnNtaXRfc2tiYCwgaXNuJiMzOTt0IGJlaW5nIHByb3Blcmx5IGNsZWFyZWQuIFRoZW4sIGluIHRoZSBmdW5jdGlvbiBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gLCB0aGUgcGF0Y2ggaXMgYWRkaW5nIGBleHQtJmd0O2NzdW0gPSAwO2AuIFRoaXMgbWVhbnMgdGhhdCBpZiBpdCYjMzk7cyBjYWxsZWQgd2l0aCBgREFUQV9GSU5gIGFuZCBubyBkYXRhLCBzb21lIG9mIHRoZSBmaWVsZHMgaW4gYGV4dGAgYXJlIGluaXRpYWxpemVkLCBidXQgYGV4dC0mZ3Q7Y3N1bWAgaXMgbWlzc2VkLiBMYXRlciwgYG1wdGNwX3dyaXRlX29wdGlvbnNgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBgbXBleHQtJmd0O2NzdW1gIHZpYSBgbXB0Y3BfbWFrZV9jc3VtYCBhbmQgd3JpdGVzIGl0IHRvIHRoZSBwYWNrZXQuIFRoaXMgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgdGhlbiBsZWFrcyB0byB0aGUgbmV0d29yayB2aWEgdGhlIFRDUCBoZWFkZXIgb3B0aW9ucy4KClRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGlzIGlzIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbmZvcm1hdGlvbiBsZWFrLiBLQVNBTiBpcyB1c2VsZXNzIGhlcmUgYmVjYXVzZSBpdCBkb2VzbiYjMzk7dCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgZm9jdXNlcyBvbiBzcGF0aWFsIGFuZCB0ZW1wb3JhbCBlcnJvcnMuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoIHRoZXNlIHR5cGVzIG9mIGxlYWtzIGJlY2F1c2UgaXQgdHJhY2tzIGluaXRpYWxpemF0aW9uIGF0IHRoZSBiaXQvYnl0ZSBsZXZlbC4gS01TQU4gd2lsbCBzZWUgdGhlIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYG1wdGNwX21ha2VfY3N1bWAuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTj10cnVlYCB0YWcgaXMgY29tcGxldGVseSBqdXN0aWZpZWQgaGVyZSBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgZm9yIHRoZSBsZWFrIG9mIG90aGVyIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIHRoZSBNUFRDUCBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGVzdGVkIHRob3JvdWdobHkgd2l0aCBLTVNBTi4KU28sIGxldCYjMzk7cyB3cml0ZSB0aGlzIGRvd24gY2xlYXJseToKCjEuICBXZSBoYXZlIGEgcGF0Y2ggaW4gYG1wdGNwX3dyaXRlX2RhdGFfZmluYCBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2Agd2hpY2ggZXhwbGljaXRseSBpbml0aWFsaXplcyBgZXh0LSZndDtjc3VtID0gMDtgLgoyLiAgYGV4dGAgaXMgcGFydCBvZiBgb3B0cy0mZ3Q7ZXh0X2NvcHlgIG9mIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgb3B0cy5tcHRjcGAuCjMuICBgb3B0c2AgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBpbiBgX190Y3BfdHJhbnNtaXRfc2tiYCBpbiBgbmV0L2lwdjQvdGNwX291dHB1dC5jYC4KNC4gIGBfX3RjcF90cmFuc21pdF9za2JgIGNsZWFycyBvbmx5IHNwZWNpZmljIGZpZWxkcyBpbiBgb3B0c2AsIGl0IGV4cGxpY2l0bHkgbGVhdmVzIGBvcHRzLm1wdGNwYCB1bmluaXRpYWxpemVkLgo1LiAgV2hlbiBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3NgIGlzIGNhbGxlZCwgaXQgemVyb2VzIHRoZSBgZmxhZ3NgIG9mIGBvcHRzLSZndDtleHRfY29weWAsIGJ1dCBsZWF2ZXMgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdCB1bmluaXRpYWxpemVkIGlmIGBtcGV4dGAgaXMgTlVMTC4KNi4gIElmIGBzbmRfZGF0YV9maW5fZW5hYmxlYCBpcyB0cnVlLCBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gIGlzIGNhbGxlZC4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgb25seSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYGV4dGAsIHdpdGggYGNzdW1gIGJlaW5nIG1pc3NlZC4KNy4gIGBtcHRjcF93cml0ZV9vcHRpb25zYCBjYWxscyBgbXB0Y3BfbWFrZV9jc3VtKG1wZXh0KWAsIHdoaWNoIHJlYWRzIGBtcGV4dC0mZ3Q7Y3N1bWAuCjguICBUaGUgY2hlY2tzdW0gaXMgd3JpdHRlbiB0byB0aGUgVENQIGhlYWRlciBhbmQgc2VudCwgcmVzdWx0aW5nIGluIGFuIGluZm8tbGVhay4KOS4gIEtBU0FOIGlzIHVzZWxlc3MgaGVyZSBiZWNhdXNlIGl0IG9ubHkgZGV0ZWN0cyBzcGF0aWFsIGFuZCB0ZW1wb3JhbCBlcnJvcnMuCjEwLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgcmVxdWlyZWQuCgpJIG5lZWQgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTk6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1wdGNwX3dyaXRlX2RhdGFfZmluKClgIGluIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYGV4dC1cdTAwM2Vjc3VtID0gMDtgLiBUaGUgYGV4dGAgcG9pbnRlciByZWZlcnMgdG8gYG9wdHMtXHUwMDNlZXh0X2NvcHlgLCB3aGljaCBpcyBwYXJ0IG9mIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgb3B0cy5tcHRjcGAuIFxuXG5UcmFjaW5nIHRoZSBhbGxvY2F0aW9uLCBgb3B0c2AgaXMgaW5zdGFudGlhdGVkIGFzIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgaW4gYF9fdGNwX3RyYW5zbWl0X3NrYigpYCAoYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2ApLiBDcnVjaWFsbHksIGBfX3RjcF90cmFuc21pdF9za2IoKWAgb25seSBjbGVhcnMgYSBzcGVjaWZpYyBzdWJzZXQgb2YgZmllbGRzIGluIGBvcHRzYCAoYG9wdHMuY2xlYXJlZGApLCBhbmQgZXhwbGljaXRseSBsZWF2ZXMgYG9wdHMubXB0Y3BgIHVuaW5pdGlhbGl6ZWQgKGFzIG5vdGVkIGJ5IHRoZSBjb21tZW50OiBcJiMzNDtDYXV0aW9uOiBmb2xsb3dpbmcgZmllbGRzIGFyZSBub3QgY2xlYXJlZCBpbiBfX3RjcF90cmFuc21pdF9za2IoKVwmIzM0OykuXG5cbldoZW4gYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKClgIHByb2Nlc3NlcyBvcHRpb25zIHdpdGhvdXQgYW4gZXhpc3RpbmcgYG1wZXh0YCwgaXQgemVyb2VzIHRoZSBgZmxhZ3NgIG9mIGBvcHRzLVx1MDAzZWV4dF9jb3B5YCBidXQgbGVhdmVzIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3QgKGluY2x1ZGluZyBgY3N1bWApIHVuaW5pdGlhbGl6ZWQuIElmIGEgREFUQV9GSU4gbmVlZHMgdG8gYmUgc2VudCwgYG1wdGNwX3dyaXRlX2RhdGFfZmluKClgIGlzIGNhbGxlZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGluaXRpYWxpemVkIHNldmVyYWwgZmllbGRzIG9mIGBleHRgIGJ1dCBtaXNzZWQgYGNzdW1gLiBcblxuU3Vic2VxdWVudGx5LCBgbXB0Y3Bfd3JpdGVfb3B0aW9ucygpYCBjYWxscyBgbXB0Y3BfbWFrZV9jc3VtKG1wZXh0KWAsIHdoaWNoIHJlYWRzIHRoZSB1bmluaXRpYWxpemVkIGBtcGV4dC1cdTAwM2Vjc3VtYCBzdGFjayBtZW1vcnkgdG8gY29tcHV0ZSB0aGUgTVBUQ1AgY2hlY2tzdW0uIFRoaXMgY2hlY2tzdW0gaXMgdGhlbiB3cml0dGVuIGludG8gdGhlIFRDUCBoZWFkZXIgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgcmVzdWx0aW5nIGluIGEga2VybmVsIHN0YWNrIG1lbW9yeSBpbmZvLWxlYWsuXG5cblN0YW5kYXJkIEtBU0FOIG9ubHkgZGV0ZWN0cyBzcGF0aWFsIChvdXQtb2YtYm91bmRzKSBhbmQgdGVtcG9yYWwgKHVzZS1hZnRlci1mcmVlKSBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSXQgZG9lcyBub3QgdHJhY2sgbWVtb3J5IGluaXRpYWxpemF0aW9uIHN0YXRlIGFuZCBjYW5ub3QgZGV0ZWN0IHJlYWRzIG9mIGxlZ2FsbHkgYWxsb2NhdGVkIGJ1dCB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYnVnIGFuZCB2ZXJpZnkgdGhhdCBubyBvdGhlciB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgbGVha2VkIGluIE1QVENQIG9wdGlvbnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtcHRjcF93cml0ZV9kYXRhX2ZpbigpYCBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2AgdG8gZXhwbGljaXRseSBpbml0aWFsaXplIGBleHQtXHUwMDNlY3N1bSA9IDA7YC4gVGhlIGBleHRgIHBvaW50ZXIgcmVmZXJzIHRvIGBvcHRzLVx1MDAzZWV4dF9jb3B5YCwgd2hpY2ggaXMgcGFydCBvZiBgc3RydWN0IG1wdGNwX291dF9vcHRpb25zIG9wdHMubXB0Y3BgLiBcblxuVHJhY2luZyB0aGUgYWxsb2NhdGlvbiwgYG9wdHNgIGlzIGluc3RhbnRpYXRlZCBhcyBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGluIGBfX3RjcF90cmFuc21pdF9za2IoKWAgKGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgKS4gQ3J1Y2lhbGx5LCBgX190Y3BfdHJhbnNtaXRfc2tiKClgIG9ubHkgY2xlYXJzIGEgc3BlY2lmaWMgc3Vic2V0IG9mIGZpZWxkcyBpbiBgb3B0c2AgKGBvcHRzLmNsZWFyZWRgKSwgYW5kIGV4cGxpY2l0bHkgbGVhdmVzIGBvcHRzLm1wdGNwYCB1bmluaXRpYWxpemVkIChhcyBub3RlZCBieSB0aGUgY29tbWVudDogXCYjMzQ7Q2F1dGlvbjogZm9sbG93aW5nIGZpZWxkcyBhcmUgbm90IGNsZWFyZWQgaW4gX190Y3BfdHJhbnNtaXRfc2tiKClcJiMzNDspLlxuXG5XaGVuIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcygpYCBwcm9jZXNzZXMgb3B0aW9ucyB3aXRob3V0IGFuIGV4aXN0aW5nIGBtcGV4dGAsIGl0IHplcm9lcyB0aGUgYGZsYWdzYCBvZiBgb3B0cy1cdTAwM2VleHRfY29weWAgYnV0IGxlYXZlcyB0aGUgcmVzdCBvZiB0aGUgc3RydWN0IChpbmNsdWRpbmcgYGNzdW1gKSB1bmluaXRpYWxpemVkLiBJZiBhIERBVEFfRklOIG5lZWRzIHRvIGJlIHNlbnQsIGBtcHRjcF93cml0ZV9kYXRhX2ZpbigpYCBpcyBjYWxsZWQuIEJlZm9yZSB0aGlzIHBhdGNoLCBpdCBpbml0aWFsaXplZCBzZXZlcmFsIGZpZWxkcyBvZiBgZXh0YCBidXQgbWlzc2VkIGBjc3VtYC4gXG5cblN1YnNlcXVlbnRseSwgYG1wdGNwX3dyaXRlX29wdGlvbnMoKWAgY2FsbHMgYG1wdGNwX21ha2VfY3N1bShtcGV4dClgLCB3aGljaCByZWFkcyB0aGUgdW5pbml0aWFsaXplZCBgbXBleHQtXHUwMDNlY3N1bWAgc3RhY2sgbWVtb3J5IHRvIGNvbXB1dGUgdGhlIE1QVENQIGNoZWNrc3VtLiBUaGlzIGNoZWNrc3VtIGlzIHRoZW4gd3JpdHRlbiBpbnRvIHRoZSBUQ1AgaGVhZGVyIGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmssIHJlc3VsdGluZyBpbiBhIGtlcm5lbCBzdGFjayBtZW1vcnkgaW5mby1sZWFrLlxuXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgc3BhdGlhbCAob3V0LW9mLWJvdW5kcykgYW5kIHRlbXBvcmFsICh1c2UtYWZ0ZXItZnJlZSkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEl0IGRvZXMgbm90IHRyYWNrIG1lbW9yeSBpbml0aWFsaXphdGlvbiBzdGF0ZSBhbmQgY2Fubm90IGRldGVjdCByZWFkcyBvZiBsZWdhbGx5IGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBvciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGJ1ZyBhbmQgdmVyaWZ5IHRoYXQgbm8gb3RoZXIgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGxlYWtlZCBpbiBNUFRDUCBvcHRpb25zLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjIzOjAyLjI4NjczNjI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3OTc4MDAzMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jXCIsXG4gICAgXCJfX21wdGNwX3RyeV9mYWxsYmFja1wiLFxuICAgIFwibXB0Y3Bfc2V0X3N0YXRlXCIsXG4gICAgXCJtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oKWAgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgIHRvIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBgZXh0LVxcdTAwM2Vjc3VtID0gMDtgLiBUaGUgYGV4dGAgcG9pbnRlciByZWZlcnMgdG8gYG9wdHMtXFx1MDAzZWV4dF9jb3B5YCwgd2hpY2ggaXMgcGFydCBvZiBgc3RydWN0IG1wdGNwX291dF9vcHRpb25zIG9wdHMubXB0Y3BgLiBcXG5cXG5UcmFjaW5nIHRoZSBhbGxvY2F0aW9uLCBgb3B0c2AgaXMgaW5zdGFudGlhdGVkIGFzIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgaW4gYF9fdGNwX3RyYW5zbWl0X3NrYigpYCAoYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2ApLiBDcnVjaWFsbHksIGBfX3RjcF90cmFuc21pdF9za2IoKWAgb25seSBjbGVhcnMgYSBzcGVjaWZpYyBzdWJzZXQgb2YgZmllbGRzIGluIGBvcHRzYCAoYG9wdHMuY2xlYXJlZGApLCBhbmQgZXhwbGljaXRseSBsZWF2ZXMgYG9wdHMubXB0Y3BgIHVuaW5pdGlhbGl6ZWQgKGFzIG5vdGVkIGJ5IHRoZSBjb21tZW50OiBcXFwiQ2F1dGlvbjogZm9sbG93aW5nIGZpZWxkcyBhcmUgbm90IGNsZWFyZWQgaW4gX190Y3BfdHJhbnNtaXRfc2tiKClcXFwiKS5cXG5cXG5XaGVuIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcygpYCBwcm9jZXNzZXMgb3B0aW9ucyB3aXRob3V0IGFuIGV4aXN0aW5nIGBtcGV4dGAsIGl0IHplcm9lcyB0aGUgYGZsYWdzYCBvZiBgb3B0cy1cXHUwMDNlZXh0X2NvcHlgIGJ1dCBsZWF2ZXMgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdCAoaW5jbHVkaW5nIGBjc3VtYCkgdW5pbml0aWFsaXplZC4gSWYgYSBEQVRBX0ZJTiBuZWVkcyB0byBiZSBzZW50LCBgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oKWAgaXMgY2FsbGVkLiBCZWZvcmUgdGhpcyBwYXRjaCwgaXQgaW5pdGlhbGl6ZWQgc2V2ZXJhbCBmaWVsZHMgb2YgYGV4dGAgYnV0IG1pc3NlZCBgY3N1bWAuIFxcblxcblN1YnNlcXVlbnRseSwgYG1wdGNwX3dyaXRlX29wdGlvbnMoKWAgY2FsbHMgYG1wdGNwX21ha2VfY3N1bShtcGV4dClgLCB3aGljaCByZWFkcyB0aGUgdW5pbml0aWFsaXplZCBgbXBleHQtXFx1MDAzZWNzdW1gIHN0YWNrIG1lbW9yeSB0byBjb21wdXRlIHRoZSBNUFRDUCBjaGVja3N1bS4gVGhpcyBjaGVja3N1bSBpcyB0aGVuIHdyaXR0ZW4gaW50byB0aGUgVENQIGhlYWRlciBhbmQgc2VudCBvdmVyIHRoZSBuZXR3b3JrLCByZXN1bHRpbmcgaW4gYSBrZXJuZWwgc3RhY2sgbWVtb3J5IGluZm8tbGVhay5cXG5cXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgc3BhdGlhbCAob3V0LW9mLWJvdW5kcykgYW5kIHRlbXBvcmFsICh1c2UtYWZ0ZXItZnJlZSkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEl0IGRvZXMgbm90IHRyYWNrIG1lbW9yeSBpbml0aWFsaXphdGlvbiBzdGF0ZSBhbmQgY2Fubm90IGRldGVjdCByZWFkcyBvZiBsZWdhbGx5IGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBvciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGJ1ZyBhbmQgdmVyaWZ5IHRoYXQgbm8gb3RoZXIgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGxlYWtlZCBpbiBNUFRDUCBvcHRpb25zLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHN1YnN5c3RlbSwgaW5jbHVkaW5nIG9wdGlvbnMgcGFyc2luZywgcGF0aCBtYW5hZ2VtZW50IChib3RoIGtlcm5lbCBhbmQgdXNlcnNwYWNlKSwgcHJvdG9jb2wgc3RhdGUgaGFuZGxpbmcsIGFuZCBzeW5jb29raWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MjM6MDIuMjg2NzQ0MThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTU0MDk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY2NWI3MDlkMTRhMzM3NzIxZjlkNDYyZDU4ODZiOGQ0YWVkZWY2YzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTk6MjM6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmNcXG5pbmRleCBiODMxOGUwMzAxMzg5Li5jZTBkZTAyZjVhM2ExIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcXG4rKysgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXFxuQEAgLTkzLDcgKzkzLDggQEAgc3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAqIEluIG90aGVyIHdvcmRzLCB0aGUgb25seSB3YXkgZm9yIGNoZWNrc3VtcyBub3QgdG8gYmUgdXNlZFxcbiBcXHRcXHQgKiBpcyBpZiBib3RoIGhvc3RzIGluIHRoZWlyIFNZTnMgc2V0IEE9MC5cXFwiXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNUFRDUF9DQVBfQ0hFQ0tTVU1fUkVRRClcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE1QVENQX0NBUF9DSEVDS1NVTV9SRVFEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgb3BzaXplIFxcdTAwM2MgVENQT0xFTl9NUFRDUF9NUENfQUNLX0RBVEEpXFxuIFxcdFxcdFxcdG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyB8PSBPUFRJT05fTVBUQ1BfQ1NVTVJFUUQ7XFxuIFxcbiBcXHRcXHRtcF9vcHQtXFx1MDAzZWRlbnlfam9pbl9pZDAgPSAhIShmbGFncyBcXHUwMDI2IE1QVENQX0NBUF9ERU5ZX0pPSU5fSUQwKTtcXG5AQCAtNTI5LDcgKzUzMCw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBNUEMvTVBKIG5lZWRlZCBvbmx5IG9uIDNyZCBhY2sgcGFja2V0LCBEQVRBX0ZJTiBhbmQgVENQIHNodXRkb3duIHRha2UgcHJlY2VkZW5jZSAqL1xcbi1cXHRpZiAoUkVBRF9PTkNFKHN1YmZsb3ctXFx1MDAzZWZ1bGx5X2VzdGFibGlzaGVkKSB8fCBzbmRfZGF0YV9maW5fZW5hYmxlIHx8XFxuK1xcdGlmIChzdWJmbG93LVxcdTAwM2VmdWxseV9lc3RhYmxpc2hlZCB8fCBzbmRfZGF0YV9maW5fZW5hYmxlIHx8XFxuIFxcdCAgICBzdWJmbG93LVxcdTAwM2VzbmRfaXNuICE9IFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxIHx8XFxuIFxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTYxMSw2ICs2MTIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF93cml0ZV9kYXRhX2ZpbihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxcbiBcXHRcXHRleHQtXFx1MDAzZWRhdGFfc2VxID0gZGF0YV9maW5fdHhfc2VxO1xcbiBcXHRcXHRleHQtXFx1MDAzZXN1YmZsb3dfc2VxID0gMDtcXG4gXFx0XFx0ZXh0LVxcdTAwM2VkYXRhX2xlbiA9IDE7XFxuK1xcdFxcdGV4dC1cXHUwMDNlY3N1bSA9IDA7XFxuIFxcdH0gZWxzZSBpZiAoZXh0LVxcdTAwM2VkYXRhX3NlcSArIGV4dC1cXHUwMDNlZGF0YV9sZW4gPT0gZGF0YV9maW5fdHhfc2VxKSB7XFxuIFxcdFxcdC8qIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgRFNTIG1hcHBpbmcgYW5kIGl0IGlzIHRoZVxcbiBcXHRcXHQgKiBmaW5hbCBtYXBwaW5nLCBEQVRBX0ZJTiBjb25zdW1lcyAxIGFkZGl0aW9uYWwgYnl0ZSBvZlxcbkBAIC05ODAsNyArOTgyLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzayxcXG4gXFx0LyogaGVyZSB3ZSBjYW4gcHJvY2VzcyBPb08sIGluLXdpbmRvdyBwa3RzLCBvbmx5IGluLXNlcXVlbmNlIDR0aCBhY2tcXG4gXFx0ICogd2lsbCBtYWtlIHRoZSBzdWJmbG93IGZ1bGx5IGVzdGFibGlzaGVkXFxuIFxcdCAqL1xcbi1cXHRpZiAobGlrZWx5KFJFQURfT05DRShzdWJmbG93LVxcdTAwM2VmdWxseV9lc3RhYmxpc2hlZCkpKSB7XFxuK1xcdGlmIChsaWtlbHkoc3ViZmxvdy1cXHUwMDNlZnVsbHlfZXN0YWJsaXNoZWQpKSB7XFxuIFxcdFxcdC8qIG9uIHBhc3NpdmUgc29ja2V0cywgY2hlY2sgZm9yIDNyZCBhY2sgcmV0cmFuc21pc3Npb25cXG4gXFx0XFx0ICogbm90ZSB0aGF0IG1zayBpcyBhbHdheXMgc2V0IGJ5IHN1YmZsb3dfc3luX3JlY3Zfc29jaygpXFxuIFxcdFxcdCAqIGZvciBtcF9qb2luIHN1YmZsb3dzXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcXG5pbmRleCA4YjY4ODY4MjU1YzUwLi5iMGI3MWFkZWZiOGZlIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wbS5jXFxuKysrIGIvbmV0L21wdGNwL3BtLmNcXG5AQCAtNDYyLDEwICs0NjIsMTAgQEAgYm9vbCBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2Moc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFxuIFxcdGFkZF9lbnRyeS1cXHUwMDNlYWRkciA9ICphZGRyO1xcbiBcXHRhZGRfZW50cnktXFx1MDAzZXNvY2sgPSBtc2s7XFxuLVxcdGFkZF9lbnRyeS1cXHUwMDNlcmV0cmFuc190aW1lcyA9IDA7XFxuIFxcbiBcXHR0aW1lcl9zZXR1cChcXHUwMDI2YWRkX2VudHJ5LVxcdTAwM2V0aW1lciwgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIsIDApO1xcbiByZXNldF90aW1lcjpcXG4rXFx0YWRkX2VudHJ5LVxcdTAwM2VyZXRyYW5zX3RpbWVzID0gMDtcXG4gXFx0YWRkX2VudHJ5LVxcdTAwM2V0aW1lcl9kb25lID0gZmFsc2U7XFxuIFxcdHRpbWVvdXQgPSBtcHRjcF9hZGp1c3RfYWRkX2FkZHJfdGltZW91dChtc2spO1xcbiBcXHRpZiAodGltZW91dClcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX2tlcm5lbC5jIGIvbmV0L21wdGNwL3BtX2tlcm5lbC5jXFxuaW5kZXggNDI0ZjFhN2Y5MjQ4Mi4uMWE3NzUwODEzMjM1NCAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcG1fa2VybmVsLmNcXG4rKysgYi9uZXQvbXB0Y3AvcG1fa2VybmVsLmNcXG5AQCAtMTEzNyw2ICsxMTM3LDggQEAgc3RhdGljIGludCBtcHRjcF9ubF9yZW1vdmVfaWRfemVyb19hZGRyZXNzKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0d2hpbGUgKChtc2sgPSBtcHRjcF90b2tlbl9pdGVyX25leHQobmV0LCBcXHUwMDI2c19zbG90LCBcXHUwMDI2c19udW0pKSAhPSBOVUxMKSB7XFxuIFxcdFxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4gXFx0XFx0c3RydWN0IG1wdGNwX2FkZHJfaW5mbyBtc2tfbG9jYWw7XFxuK1xcdFxcdHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gYW5ub19hZGRyO1xcbitcXHRcXHRib29sIGFubm91bmNlZDtcXG4gXFxuIFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWNvbm5fbGlzdCkgfHwgbXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpXFxuIFxcdFxcdFxcdGdvdG8gbmV4dDtcXG5AQCAtMTE0Niw3ICsxMTQ4LDEzIEBAIHN0YXRpYyBpbnQgbXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFxuIFxcdFxcdGxvY2tfc29jayhzayk7XFxuK1xcdFxcdC8qIERyb3AgYSBwb3NzaWJseSBwZW5kaW5nIEFERF9BRERSIGZvciB0aGlzIGFkZHJlc3MuICovXFxuK1xcdFxcdGFubm9fYWRkciA9IG1za19sb2NhbDtcXG4rXFx0XFx0YW5ub19hZGRyLnBvcnQgPSAwO1xcbitcXHRcXHRhbm5vdW5jZWQgPSBtcHRjcF9wbV9hbm5vdW5jZWRfcmVtb3ZlKG1zaywgXFx1MDAyNmFubm9fYWRkcik7XFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXNrLVxcdTAwM2VwbS5sb2NrKTtcXG4rXFx0XFx0aWYgKGFubm91bmNlZClcXG4rXFx0XFx0XFx0bXNrLVxcdTAwM2VwbS5hZGRfYWRkcl9zaWduYWxlZC0tO1xcbiBcXHRcXHRtcHRjcF9wbV9yZW1vdmVfYWRkcihtc2ssIFxcdTAwMjZsaXN0KTtcXG4gXFx0XFx0bXB0Y3BfcG1fcm1fc3ViZmxvdyhtc2ssIFxcdTAwMjZsaXN0KTtcXG4gXFx0XFx0X19tYXJrX3N1YmZsb3dfZW5kcF9hdmFpbGFibGUobXNrLCAwKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXFxuaW5kZXggYjk0ZmJiNDgzYmY5NC4uZmFiMTZkOTUzZGJmZSAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcXG4rKysgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcXG5AQCAtNjksNiArNjksMTkgQEAgc3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuIFxcdH1cXG4gXFxuIFxcdGlmICghYWRkcl9tYXRjaCBcXHUwMDI2XFx1MDAyNiAhaWRfbWF0Y2gpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGlkO1xcbitcXG4rXFx0XFx0aWYgKCFlbnRyeS1cXHUwMDNlYWRkci5pZCBcXHUwMDI2XFx1MDAyNiBuZWVkc19pZCkge1xcbitcXHRcXHRcXHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChpZF9iaXRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdE1QVENQX1BNX01BWF9BRERSX0lEICsgMSwgMSk7XFxuK1xcdFxcdFxcdGlmIChpZCBcXHUwMDNlIE1QVENQX1BNX01BWF9BRERSX0lEKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuK1xcdFxcdFxcdFxcdGdvdG8gYXBwZW5kX2VycjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRpZCA9IGVudHJ5LVxcdTAwM2VhZGRyLmlkO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBNZW1vcnkgZm9yIHRoZSBlbnRyeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGVcXG4gXFx0XFx0ICogc29jayBvcHRpb24gYnVmZmVyLlxcbiBcXHRcXHQgKi9cXG5AQCAtNzgsMTAgKzkxLDcgQEAgc3RhdGljIGludCBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuIFxcdFxcdFxcdGdvdG8gYXBwZW5kX2VycjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKCFlLVxcdTAwM2VhZGRyLmlkIFxcdTAwMjZcXHUwMDI2IG5lZWRzX2lkKVxcbi1cXHRcXHRcXHRlLVxcdTAwM2VhZGRyLmlkID0gZmluZF9uZXh0X3plcm9fYml0KGlkX2JpdG1hcCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfUE1fTUFYX0FERFJfSUQgKyAxLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQxKTtcXG4rXFx0XFx0ZS1cXHUwMDNlYWRkci5pZCA9IGlkO1xcbiBcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2ZS1cXHUwMDNlbGlzdCwgXFx1MDAyNm1zay1cXHUwMDNlcG0udXNlcnNwYWNlX3BtX2xvY2FsX2FkZHJfbGlzdCk7XFxuIFxcdFxcdG1zay1cXHUwMDNlcG0ubG9jYWxfYWRkcl91c2VkKys7XFxuIFxcdFxcdHJldCA9IGUtXFx1MDAzZWFkZHIuaWQ7XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li5iMjZhOGQ1NjA2MTI1IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtOTUsNiArOTUsNyBAQCBib29sIF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBmYl9taWIpXFxuIFxcbiBcXHRtc2stXFx1MDAzZWFsbG93X3N1YmZsb3dzID0gZmFsc2U7XFxuIFxcdHNldF9iaXQoTVBUQ1BfRkFMTEJBQ0tfRE9ORSwgXFx1MDAyNm1zay1cXHUwMDNlZmxhZ3MpO1xcbitcXHRzZXRfYml0KE1QVENQX1JUWF9ESVNBQkxFRCwgXFx1MDAyNm1zay1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRfX01QVENQX0lOQ19TVEFUUyhuZXQsIGZiX21pYik7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtc2stXFx1MDAzZWZhbGxiYWNrX2xvY2spO1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMjg4LDggKzI4OSw4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssXFxuICAqL1xcbiBzdGF0aWMgYm9vbCBtcHRjcF9jYW5faW5nZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbi1cXHRyZXR1cm4gdW5saWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2M9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcmN2YnVmKSkgfHxcXG4tXFx0XFx0XFx0X19tcHRjcF9jaGVja19mYWxsYmFjayhtcHRjcF9zayhzaykpO1xcbitcXHRyZXR1cm4gbGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcXHUwMDNjPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3JjdmJ1ZikpIHx8XFxuK1xcdCAgICAgICBfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1wdGNwX3NrKHNrKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5AQCAtMzEyLDEyICszMTMsNiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHR1NjQgc2VxLCBlbmRfc2VxLCBtYXhfc2VxO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMTtcXG4gXFxuLVxcdGlmICghbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYikpIHtcXG4tXFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XFxuLVxcdFxcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4gXFx0c2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXE7XFxuIFxcdGVuZF9zZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcTtcXG4gXFx0bWF4X3NlcSA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNm1zay1cXHUwMDNlcmN2X3duZF9zZW50KTtcXG5AQCAtMzM0LDYgKzMyOSwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYikpIHtcXG4rXFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XFxuK1xcdFxcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0cCA9IFxcdTAwMjZtc2stXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZS5yYl9ub2RlO1xcbiBcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfT0ZPUVVFVUUpO1xcbiBcXHRpZiAoUkJfRU1QVFlfUk9PVChcXHUwMDI2bXNrLVxcdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKSB7XFxuQEAgLTEwODQsMTMgKzEwODUsMTQgQEAgc3RhdGljIGJvb2wgbXB0Y3BfcnR4X3RpbWVyX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrKVxcbiBcXG4gc3RhdGljIHZvaWQgbXB0Y3BfcmVzZXRfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbiBcXHR1bnNpZ25lZCBsb25nIHRvdXQ7XFxuIFxcbi1cXHQvKiBwcmV2ZW50IHJlc2NoZWR1bGluZyBvbiBjbG9zZSAqL1xcbi1cXHRpZiAodW5saWtlbHkoaW5ldF9za19zdGF0ZV9sb2FkKHNrKSA9PSBUQ1BfQ0xPU0UpKVxcbitcXHQvKiBQcmV2ZW50IHJlc2NoZWR1bGluZyBvbiBjbG9zZSBhbmQgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cXG4rXFx0aWYgKHRlc3RfYml0KE1QVENQX1JUWF9ESVNBQkxFRCwgXFx1MDAyNm1zay1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHR0b3V0ID0gbXB0Y3Bfc2soc2spLVxcdTAwM2V0aW1lcl9pdmFsO1xcbitcXHR0b3V0ID0gbXNrLVxcdTAwM2V0aW1lcl9pdmFsO1xcbiBcXHRza19yZXNldF90aW1lcihzaywgXFx1MDAyNnNrLVxcdTAwM2VtcHRjcF9yZXRyYW5zbWl0X3RpbWVyLCBqaWZmaWVzICsgdG91dCk7XFxuIH1cXG4gXFxuQEAgLTMzMjQsNiArMzMyNiw5IEBAIHZvaWQgbXB0Y3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlKVxcbiBcXHRcXHQgKiB0cmFuc2l0aW9uIGZyb20gVENQX1NZTl9SRUNWIHRvIFRDUF9DTE9TRV9XQUlULlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgVENQX0NMT1NFOlxcbitcXHRcXHRzZXRfYml0KE1QVENQX1JUWF9ESVNBQkxFRCwgXFx1MDAyNm1wdGNwX3NrKHNrKS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0aWYgKG9sZHN0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fCBvbGRzdGF0ZSA9PSBUQ1BfQ0xPU0VfV0FJVClcXG4gXFx0XFx0XFx0TVBUQ1BfREVDX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0NVUlJFU1RBQik7XFxuQEAgLTM4NzYsNyArMzg4MSw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkdWxlXzNyZGFja19yZXRyYW5zbWlzc2lvbihzdHJ1Y3Qgc29jayAqc3NrKVxcbiBcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNzayk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcXG4gXFxuLVxcdGlmIChSRUFEX09OQ0UobXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cXHUwMDNlZnVsbHlfZXN0YWJsaXNoZWQpKVxcbitcXHRpZiAobXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cXHUwMDNlZnVsbHlfZXN0YWJsaXNoZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHJlc2NoZWR1bGUgd2l0aCBhIHRpbWVvdXQgYWJvdmUgUlRULCBhcyB3ZSBtdXN0IGxvb2sgb25seSBmb3IgZHJvcCAqL1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuaW5kZXggMDZhMTA3ZDRlODM5Mi4uNmMwMGE4MDM0NGY5MiAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuQEAgLTExNiw2ICsxMTYsNyBAQFxcbiAjZGVmaW5lIE1QVENQX1dPUktfUlRYXFx0XFx0MVxcbiAjZGVmaW5lIE1QVENQX0ZBTExCQUNLX0RPTkVcXHQyXFxuICNkZWZpbmUgTVBUQ1BfV09SS19DTE9TRV9TVUJGTE9XIDNcXG4rI2RlZmluZSBNUFRDUF9SVFhfRElTQUJMRURcXHQ0XFxuIFxcbiAvKiBNUFRDUCBzb2NrZXQgcmVsZWFzZSBjYiBmbGFncyAqL1xcbiAjZGVmaW5lIE1QVENQX1BVU0hfUEVORElOR1xcdDFcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcXG5pbmRleCBhZjgxYWQ1ZTY5OWQxLi4wMWRiN2VkY2UxOGE2IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmNcXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXFxuQEAgLTIwODQsNyArMjA4NCw2IEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfdWxwX2Nsb25lKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0bmV3X2N0eC1cXHUwMDNlcmVxdWVzdF9ia3VwID0gc3ViZmxvd19yZXEtXFx1MDAzZXJlcXVlc3RfYmt1cDtcXG4gXFx0XFx0V1JJVEVfT05DRShuZXdfY3R4LVxcdTAwM2VyZW1vdGVfaWQsIHN1YmZsb3dfcmVxLVxcdTAwM2VyZW1vdGVfaWQpO1xcbiBcXHRcXHRuZXdfY3R4LVxcdTAwM2V0b2tlbiA9IHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbjtcXG4tXFx0XFx0bmV3X2N0eC1cXHUwMDNldGhtYWMgPSBzdWJmbG93X3JlcS1cXHUwMDNldGhtYWM7XFxuIFxcbiBcXHRcXHQvKiB0aGUgc3ViZmxvdyByZXEgaWQgaXMgdmFsaWQsIGZldGNoZWQgdmlhIHN1YmZsb3dfY2hlY2tfcmVxKClcXG4gXFx0XFx0ICogYW5kIHN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KClcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmNcXG5pbmRleCBiNWNhYzU3MDExMjIxLi45NDc0NzA2NjQxYzExIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9zeW5jb29raWVzLmNcXG4rKysgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jXFxuQEAgLTI2LDcgKzI2LDggQEAgc3RydWN0IGpvaW5fZW50cnkge1xcbiBcXHR1MzIgbG9jYWxfbm9uY2U7XFxuIFxcdHU4IGpvaW5faWQ7XFxuIFxcdHU4IGxvY2FsX2lkO1xcbi1cXHR1OCBiYWNrdXA7XFxuK1xcdHU4IGJhY2t1cDoxLFxcbitcXHQgICByZXF1ZXN0X2JrdXA6MTtcXG4gXFx0dTggdmFsaWQ7XFxuIH07XFxuIFxcbkBAIC02Myw2ICs2NCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2pvaW5fc3RvcmVfc3RhdGUoc3RydWN0IGpvaW5fZW50cnkgKmVudHJ5LFxcbiBcXHRlbnRyeS1cXHUwMDNlcmVtb3RlX25vbmNlID0gc3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9ub25jZTtcXG4gXFx0ZW50cnktXFx1MDAzZWxvY2FsX25vbmNlID0gc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX25vbmNlO1xcbiBcXHRlbnRyeS1cXHUwMDNlYmFja3VwID0gc3ViZmxvd19yZXEtXFx1MDAzZWJhY2t1cDtcXG4rXFx0ZW50cnktXFx1MDAzZXJlcXVlc3RfYmt1cCA9IHN1YmZsb3dfcmVxLVxcdTAwM2VyZXF1ZXN0X2JrdXA7XFxuIFxcdGVudHJ5LVxcdTAwM2Vqb2luX2lkID0gc3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9pZDtcXG4gXFx0ZW50cnktXFx1MDAzZWxvY2FsX2lkID0gc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2lkO1xcbiBcXHRlbnRyeS1cXHUwMDNldmFsaWQgPSAxO1xcbkBAIC0xMTcsNiArMTE5LDcgQEAgYm9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxcXG4gXFx0c3ViZmxvd19yZXEtXFx1MDAzZXJlbW90ZV9ub25jZSA9IGUtXFx1MDAzZXJlbW90ZV9ub25jZTtcXG4gXFx0c3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX25vbmNlID0gZS1cXHUwMDNlbG9jYWxfbm9uY2U7XFxuIFxcdHN1YmZsb3dfcmVxLVxcdTAwM2ViYWNrdXAgPSBlLVxcdTAwM2ViYWNrdXA7XFxuK1xcdHN1YmZsb3dfcmVxLVxcdTAwM2VyZXF1ZXN0X2JrdXAgPSBlLVxcdTAwM2VyZXF1ZXN0X2JrdXA7XFxuIFxcdHN1YmZsb3dfcmVxLVxcdTAwM2VyZW1vdGVfaWQgPSBlLVxcdTAwM2Vqb2luX2lkO1xcbiBcXHRzdWJmbG93X3JlcS1cXHUwMDNlbG9jYWxfaWQgPSBlLVxcdTAwM2Vsb2NhbF9pZDtcXG4gXFx0c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuID0gZS1cXHUwMDNldG9rZW47XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXFxuaW5kZXggZWE0Y2I2YzFiZDVlMi4uMTc4ZDk4ZDkxZmVhMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY1xcbkBAIC0zODEsNiArMzgxLDkgQEAgc3RhdGljIGludCBzb2NrX2Nvbm5lY3RfbXB0Y3AoY29uc3QgY2hhciAqIGNvbnN0IHJlbW90ZWFkZHIsXFxuIFxcbiBcXHRoaW50cy5haV9mYW1pbHkgPSBwZjtcXG4gXFxuK1xcdC8qIEtlZXAgdGhlIHJlc29sdmVkIGFkZHJlc3MgYWxpdmUgZm9yIHRoZSB3aG9sZSBleGVjdXRpb246IGl0IGlzXFxuK1xcdCAqIHVzZWQgYWdhaW4gd2hlbiByZWNvbm5lY3RpbmcsIGFuZCB3aWxsIGJlIHJlbGVhc2VkIGF0IGV4aXQgdGltZS5cXG4rXFx0ICovXFxuIFxcdHhnZXRhZGRyaW5mbyhyZW1vdGVhZGRyLCBwb3J0LCBcXHUwMDI2aGludHMsIFxcdTAwMjZhZGRyKTtcXG4gXFx0Zm9yIChhID0gYWRkcjsgYTsgYSA9IGEtXFx1MDAzZWFpX25leHQpIHtcXG4gXFx0XFx0c29jayA9IHNvY2tldChhLVxcdTAwM2VhaV9mYW1pbHksIGEtXFx1MDAzZWFpX3NvY2t0eXBlLCBwcm90byk7XFxuQEAgLTQyMSw3ICs0MjQsNiBAQCBzdGF0aWMgaW50IHNvY2tfY29ubmVjdF9tcHRjcChjb25zdCBjaGFyICogY29uc3QgcmVtb3RlYWRkcixcXG4gXFx0XFx0c29jayA9IC0xO1xcbiBcXHR9XFxuIFxcbi1cXHRmcmVlYWRkcmluZm8oYWRkcik7XFxuIFxcdGlmIChzb2NrICE9IC0xKVxcbiBcXHRcXHRTT0NLX1RFU1RfVENQVUxQKHNvY2ssIHByb3RvKTtcXG4gXFx0cmV0dXJuIHNvY2s7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9saWIuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoXFxuaW5kZXggNWVmNjAzMzc3NWM4Ni4uYjlkMTQ2NDdmNDAxOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2xpYi5zaFxcbkBAIC0xMDgsMTIgKzEwOCwxNCBAQCBtcHRjcF9saWJfcHJfaW5mbygpIHtcXG4gXFxuIG1wdGNwX2xpYl9wcl9uc3RhdCgpIHtcXG4gXFx0bG9jYWwgbnM9XFxcIiR7MX1cXFwiXFxuLVxcdGxvY2FsIGhpc3Q9XFxcIi90bXAvJHtuc30ub3V0XFxcIlxcbitcXHRsb2NhbCBjYWNoZT1cXFwiL3RtcC8ke25zfS5vdXRcXFwiXFxuK1xcdGxvY2FsIGhpc3Q9XFxcIi90bXAvJHtuc30ubnN0YXRcXFwiXFxuIFxcbi1cXHRpZiBbIC1mIFxcXCIke2hpc3R9XFxcIiBdOyB0aGVuXFxuLVxcdFxcdGF3ayAnJDIgIT0gMCB7IHByaW50IFxcXCIgIFxcXCIkMCB9JyBcXFwiJHtoaXN0fVxcXCJcXG4rXFx0aWYgWyAtZiBcXFwiJHtjYWNoZX1cXFwiIF07IHRoZW5cXG4rXFx0XFx0YXdrICckMiAhPSAwIHsgcHJpbnQgXFxcIiAgXFxcIiQwIH0nIFxcXCIke2NhY2hlfVxcXCJcXG4gXFx0ZWxzZVxcbi1cXHRcXHRpcCBuZXRucyBleGVjIFxcXCIke25zfVxcXCIgbnN0YXQgLWFzIHwgZ3JlcCBUY3BcXG4rXFx0XFx0TlNUQVRfSElTVE9SWT1cXFwiJHtoaXN0fVxcXCIgaXAgbmV0bnMgZXhlYyBcXFwiJHtuc31cXFwiIG5zdGF0IC1zIHxcXG4rXFx0XFx0XFx0Z3JlcCBUY3BcXG4gXFx0ZmlcXG4gfVxcbiBcXG5AQCAtNDE0LDE5ICs0MTYsMjEgQEAgbXB0Y3BfbGliX25zdGF0X2dldCgpIHtcXG4gfVxcbiBcXG4gIyAkMTogbnMsICQyOiBNSUIgY291bnRlclxcbi0jIEdldCB0aGUgY291bnRlciBmcm9tIHRoZSBoaXN0b3J5IChtcHRjcF9saWJfbnN0YXRfe2luaXQsZ2V0fSgpKSBpZiBhdmFpbGFibGUuXFxuLSMgSWYgbm90LCBnZXQgdGhlIGNvdW50ZXIgZnJvbSBuc3RhdCBpZ25vcmluZyBhbnkgaGlzdG9yeS5cXG4rIyBHZXQgdGhlIGNvdW50ZXIgZnJvbSB0aGUgY2FjaGUgKG1wdGNwX2xpYl9uc3RhdF97aW5pdCxnZXR9KCkpIGlmIGF2YWlsYWJsZS5cXG4rIyBJZiBub3QsIGdldCB0aGUgY291bnRlciBmcm9tIG5zdGF0IGlnbm9yaW5nIGFueSBjYWNoZSwgYnV0IHVzaW5nIHRoZSBoaXN0b3J5LlxcbiBtcHRjcF9saWJfZ2V0X2NvdW50ZXIoKSB7XFxuIFxcdGxvY2FsIG5zPVxcXCIkezF9XFxcIlxcbiBcXHRsb2NhbCBjb3VudGVyPVxcXCIkezJ9XFxcIlxcbi1cXHRsb2NhbCBoaXN0PVxcXCIvdG1wLyR7bnN9Lm91dFxcXCJcXG4rXFx0bG9jYWwgY2FjaGU9XFxcIi90bXAvJHtuc30ub3V0XFxcIlxcbitcXHRsb2NhbCBoaXN0PVxcXCIvdG1wLyR7bnN9Lm5zdGF0XFxcIlxcbiBcXHRsb2NhbCBjb3VudFxcbiBcXG4tXFx0aWYgW1sgLXMgXFxcIiR7aGlzdH1cXFwiIFxcdTAwMjZcXHUwMDI2IFxcXCIke2NvdW50ZXJ9XFxcIiA9PSAqXFxcIlRjcFxcXCIqIF1dOyB0aGVuXFxuLVxcdFxcdGNvdW50PSQoYXdrIFxcXCIvXiR7Y291bnRlcn0gLyB7cHJpbnQgXFxcXCQyOyBleGl0fVxcXCIgXFxcIiR7aGlzdH1cXFwiKVxcbitcXHRpZiBbWyAtcyBcXFwiJHtjYWNoZX1cXFwiIFxcdTAwMjZcXHUwMDI2IFxcXCIke2NvdW50ZXJ9XFxcIiA9PSAqXFxcIlRjcFxcXCIqIF1dOyB0aGVuXFxuK1xcdFxcdGNvdW50PSQoYXdrIFxcXCIvXiR7Y291bnRlcn0gLyB7cHJpbnQgXFxcXCQyOyBleGl0fVxcXCIgXFxcIiR7Y2FjaGV9XFxcIilcXG4gXFx0ZWxzZVxcbi1cXHRcXHRjb3VudD0kKGlwIG5ldG5zIGV4ZWMgXFxcIiR7bnN9XFxcIiBuc3RhdCAtYXN6IFxcXCIke2NvdW50ZXJ9XFxcIiB8XFxuLVxcdFxcdFxcdGF3ayAnTlI9PTEge25leHR9IHtwcmludCAkMn0nKVxcbitcXHRcXHRjb3VudD0kKE5TVEFUX0hJU1RPUlk9XFxcIiR7aGlzdH1cXFwiIGlwIG5ldG5zIGV4ZWMgXFxcIiR7bnN9XFxcIiBcXFxcXFxuK1xcdFxcdFxcdG5zdGF0IC1zeiBcXFwiJHtjb3VudGVyfVxcXCIgfFxcbitcXHRcXHRcXHRcXHRhd2sgJ05SPT0xIHtuZXh0fSB7cHJpbnQgJDJ9JylcXG4gXFx0ZmlcXG4gXFx0aWYgWyAteiBcXFwiJHtjb3VudH1cXFwiIF07IHRoZW5cXG4gXFx0XFx0bXB0Y3BfbGliX2ZhaWxfaWZfZXhwZWN0ZWRfZmVhdHVyZSBcXFwiJHtjb3VudGVyfSBjb3VudGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyMzowMi44NDc2OTY4MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNjAxNDkzMTY1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NcIixcbiAgICBcIl9fbXB0Y3BfdHJ5X2ZhbGxiYWNrXCIsXG4gICAgXCJtcHRjcF9zZXRfc3RhdGVcIixcbiAgICBcIm1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1Agc3Vic3lzdGVtLCBpbmNsdWRpbmcgb3B0aW9ucyBwYXJzaW5nLCBwYXRoIG1hbmFnZW1lbnQgKGJvdGgga2VybmVsIGFuZCB1c2Vyc3BhY2UpLCBwcm90b2NvbCBzdGF0ZSBoYW5kbGluZywgYW5kIHN5bmNvb2tpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNjViNzA5ZDE0YTMzNzcyMWY5ZDQ2MmQ1ODg2YjhkNGFlZGVmNmMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTk6MjM6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggYjgzMThlMDMwMTM4OS4uY2UwZGUwMmY1YTNhMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC05Myw3ICs5Myw4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgKiBJbiBvdGhlciB3b3JkcywgdGhlIG9ubHkgd2F5IGZvciBjaGVja3N1bXMgbm90IHRvIGJlIHVzZWRcbiBcdFx0ICogaXMgaWYgYm90aCBob3N0cyBpbiB0aGVpciBTWU5zIHNldCBBPTAuXCJcbiBcdFx0ICovXG4tXHRcdGlmIChmbGFncyBcdTAwMjYgTVBUQ1BfQ0FQX0NIRUNLU1VNX1JFUUQpXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1QVENQX0NBUF9DSEVDS1NVTV9SRVFEKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG9wc2l6ZSBcdTAwM2MgVENQT0xFTl9NUFRDUF9NUENfQUNLX0RBVEEpXG4gXHRcdFx0bXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgfD0gT1BUSU9OX01QVENQX0NTVU1SRVFEO1xuIFxuIFx0XHRtcF9vcHQtXHUwMDNlZGVueV9qb2luX2lkMCA9ICEhKGZsYWdzIFx1MDAyNiBNUFRDUF9DQVBfREVOWV9KT0lOX0lEMCk7XG5AQCAtNTI5LDcgKzUzMCw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBNUEMvTVBKIG5lZWRlZCBvbmx5IG9uIDNyZCBhY2sgcGFja2V0LCBEQVRBX0ZJTiBhbmQgVENQIHNodXRkb3duIHRha2UgcHJlY2VkZW5jZSAqL1xuLVx0aWYgKFJFQURfT05DRShzdWJmbG93LVx1MDAzZWZ1bGx5X2VzdGFibGlzaGVkKSB8fCBzbmRfZGF0YV9maW5fZW5hYmxlIHx8XG4rXHRpZiAoc3ViZmxvdy1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZCB8fCBzbmRfZGF0YV9maW5fZW5hYmxlIHx8XG4gXHQgICAgc3ViZmxvdy1cdTAwM2VzbmRfaXNuICE9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgfHxcbiBcdCAgICBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC02MTEsNiArNjEyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcbiBcdFx0ZXh0LVx1MDAzZWRhdGFfc2VxID0gZGF0YV9maW5fdHhfc2VxO1xuIFx0XHRleHQtXHUwMDNlc3ViZmxvd19zZXEgPSAwO1xuIFx0XHRleHQtXHUwMDNlZGF0YV9sZW4gPSAxO1xuK1x0XHRleHQtXHUwMDNlY3N1bSA9IDA7XG4gXHR9IGVsc2UgaWYgKGV4dC1cdTAwM2VkYXRhX3NlcSArIGV4dC1cdTAwM2VkYXRhX2xlbiA9PSBkYXRhX2Zpbl90eF9zZXEpIHtcbiBcdFx0LyogSWYgdGhlcmUncyBhbiBleGlzdGluZyBEU1MgbWFwcGluZyBhbmQgaXQgaXMgdGhlXG4gXHRcdCAqIGZpbmFsIG1hcHBpbmcsIERBVEFfRklOIGNvbnN1bWVzIDEgYWRkaXRpb25hbCBieXRlIG9mXG5AQCAtOTgwLDcgKzk4Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4gXHQvKiBoZXJlIHdlIGNhbiBwcm9jZXNzIE9vTywgaW4td2luZG93IHBrdHMsIG9ubHkgaW4tc2VxdWVuY2UgNHRoIGFja1xuIFx0ICogd2lsbCBtYWtlIHRoZSBzdWJmbG93IGZ1bGx5IGVzdGFibGlzaGVkXG4gXHQgKi9cbi1cdGlmIChsaWtlbHkoUkVBRF9PTkNFKHN1YmZsb3ctXHUwMDNlZnVsbHlfZXN0YWJsaXNoZWQpKSkge1xuK1x0aWYgKGxpa2VseShzdWJmbG93LVx1MDAzZWZ1bGx5X2VzdGFibGlzaGVkKSkge1xuIFx0XHQvKiBvbiBwYXNzaXZlIHNvY2tldHMsIGNoZWNrIGZvciAzcmQgYWNrIHJldHJhbnNtaXNzaW9uXG4gXHRcdCAqIG5vdGUgdGhhdCBtc2sgaXMgYWx3YXlzIHNldCBieSBzdWJmbG93X3N5bl9yZWN2X3NvY2soKVxuIFx0XHQgKiBmb3IgbXBfam9pbiBzdWJmbG93c1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDhiNjg4NjgyNTVjNTAuLmIwYjcxYWRlZmI4ZmUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuKysrIGIvbmV0L21wdGNwL3BtLmNcbkBAIC00NjIsMTAgKzQ2MiwxMCBAQCBib29sIG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFxuIFx0YWRkX2VudHJ5LVx1MDAzZWFkZHIgPSAqYWRkcjtcbiBcdGFkZF9lbnRyeS1cdTAwM2Vzb2NrID0gbXNrO1xuLVx0YWRkX2VudHJ5LVx1MDAzZXJldHJhbnNfdGltZXMgPSAwO1xuIFxuIFx0dGltZXJfc2V0dXAoXHUwMDI2YWRkX2VudHJ5LVx1MDAzZXRpbWVyLCBtcHRjcF9wbV9hZGRfYWRkcl90aW1lciwgMCk7XG4gcmVzZXRfdGltZXI6XG4rXHRhZGRfZW50cnktXHUwMDNlcmV0cmFuc190aW1lcyA9IDA7XG4gXHRhZGRfZW50cnktXHUwMDNldGltZXJfZG9uZSA9IGZhbHNlO1xuIFx0dGltZW91dCA9IG1wdGNwX2FkanVzdF9hZGRfYWRkcl90aW1lb3V0KG1zayk7XG4gXHRpZiAodGltZW91dClcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG1fa2VybmVsLmMgYi9uZXQvbXB0Y3AvcG1fa2VybmVsLmNcbmluZGV4IDQyNGYxYTdmOTI0ODIuLjFhNzc1MDgxMzIzNTQgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG1fa2VybmVsLmNcbisrKyBiL25ldC9tcHRjcC9wbV9rZXJuZWwuY1xuQEAgLTExMzcsNiArMTEzNyw4IEBAIHN0YXRpYyBpbnQgbXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR3aGlsZSAoKG1zayA9IG1wdGNwX3Rva2VuX2l0ZXJfbmV4dChuZXQsIFx1MDAyNnNfc2xvdCwgXHUwMDI2c19udW0pKSAhPSBOVUxMKSB7XG4gXHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcbiBcdFx0c3RydWN0IG1wdGNwX2FkZHJfaW5mbyBtc2tfbG9jYWw7XG4rXHRcdHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gYW5ub19hZGRyO1xuK1x0XHRib29sIGFubm91bmNlZDtcbiBcbiBcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCkgfHwgbXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpXG4gXHRcdFx0Z290byBuZXh0O1xuQEAgLTExNDYsNyArMTE0OCwxMyBAQCBzdGF0aWMgaW50IG1wdGNwX25sX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0bG9ja19zb2NrKHNrKTtcbitcdFx0LyogRHJvcCBhIHBvc3NpYmx5IHBlbmRpbmcgQUREX0FERFIgZm9yIHRoaXMgYWRkcmVzcy4gKi9cbitcdFx0YW5ub19hZGRyID0gbXNrX2xvY2FsO1xuK1x0XHRhbm5vX2FkZHIucG9ydCA9IDA7XG4rXHRcdGFubm91bmNlZCA9IG1wdGNwX3BtX2Fubm91bmNlZF9yZW1vdmUobXNrLCBcdTAwMjZhbm5vX2FkZHIpO1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bXNrLVx1MDAzZXBtLmxvY2spO1xuK1x0XHRpZiAoYW5ub3VuY2VkKVxuK1x0XHRcdG1zay1cdTAwM2VwbS5hZGRfYWRkcl9zaWduYWxlZC0tO1xuIFx0XHRtcHRjcF9wbV9yZW1vdmVfYWRkcihtc2ssIFx1MDAyNmxpc3QpO1xuIFx0XHRtcHRjcF9wbV9ybV9zdWJmbG93KG1zaywgXHUwMDI2bGlzdCk7XG4gXHRcdF9fbWFya19zdWJmbG93X2VuZHBfYXZhaWxhYmxlKG1zaywgMCk7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5pbmRleCBiOTRmYmI0ODNiZjk0Li5mYWIxNmQ5NTNkYmZlIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG4rKysgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbkBAIC02OSw2ICs2OSwxOSBAQCBzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdH1cbiBcbiBcdGlmICghYWRkcl9tYXRjaCBcdTAwMjZcdTAwMjYgIWlkX21hdGNoKSB7XG4rXHRcdHVuc2lnbmVkIGludCBpZDtcbitcbitcdFx0aWYgKCFlbnRyeS1cdTAwM2VhZGRyLmlkIFx1MDAyNlx1MDAyNiBuZWVkc19pZCkge1xuK1x0XHRcdGlkID0gZmluZF9uZXh0X3plcm9fYml0KGlkX2JpdG1hcCxcbitcdFx0XHRcdFx0XHRNUFRDUF9QTV9NQVhfQUREUl9JRCArIDEsIDEpO1xuK1x0XHRcdGlmIChpZCBcdTAwM2UgTVBUQ1BfUE1fTUFYX0FERFJfSUQpIHtcbitcdFx0XHRcdHJldCA9IC1FTk9TUEM7XG4rXHRcdFx0XHRnb3RvIGFwcGVuZF9lcnI7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlkID0gZW50cnktXHUwMDNlYWRkci5pZDtcbitcdFx0fVxuK1xuIFx0XHQvKiBNZW1vcnkgZm9yIHRoZSBlbnRyeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGVcbiBcdFx0ICogc29jayBvcHRpb24gYnVmZmVyLlxuIFx0XHQgKi9cbkBAIC03OCwxMCArOTEsNyBAQCBzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdFx0XHRnb3RvIGFwcGVuZF9lcnI7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKCFlLVx1MDAzZWFkZHIuaWQgXHUwMDI2XHUwMDI2IG5lZWRzX2lkKVxuLVx0XHRcdGUtXHUwMDNlYWRkci5pZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChpZF9iaXRtYXAsXG4tXHRcdFx0XHRcdFx0XHRNUFRDUF9QTV9NQVhfQUREUl9JRCArIDEsXG4tXHRcdFx0XHRcdFx0XHQxKTtcbitcdFx0ZS1cdTAwM2VhZGRyLmlkID0gaWQ7XG4gXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bXNrLVx1MDAzZXBtLnVzZXJzcGFjZV9wbV9sb2NhbF9hZGRyX2xpc3QpO1xuIFx0XHRtc2stXHUwMDNlcG0ubG9jYWxfYWRkcl91c2VkKys7XG4gXHRcdHJldCA9IGUtXHUwMDNlYWRkci5pZDtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li5iMjZhOGQ1NjA2MTI1IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtOTUsNiArOTUsNyBAQCBib29sIF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBmYl9taWIpXG4gXG4gXHRtc2stXHUwMDNlYWxsb3dfc3ViZmxvd3MgPSBmYWxzZTtcbiBcdHNldF9iaXQoTVBUQ1BfRkFMTEJBQ0tfRE9ORSwgXHUwMDI2bXNrLVx1MDAzZWZsYWdzKTtcbitcdHNldF9iaXQoTVBUQ1BfUlRYX0RJU0FCTEVELCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpO1xuIFx0X19NUFRDUF9JTkNfU1RBVFMobmV0LCBmYl9taWIpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bXNrLVx1MDAzZWZhbGxiYWNrX2xvY2spO1xuIFx0cmV0dXJuIHRydWU7XG5AQCAtMjg4LDggKzI4OSw4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssXG4gICovXG4gc3RhdGljIGJvb2wgbXB0Y3BfY2FuX2luZ2VzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuLVx0cmV0dXJuIHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2M9IFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSB8fFxuLVx0XHRcdF9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXB0Y3Bfc2soc2spKTtcbitcdHJldHVybiBsaWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYz0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpIHx8XG4rXHQgICAgICAgX19tcHRjcF9jaGVja19mYWxsYmFjayhtcHRjcF9zayhzaykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5AQCAtMzEyLDEyICszMTMsNiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0dTY0IHNlcSwgZW5kX3NlcSwgbWF4X3NlcTtcbiBcdHN0cnVjdCBza19idWZmICpza2IxO1xuIFxuLVx0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xuLVx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTtcbi1cdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuIFx0c2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbiBcdGVuZF9zZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxO1xuIFx0bWF4X3NlcSA9IGF0b21pYzY0X3JlYWQoXHUwMDI2bXNrLVx1MDAzZXJjdl93bmRfc2VudCk7XG5AQCAtMzM0LDYgKzMyOSwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHRpZiAoIW1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHNrLCBza2IpKSB7XG4rXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xuK1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRwID0gXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZS5yYl9ub2RlO1xuIFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT1FVRVVFKTtcbiBcdGlmIChSQl9FTVBUWV9ST09UKFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKSB7XG5AQCAtMTA4NCwxMyArMTA4NSwxNCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9ydHhfdGltZXJfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spXG4gXG4gc3RhdGljIHZvaWQgbXB0Y3BfcmVzZXRfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcbiB7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0dW5zaWduZWQgbG9uZyB0b3V0O1xuIFxuLVx0LyogcHJldmVudCByZXNjaGVkdWxpbmcgb24gY2xvc2UgKi9cbi1cdGlmICh1bmxpa2VseShpbmV0X3NrX3N0YXRlX2xvYWQoc2spID09IFRDUF9DTE9TRSkpXG4rXHQvKiBQcmV2ZW50IHJlc2NoZWR1bGluZyBvbiBjbG9zZSBhbmQgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cbitcdGlmICh0ZXN0X2JpdChNUFRDUF9SVFhfRElTQUJMRUQsIFx1MDAyNm1zay1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbi1cdHRvdXQgPSBtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbDtcbitcdHRvdXQgPSBtc2stXHUwMDNldGltZXJfaXZhbDtcbiBcdHNrX3Jlc2V0X3RpbWVyKHNrLCBcdTAwMjZzay1cdTAwM2VtcHRjcF9yZXRyYW5zbWl0X3RpbWVyLCBqaWZmaWVzICsgdG91dCk7XG4gfVxuIFxuQEAgLTMzMjQsNiArMzMyNiw5IEBAIHZvaWQgbXB0Y3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlKVxuIFx0XHQgKiB0cmFuc2l0aW9uIGZyb20gVENQX1NZTl9SRUNWIHRvIFRDUF9DTE9TRV9XQUlULlxuIFx0XHQgKi9cbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFRDUF9DTE9TRTpcbitcdFx0c2V0X2JpdChNUFRDUF9SVFhfRElTQUJMRUQsIFx1MDAyNm1wdGNwX3NrKHNrKS1cdTAwM2VmbGFncyk7XG4rXHRcdGZhbGx0aHJvdWdoO1xuIFx0ZGVmYXVsdDpcbiBcdFx0aWYgKG9sZHN0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fCBvbGRzdGF0ZSA9PSBUQ1BfQ0xPU0VfV0FJVClcbiBcdFx0XHRNUFRDUF9ERUNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfQ1VSUkVTVEFCKTtcbkBAIC0zODc2LDcgKzM4ODEsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb24oc3RydWN0IHNvY2sgKnNzaylcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc3NrKTtcbiBcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcbiBcbi1cdGlmIChSRUFEX09OQ0UobXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZCkpXG4rXHRpZiAobXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogcmVzY2hlZHVsZSB3aXRoIGEgdGltZW91dCBhYm92ZSBSVFQsIGFzIHdlIG11c3QgbG9vayBvbmx5IGZvciBkcm9wICovXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggMDZhMTA3ZDRlODM5Mi4uNmMwMGE4MDM0NGY5MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTExNiw2ICsxMTYsNyBAQFxuICNkZWZpbmUgTVBUQ1BfV09SS19SVFhcdFx0MVxuICNkZWZpbmUgTVBUQ1BfRkFMTEJBQ0tfRE9ORVx0MlxuICNkZWZpbmUgTVBUQ1BfV09SS19DTE9TRV9TVUJGTE9XIDNcbisjZGVmaW5lIE1QVENQX1JUWF9ESVNBQkxFRFx0NFxuIFxuIC8qIE1QVENQIHNvY2tldCByZWxlYXNlIGNiIGZsYWdzICovXG4gI2RlZmluZSBNUFRDUF9QVVNIX1BFTkRJTkdcdDFcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuaW5kZXggYWY4MWFkNWU2OTlkMS4uMDFkYjdlZGNlMThhNiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmNcbisrKyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbkBAIC0yMDg0LDcgKzIwODQsNiBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHRcdG5ld19jdHgtXHUwMDNlcmVxdWVzdF9ia3VwID0gc3ViZmxvd19yZXEtXHUwMDNlcmVxdWVzdF9ia3VwO1xuIFx0XHRXUklURV9PTkNFKG5ld19jdHgtXHUwMDNlcmVtb3RlX2lkLCBzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQpO1xuIFx0XHRuZXdfY3R4LVx1MDAzZXRva2VuID0gc3ViZmxvd19yZXEtXHUwMDNldG9rZW47XG4tXHRcdG5ld19jdHgtXHUwMDNldGhtYWMgPSBzdWJmbG93X3JlcS1cdTAwM2V0aG1hYztcbiBcbiBcdFx0LyogdGhlIHN1YmZsb3cgcmVxIGlkIGlzIHZhbGlkLCBmZXRjaGVkIHZpYSBzdWJmbG93X2NoZWNrX3JlcSgpXG4gXHRcdCAqIGFuZCBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdCgpXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmNcbmluZGV4IGI1Y2FjNTcwMTEyMjEuLjk0NzQ3MDY2NDFjMTEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3luY29va2llcy5jXG4rKysgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jXG5AQCAtMjYsNyArMjYsOCBAQCBzdHJ1Y3Qgam9pbl9lbnRyeSB7XG4gXHR1MzIgbG9jYWxfbm9uY2U7XG4gXHR1OCBqb2luX2lkO1xuIFx0dTggbG9jYWxfaWQ7XG4tXHR1OCBiYWNrdXA7XG4rXHR1OCBiYWNrdXA6MSxcbitcdCAgIHJlcXVlc3RfYmt1cDoxO1xuIFx0dTggdmFsaWQ7XG4gfTtcbiBcbkBAIC02Myw2ICs2NCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2pvaW5fc3RvcmVfc3RhdGUoc3RydWN0IGpvaW5fZW50cnkgKmVudHJ5LFxuIFx0ZW50cnktXHUwMDNlcmVtb3RlX25vbmNlID0gc3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX25vbmNlO1xuIFx0ZW50cnktXHUwMDNlbG9jYWxfbm9uY2UgPSBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9ub25jZTtcbiBcdGVudHJ5LVx1MDAzZWJhY2t1cCA9IHN1YmZsb3dfcmVxLVx1MDAzZWJhY2t1cDtcbitcdGVudHJ5LVx1MDAzZXJlcXVlc3RfYmt1cCA9IHN1YmZsb3dfcmVxLVx1MDAzZXJlcXVlc3RfYmt1cDtcbiBcdGVudHJ5LVx1MDAzZWpvaW5faWQgPSBzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQ7XG4gXHRlbnRyeS1cdTAwM2Vsb2NhbF9pZCA9IHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkO1xuIFx0ZW50cnktXHUwMDNldmFsaWQgPSAxO1xuQEAgLTExNyw2ICsxMTksNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbFxuIFx0c3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX25vbmNlID0gZS1cdTAwM2VyZW1vdGVfbm9uY2U7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9ub25jZSA9IGUtXHUwMDNlbG9jYWxfbm9uY2U7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2ViYWNrdXAgPSBlLVx1MDAzZWJhY2t1cDtcbitcdHN1YmZsb3dfcmVxLVx1MDAzZXJlcXVlc3RfYmt1cCA9IGUtXHUwMDNlcmVxdWVzdF9ia3VwO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX2lkID0gZS1cdTAwM2Vqb2luX2lkO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQgPSBlLVx1MDAzZWxvY2FsX2lkO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNldG9rZW4gPSBlLVx1MDAzZXRva2VuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG5pbmRleCBlYTRjYjZjMWJkNWUyLi4xNzhkOThkOTFmZWEyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY1xuQEAgLTM4MSw2ICszODEsOSBAQCBzdGF0aWMgaW50IHNvY2tfY29ubmVjdF9tcHRjcChjb25zdCBjaGFyICogY29uc3QgcmVtb3RlYWRkcixcbiBcbiBcdGhpbnRzLmFpX2ZhbWlseSA9IHBmO1xuIFxuK1x0LyogS2VlcCB0aGUgcmVzb2x2ZWQgYWRkcmVzcyBhbGl2ZSBmb3IgdGhlIHdob2xlIGV4ZWN1dGlvbjogaXQgaXNcbitcdCAqIHVzZWQgYWdhaW4gd2hlbiByZWNvbm5lY3RpbmcsIGFuZCB3aWxsIGJlIHJlbGVhc2VkIGF0IGV4aXQgdGltZS5cbitcdCAqL1xuIFx0eGdldGFkZHJpbmZvKHJlbW90ZWFkZHIsIHBvcnQsIFx1MDAyNmhpbnRzLCBcdTAwMjZhZGRyKTtcbiBcdGZvciAoYSA9IGFkZHI7IGE7IGEgPSBhLVx1MDAzZWFpX25leHQpIHtcbiBcdFx0c29jayA9IHNvY2tldChhLVx1MDAzZWFpX2ZhbWlseSwgYS1cdTAwM2VhaV9zb2NrdHlwZSwgcHJvdG8pO1xuQEAgLTQyMSw3ICs0MjQsNiBAQCBzdGF0aWMgaW50IHNvY2tfY29ubmVjdF9tcHRjcChjb25zdCBjaGFyICogY29uc3QgcmVtb3RlYWRkcixcbiBcdFx0c29jayA9IC0xO1xuIFx0fVxuIFxuLVx0ZnJlZWFkZHJpbmZvKGFkZHIpO1xuIFx0aWYgKHNvY2sgIT0gLTEpXG4gXHRcdFNPQ0tfVEVTVF9UQ1BVTFAoc29jaywgcHJvdG8pO1xuIFx0cmV0dXJuIHNvY2s7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2xpYi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9saWIuc2hcbmluZGV4IDVlZjYwMzM3NzVjODYuLmI5ZDE0NjQ3ZjQwMTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoXG5AQCAtMTA4LDEyICsxMDgsMTQgQEAgbXB0Y3BfbGliX3ByX2luZm8oKSB7XG4gXG4gbXB0Y3BfbGliX3ByX25zdGF0KCkge1xuIFx0bG9jYWwgbnM9XCIkezF9XCJcbi1cdGxvY2FsIGhpc3Q9XCIvdG1wLyR7bnN9Lm91dFwiXG4rXHRsb2NhbCBjYWNoZT1cIi90bXAvJHtuc30ub3V0XCJcbitcdGxvY2FsIGhpc3Q9XCIvdG1wLyR7bnN9Lm5zdGF0XCJcbiBcbi1cdGlmIFsgLWYgXCIke2hpc3R9XCIgXTsgdGhlblxuLVx0XHRhd2sgJyQyICE9IDAgeyBwcmludCBcIiAgXCIkMCB9JyBcIiR7aGlzdH1cIlxuK1x0aWYgWyAtZiBcIiR7Y2FjaGV9XCIgXTsgdGhlblxuK1x0XHRhd2sgJyQyICE9IDAgeyBwcmludCBcIiAgXCIkMCB9JyBcIiR7Y2FjaGV9XCJcbiBcdGVsc2Vcbi1cdFx0aXAgbmV0bnMgZXhlYyBcIiR7bnN9XCIgbnN0YXQgLWFzIHwgZ3JlcCBUY3BcbitcdFx0TlNUQVRfSElTVE9SWT1cIiR7aGlzdH1cIiBpcCBuZXRucyBleGVjIFwiJHtuc31cIiBuc3RhdCAtcyB8XG4rXHRcdFx0Z3JlcCBUY3BcbiBcdGZpXG4gfVxuIFxuQEAgLTQxNCwxOSArNDE2LDIxIEBAIG1wdGNwX2xpYl9uc3RhdF9nZXQoKSB7XG4gfVxuIFxuICMgJDE6IG5zLCAkMjogTUlCIGNvdW50ZXJcbi0jIEdldCB0aGUgY291bnRlciBmcm9tIHRoZSBoaXN0b3J5IChtcHRjcF9saWJfbnN0YXRfe2luaXQsZ2V0fSgpKSBpZiBhdmFpbGFibGUuXG4tIyBJZiBub3QsIGdldCB0aGUgY291bnRlciBmcm9tIG5zdGF0IGlnbm9yaW5nIGFueSBoaXN0b3J5LlxuKyMgR2V0IHRoZSBjb3VudGVyIGZyb20gdGhlIGNhY2hlIChtcHRjcF9saWJfbnN0YXRfe2luaXQsZ2V0fSgpKSBpZiBhdmFpbGFibGUuXG4rIyBJZiBub3QsIGdldCB0aGUgY291bnRlciBmcm9tIG5zdGF0IGlnbm9yaW5nIGFueSBjYWNoZSwgYnV0IHVzaW5nIHRoZSBoaXN0b3J5LlxuIG1wdGNwX2xpYl9nZXRfY291bnRlcigpIHtcbiBcdGxvY2FsIG5zPVwiJHsxfVwiXG4gXHRsb2NhbCBjb3VudGVyPVwiJHsyfVwiXG4tXHRsb2NhbCBoaXN0PVwiL3RtcC8ke25zfS5vdXRcIlxuK1x0bG9jYWwgY2FjaGU9XCIvdG1wLyR7bnN9Lm91dFwiXG4rXHRsb2NhbCBoaXN0PVwiL3RtcC8ke25zfS5uc3RhdFwiXG4gXHRsb2NhbCBjb3VudFxuIFxuLVx0aWYgW1sgLXMgXCIke2hpc3R9XCIgXHUwMDI2XHUwMDI2IFwiJHtjb3VudGVyfVwiID09ICpcIlRjcFwiKiBdXTsgdGhlblxuLVx0XHRjb3VudD0kKGF3ayBcIi9eJHtjb3VudGVyfSAvIHtwcmludCBcXCQyOyBleGl0fVwiIFwiJHtoaXN0fVwiKVxuK1x0aWYgW1sgLXMgXCIke2NhY2hlfVwiIFx1MDAyNlx1MDAyNiBcIiR7Y291bnRlcn1cIiA9PSAqXCJUY3BcIiogXV07IHRoZW5cbitcdFx0Y291bnQ9JChhd2sgXCIvXiR7Y291bnRlcn0gLyB7cHJpbnQgXFwkMjsgZXhpdH1cIiBcIiR7Y2FjaGV9XCIpXG4gXHRlbHNlXG4tXHRcdGNvdW50PSQoaXAgbmV0bnMgZXhlYyBcIiR7bnN9XCIgbnN0YXQgLWFzeiBcIiR7Y291bnRlcn1cIiB8XG4tXHRcdFx0YXdrICdOUj09MSB7bmV4dH0ge3ByaW50ICQyfScpXG4rXHRcdGNvdW50PSQoTlNUQVRfSElTVE9SWT1cIiR7aGlzdH1cIiBpcCBuZXRucyBleGVjIFwiJHtuc31cIiBcXFxuK1x0XHRcdG5zdGF0IC1zeiBcIiR7Y291bnRlcn1cIiB8XG4rXHRcdFx0XHRhd2sgJ05SPT0xIHtuZXh0fSB7cHJpbnQgJDJ9JylcbiBcdGZpXG4gXHRpZiBbIC16IFwiJHtjb3VudH1cIiBdOyB0aGVuXG4gXHRcdG1wdGNwX2xpYl9mYWlsX2lmX2V4cGVjdGVkX2ZlYXR1cmUgXCIke2NvdW50ZXJ9IGNvdW50ZXJcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MjM6MDIuODQ3Njk4OTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc3OTY1MjI4NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIE1QVENQIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBxdWl0ZSBhIGZldyBmaWxlcyB3aXRoaW4gdGhlIE1QVENQIHN1YnN5c3RlbS4gTG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcyBpcyBzcHJlYWQgYWNyb3NzIGBvcHRpb25zLmNgLCBgcG0uY2AsIGBwbV9rZXJuZWwuY2AsIGBwbV91c2Vyc3BhY2UuY2AsIGBwcm90b2NvbC5jYCwgYHByb3RvY29sLmhgLCBgc3ViZmxvdy5jYCwgYW5kIGBzeW5jb29raWVzLmNgLCBwbHVzIHNvbWUgc2VsZnRlc3RzLiBBIGdvb2Qgc2lnbiwgdGhhdCBtZWFucyB0aGV5J3JlIGFpbWluZyBmb3Igd2lkZXNwcmVhZCBpbXByb3ZlbWVudHMuXG5cbkZpcnN0LCBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBpbiBgb3B0aW9ucy5jYDogSSBzZWUgYSBib3VuZHMgY2hlY2sgYWRkZWQgaW4gYG1wdGNwX3BhcnNlX29wdGlvbmAsIHdoaWNoIGlzIHNtYXJ0IGZvciBhdm9pZGluZyBwb3RlbnRpYWwgb3ZlcmZsb3dzLCBhbmQgYSBkaXJlY3QgYWNjZXNzIGluIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wYCBhbmQgYGNoZWNrX2Z1bGx5X2VzdGFibGlzaGVkYC4gVGhleSdyZSBhbHNvIHplcm9pbmcgb3V0IHRoZSBjaGVja3N1bSBpbiBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gIHdoZW4gd3JpdGluZyBEQVRBX0ZJTiB3aGljaCBtYWtlcyBzZW5zZS4gTG9va3MgbGlrZSBzb21lIHBvdGVudGlhbCBhdG9taWNpdHkgaXNzdWVzIGhhdmUgYmVlbiByZXNvbHZlZC5cblxuTW92aW5nIG9udG8gYHBtLmNgLCBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBzZWVtcyB0byBiZSBqdXN0IHJlLWFycmFuZ2luZyB0aGUgb3JkZXIgb2YgdGhlIGNvZGUuXG5cbmBwbV9rZXJuZWwuY2AgaXMgZHJvcHBpbmcgYSBwZW5kaW5nIEFERF9BRERSLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiByZW1vdmluZyBhZGRyZXNzZXMsIHByZXZlbnRpbmcgYSByYWNlLiBgcG1fdXNlcnNwYWNlLmNgIGZpeGVzIHNvbWUgSUQgYXNzaWdubWVudC5cblxuSW4gYHByb3RvY29sLmNgLCB0aGV5J3JlIGludHJvZHVjaW5nIGEgYE1QVENQX1JUWF9ESVNBQkxFRGAgZmxhZy4gVGhpcyBzZWVtcyB0byBiZSBwYXJ0IG9mIHRoZSBmYWxsYmFjay9yZXRyYW5zbWlzc2lvbiBsb2dpYy4gSSBzZWUgaXQgYmVpbmcgc2V0IGluIGBfX21wdGNwX3RyeV9mYWxsYmFja2AgYW5kIGBtcHRjcF9zZXRfc3RhdGVgIHdoZW4gYSBjb25uZWN0aW9uIGlzIGNsb3NlZC4gVGhlIGNvZGUgaXMgYWxzbyBiZWluZyBvcHRpbWl6ZWQgd2l0aCBgbGlrZWx5YCBhbmQgYHVubGlrZWx5YCBoaW50cywgYW5kIHNvbWUgcmUtb3JkZXJpbmcgaW4gYG1wdGNwX2RhdGFfcXVldWVfb2ZvYC4gR29vZCB0byBzZWUgdGhlIGBSRUFEX09OQ0VgIHVzYWdlIGJlaW5nIGNsZWFuZWQgdXAuXG5cblRoZSBhZGRpdGlvbiBvZiBgTVBUQ1BfUlRYX0RJU0FCTEVEYCBpbiBgcHJvdG9jb2wuaGAgbWFrZXMgdGhlIHB1cnBvc2Ugb2YgdGhlIGZsYWcgY2xlYXIsIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgc3ViZmxvdyByZXF1ZXN0IGNsb25pbmcgaW4gYHN1YmZsb3cuY2AgaXMgd29ydGggZXhhbWluaW5nIGZ1cnRoZXIuXG5cbkZpbmFsbHksIGluIGBzeW5jb29raWVzLmNgLCB0aGV5J3JlIGFkZGluZyBhIGByZXF1ZXN0X2JrdXBgIGZpZWxkIHRvIHRoZSBgam9pbl9lbnRyeWAgc3RydWN0IGFuZCBzdG9yaW5nL3Jlc3RvcmluZyBpdHMgc3RhdGUuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gaG93IGJhY2t1cCBzdWJmbG93cyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC5cblxuT3ZlcmFsbCwgdGhlc2UgbG9vayBsaWtlIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnRzLCBhbmQgSSBzZWUgcG90ZW50aWFsIG9wcG9ydHVuaXRpZXMgZm9yIGZ1enppbmcgaGVyZSwgZXNwZWNpYWxseSBhcm91bmQgdGhlIG5ldyBmbGFnIGFuZCBhbnkgY2hhbmdlcyBpbiB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtcy4gSXTigJlzIGNyaXRpY2FsIHRvIGlkZW50aWZ5IHRoZSBgQ09ORklHX01QVENQYCBhbmQgc2VlIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgdHVuYWJsZSBwYXJhbWV0ZXJzIGFuZC9vciByZWxhdGVkIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MjY6MDAuODEyOTMxNTEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjAxNjQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MjY6MDAuOTQ4OTUzMDQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE2ODg2MjU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBNUFRDUGAgY29uZmlndXJhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgZm9jdXMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBjZW50ZXJzIGFyb3VuZCBhIHNwZWNpZmljIHNldCBvZiBmdW5jdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBiZWVuIHR3ZWFrZWQsIGFuZCB0aGUga2V5IGVudHJ5cG9pbnRzIGFyZSBzY2F0dGVyZWQgYWNyb3NzIHZhcmlvdXMgcGFydHMgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIHByaW1hcnkgZnVuY3Rpb24gYG1wdGNwX3BhcnNlX29wdGlvbmAganVtcHMgb3V0IGFzIGxpa2VseSBiZWluZyBhIHNpZ25pZmljYW50IGFyZWEgb2YgaW50ZXJlc3QsIGdpdmVuIHRoYXQgaXQgZGVhbHMgd2l0aCBwYXJzaW5nIHRoZSBvcHRpb25zIGRpcmVjdGx5LiBUaGVuIHRoZXJlIGFyZSBvdGhlciBlc3RhYmxpc2hlZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBvcHRpb25zLCBzdWNoIGFzIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wYC5cblxuSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgYW5kIEZJTiBoYW5kbGluZyBpbiBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gLCBhbG9uZyB3aXRoIGBjaGVja19mdWxseV9lc3RhYmxpc2hlZGAgYXMgd2VsbC4gVGhlIGFsbG9jYXRpb24gbWFuYWdlbWVudCBpbiBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBpcyBhbm90aGVyIG9idmlvdXMgY2FuZGlkYXRlLiBUaGUgcmVtb3ZhbCBvZiB0aGUgaWQtemVybyBhZGRyZXNzIGluIGBtcHRjcF9ubF9yZW1vdmVfaWRfemVyb19hZGRyZXNzYCBmZWVscyBsaWtlIGl0J3MgYWRkcmVzc2luZyBzb21lIGNyaXRpY2FsIGNvcm5lciBjYXNlLiBGdXJ0aGVybW9yZSwgY2hhbmdlcyB0byB0aGUgbG9jYWwgYWRkcmVzcyBhcHBlbmRpbmcgaW4gYG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHJgIHNob3VsZCBwcm92ZSBzaWduaWZpY2FudCBhcyB3ZWxsLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGZhbGxiYWNrIGxvZ2ljIGluIGBfX21wdGNwX3RyeV9mYWxsYmFja2AgYW5kIGhvdyB0aGF0J3MgYmVlbiBtb2RpZmllZCwgaW4gYWRkaXRpb24gdG8gdGhlIGRhdGEgaGFuZGxpbmcgY2hhbmdlcyB3aXRoaW4gYG1wdGNwX2Nhbl9pbmdlc3RgIGFuZCBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gLiBQbHVzLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVzZXQgdGltZXIgZnVuY3Rpb24gYG1wdGNwX3Jlc2V0X3J0eF90aW1lcmAsIHRoZSBzdGF0ZSBjaGFuZ2VzIGluIGBtcHRjcF9zZXRfc3RhdGVgLCBhbmQgdGhlIHJldHJhbnNtaXNzaW9uIGluIGBzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb25gLiBGaW5hbGx5LCBsZXQncyBub3Qgb3Zlcmxvb2sgYHN1YmZsb3dfdWxwX2Nsb25lYCwgYG1wdGNwX2pvaW5fc3RvcmVfc3RhdGVgLCBhbmQgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLCBhcyB0aG9zZSBhcmUgYWxsIHJlbGV2YW50LlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSB3aGljaCBvZiB0aGVzZSBhcmUgYWN0dWFsbHkgZXhwb3NlZCBBUEkgZW50cnlwb2ludHMuIEkgbmVlZCB0byBmaWx0ZXIgb3V0IGFueSBpbnRlcm5hbCBmdW5jdGlvbnMgb3IgaW5saW5lZCBjb2RlIHRvIGdldCBhIHRydWUgdW5kZXJzdGFuZGluZyBvZiB0aGUgbmV3IGV4dGVybmFsIGludGVyZmFjZSBvZiB0aGlzIHNlY3Rpb24uIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBhcyB0aGUgcHJpbWFyeSBwb2ludHMgb2YgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzYxLCJPdXRwdXRUb2tlbnMiOjU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI2OjA3LjExNzgxODM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTczMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZHxpbnR8Ym9vbHxzdHJ1Y3QgW2EtekEtWjAtOV9dKyBcXFxcKikgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMDYzIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvbXB0Y3AvY3J5cHRvLmMtMjktXFxubmV0L21wdGNwL2NyeXB0by5jOjMwOnZvaWQgbXB0Y3BfY3J5cHRvX2tleV9zaGEodTY0IGtleSwgdTMyICp0b2tlbiwgdTY0ICppZHNuKVxcbm5ldC9tcHRjcC9jcnlwdG8uYy0zMS17XFxuLS1cXG5uZXQvbXB0Y3AvY3J5cHRvLmMtNDItXFxubmV0L21wdGNwL2NyeXB0by5jOjQzOnZvaWQgbXB0Y3BfY3J5cHRvX2htYWNfc2hhKHU2NCBrZXkxLCB1NjQga2V5MiwgdTggKm1zZywgaW50IGxlbiwgdm9pZCAqaG1hYylcXG5uZXQvbXB0Y3AvY3J5cHRvLmMtNDQte1xcbi0tXFxubmV0L21wdGNwL2N0cmwuYz00Nj1zdGF0aWMgc3RydWN0IG1wdGNwX3Blcm5ldCAqbXB0Y3BfZ2V0X3Blcm5ldChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbXB0Y3AvY3RybC5jLTUwLVxcbm5ldC9tcHRjcC9jdHJsLmM6NTE6aW50IG1wdGNwX2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9tcHRjcC9jdHJsLmMtNTIte1xcbi0tXFxubmV0L21wdGNwL2N0cmwuYz01Nj11bnNpZ25lZCBpbnQgbXB0Y3BfZ2V0X2FkZF9hZGRyX3RpbWVvdXQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L21wdGNwL2N0cmwuYy02MC1cXG5uZXQvbXB0Y3AvY3RybC5jOjYxOmludCBtcHRjcF9pc19jaGVja3N1bV9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbXB0Y3AvY3RybC5jLTYyLXtcXG4tLVxcbm5ldC9tcHRjcC9jdHJsLmMtNjUtXFxubmV0L21wdGNwL2N0cmwuYzo2NjppbnQgbXB0Y3BfYWxsb3dfam9pbl9pZDAoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9tcHRjcC9jdHJsLmMtNjcte1xcbi0tXFxubmV0L21wdGNwL2N0cmwuYz03Nj11bnNpZ25lZCBpbnQgbXB0Y3BfY2xvc2VfdGltZW91dChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvY3RybC5jLTgyLVxcbm5ldC9tcHRjcC9jdHJsLmM6ODM6aW50IG1wdGNwX2dldF9wbV90eXBlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbXB0Y3AvY3RybC5jLTg0LXtcXG4tLVxcbm5ldC9tcHRjcC9jdHJsLmM9NDQxPXN0YXRpYyB2b2lkIG1wdGNwX3Blcm5ldF9kZWxfdGFibGUoc3RydWN0IG1wdGNwX3Blcm5ldCAqcGVybmV0KSB7fVxcbi0tXFxubmV0L21wdGNwL2N0cmwuYy00NTUtLyogRGlzYWJsZSBhY3RpdmUgTVBUQ1AgYW5kIHJlY29yZCBjdXJyZW50IGppZmZpZXMgYW5kIGFjdGl2ZV9kaXNhYmxlX3RpbWVzICovXFxubmV0L21wdGNwL2N0cmwuYzo0NTY6dm9pZCBtcHRjcF9hY3RpdmVfZGlzYWJsZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL2N0cmwuYy00NTcte1xcbi0tXFxubmV0L21wdGNwL2N0cmwuYy00ODEtICovXFxubmV0L21wdGNwL2N0cmwuYzo0ODI6Ym9vbCBtcHRjcF9hY3RpdmVfc2hvdWxkX2Rpc2FibGUoc3RydWN0IHNvY2sgKnNzaylcXG5uZXQvbXB0Y3AvY3RybC5jLTQ4My17XFxuLS1cXG5uZXQvbXB0Y3AvY3RybC5jLTUxNC0vKiBFbmFibGUgYWN0aXZlIE1QVENQIGFuZCByZXNldCBhY3RpdmVfZGlzYWJsZV90aW1lcyBpZiBuZWVkZWQgKi9cXG5uZXQvbXB0Y3AvY3RybC5jOjUxNTp2b2lkIG1wdGNwX2FjdGl2ZV9lbmFibGUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9jdHJsLmMtNTE2LXtcXG4tLVxcbm5ldC9tcHRjcC9jdHJsLmMtNTMyLS8qIENoZWNrIHRoZSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zLCBhbmQgZmFsbGJhY2sgdG8gVENQIGlmIG5lZWRlZCAqL1xcbm5ldC9tcHRjcC9jdHJsLmM6NTMzOnZvaWQgbXB0Y3BfYWN0aXZlX2RldGVjdF9ibGFja2hvbGUoc3RydWN0IHNvY2sgKnNzaywgYm9vbCBleHBpcmVkKVxcbm5ldC9tcHRjcC9jdHJsLmMtNTM0LXtcXG4tLVxcbm5ldC9tcHRjcC9kaWFnLmM9OTM9c3RhdGljIHNpemVfdCBzdWJmbG93X2dldF9pbmZvX3NpemUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBib29sIG5ldF9hZG1pbilcXG4tLVxcbm5ldC9tcHRjcC9kaWFnLmMtMTE1LVxcbm5ldC9tcHRjcC9kaWFnLmM6MTE2OnZvaWQgbXB0Y3BfZGlhZ19zdWJmbG93X2luaXQoc3RydWN0IHRjcF91bHBfb3BzICpvcHMpXFxubmV0L21wdGNwL2RpYWcuYy0xMTcte1xcbi0tXFxubmV0L21wdGNwL2Zhc3RvcGVuLmMtOC1cXG5uZXQvbXB0Y3AvZmFzdG9wZW4uYzo5OnZvaWQgbXB0Y3BfZmFzdG9wZW5fc3ViZmxvd19zeW5hY2tfc2V0X3BhcmFtcyhzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxcbm5ldC9tcHRjcC9mYXN0b3Blbi5jLTEwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbm5ldC9tcHRjcC9taWIuYz0xMT1zdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xcbi0tXFxubmV0L21wdGNwL21pYi5jLTEwNC0gKi9cXG5uZXQvbXB0Y3AvbWliLmM6MTA1OmJvb2wgbXB0Y3BfbWliX2FsbG9jKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbXB0Y3AvbWliLmMtMTA2LXtcXG4tLVxcbm5ldC9tcHRjcC9taWIuYy0xMTctXFxubmV0L21wdGNwL21pYi5jOjExODp2b2lkIG1wdGNwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbm5ldC9tcHRjcC9taWIuYy0xMTkte1xcbi0tXFxubmV0L21wdGNwL21pYi5oPTEzMT1zdGF0aWMgaW5saW5lIHZvaWQgTVBUQ1BfREVDX1NUQVRTKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9tcHRjcC9taWIuaC0xMzctXFxubmV0L21wdGNwL21pYi5oOjEzODpib29sIG1wdGNwX21pYl9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQpO1xcbi0tXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oPTQxPWV4dGVybiBjb25zdCBzdHJ1Y3QgZ2VubF9vcHMgbXB0Y3BfcG1fbmxfb3BzWzExXTtcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmgtNDItXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjQzOmludCBtcHRjcF9wbV9ubF9hZGRfYWRkcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uaDo0NDppbnQgbXB0Y3BfcG1fbmxfZGVsX2FkZHJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg6NDU6aW50IG1wdGNwX3BtX25sX2dldF9hZGRyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjQ2OmludCBtcHRjcF9wbV9ubF9nZXRfYWRkcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmgtNDctXFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg6NDg6aW50IG1wdGNwX3BtX25sX2ZsdXNoX2FkZHJzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjQ5OmludCBtcHRjcF9wbV9ubF9zZXRfbGltaXRzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjUwOmludCBtcHRjcF9wbV9ubF9nZXRfbGltaXRzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjUxOmludCBtcHRjcF9wbV9ubF9zZXRfZmxhZ3NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg6NTI6aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5oOjUzOmludCBtcHRjcF9wbV9ubF9yZW1vdmVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmg6NTQ6aW50IG1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmgtNTUtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9tcHRjcC9tcHRjcF9wbV9nZW4uaDo1NjppbnQgbXB0Y3BfcG1fbmxfc3ViZmxvd19kZXN0cm95X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmgtNTctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MjM9c3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQyMi1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjQyMzp2b2lkIG1wdGNwX2dldF9vcHRpb25zKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21wdGNwL29wdGlvbnMuYy00MjQtXFx0XFx0ICAgICAgIHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2NC1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjQ2NTpib29sIG1wdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTQ2Ni1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50ICpzaXplLCBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTg1MD1zdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wX2ZhaWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemUsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTg3MS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjg3MjppbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21wdGNwL29wdGlvbnMuYy04NzMtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZywgYm9vbCBoYXNfdHMsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk0Ny1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjk0ODpib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTQ5LVxcdFxcdFxcdCAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0xMTE4PXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNTktXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMTYwOmJvb2wgbXB0Y3BfdXBkYXRlX3Jjdl9kYXRhX2ZpbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1NjQgZGF0YV9maW5fc2VxLCBib29sIHVzZV82NGJpdClcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNjEte1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0xMTk1PXN0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIzLSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTIyNDpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyNS17XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTE0NjI9c3RhdGljIHZvaWQgcHV0X2xlbl9jc3VtKHUxNiBsZW4sIF9fc3VtMTYgY3N1bSwgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTQ3MS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE0NzI6dm9pZCBtcHRjcF93cml0ZV9vcHRpb25zKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCxcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE0NzMtXFx0XFx0XFx0IHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG4tLVxcbm5ldC9tcHRjcC9wbS5jPTI2PXN0YXRpYyBMSVNUX0hFQUQobXB0Y3BfcG1fbGlzdCk7XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0zMi0gKi9cXG5uZXQvbXB0Y3AvcG0uYzozMzpib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9tcHRjcC9wbS5jLTM0LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqbG9jLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtNTQtXFxubmV0L21wdGNwL3BtLmM6NTU6Ym9vbCBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYSxcXG5uZXQvbXB0Y3AvcG0uYy01Ni1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpiLCBib29sIHVzZV9wb3J0KVxcbi0tXFxubmV0L21wdGNwL3BtLmMtODItXFxubmV0L21wdGNwL3BtLmM6ODM6dm9pZCBtcHRjcF9sb2NhbF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxcbm5ldC9tcHRjcC9wbS5jLTg0LVxcdFxcdFxcdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtOTUtXFxubmV0L21wdGNwL3BtLmM6OTY6dm9pZCBtcHRjcF9yZW1vdGVfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyxcXG5uZXQvbXB0Y3AvcG0uYy05Ny1cXHRcXHRcXHQgIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz0xMDk9c3RhdGljIGJvb2wgbXB0Y3BfcG1faXNfaW5pdF9yZW1vdGVfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTE3LVxcbm5ldC9tcHRjcC9wbS5jOjExODpib29sIG1wdGNwX3BtX2hhc19zdWJmbG93X3NhZGRyKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtLmMtMTE5LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnNhZGRyKVxcbi0tXFxubmV0L21wdGNwL3BtLmM9MTUzPW1wdGNwX3BtX2Fubm91bmNlZF9kZWxfdGltZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTE4NS1cXG5uZXQvbXB0Y3AvcG0uYzoxODY6Ym9vbCBtcHRjcF9wbV9hbm5vdW5jZWRfcmVtb3ZlKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtLmMtMTg3LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTk4LVxcbm5ldC9tcHRjcC9wbS5jOjE5OTpib29sIG1wdGNwX3BtX2Fubm91bmNlZF9oYXNfc3NrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3BtLmMtMjAwLXtcXG4tLVxcbm5ldC9tcHRjcC9wbS5jPTIyMD1zdGF0aWMgdm9pZCBfX21wdGNwX3BtX3NlbmRfYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0yNDAtXFxubmV0L21wdGNwL3BtLmM6MjQxOnZvaWQgbXB0Y3BfcG1fc2VuZF9hY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG0uYy0yNDItXFx0XFx0ICAgICAgIHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz0yNjU9bXB0Y3BfcG1fYWRkcl9zZW5kX2Fja19hdm9pZF9saXN0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0zMDMtXFxubmV0L21wdGNwL3BtLmM6MzA0OnZvaWQgbXB0Y3BfcG1fYWRkcl9zZW5kX2FjayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wbS5jLTMwNS17XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0zMDgtXFxubmV0L21wdGNwL3BtLmM6MzA5OmludCBtcHRjcF9wbV9tcF9wcmlvX3NlbmRfYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3BtLmMtMzEwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIsXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz0zNzY9c3RhdGljIHZvaWQgbXB0Y3BfcG1fYWRkX2FkZHJfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtNDM2LVxcbm5ldC9tcHRjcC9wbS5jOjQzNzpib29sIG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wbS5jLTQzOC1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxcbi0tXFxubmV0L21wdGNwL3BtLmM9NDc3PXN0YXRpYyB2b2lkIG1wdGNwX3BtX2ZyZWVfYW5ub3VuY2VkX2xpc3Qoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTQ5Ny1cXG5uZXQvbXB0Y3AvcG0uYzo0OTg6aW50IG1wdGNwX3BtX2Fubm91bmNlX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG0uYy00OTktXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcixcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTUyNS1cXG5uZXQvbXB0Y3AvcG0uYzo1MjY6aW50IG1wdGNwX3BtX3JlbW92ZV9hZGRyKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9ybV9saXN0ICpybV9saXN0KVxcbm5ldC9tcHRjcC9wbS5jLTUyNy17XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy01NDYtXFxubmV0L21wdGNwL3BtLmM6NTQ3OnZvaWQgbXB0Y3BfcG1fbmV3X2Nvbm5lY3Rpb24oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzaywgaW50IHNlcnZlcl9zaWRlKVxcbm5ldC9tcHRjcC9wbS5jLTU0OC17XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy01NTYtXFxubmV0L21wdGNwL3BtLmM6NTU3OmJvb2wgbXB0Y3BfcG1fYWxsb3dfbmV3X3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG5uZXQvbXB0Y3AvcG0uYy01NTgte1xcbi0tXFxubmV0L21wdGNwL3BtLmM9NTk3PXN0YXRpYyBib29sIG1wdGNwX3BtX3NjaGVkdWxlX3dvcmsoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTYwOS1cXG5uZXQvbXB0Y3AvcG0uYzo2MTA6dm9pZCBtcHRjcF9wbV9mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9wbS5jLTYxMS17XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy02MzYtXFxubmV0L21wdGNwL3BtLmM6NjM3OnZvaWQgbXB0Y3BfcG1fY29ubmVjdGlvbl9jbG9zZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG5uZXQvbXB0Y3AvcG0uYy02Mzgte1xcbi0tXFxubmV0L21wdGNwL3BtLmMtNjQ0LVxcbm5ldC9tcHRjcC9wbS5jOjY0NTp2b2lkIG1wdGNwX3BtX3N1YmZsb3dfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG5uZXQvbXB0Y3AvcG0uYy02NDYte1xcbi0tXFxubmV0L21wdGNwL3BtLmMtNjYxLVxcbm5ldC9tcHRjcC9wbS5jOjY2Mjp2b2lkIG1wdGNwX3BtX3N1YmZsb3dfY2hlY2tfbmV4dChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wbS5jLTY2My1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTY5Ni1cXG5uZXQvbXB0Y3AvcG0uYzo2OTc6dm9pZCBtcHRjcF9wbV9hZGRfYWRkcl9yZWNlaXZlZChjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLFxcbm5ldC9tcHRjcC9wbS5jLTY5OC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtNzM0LVxcbm5ldC9tcHRjcC9wbS5jOjczNTp2b2lkIG1wdGNwX3BtX2FkZF9hZGRyX2VjaG9lZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wbS5jLTczNi1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxcbi0tXFxubmV0L21wdGNwL3BtLmM9ODI4PXN0YXRpYyB2b2lkIG1wdGNwX3BtX3JtX2FkZHJfcmVjdihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtODMyLVxcbm5ldC9tcHRjcC9wbS5jOjgzMzp2b2lkIG1wdGNwX3BtX3JtX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG0uYy04MzQtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9ybV9saXN0ICpybV9saXN0KVxcbi0tXFxubmV0L21wdGNwL3BtLmMtODM4LVxcbm5ldC9tcHRjcC9wbS5jOjgzOTp2b2lkIG1wdGNwX3BtX3JtX2FkZHJfcmVjZWl2ZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG0uYy04NDAtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9ybV9saXN0ICpybV9saXN0KVxcbi0tXFxubmV0L21wdGNwL3BtLmMtODU3LVxcbm5ldC9tcHRjcC9wbS5jOjg1ODp2b2lkIG1wdGNwX3BtX21wX3ByaW9fcmVjZWl2ZWQoc3RydWN0IHNvY2sgKnNzaywgdTggYmt1cClcXG5uZXQvbXB0Y3AvcG0uYy04NTkte1xcbi0tXFxubmV0L21wdGNwL3BtLmMtODcxLVxcbm5ldC9tcHRjcC9wbS5jOjg3Mjp2b2lkIG1wdGNwX3BtX21wX2ZhaWxfcmVjZWl2ZWQoc3RydWN0IHNvY2sgKnNrLCB1NjQgZmFpbF9zZXEpXFxubmV0L21wdGNwL3BtLmMtODczLXtcXG4tLVxcbm5ldC9tcHRjcC9wbS5jPTkwMD1zdGF0aWMgaW50IG1wdGNwX2FkZF9hZGRyX2xlbihpbnQgZmFtaWx5LCBib29sIGVjaG8sIGJvb2wgcG9ydClcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTkxNC1cXG5uZXQvbXB0Y3AvcG0uYzo5MTU6Ym9vbCBtcHRjcF9wbV9hZGRfYWRkcl9zaWduYWwoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50ICpzaXplLCBpbnQgcmVtYWluaW5nLFxcbm5ldC9tcHRjcC9wbS5jLTkxNi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyLCBib29sICplY2hvLFxcbi0tXFxubmV0L21wdGNwL3BtLmM9OTk0PXN0YXRpYyBpbnQgbXB0Y3Bfcm1fYWRkcl9sZW4oY29uc3Qgc3RydWN0IG1wdGNwX3JtX2xpc3QgKnJtX2xpc3QpXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0xMDAxLVxcbm5ldC9tcHRjcC9wbS5jOjEwMDI6Ym9vbCBtcHRjcF9wbV9ybV9hZGRyX3NpZ25hbChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLFxcbm5ldC9tcHRjcC9wbS5jLTEwMDMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCAqcm1fbGlzdCwgaW50ICpzaXplKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTAzMi1cXG5uZXQvbXB0Y3AvcG0uYzoxMDMzOmludCBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2tfY29tbW9uICpza2MpXFxubmV0L21wdGNwL3BtLmMtMTAzNC17XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0xMDU2LVxcbm5ldC9tcHRjcC9wbS5jOjEwNTc6Ym9vbCBtcHRjcF9wbV9pc19iYWNrdXAoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2tfY29tbW9uICpza2MpXFxubmV0L21wdGNwL3BtLmMtMTA1OC17XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz0xMDcwPW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0xMTA2LVxcbm5ldC9tcHRjcC9wbS5jOjExMDc6dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG5uZXQvbXB0Y3AvcG0uYy0xMTA4LXtcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTExMzctXFxubmV0L21wdGNwL3BtLmM6MTEzODp2b2lkIG1wdGNwX3BtX3dvcmtlcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wbS5jLTExMzkte1xcbi0tXFxubmV0L21wdGNwL3BtLmMtMTE2Mi1cXG5uZXQvbXB0Y3AvcG0uYzoxMTYzOnZvaWQgbXB0Y3BfcG1fZGVzdHJveShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wbS5jLTExNjQte1xcbi0tXFxubmV0L21wdGNwL3BtLmMtMTE3Ni1cXG5uZXQvbXB0Y3AvcG0uYzoxMTc3OnZvaWQgbXB0Y3BfcG1fZGF0YV9yZXNldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wbS5jLTExNzgte1xcbi0tXFxubmV0L21wdGNwL3BtLmMtMTIwNS1cXG5uZXQvbXB0Y3AvcG0uYzoxMjA2OnZvaWQgbXB0Y3BfcG1fZGF0YV9pbml0KHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3BtLmMtMTIwNy17XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz0xMjIyPXN0cnVjdCBtcHRjcF9wbV9vcHMgKm1wdGNwX3BtX2ZpbmQoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTEyMzMtXFxubmV0L21wdGNwL3BtLmM6MTIzNDppbnQgbXB0Y3BfcG1fdmFsaWRhdGUoc3RydWN0IG1wdGNwX3BtX29wcyAqcG1fb3BzKVxcbm5ldC9tcHRjcC9wbS5jLTEyMzUte1xcbi0tXFxubmV0L21wdGNwL3BtLmMtMTIzOC1cXG5uZXQvbXB0Y3AvcG0uYzoxMjM5OmludCBtcHRjcF9wbV9yZWdpc3RlcihzdHJ1Y3QgbXB0Y3BfcG1fb3BzICpwbV9vcHMpXFxubmV0L21wdGNwL3BtLmMtMTI0MC17XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0xMjU4LVxcbm5ldC9tcHRjcC9wbS5jOjEyNTk6dm9pZCBtcHRjcF9wbV91bnJlZ2lzdGVyKHN0cnVjdCBtcHRjcF9wbV9vcHMgKnBtX29wcylcXG5uZXQvbXB0Y3AvcG0uYy0xMjYwLXtcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTEyNzItICovXFxubmV0L21wdGNwL3BtLmM6MTI3Mzp2b2lkIG1wdGNwX3BtX2dldF9hdmFpbGFibGUoY2hhciAqYnVmLCBzaXplX3QgbWF4bGVuKVxcbm5ldC9tcHRjcC9wbS5jLTEyNzQte1xcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTY1Nz1zdGF0aWMgdm9pZCBtcHRjcF9wbV9ubF9hZGRfYWRkcl9yZWNlaXZlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTcwNS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NzA2OnZvaWQgbXB0Y3BfcG1fbmxfcm1fYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1OCBybV9pZClcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNzA3LXtcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz04NTI9c3RhdGljIGludCBtcHRjcF9wbV9ubF9jcmVhdGVfbGlzdGVuX3NvY2tldChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTE3LVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo5MTg6aW50IG1wdGNwX3BtX25sX2dldF9sb2NhbF9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy05MTktXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqc2tjKVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTk0Ni1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6OTQ3OmJvb2wgbXB0Y3BfcG1fbmxfaXNfYmFja3VwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnNrYylcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTQ4LXtcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz05NjE9c3RhdGljIGludCBtcHRjcF9ubF9hZGRfc3ViZmxvd19vcl9zaWduYWxfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTk0LS8qIEFkZCBhbiBNUFRDUCBlbmRwb2ludCAqL1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo5OTU6aW50IG1wdGNwX3BtX25sX2FkZF9hZGRyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtOTk2LXtcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xMTI4PXN0YXRpYyBpbnQgbXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTE3Mi0vKiBSZW1vdmUgYW4gTVBUQ1AgZW5kcG9pbnQgKi9cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTE3MzppbnQgbXB0Y3BfcG1fbmxfZGVsX2FkZHJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMTc0LXtcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xMzE0PXN0YXRpYyB2b2lkIF9fcmVzZXRfY291bnRlcnMoc3RydWN0IHBtX25sX3Blcm5ldCAqcGVybmV0KVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEzMjItXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjEzMjM6aW50IG1wdGNwX3BtX25sX2ZsdXNoX2FkZHJzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTMyNC17XFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTM0OS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTM1MDppbnQgbXB0Y3BfcG1fbmxfZ2V0X2FkZHIodTggaWQsIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICphZGRyLFxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMzUxLVxcdFxcdFxcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTEzNjctXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjEzNjg6aW50IG1wdGNwX3BtX25sX2R1bXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xMzY5LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTE0MDE9c3RhdGljIGludCBwYXJzZV9saW1pdChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaWQsIHVuc2lnbmVkIGludCAqbGltaXQpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTQxNy1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6MTQxODppbnQgbXB0Y3BfcG1fbmxfc2V0X2xpbWl0c19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE0MTkte1xcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE0NDItXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjE0NDM6aW50IG1wdGNwX3BtX25sX2dldF9saW1pdHNfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0xNDQ0LXtcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0xNDg5PXN0YXRpYyB2b2lkIG1wdGNwX3BtX25sX3NldF9mbGFnc19hbGwoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE1MjAtXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjE1MjE6aW50IG1wdGNwX3BtX25sX3NldF9mbGFncyhzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqbG9jYWwsXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE1MjItXFx0XFx0XFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE1NzktXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjE1ODA6Ym9vbCBtcHRjcF9wbV9ubF9jaGVja193b3JrX3BlbmRpbmcoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTU4MS17XFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTU5My0vKiBDYWxsZWQgdW5kZXIgUE0gbG9jayAqL1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzoxNTk0OnZvaWQgX19tcHRjcF9wbV9rZXJuZWxfd29ya2VyKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTE1OTUte1xcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IG1wdGNwX3BtX3BhcnNlX3BtX2FkZHJfYXR0cihzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy05MS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjkyOmludCBtcHRjcF9wbV9wYXJzZV9hZGRyKHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy05My1cXHRcXHRcXHRzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0xMDEtXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzoxMDI6aW50IG1wdGNwX3BtX3BhcnNlX2VudHJ5KHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0xMDMtXFx0XFx0XFx0IGJvb2wgcmVxdWlyZV9mYW1pbHksXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTE3MD1zdGF0aWMgaW50IG1wdGNwX3BtX2dldF9hZGRyKHU4IGlkLCBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqYWRkcixcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMTc3LVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MTc4OmludCBtcHRjcF9wbV9ubF9nZXRfYWRkcl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0xNzkte1xcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yMjQtXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzoyMjU6aW50IG1wdGNwX3BtX2dlbmxfZmlsbF9hZGRyKHN0cnVjdCBza19idWZmICptc2csXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yMjYtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MjQ2PXN0YXRpYyBpbnQgbXB0Y3BfcG1fZHVtcF9hZGRyKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMjU0LVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MjU1OmludCBtcHRjcF9wbV9ubF9nZXRfYWRkcl9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTI1Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTI2MT1zdGF0aWMgaW50IG1wdGNwX3BtX3NldF9mbGFncyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yNzktXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzoyODA6aW50IG1wdGNwX3BtX25sX3NldF9mbGFnc19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yODEte1xcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yODU9c3RhdGljIHZvaWQgbXB0Y3BfbmxfbWNhc3Rfc2VuZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpubHNrYiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yOTAtXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzoyOTE6Ym9vbCBtcHRjcF91c2Vyc3BhY2VfcG1fYWN0aXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yOTIte1xcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz00MDc9c3RhdGljIGludCBtcHRjcF9ldmVudF9jcmVhdGVkKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTQzMy1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjQzNDp2b2lkIG1wdGNwX2V2ZW50X2FkZHJfcmVtb3ZlZChjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1aW50OF90IGlkKVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNDM1LXtcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNDY0LVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NDY1OnZvaWQgbXB0Y3BfZXZlbnRfYWRkcl9hbm5vdW5jZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTQ2Ni1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICppbmZvKVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01MjEtXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo1MjI6dm9pZCBtcHRjcF9ldmVudF9wbV9saXN0ZW5lcihjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLFxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTIzLVxcdFxcdFxcdCAgICAgZW51bSBtcHRjcF9ldmVudF90eXBlIGV2ZW50KVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01NzEtXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo1NzI6dm9pZCBtcHRjcF9ldmVudChlbnVtIG1wdGNwX2V2ZW50X3R5cGUgdHlwZSwgY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU3My1cXHRcXHQgY29uc3Qgc3RydWN0IHNvY2sgKnNzaywgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTE0LVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxNTp2b2lkIG1wdGNwX3VzZXJzcGFjZV9wbV9mcmVlX2xvY2FsX2FkZHJfbGlzdChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xNi17XFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTMyPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcl9ieV9pZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTQyLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoxNDM6aW50IG1wdGNwX3VzZXJzcGFjZV9wbV9nZXRfbG9jYWxfaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMTQ0LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXB0Y3BfcG1fYWRkcl9lbnRyeSAqc2tjKVxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTE2NC1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6MTY1OmJvb2wgbXB0Y3BfdXNlcnNwYWNlX3BtX2lzX2JhY2t1cChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0xNjYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpza2MpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9MTc5PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdXNlcnNwYWNlX3BtX2dldF9zb2NrKGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjAzLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzoyMDQ6aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMjA1LXtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0yOTU9bXB0Y3BfdXNlcnNwYWNlX3BtX3JlbW92ZV9hZGRyX2VudHJ5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzE0LVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzozMTU6aW50IG1wdGNwX3BtX25sX3JlbW92ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTMxNi17XFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzc0LVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzozNzU6aW50IG1wdGNwX3BtX25sX3N1YmZsb3dfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtMzc2LXtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00NTA9c3RhdGljIHN0cnVjdCBzb2NrICptcHRjcF9ubF9maW5kX3NzayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQ5NS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NDk2OmludCBtcHRjcF9wbV9ubF9zdWJmbG93X2Rlc3Ryb3lfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00OTcte1xcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTU3NC1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NTc1OmludCBtcHRjcF91c2Vyc3BhY2VfcG1fc2V0X2ZsYWdzKHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICpsb2NhbCxcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTc2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTY0MC1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NjQxOmludCBtcHRjcF91c2Vyc3BhY2VfcG1fZHVtcF9hZGRyKHN0cnVjdCBza19idWZmICptc2csXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTY0Mi1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTY4MS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NjgyOmludCBtcHRjcF91c2Vyc3BhY2VfcG1fZ2V0X2FkZHIodTggaWQsIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICphZGRyLFxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy02ODMtXFx0XFx0XFx0XFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc2OmJvb2wgX19tcHRjcF90cnlfZmFsbGJhY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IGZiX21pYilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03Ny17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz02MjI9c3RhdGljIGlubGluZSBib29sIHRjcF9jYW5fc2VuZF9hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTYyNy1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo2Mjg6dm9pZCBfX21wdGNwX3N1YmZsb3dfc2VuZF9hY2soc3RydWN0IHNvY2sgKnNzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy02Mjkte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9OTIyPXN0YXRpYyBib29sIF9fbXB0Y3Bfc3ViZmxvd19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTUyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk1Mzp2b2lkIF9fbXB0Y3BfZXJyb3JfcmVwb3J0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NTQte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9OTg2PXN0YXRpYyB2b2lkIG1wdGNwX3Jjdl9ydHRfdXBkYXRlKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDExLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwMTI6dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDEzLXtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MjY6MDcuMjEwMDAwMzE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4OTY5ODU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2g6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSBjaGFuZ2VzIHRoYXQgKnJlYWxseSogbWF0dGVyIOKAkyB0aGUgb25lcyB0aGF0IGRpcmVjdGx5IHRvdWNoIHRoZSBmdW5jdGlvbnMuIFRoZSBicm9hZGVyIGNvbnRleHQgaXMgaW50ZXJlc3RpbmcsIHN1cmUsIGJ1dCByaWdodCBub3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbmFsIGltcGFjdCwgYW5kIGZhc3QuICBTbywgSSdtIHRoaW5raW5nLCBsZXQncyB1c2UgYGdyZXBgIHRvIHN0cmVhbWxpbmUgdGhpcy4gIEluc3RlYWQgb2Ygc2lmdGluZyB0aHJvdWdoICpldmVyeXRoaW5nKiB0aGF0IGNoYW5nZWQgaW4gdGhlIHBhdGNoLCBsZXQncyB0YXJnZXQgdGhlIGxpbmVzIHRoYXQgYXJlIGFjdHVhbGx5IHJlbGF0ZWQgdG8gZnVuY3Rpb24gZGVmaW5pdGlvbnMgb3IgbW9kaWZpY2F0aW9ucy4gV2Ugd2lsbCB0aGVuIGhhdmUgYSBtdWNoIG1vcmUgdXNlZnVsIHZpZXcgb24gdGhlIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5NzYsIk91dHB1dFRva2VucyI6MjExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MjY6MTIuMzk5NzAxNzE4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjA5MTcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2x8c3RydWN0IFthLXpBLVowLTlfXSsgXFxcXCopIChtcHRjcF9wYXJzZV9vcHRpb258bXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcHxtcHRjcF93cml0ZV9kYXRhX2ZpbnxjaGVja19mdWxseV9lc3RhYmxpc2hlZHxtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2N8bXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzc3xtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyfF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrfG1wdGNwX2Nhbl9pbmdlc3R8bXB0Y3BfZGF0YV9xdWV1ZV9vZm98bXB0Y3BfcmVzZXRfcnR4X3RpbWVyfG1wdGNwX3NldF9zdGF0ZXxzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb258c3ViZmxvd191bHBfY2xvbmV8bXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZXxtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtLmM9Mzc2PXN0YXRpYyB2b2lkIG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTQzNi1cXG5uZXQvbXB0Y3AvcG0uYzo0Mzc6Ym9vbCBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2Moc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG0uYy00MzgtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc2OmJvb2wgX19tcHRjcF90cnlfZmFsbGJhY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IGZiX21pYilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03Ny17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMjc5PXZvaWQgbXB0Y3Bfc3ViZmxvd19zaHV0ZG93bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssIGludCBob3cpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMzEzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMzMTQ6dm9pZCBtcHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzMxNS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04MzI9dm9pZCBfX21wdGNwX3VuYWNjZXB0ZWRfZm9yY2VfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo4MzM6dm9pZCBtcHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgzNC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTExMzQ9aW50IG1wdGNwX3BtX21wX3ByaW9fc2VuZF9hY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMzctXFx0XFx0XFx0ICAgICAgdTggYmt1cCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTEzODpib29sIG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMzktXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcik7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjk4PXN0YXRpYyBpbmxpbmUgYm9vbCBfX21wdGNwX2hhc19pbml0aWFsX3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzMDYtXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTMwNzpib29sIF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBmYl9taWIpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzMDgtXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzY1PXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2Ni1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM2Nzpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzY4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz03Mz12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05My0gKi9cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjk0OmJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MjY6MTIuNTIxNzk4MjI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwMzQ2ODYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSdtIHRoaW5raW5nIGhlcmUsIGZyb20gYSBzeXN0ZW0gYXJjaGl0ZWN0dXJlIHBlcnNwZWN0aXZlOlxuXG4qKklkZW50aWZ5aW5nIEtleSBNUFRDUCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gbmFtZXM6IGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgLCBgX19tcHRjcF90cnlfZmFsbGJhY2tgLCBgbXB0Y3Bfc2V0X3N0YXRlYCwgYW5kIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gVGhlIGZhY3QgdGhhdCB0aGV5IGFyZW4ndCBzdGF0aWMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoZXkncmUgbGlrZWx5IGVudHJ5IHBvaW50cyBvciBjcml0aWNhbCBpbnRlcm5hbCBmdW5jdGlvbnMgdGhhdCBhcmUgbWVhbnQgdG8gYmUgYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoZXkncmUgcHJvYmFibHkgY29yZSB0byB0aGUgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIHByb3RvY29sJ3MgZnVuY3Rpb25hbGl0eSDigJMgZGVhbGluZyB3aXRoIHBhdGggbWFuYWdlbWVudCwgY29ubmVjdGlvbiBzdGF0ZSwgYW5kIHBvc3NpYmx5IHNlY3VyaXR5IG9yIHNlc3Npb24gZXN0YWJsaXNobWVudC4gSSBzaG91bGQgcHJvYmFibHkgcGF5IGNsb3NlciBhdHRlbnRpb24gdG8gdGhlc2UuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoaXMgb3RoZXIgc2V0IG9mIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIGFsc28gcHVibGljLWZhY2luZyBvciBpZiB0aGV5IHRvdWNoIHNpbWlsYXIgZG9tYWlucy4gSSdtIHRoaW5raW5nIGFib3V0OiBgbXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzc2AsIGBtcHRjcF91c2Vyc3BhY2VfcG1fYXBwZW5kX25ld19sb2NhbF9hZGRyYCwgYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCwgYG1wdGNwX3Jlc2V0X3J0eF90aW1lcmAsIGBzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb25gLCBgc3ViZmxvd191bHBfY2xvbmVgLCBhbmQgYG1wdGNwX2pvaW5fc3RvcmVfc3RhdGVgLiBUaGVzZSBzZWVtIHRvIGJlIGludm9sdmVkIGluIG5ldHdvcmsgbGF5ZXIgb3BlcmF0aW9ucywgcG90ZW50aWFsbHkgd2l0aCBoYW5kbGluZyBuZXR3b3JrIGFkZHJlc3Nlcywgb3V0LW9mLW9yZGVyIGRhdGEsIHJldHJhbnNtaXNzaW9uLCBhbmQgZmxvdyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjAsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI2OjE3LjkyNTI2OTE4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NDk0OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KHZvaWR8aW50fGJvb2x8c3RydWN0IFthLXpBLVowLTlfXSsgXFxcXCopIChtcHRjcF9ubF9yZW1vdmVfaWRfemVyb19hZGRyZXNzfG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHJ8bXB0Y3BfZGF0YV9xdWV1ZV9vZm98bXB0Y3BfcmVzZXRfcnR4X3RpbWVyfHNjaGVkdWxlXzNyZGFja19yZXRyYW5zbWlzc2lvbnxzdWJmbG93X3VscF9jbG9uZXxtcHRjcF9qb2luX3N0b3JlX3N0YXRlKVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtX2tlcm5lbC5jPTEwODM9c3RhdGljIGludCBtcHRjcF9ubF9yZW1vdmVfc3ViZmxvd19hbmRfc2lnbmFsX2FkZHIoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTExMjctXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjExMjg6c3RhdGljIGludCBtcHRjcF9ubF9yZW1vdmVfaWRfemVyb19hZGRyZXNzKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMTEyOS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTMxPW1wdGNwX3VzZXJzcGFjZV9wbV9sb29rdXBfYWRkcihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQyLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo0MzpzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtcHRjcF9wbV9hZGRyX2VudHJ5ICplbnRyeSxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI5Nj1zdGF0aWMgYm9vbCBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDgtICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzA5OnN0YXRpYyB2b2lkIG1wdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwODE9c3RhdGljIGJvb2wgbXB0Y3BfcnR4X3RpbWVyX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA4NS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDg2OnN0YXRpYyB2b2lkIG1wdGNwX3Jlc2V0X3J0eF90aW1lcihzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA4Ny17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zODEyPXN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzg3Ny0gKi9cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODc4OnN0YXRpYyB2b2lkIHNjaGVkdWxlXzNyZGFja19yZXRyYW5zbWlzc2lvbihzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4Nzkte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDA5PXN0YXRpYyB2b2lkIHN1YmZsb3dfdWxwX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjAzOS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwNDA6c3RhdGljIHZvaWQgc3ViZmxvd191bHBfY2xvbmUoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjA0MS1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc29jayAqbmV3c2ssXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTM5PXN0YXRpYyB1MzIgbXB0Y3Bfam9pbl9lbnRyeV9oYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNTktXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo2MDpzdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSxcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTYxLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI2OjE4LjE0MTc3MzE1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjI5MDc0NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIHRoaW5raW5nIHRoZW0gdGhyb3VnaCBhcyBJIGFuYWx5emUgdGhlIGNvZGU6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBTdGF0aWMgUHJvcGVydGllcyoqXG5cbkFscmlnaHQsIEkgc2VlIHRoZXNlIGZ1bmN0aW9ucyBsaXN0ZWQgYXMgcG90ZW50aWFsbHkgcmVsZXZhbnQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkgc2VlbSBzdGF0aWMuIFRoYXQncyBteSBmaXJzdCBoeXBvdGhlc2lzLCBidXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbk5vdywgbGV0J3MgYnJlYWsgdGhlbSBkb3duIGluZGl2aWR1YWxseS4gSSBpbW1lZGlhdGVseSBzdGFydCBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlaXIgZnVuY3Rpb24gbmFtZXMgYW5kIHRoZWlyIGxpa2VseSBwdXJwb3Nlcy4gV2hhdCBhYm91dCBgbXB0Y3BfcGFyc2Vfb3B0aW9uYD8gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyBhIHJvbGUgaW4gZGlzc2VjdGluZyBNUFRDUCBvcHRpb25zIHdpdGhpbiBhIHBhY2tldC4gVGhlbiBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcGAgbGlrZWx5IGRlYWxzIHdpdGggb3B0aW9ucyByZWxhdGVkIHRvIG11bHRpLXBhdGggZXN0YWJsaXNobWVudC4gSSBpbWFnaW5lIGl0J3MgY3J1Y2lhbCBmb3IgdGhlIGluaXRpYWwgaGFuZHNoYWtlIGFuZCBuZWdvdGlhdGlvbi4gTmV4dCBpcyBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gLCB0aGlzIG9uZSBoaW50cyBhdCBmaW5hbCBkYXRhIHRyYW5zbWlzc2lvbiBhbmQgcGVyaGFwcywgYSBGSU4gbWVzc2FnZSB3aXRoIE1QVENQIHN1cHBvcnQuIEZpbmFsbHksIGBjaGVja19mdWxseV9lc3RhYmxpc2hlZGAgbXVzdCBiZSB1c2VkIHRvIGVuc3VyZSB0aGUgTVBUQ1AgY29ubmVjdGlvbiBpcyBjb21wbGV0ZWx5IHNldHVwIGFuZCByZWFkeSBmb3IgZGF0YSB0cmFuc2Zlci4gQmFzZWQgb24gdGhlIG5hbWluZyBhbG9uZSwgSSdtIGFscmVhZHkgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSBNUFRDUCBzdGFjay4gRWFjaCBvZiB0aGVzZSBmdW5jdGlvbiBuYW1lcyBzdWdnZXN0cyBpdCBoYXMgc29tZSBkZXBlbmRlbmN5IG9uIGEgc3RhdGUgb3IgY29ubmVjdGlvbiB2YXJpYWJsZS4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzY4LCJPdXRwdXRUb2tlbnMiOjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MjY6MjMuMzcwODUxMTQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI5NjU2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8odm9pZHxpbnR8Ym9vbHxzdHJ1Y3QgW2EtekEtWjAtOV9dKyBcXFxcKikgKG1wdGNwX3BhcnNlX29wdGlvbnxtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wfG1wdGNwX3dyaXRlX2RhdGFfZmlufGNoZWNrX2Z1bGx5X2VzdGFibGlzaGVkKVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL29wdGlvbnMuYz0xOD1zdGF0aWMgYm9vbCBtcHRjcF9jYXBfZmxhZ19zaGEyNTYodTggZmxhZ3MpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTIyLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjM6c3RhdGljIHZvaWQgbXB0Y3BfcGFyc2Vfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNC1cXHRcXHRcXHQgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHRyLCBpbnQgb3BzaXplLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz01MDQ9c3RhdGljIHZvaWQgY2xlYXJfM3JkYWNrX3JldHJhbnNtaXNzaW9uKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTEyLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NTEzOnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTE0LVxcdFxcdFxcdFxcdFxcdCBib29sIHNuZF9kYXRhX2Zpbl9lbmFibGUsIGludCAqc2l6ZSxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTk2LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NTk3OnN0YXRpYyB2b2lkIG1wdGNwX3dyaXRlX2RhdGFfZmluKHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXFxubmV0L21wdGNwL29wdGlvbnMuYy01OTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtcHRjcF9leHQgKmV4dClcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9OTQ4PWJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk3Ni1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjk3NzpzdGF0aWMgYm9vbCBjaGVja19mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTc4LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyNjoyMy41NTM4MjU4NzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc2NjUzNzY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVBUQ1AgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIHZhc3QgbWFqb3JpdHkgb2YgdGhlIGZ1bmN0aW9ucyBhcmUgdW5jaGFuZ2VkLCByZW1haW5pbmcgc3RhdGljLiBUaGF0J3MgYSBnb29kIHNpZ24sIHN1Z2dlc3RzIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaXNuJ3QgYmVpbmcgZHJhc3RpY2FsbHkgYWx0ZXJlZC4gSG93ZXZlciwgSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hhdCAqaGFzKiBiZWVuIHRvdWNoZWQuIExldCdzIHNlZS4uLiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgaGF2ZSBjaGFuZ2VkLCBhcmU6IGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgLCBgX19tcHRjcF90cnlfZmFsbGJhY2tgLCBgbXB0Y3Bfc2V0X3N0YXRlYCwgYW5kIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC5cblxuTm93LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGFjdCBvZiB0aGVzZSBzcGVjaWZpYyBhcmVhcy4gV2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBsb2NhdGVkPyBPa2F5LCBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBpcyBpbiBgbmV0L21wdGNwL3BtLmNgLiBgX19tcHRjcF90cnlfZmFsbGJhY2tgIGFuZCBgbXB0Y3Bfc2V0X3N0YXRlYCBhcmUgYm90aCB3aXRoaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYC4gQW5kIGZpbmFsbHksIGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYCBpcyBpbiBgbmV0L21wdGNwL3N5bmNvb2tpZXMuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBnZW5lcmFsIGlkZWEgb2YgdGhlIGFmZmVjdGVkIHN1YnN5c3RlbXMuXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgYG1wdGNwX2Nhbl9pbmdlc3RgLiBJIG5lZWQgdG8gcmV2aWV3IGl0cyBzdGF0dXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjE1LCJPdXRwdXRUb2tlbnMiOjU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI2OjMxLjMyMDM2NTk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc0NDU1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8odm9pZHxpbnR8Ym9vbHxzdHJ1Y3QgW2EtekEtWjAtOV9dKyBcXFxcKikgbXB0Y3BfY2FuX2luZ2VzdFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MjQ5PXN0YXRpYyB2b2lkIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODktICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjkwOnN0YXRpYyBib29sIG1wdGNwX2Nhbl9pbmdlc3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI2OjMxLjQ1NzgxNjEzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM4OTU1NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHRoaW5ncyBzZWVtIHByZXR0eSBzdHJhaWdodGZvcndhcmQgc28gZmFyLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gaXMgZm9jdXNpbmcgb24gd2hpY2ggTVBUQ1AgZnVuY3Rpb25zIGFyZSBub24tc3RhdGljIOKAkyBzcGVjaWZpY2FsbHkgYG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY2AsIGBfX21wdGNwX3RyeV9mYWxsYmFja2AsIGBtcHRjcF9zZXRfc3RhdGVgLCBhbmQgYG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVgLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBgTVBUQ1BfS1VOSVRfVEVTVGAsIHdoaWNoIGlzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5IGZvciBLVW5pdCB0ZXN0aW5nLiBgSU5FVF9NUFRDUF9ESUFHYCBvYnZpb3VzbHkgaGFuZGxlcyBkaWFnbm9zdGljcy4gQW5kIHdlIGhhdmUgYE1QVENQX0lQVjZgIGZvciBJUHY2IHN1cHBvcnQsIHdoaWNoIEknbGwgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGUuXG5cbkkgd2lsbCBhbHNvIGluY2x1ZGUgYE1QVENQYC5cblxuTm93LCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBpc24ndCBjYWxsZWQgZnJvbSBvdXRzaWRlOyB0aGlzIGhhcyBzb21lIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MjY6MzYuOTk2Nzc1NzIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkxNzcxMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtLmM9Mzc2PXN0YXRpYyB2b2lkIG1wdGNwX3BtX2FkZF9hZGRyX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTQzNi1cXG5uZXQvbXB0Y3AvcG0uYzo0Mzc6Ym9vbCBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2Moc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcG0uYy00MzgtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYWRkcilcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz0zMzM9c3RhdGljIHZvaWQgbXB0Y3BfcG1fY3JlYXRlX3N1YmZsb3dfb3Jfc2lnbmFsX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy0zNzYtXFx0XFx0ICovXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjM3NzpcXHRcXHRpZiAoIW1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhtc2ssIFxcdTAwMjZsb2NhbC5hZGRyKSlcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtMzc4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz0yMDQ9aW50IG1wdGNwX3BtX25sX2Fubm91bmNlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy0yNDctXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjI0ODpcXHRpZiAobXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jKG1zaywgXFx1MDAyNmFkZHJfdmFsLmFkZHIpKSB7XFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTI0OS1cXHRcXHRtc2stXFx1MDAzZXBtLmFkZF9hZGRyX3NpZ25hbGVkKys7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMTM0PWludCBtcHRjcF9wbV9tcF9wcmlvX3NlbmRfYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMTM3LVxcdFxcdFxcdCAgICAgIHU4IGJrdXApO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjExMzg6Ym9vbCBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2Moc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMTM5LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmFkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyNjozNy4xNzU5NTgxMjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAxMjQ1MjgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgbGVhZHMgbWUgdG8gYmVsaWV2ZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUga2VybmVsLWxldmVsIGNvbXBvbmVudHMsIGBwbV9rZXJuZWwuY2AgYW5kIHBvdGVudGlhbGx5IGFsc28gZnJvbSB0aGUgdXNlcnNwYWNlIHNpZGUsIGBwbV91c2Vyc3BhY2UuY2AuIEknbGwgd2FudCB0byB2ZXJpZnkgdGhhdCBhbmQsIGlmIGl0IGlzLCBJIGNhbiB0aGVuIHplcm8gaW4gb24gdGhlIGV4YWN0IGNvbnRleHQuIExldCdzIHNlZS4uLiB0aGUgY29kZSdzIGNhbGwgZ3JhcGggc2hvdWxkIGNsZWFyIHRoYXQgcmlnaHQgdXAuIE5leHQgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIHB1cnBvc2UsIHNvIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrYCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyNjo0NS4xODg0MTM5NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDc4NTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX3RyeV9mYWxsYmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc2OmJvb2wgX19tcHRjcF90cnlfZmFsbGJhY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IGZiX21pYilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03Ny17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMjk4PXN0YXRpYyBpbmxpbmUgYm9vbCBfX21wdGNwX2hhc19pbml0aWFsX3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzMDYtXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTMwNzpib29sIF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBmYl9taWIpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzMDgtXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTMwOT1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3BfdHJ5X2ZhbGxiYWNrKHN0cnVjdCBzb2NrICpzc2ssIGludCBmYl9taWIpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzE1LVxcdG1zayA9IG1wdGNwX3NrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzE2OlxcdGlmICghX19tcHRjcF90cnlfZmFsbGJhY2sobXNrLCBmYl9taWIpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzMTctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTMzMj1zdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfZWFybHlfZmFsbGJhY2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzMzYtXFx0c3ViZmxvdy1cXHUwMDNlcmVxdWVzdF9tcHRjcCA9IDA7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTMzNzpcXHRXQVJOX09OX09OQ0UoIV9fbXB0Y3BfdHJ5X2ZhbGxiYWNrKG1zaywgZmJfbWliKSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTMzOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI2OjQ1LjMxMzIwNjA0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzgwMjg2MTI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBwcm90b2NvbC5oYCBhbmQgYG1wdGNwX3NldF9zdGF0ZWAqKlxuXG5SaWdodCwgc28gdGhlIGZpcnN0IHRob3VnaHQgaXMgYSBzaW1wbGUgY29uZmlybWF0aW9uLCBpbmxpbmUgZnVuY3Rpb25zIGluIGBwcm90b2NvbC5oYCwgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBiYXNlZCBvbiB0aGUgY29udGV4dCwgdGhlcmUgY291bGQgYmUgc29tZXRoaW5nIG1vcmUgdG8gYmUgc2FpZC4gSWYgdGhlcmUncyBhbiBpbmxpbmUgZnVuY3Rpb24sIEknZCBleHBlY3QgdG8gZmluZCBpdCBkb2luZyBhIGpvYiB0aGF0J3MgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UuXG5cbk5vdywgbGV0J3MgcGl2b3QgdG8gYG1wdGNwX3NldF9zdGF0ZWAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mICpzdGF0ZSBjaGFuZ2VzKiBpbiBhbiBNUFRDUCBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBjb250cm9scyB0aGUgdHJhbnNpdGlvbiBvZiBhIGNvbm5lY3Rpb24sIHN1YmZsb3csIG9yIGFkZHJlc3MgZnJvbSBvbmUgc3RhdGUgdG8gYW5vdGhlciAoZS5nLiwgYWN0aXZlLCBwYXNzaXZlLCBlc3RhYmxpc2hlZCwgY2xvc2luZywgZXRjLikuIFRoaW5raW5nIGFib3V0IGl0LCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQ6IHJhY2UgY29uZGl0aW9ucz8gQ29uY3VycmVuY3kgaXNzdWVzPyBTeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbiBwbGF5PyBXaGF0J3MgdGhlIGxvY2sgZ3JhbnVsYXJpdHk/IElzIGl0IHRocmVhZC1zYWZlPyBIb3cgZG8gdGhlc2Ugc3RhdGUgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBNUFRDUCBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lP1xuXG5JIG5lZWQgdG8gZGl2ZSBkZWVwZXIgdG8gdW5kZXJzdGFuZCBob3cgc3RhdGUgY2hhbmdlcyB0aGVyZSBhZmZlY3QgdGhlIE1QVENQIG92ZXJhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjc6MTMuMTE2MDcwMTY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njk3Nzk4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9zZXRfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG1fa2VybmVsLmM9ODUyPXN0YXRpYyBpbnQgbXB0Y3BfcG1fbmxfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTkwMi1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6OTAzOlxcdC8qIFdlIGRvbid0IHVzZSBtcHRjcF9zZXRfc3RhdGUoKSBoZXJlIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUgY2FsbGVkXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTkwNC1cXHQgKiB1bmRlciB0aGUgbXNrIHNvY2tldCBsb2NrLiBGb3IgdGhlIG1vbWVudCwgdGhhdCB3aWxsIG5vdCBicmluZ1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NTM4PXN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2RhdGFfZmluX2FjayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy01NDctXFx0XFx0Y2FzZSBUQ1BfRklOX1dBSVQxOlxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjU0ODpcXHRcXHRcXHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9GSU5fV0FJVDIpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTU0OS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTU1Mi1cXHRcXHRcXHRtcHRjcF9zaHV0ZG93bl9zdWJmbG93cyhtc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjU1MzpcXHRcXHRcXHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtNTU0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NjkzPXN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2RhdGFfZmluKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTcxOS1cXHRcXHRjYXNlIFRDUF9FU1RBQkxJU0hFRDpcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3MjA6XFx0XFx0XFx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0VfV0FJVCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzIxLVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTcyMi1cXHRcXHRjYXNlIFRDUF9GSU5fV0FJVDE6XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NzIzOlxcdFxcdFxcdG1wdGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NJTkcpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTcyNC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTcyNi1cXHRcXHRcXHRtcHRjcF9zaHV0ZG93bl9zdWJmbG93cyhtc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjcyNzpcXHRcXHRcXHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzI4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9OTIyPXN0YXRpYyBib29sIF9fbXB0Y3Bfc3ViZmxvd19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQzLVxcdGlmIChzc2tfc3RhdGUgPT0gVENQX0NMT1NFIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXFxubmV0L21wdGNwL3Byb3RvY29sLmM6OTQ0OlxcdFxcdG1wdGNwX3NldF9zdGF0ZShzaywgc3NrX3N0YXRlKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NDUtXFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfZXJyLCAtZXJyKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI2NDA9c3RhdGljIHZvaWQgX19tcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjczNy1cXHRcXHQgICAgbXNrLVxcdTAwM2Vpbl9hY2NlcHRfcXVldWUgfHwgc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjczODpcXHRcXHRcXHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjczOS1cXHRcXHRcXHRtcHRjcF9jbG9zZV93YWtlX3VwKHNrKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4MDc9c3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODQyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4NDM6XFx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NDQtXFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfc2h1dGRvd24sIFNIVVRET1dOX01BU0spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzA4NT1zdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA4OS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMDkwOlxcdG1wdGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDkxLVxcdG1wdGNwX2JhY2tsb2dfcHVyZ2Uoc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzI3OT12b2lkIG1wdGNwX3N1YmZsb3dfc2h1dGRvd24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgaG93KVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzMxMy1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMzE0OnZvaWQgbXB0Y3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMzMTUte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzM1Nz1zdGF0aWMgaW50IG1wdGNwX2Nsb3NlX3N0YXRlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMzNjEtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzM2MjpcXHRtcHRjcF9zZXRfc3RhdGUoc2ssIG5zKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMzYzLVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzQ2MD1ib29sIF9fbXB0Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDcwLVxcdFxcdG1wdGNwX2NoZWNrX2xpc3Rlbl9zdG9wKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNDcxOlxcdFxcdG1wdGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDcyLVxcdFxcdGdvdG8gY2xlYW51cDtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MTQtXFx0aWYgKHN1YmZsb3dzX2FsaXZlID09IDApXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzUxNTpcXHRcXHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzUxNi1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM1OTA9c3RhdGljIGludCBtcHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzYwMS1cXHRtcHRjcF9jaGVja19saXN0ZW5fc3RvcChzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzYwMjpcXHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzYwMy1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3MDE9c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc1MS1cXHQgKi9cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzUyOlxcdG1wdGNwX3NldF9zdGF0ZShuc2ssIFRDUF9FU1RBQkxJU0hFRCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc1My1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQxMzg9c3RhdGljIGludCBtcHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDE0OS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MTUwOlxcdG1wdGNwX3NldF9zdGF0ZShzaywgVENQX1NZTl9TRU5UKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTUxLVxcdHN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIwNy1cXHRcXHRtcHRjcF90b2tlbl9kZXN0cm95KG1zayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIwODpcXHRcXHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIwOS1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDI3Nj1zdGF0aWMgaW50IG1wdGNwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyOTYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDI5NzpcXHRtcHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9MSVNURU4pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyOTgtXFx0c29ja19zZXRfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MzAyLVxcdHJlbGVhc2Vfc29jayhzc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQzMDM6XFx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBpbmV0X3NrX3N0YXRlX2xvYWQoc3NrKSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDMwNC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQzNzk9c3RhdGljIGludCBtcHRjcF9zdHJlYW1fYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NDM0LVxcdFxcdFxcdGlmICh1bmxpa2VseShsaXN0X2lzX3Npbmd1bGFyKFxcdTAwMjZtc2stXFx1MDAzZWNvbm5fbGlzdCkpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ0MzU6XFx0XFx0XFx0XFx0bXB0Y3Bfc2V0X3N0YXRlKG5ld3NrLCBUQ1BfQ0xPU0UpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ0MzYtXFx0XFx0XFx0bXB0Y3BfY2xvc2Vfc3NrKG5ld3NrLCBtc2stXFx1MDAzZWZpcnN0LFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9ODMyPXZvaWQgX19tcHRjcF91bmFjY2VwdGVkX2ZvcmNlX2Nsb3NlKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6ODMzOnZvaWQgbXB0Y3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC04MzQtXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTQ1ND12b2lkIF9fbXB0Y3Bfc3luY19zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSlcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDY4LVxcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2VzbmRfbnh0LCBtc2stXFx1MDAzZXdyaXRlX3NlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo0Njk6XFx0XFx0bXB0Y3Bfc2V0X3N0YXRlKHNrLCBzdGF0ZSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy00NzAtXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI3OjEzLjIwMzA1NDA5OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE3NTA0MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1QVENQIFN0YXRlIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIGBtcHRjcF9zZXRfc3RhdGVgIGlzIGEgY29yZSBmdW5jdGlvbiwgdXNlZCBldmVyeXdoZXJlLiBJdCdzIHRoZSBseW5jaHBpbiBmb3IgbWFuYWdpbmcgTVBUQ1AncyBjb25uZWN0aW9uIGxpZmVjeWNsZS4gVGhhdCBtZWFucyBhbnkgaXNzdWVzIHRoZXJlIHdvdWxkIGJlIGEgcmVhbCBoZWFkYWNoZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgYmVpbmcgaGFuZGxlZCBhdCB0aGUgaW5pdGlhbGl6YXRpb24gc3RhZ2UgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLlxuXG5TaW5jZSBpdCdzIHNvIGZ1bmRhbWVudGFsLCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSByZWxhdGVkIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGpvaW4gY29va2llIHN0YXRlIGlzIGluaXRpYWxpemVkIGlzIGNydWNpYWwuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBpbml0aWFsIGhhbmRzaGFrZSBhbmQgbmVnb3RpYXRpb24g4oCTIHdoaWNoIGluIHR1cm4gaXMgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3IgTVBUQ1AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjY1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjc6MTYuODIwNTYyMDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODM0MzIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmg9MTM2NT12b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjYtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjc6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2OC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNzQ9c3RhdGljIGlubGluZSBib29sXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3NTptcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yNjU9aW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjkxLVxcdH0gZWxzZSBpZiAob3B0X21wX2pvaW4gXFx1MDAyNlxcdTAwMjYgbGlzdGVuZXItXFx1MDAzZXJlcXVlc3RfbXB0Y3ApIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjI5MjpcXHRcXHRpZiAoIW1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3ViZmxvd19yZXEsIHNrYikpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yOTMtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jPTczPXZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLSAqL1xcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6OTQ6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy05NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyNzoxNi45Mjg5MTAxNDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkwMTgxODA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIFN1YmZsb3cgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB3aGF0IGhhcHBlbnMgd2hlbiBgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXFgIGlzIGNhbGxlZC4gVGhhdCB0ZWxscyBtZSB3aGVyZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBOb3csIGxldCdzIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzOiBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCwgYF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrYCwgYG1wdGNwX3NldF9zdGF0ZWAsIGFuZCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAuIFRob3NlIGFyZSBteSBpbW1lZGlhdGUgYXJlYXMgb2YgaW50ZXJlc3QuXG5cbkJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSBzaG91bGQgY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBidXQgSSB0aGluayB0aGUgYE1QVENQYCBmbGFnIHNob3VsZCBiZSBzdWZmaWNpZW50IGhlcmUuXG5cbkknbSByZXZpc2l0aW5nIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgLi4uIFl1cCwgaXQncyBhbiBBUEkgZW50cnlwb2ludCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvci4gRG91YmxlLWNoZWNraW5nIHRoZSBvdGhlciB0aHJlZTogYF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrYCDigJMgZW50cnlwb2ludC4gYG1wdGNwX3NldF9zdGF0ZWAg4oCTIGVudHJ5cG9pbnQuIEFuZCBmaW5hbGx5LCBgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZWAg4oCTIGFub3RoZXIgZW50cnlwb2ludC4gQWxsIGdvb2QuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MsIHNvIEknbGwgc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQzOSwiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjc6MjIuODMwNzMxNjQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2Mjc3NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3BtX2Fubm91bmNlZF9hbGxvY1wiLFxuICAgIFwiX19tcHRjcF90cnlfZmFsbGJhY2tcIixcbiAgICBcIm1wdGNwX3NldF9zdGF0ZVwiLFxuICAgIFwibXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBzdWJzeXN0ZW0sIGluY2x1ZGluZyBvcHRpb25zIHBhcnNpbmcsIHBhdGggbWFuYWdlbWVudCAoYm90aCBrZXJuZWwgYW5kIHVzZXJzcGFjZSksIHByb3RvY29sIHN0YXRlIGhhbmRsaW5nLCBhbmQgc3luY29va2llcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NcIixcbiAgICBcIl9fbXB0Y3BfdHJ5X2ZhbGxiYWNrXCIsXG4gICAgXCJtcHRjcF9zZXRfc3RhdGVcIixcbiAgICBcIm1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1Agc3Vic3lzdGVtLCBpbmNsdWRpbmcgb3B0aW9ucyBwYXJzaW5nLCBwYXRoIG1hbmFnZW1lbnQgKGJvdGgga2VybmVsIGFuZCB1c2Vyc3BhY2UpLCBwcm90b2NvbCBzdGF0ZSBoYW5kbGluZywgYW5kIHN5bmNvb2tpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyNzoyMi45OTcwMTc4MTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzI2NzcxMDQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI3OjIyLjk5NzcxNDIyN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTcyNjcwMDkyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtcHRjcF93cml0ZV9kYXRhX2ZpbigpYCBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2AgdG8gZXhwbGljaXRseSBpbml0aWFsaXplIGBleHQtXFx1MDAzZWNzdW0gPSAwO2AuIFRoZSBgZXh0YCBwb2ludGVyIHJlZmVycyB0byBgb3B0cy1cXHUwMDNlZXh0X2NvcHlgLCB3aGljaCBpcyBwYXJ0IG9mIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgb3B0cy5tcHRjcGAuIFxcblxcblRyYWNpbmcgdGhlIGFsbG9jYXRpb24sIGBvcHRzYCBpcyBpbnN0YW50aWF0ZWQgYXMgYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBpbiBgX190Y3BfdHJhbnNtaXRfc2tiKClgIChgbmV0L2lwdjQvdGNwX291dHB1dC5jYCkuIENydWNpYWxseSwgYF9fdGNwX3RyYW5zbWl0X3NrYigpYCBvbmx5IGNsZWFycyBhIHNwZWNpZmljIHN1YnNldCBvZiBmaWVsZHMgaW4gYG9wdHNgIChgb3B0cy5jbGVhcmVkYCksIGFuZCBleHBsaWNpdGx5IGxlYXZlcyBgb3B0cy5tcHRjcGAgdW5pbml0aWFsaXplZCAoYXMgbm90ZWQgYnkgdGhlIGNvbW1lbnQ6IFxcXCJDYXV0aW9uOiBmb2xsb3dpbmcgZmllbGRzIGFyZSBub3QgY2xlYXJlZCBpbiBfX3RjcF90cmFuc21pdF9za2IoKVxcXCIpLlxcblxcbldoZW4gYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKClgIHByb2Nlc3NlcyBvcHRpb25zIHdpdGhvdXQgYW4gZXhpc3RpbmcgYG1wZXh0YCwgaXQgemVyb2VzIHRoZSBgZmxhZ3NgIG9mIGBvcHRzLVxcdTAwM2VleHRfY29weWAgYnV0IGxlYXZlcyB0aGUgcmVzdCBvZiB0aGUgc3RydWN0IChpbmNsdWRpbmcgYGNzdW1gKSB1bmluaXRpYWxpemVkLiBJZiBhIERBVEFfRklOIG5lZWRzIHRvIGJlIHNlbnQsIGBtcHRjcF93cml0ZV9kYXRhX2ZpbigpYCBpcyBjYWxsZWQuIEJlZm9yZSB0aGlzIHBhdGNoLCBpdCBpbml0aWFsaXplZCBzZXZlcmFsIGZpZWxkcyBvZiBgZXh0YCBidXQgbWlzc2VkIGBjc3VtYC4gXFxuXFxuU3Vic2VxdWVudGx5LCBgbXB0Y3Bfd3JpdGVfb3B0aW9ucygpYCBjYWxscyBgbXB0Y3BfbWFrZV9jc3VtKG1wZXh0KWAsIHdoaWNoIHJlYWRzIHRoZSB1bmluaXRpYWxpemVkIGBtcGV4dC1cXHUwMDNlY3N1bWAgc3RhY2sgbWVtb3J5IHRvIGNvbXB1dGUgdGhlIE1QVENQIGNoZWNrc3VtLiBUaGlzIGNoZWNrc3VtIGlzIHRoZW4gd3JpdHRlbiBpbnRvIHRoZSBUQ1AgaGVhZGVyIGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmssIHJlc3VsdGluZyBpbiBhIGtlcm5lbCBzdGFjayBtZW1vcnkgaW5mby1sZWFrLlxcblxcblN0YW5kYXJkIEtBU0FOIG9ubHkgZGV0ZWN0cyBzcGF0aWFsIChvdXQtb2YtYm91bmRzKSBhbmQgdGVtcG9yYWwgKHVzZS1hZnRlci1mcmVlKSBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gSXQgZG9lcyBub3QgdHJhY2sgbWVtb3J5IGluaXRpYWxpemF0aW9uIHN0YXRlIGFuZCBjYW5ub3QgZGV0ZWN0IHJlYWRzIG9mIGxlZ2FsbHkgYWxsb2NhdGVkIGJ1dCB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIG9yIHRoZSBuZXR3b3JrLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYnVnIGFuZCB2ZXJpZnkgdGhhdCBubyBvdGhlciB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgbGVha2VkIGluIE1QVENQIG9wdGlvbnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNjViNzA5ZDE0YTMzNzcyMWY5ZDQ2MmQ1ODg2YjhkNGFlZGVmNmMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTk6MjM6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggYjgzMThlMDMwMTM4OS4uY2UwZGUwMmY1YTNhMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC05Myw3ICs5Myw4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgKiBJbiBvdGhlciB3b3JkcywgdGhlIG9ubHkgd2F5IGZvciBjaGVja3N1bXMgbm90IHRvIGJlIHVzZWRcbiBcdFx0ICogaXMgaWYgYm90aCBob3N0cyBpbiB0aGVpciBTWU5zIHNldCBBPTAuXCJcbiBcdFx0ICovXG4tXHRcdGlmIChmbGFncyBcdTAwMjYgTVBUQ1BfQ0FQX0NIRUNLU1VNX1JFUUQpXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1QVENQX0NBUF9DSEVDS1NVTV9SRVFEKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG9wc2l6ZSBcdTAwM2MgVENQT0xFTl9NUFRDUF9NUENfQUNLX0RBVEEpXG4gXHRcdFx0bXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgfD0gT1BUSU9OX01QVENQX0NTVU1SRVFEO1xuIFxuIFx0XHRtcF9vcHQtXHUwMDNlZGVueV9qb2luX2lkMCA9ICEhKGZsYWdzIFx1MDAyNiBNUFRDUF9DQVBfREVOWV9KT0lOX0lEMCk7XG5AQCAtNTI5LDcgKzUzMCw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBNUEMvTVBKIG5lZWRlZCBvbmx5IG9uIDNyZCBhY2sgcGFja2V0LCBEQVRBX0ZJTiBhbmQgVENQIHNodXRkb3duIHRha2UgcHJlY2VkZW5jZSAqL1xuLVx0aWYgKFJFQURfT05DRShzdWJmbG93LVx1MDAzZWZ1bGx5X2VzdGFibGlzaGVkKSB8fCBzbmRfZGF0YV9maW5fZW5hYmxlIHx8XG4rXHRpZiAoc3ViZmxvdy1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZCB8fCBzbmRfZGF0YV9maW5fZW5hYmxlIHx8XG4gXHQgICAgc3ViZmxvdy1cdTAwM2VzbmRfaXNuICE9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgfHxcbiBcdCAgICBzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC02MTEsNiArNjEyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcbiBcdFx0ZXh0LVx1MDAzZWRhdGFfc2VxID0gZGF0YV9maW5fdHhfc2VxO1xuIFx0XHRleHQtXHUwMDNlc3ViZmxvd19zZXEgPSAwO1xuIFx0XHRleHQtXHUwMDNlZGF0YV9sZW4gPSAxO1xuK1x0XHRleHQtXHUwMDNlY3N1bSA9IDA7XG4gXHR9IGVsc2UgaWYgKGV4dC1cdTAwM2VkYXRhX3NlcSArIGV4dC1cdTAwM2VkYXRhX2xlbiA9PSBkYXRhX2Zpbl90eF9zZXEpIHtcbiBcdFx0LyogSWYgdGhlcmUncyBhbiBleGlzdGluZyBEU1MgbWFwcGluZyBhbmQgaXQgaXMgdGhlXG4gXHRcdCAqIGZpbmFsIG1hcHBpbmcsIERBVEFfRklOIGNvbnN1bWVzIDEgYWRkaXRpb25hbCBieXRlIG9mXG5AQCAtOTgwLDcgKzk4Miw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4gXHQvKiBoZXJlIHdlIGNhbiBwcm9jZXNzIE9vTywgaW4td2luZG93IHBrdHMsIG9ubHkgaW4tc2VxdWVuY2UgNHRoIGFja1xuIFx0ICogd2lsbCBtYWtlIHRoZSBzdWJmbG93IGZ1bGx5IGVzdGFibGlzaGVkXG4gXHQgKi9cbi1cdGlmIChsaWtlbHkoUkVBRF9PTkNFKHN1YmZsb3ctXHUwMDNlZnVsbHlfZXN0YWJsaXNoZWQpKSkge1xuK1x0aWYgKGxpa2VseShzdWJmbG93LVx1MDAzZWZ1bGx5X2VzdGFibGlzaGVkKSkge1xuIFx0XHQvKiBvbiBwYXNzaXZlIHNvY2tldHMsIGNoZWNrIGZvciAzcmQgYWNrIHJldHJhbnNtaXNzaW9uXG4gXHRcdCAqIG5vdGUgdGhhdCBtc2sgaXMgYWx3YXlzIHNldCBieSBzdWJmbG93X3N5bl9yZWN2X3NvY2soKVxuIFx0XHQgKiBmb3IgbXBfam9pbiBzdWJmbG93c1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDhiNjg4NjgyNTVjNTAuLmIwYjcxYWRlZmI4ZmUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuKysrIGIvbmV0L21wdGNwL3BtLmNcbkBAIC00NjIsMTAgKzQ2MiwxMCBAQCBib29sIG1wdGNwX3BtX2Fubm91bmNlZF9hbGxvYyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFxuIFx0YWRkX2VudHJ5LVx1MDAzZWFkZHIgPSAqYWRkcjtcbiBcdGFkZF9lbnRyeS1cdTAwM2Vzb2NrID0gbXNrO1xuLVx0YWRkX2VudHJ5LVx1MDAzZXJldHJhbnNfdGltZXMgPSAwO1xuIFxuIFx0dGltZXJfc2V0dXAoXHUwMDI2YWRkX2VudHJ5LVx1MDAzZXRpbWVyLCBtcHRjcF9wbV9hZGRfYWRkcl90aW1lciwgMCk7XG4gcmVzZXRfdGltZXI6XG4rXHRhZGRfZW50cnktXHUwMDNlcmV0cmFuc190aW1lcyA9IDA7XG4gXHRhZGRfZW50cnktXHUwMDNldGltZXJfZG9uZSA9IGZhbHNlO1xuIFx0dGltZW91dCA9IG1wdGNwX2FkanVzdF9hZGRfYWRkcl90aW1lb3V0KG1zayk7XG4gXHRpZiAodGltZW91dClcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG1fa2VybmVsLmMgYi9uZXQvbXB0Y3AvcG1fa2VybmVsLmNcbmluZGV4IDQyNGYxYTdmOTI0ODIuLjFhNzc1MDgxMzIzNTQgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG1fa2VybmVsLmNcbisrKyBiL25ldC9tcHRjcC9wbV9rZXJuZWwuY1xuQEAgLTExMzcsNiArMTEzNyw4IEBAIHN0YXRpYyBpbnQgbXB0Y3BfbmxfcmVtb3ZlX2lkX3plcm9fYWRkcmVzcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR3aGlsZSAoKG1zayA9IG1wdGNwX3Rva2VuX2l0ZXJfbmV4dChuZXQsIFx1MDAyNnNfc2xvdCwgXHUwMDI2c19udW0pKSAhPSBOVUxMKSB7XG4gXHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcbiBcdFx0c3RydWN0IG1wdGNwX2FkZHJfaW5mbyBtc2tfbG9jYWw7XG4rXHRcdHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gYW5ub19hZGRyO1xuK1x0XHRib29sIGFubm91bmNlZDtcbiBcbiBcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCkgfHwgbXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpXG4gXHRcdFx0Z290byBuZXh0O1xuQEAgLTExNDYsNyArMTE0OCwxMyBAQCBzdGF0aWMgaW50IG1wdGNwX25sX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3Moc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0bG9ja19zb2NrKHNrKTtcbitcdFx0LyogRHJvcCBhIHBvc3NpYmx5IHBlbmRpbmcgQUREX0FERFIgZm9yIHRoaXMgYWRkcmVzcy4gKi9cbitcdFx0YW5ub19hZGRyID0gbXNrX2xvY2FsO1xuK1x0XHRhbm5vX2FkZHIucG9ydCA9IDA7XG4rXHRcdGFubm91bmNlZCA9IG1wdGNwX3BtX2Fubm91bmNlZF9yZW1vdmUobXNrLCBcdTAwMjZhbm5vX2FkZHIpO1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bXNrLVx1MDAzZXBtLmxvY2spO1xuK1x0XHRpZiAoYW5ub3VuY2VkKVxuK1x0XHRcdG1zay1cdTAwM2VwbS5hZGRfYWRkcl9zaWduYWxlZC0tO1xuIFx0XHRtcHRjcF9wbV9yZW1vdmVfYWRkcihtc2ssIFx1MDAyNmxpc3QpO1xuIFx0XHRtcHRjcF9wbV9ybV9zdWJmbG93KG1zaywgXHUwMDI2bGlzdCk7XG4gXHRcdF9fbWFya19zdWJmbG93X2VuZHBfYXZhaWxhYmxlKG1zaywgMCk7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jIGIvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG5pbmRleCBiOTRmYmI0ODNiZjk0Li5mYWIxNmQ5NTNkYmZlIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jXG4rKysgYi9uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmNcbkBAIC02OSw2ICs2OSwxOSBAQCBzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdH1cbiBcbiBcdGlmICghYWRkcl9tYXRjaCBcdTAwMjZcdTAwMjYgIWlkX21hdGNoKSB7XG4rXHRcdHVuc2lnbmVkIGludCBpZDtcbitcbitcdFx0aWYgKCFlbnRyeS1cdTAwM2VhZGRyLmlkIFx1MDAyNlx1MDAyNiBuZWVkc19pZCkge1xuK1x0XHRcdGlkID0gZmluZF9uZXh0X3plcm9fYml0KGlkX2JpdG1hcCxcbitcdFx0XHRcdFx0XHRNUFRDUF9QTV9NQVhfQUREUl9JRCArIDEsIDEpO1xuK1x0XHRcdGlmIChpZCBcdTAwM2UgTVBUQ1BfUE1fTUFYX0FERFJfSUQpIHtcbitcdFx0XHRcdHJldCA9IC1FTk9TUEM7XG4rXHRcdFx0XHRnb3RvIGFwcGVuZF9lcnI7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlkID0gZW50cnktXHUwMDNlYWRkci5pZDtcbitcdFx0fVxuK1xuIFx0XHQvKiBNZW1vcnkgZm9yIHRoZSBlbnRyeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGVcbiBcdFx0ICogc29jayBvcHRpb24gYnVmZmVyLlxuIFx0XHQgKi9cbkBAIC03OCwxMCArOTEsNyBAQCBzdGF0aWMgaW50IG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHIoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdFx0XHRnb3RvIGFwcGVuZF9lcnI7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKCFlLVx1MDAzZWFkZHIuaWQgXHUwMDI2XHUwMDI2IG5lZWRzX2lkKVxuLVx0XHRcdGUtXHUwMDNlYWRkci5pZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChpZF9iaXRtYXAsXG4tXHRcdFx0XHRcdFx0XHRNUFRDUF9QTV9NQVhfQUREUl9JRCArIDEsXG4tXHRcdFx0XHRcdFx0XHQxKTtcbitcdFx0ZS1cdTAwM2VhZGRyLmlkID0gaWQ7XG4gXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmUtXHUwMDNlbGlzdCwgXHUwMDI2bXNrLVx1MDAzZXBtLnVzZXJzcGFjZV9wbV9sb2NhbF9hZGRyX2xpc3QpO1xuIFx0XHRtc2stXHUwMDNlcG0ubG9jYWxfYWRkcl91c2VkKys7XG4gXHRcdHJldCA9IGUtXHUwMDNlYWRkci5pZDtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li5iMjZhOGQ1NjA2MTI1IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtOTUsNiArOTUsNyBAQCBib29sIF9fbXB0Y3BfdHJ5X2ZhbGxiYWNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBmYl9taWIpXG4gXG4gXHRtc2stXHUwMDNlYWxsb3dfc3ViZmxvd3MgPSBmYWxzZTtcbiBcdHNldF9iaXQoTVBUQ1BfRkFMTEJBQ0tfRE9ORSwgXHUwMDI2bXNrLVx1MDAzZWZsYWdzKTtcbitcdHNldF9iaXQoTVBUQ1BfUlRYX0RJU0FCTEVELCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpO1xuIFx0X19NUFRDUF9JTkNfU1RBVFMobmV0LCBmYl9taWIpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bXNrLVx1MDAzZWZhbGxiYWNrX2xvY2spO1xuIFx0cmV0dXJuIHRydWU7XG5AQCAtMjg4LDggKzI4OSw4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssXG4gICovXG4gc3RhdGljIGJvb2wgbXB0Y3BfY2FuX2luZ2VzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuLVx0cmV0dXJuIHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2M9IFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSB8fFxuLVx0XHRcdF9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXB0Y3Bfc2soc2spKTtcbitcdHJldHVybiBsaWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYz0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpIHx8XG4rXHQgICAgICAgX19tcHRjcF9jaGVja19mYWxsYmFjayhtcHRjcF9zayhzaykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5AQCAtMzEyLDEyICszMTMsNiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0dTY0IHNlcSwgZW5kX3NlcSwgbWF4X3NlcTtcbiBcdHN0cnVjdCBza19idWZmICpza2IxO1xuIFxuLVx0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xuLVx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTtcbi1cdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuIFx0c2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbiBcdGVuZF9zZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxO1xuIFx0bWF4X3NlcSA9IGF0b21pYzY0X3JlYWQoXHUwMDI2bXNrLVx1MDAzZXJjdl93bmRfc2VudCk7XG5AQCAtMzM0LDYgKzMyOSwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHRpZiAoIW1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHNrLCBza2IpKSB7XG4rXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xuK1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRwID0gXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZS5yYl9ub2RlO1xuIFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT1FVRVVFKTtcbiBcdGlmIChSQl9FTVBUWV9ST09UKFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKSB7XG5AQCAtMTA4NCwxMyArMTA4NSwxNCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9ydHhfdGltZXJfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spXG4gXG4gc3RhdGljIHZvaWQgbXB0Y3BfcmVzZXRfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcbiB7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0dW5zaWduZWQgbG9uZyB0b3V0O1xuIFxuLVx0LyogcHJldmVudCByZXNjaGVkdWxpbmcgb24gY2xvc2UgKi9cbi1cdGlmICh1bmxpa2VseShpbmV0X3NrX3N0YXRlX2xvYWQoc2spID09IFRDUF9DTE9TRSkpXG4rXHQvKiBQcmV2ZW50IHJlc2NoZWR1bGluZyBvbiBjbG9zZSBhbmQgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cbitcdGlmICh0ZXN0X2JpdChNUFRDUF9SVFhfRElTQUJMRUQsIFx1MDAyNm1zay1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbi1cdHRvdXQgPSBtcHRjcF9zayhzayktXHUwMDNldGltZXJfaXZhbDtcbitcdHRvdXQgPSBtc2stXHUwMDNldGltZXJfaXZhbDtcbiBcdHNrX3Jlc2V0X3RpbWVyKHNrLCBcdTAwMjZzay1cdTAwM2VtcHRjcF9yZXRyYW5zbWl0X3RpbWVyLCBqaWZmaWVzICsgdG91dCk7XG4gfVxuIFxuQEAgLTMzMjQsNiArMzMyNiw5IEBAIHZvaWQgbXB0Y3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlKVxuIFx0XHQgKiB0cmFuc2l0aW9uIGZyb20gVENQX1NZTl9SRUNWIHRvIFRDUF9DTE9TRV9XQUlULlxuIFx0XHQgKi9cbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFRDUF9DTE9TRTpcbitcdFx0c2V0X2JpdChNUFRDUF9SVFhfRElTQUJMRUQsIFx1MDAyNm1wdGNwX3NrKHNrKS1cdTAwM2VmbGFncyk7XG4rXHRcdGZhbGx0aHJvdWdoO1xuIFx0ZGVmYXVsdDpcbiBcdFx0aWYgKG9sZHN0YXRlID09IFRDUF9FU1RBQkxJU0hFRCB8fCBvbGRzdGF0ZSA9PSBUQ1BfQ0xPU0VfV0FJVClcbiBcdFx0XHRNUFRDUF9ERUNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfQ1VSUkVTVEFCKTtcbkBAIC0zODc2LDcgKzM4ODEsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb24oc3RydWN0IHNvY2sgKnNzaylcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc3NrKTtcbiBcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcbiBcbi1cdGlmIChSRUFEX09OQ0UobXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZCkpXG4rXHRpZiAobXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogcmVzY2hlZHVsZSB3aXRoIGEgdGltZW91dCBhYm92ZSBSVFQsIGFzIHdlIG11c3QgbG9vayBvbmx5IGZvciBkcm9wICovXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggMDZhMTA3ZDRlODM5Mi4uNmMwMGE4MDM0NGY5MiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTExNiw2ICsxMTYsNyBAQFxuICNkZWZpbmUgTVBUQ1BfV09SS19SVFhcdFx0MVxuICNkZWZpbmUgTVBUQ1BfRkFMTEJBQ0tfRE9ORVx0MlxuICNkZWZpbmUgTVBUQ1BfV09SS19DTE9TRV9TVUJGTE9XIDNcbisjZGVmaW5lIE1QVENQX1JUWF9ESVNBQkxFRFx0NFxuIFxuIC8qIE1QVENQIHNvY2tldCByZWxlYXNlIGNiIGZsYWdzICovXG4gI2RlZmluZSBNUFRDUF9QVVNIX1BFTkRJTkdcdDFcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuaW5kZXggYWY4MWFkNWU2OTlkMS4uMDFkYjdlZGNlMThhNiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmNcbisrKyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbkBAIC0yMDg0LDcgKzIwODQsNiBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHRcdG5ld19jdHgtXHUwMDNlcmVxdWVzdF9ia3VwID0gc3ViZmxvd19yZXEtXHUwMDNlcmVxdWVzdF9ia3VwO1xuIFx0XHRXUklURV9PTkNFKG5ld19jdHgtXHUwMDNlcmVtb3RlX2lkLCBzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQpO1xuIFx0XHRuZXdfY3R4LVx1MDAzZXRva2VuID0gc3ViZmxvd19yZXEtXHUwMDNldG9rZW47XG4tXHRcdG5ld19jdHgtXHUwMDNldGhtYWMgPSBzdWJmbG93X3JlcS1cdTAwM2V0aG1hYztcbiBcbiBcdFx0LyogdGhlIHN1YmZsb3cgcmVxIGlkIGlzIHZhbGlkLCBmZXRjaGVkIHZpYSBzdWJmbG93X2NoZWNrX3JlcSgpXG4gXHRcdCAqIGFuZCBzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdCgpXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N5bmNvb2tpZXMuYyBiL25ldC9tcHRjcC9zeW5jb29raWVzLmNcbmluZGV4IGI1Y2FjNTcwMTEyMjEuLjk0NzQ3MDY2NDFjMTEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3luY29va2llcy5jXG4rKysgYi9uZXQvbXB0Y3Avc3luY29va2llcy5jXG5AQCAtMjYsNyArMjYsOCBAQCBzdHJ1Y3Qgam9pbl9lbnRyeSB7XG4gXHR1MzIgbG9jYWxfbm9uY2U7XG4gXHR1OCBqb2luX2lkO1xuIFx0dTggbG9jYWxfaWQ7XG4tXHR1OCBiYWNrdXA7XG4rXHR1OCBiYWNrdXA6MSxcbitcdCAgIHJlcXVlc3RfYmt1cDoxO1xuIFx0dTggdmFsaWQ7XG4gfTtcbiBcbkBAIC02Myw2ICs2NCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2pvaW5fc3RvcmVfc3RhdGUoc3RydWN0IGpvaW5fZW50cnkgKmVudHJ5LFxuIFx0ZW50cnktXHUwMDNlcmVtb3RlX25vbmNlID0gc3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX25vbmNlO1xuIFx0ZW50cnktXHUwMDNlbG9jYWxfbm9uY2UgPSBzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9ub25jZTtcbiBcdGVudHJ5LVx1MDAzZWJhY2t1cCA9IHN1YmZsb3dfcmVxLVx1MDAzZWJhY2t1cDtcbitcdGVudHJ5LVx1MDAzZXJlcXVlc3RfYmt1cCA9IHN1YmZsb3dfcmVxLVx1MDAzZXJlcXVlc3RfYmt1cDtcbiBcdGVudHJ5LVx1MDAzZWpvaW5faWQgPSBzdWJmbG93X3JlcS1cdTAwM2VyZW1vdGVfaWQ7XG4gXHRlbnRyeS1cdTAwM2Vsb2NhbF9pZCA9IHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2lkO1xuIFx0ZW50cnktXHUwMDNldmFsaWQgPSAxO1xuQEAgLTExNyw2ICsxMTksNyBAQCBib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbFxuIFx0c3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX25vbmNlID0gZS1cdTAwM2VyZW1vdGVfbm9uY2U7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2Vsb2NhbF9ub25jZSA9IGUtXHUwMDNlbG9jYWxfbm9uY2U7XG4gXHRzdWJmbG93X3JlcS1cdTAwM2ViYWNrdXAgPSBlLVx1MDAzZWJhY2t1cDtcbitcdHN1YmZsb3dfcmVxLVx1MDAzZXJlcXVlc3RfYmt1cCA9IGUtXHUwMDNlcmVxdWVzdF9ia3VwO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlcmVtb3RlX2lkID0gZS1cdTAwM2Vqb2luX2lkO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNlbG9jYWxfaWQgPSBlLVx1MDAzZWxvY2FsX2lkO1xuIFx0c3ViZmxvd19yZXEtXHUwMDNldG9rZW4gPSBlLVx1MDAzZXRva2VuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jXG5pbmRleCBlYTRjYjZjMWJkNWUyLi4xNzhkOThkOTFmZWEyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY1xuQEAgLTM4MSw2ICszODEsOSBAQCBzdGF0aWMgaW50IHNvY2tfY29ubmVjdF9tcHRjcChjb25zdCBjaGFyICogY29uc3QgcmVtb3RlYWRkcixcbiBcbiBcdGhpbnRzLmFpX2ZhbWlseSA9IHBmO1xuIFxuK1x0LyogS2VlcCB0aGUgcmVzb2x2ZWQgYWRkcmVzcyBhbGl2ZSBmb3IgdGhlIHdob2xlIGV4ZWN1dGlvbjogaXQgaXNcbitcdCAqIHVzZWQgYWdhaW4gd2hlbiByZWNvbm5lY3RpbmcsIGFuZCB3aWxsIGJlIHJlbGVhc2VkIGF0IGV4aXQgdGltZS5cbitcdCAqL1xuIFx0eGdldGFkZHJpbmZvKHJlbW90ZWFkZHIsIHBvcnQsIFx1MDAyNmhpbnRzLCBcdTAwMjZhZGRyKTtcbiBcdGZvciAoYSA9IGFkZHI7IGE7IGEgPSBhLVx1MDAzZWFpX25leHQpIHtcbiBcdFx0c29jayA9IHNvY2tldChhLVx1MDAzZWFpX2ZhbWlseSwgYS1cdTAwM2VhaV9zb2NrdHlwZSwgcHJvdG8pO1xuQEAgLTQyMSw3ICs0MjQsNiBAQCBzdGF0aWMgaW50IHNvY2tfY29ubmVjdF9tcHRjcChjb25zdCBjaGFyICogY29uc3QgcmVtb3RlYWRkcixcbiBcdFx0c29jayA9IC0xO1xuIFx0fVxuIFxuLVx0ZnJlZWFkZHJpbmZvKGFkZHIpO1xuIFx0aWYgKHNvY2sgIT0gLTEpXG4gXHRcdFNPQ0tfVEVTVF9UQ1BVTFAoc29jaywgcHJvdG8pO1xuIFx0cmV0dXJuIHNvY2s7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2xpYi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9saWIuc2hcbmluZGV4IDVlZjYwMzM3NzVjODYuLmI5ZDE0NjQ3ZjQwMTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfbGliLnNoXG5AQCAtMTA4LDEyICsxMDgsMTQgQEAgbXB0Y3BfbGliX3ByX2luZm8oKSB7XG4gXG4gbXB0Y3BfbGliX3ByX25zdGF0KCkge1xuIFx0bG9jYWwgbnM9XCIkezF9XCJcbi1cdGxvY2FsIGhpc3Q9XCIvdG1wLyR7bnN9Lm91dFwiXG4rXHRsb2NhbCBjYWNoZT1cIi90bXAvJHtuc30ub3V0XCJcbitcdGxvY2FsIGhpc3Q9XCIvdG1wLyR7bnN9Lm5zdGF0XCJcbiBcbi1cdGlmIFsgLWYgXCIke2hpc3R9XCIgXTsgdGhlblxuLVx0XHRhd2sgJyQyICE9IDAgeyBwcmludCBcIiAgXCIkMCB9JyBcIiR7aGlzdH1cIlxuK1x0aWYgWyAtZiBcIiR7Y2FjaGV9XCIgXTsgdGhlblxuK1x0XHRhd2sgJyQyICE9IDAgeyBwcmludCBcIiAgXCIkMCB9JyBcIiR7Y2FjaGV9XCJcbiBcdGVsc2Vcbi1cdFx0aXAgbmV0bnMgZXhlYyBcIiR7bnN9XCIgbnN0YXQgLWFzIHwgZ3JlcCBUY3BcbitcdFx0TlNUQVRfSElTVE9SWT1cIiR7aGlzdH1cIiBpcCBuZXRucyBleGVjIFwiJHtuc31cIiBuc3RhdCAtcyB8XG4rXHRcdFx0Z3JlcCBUY3BcbiBcdGZpXG4gfVxuIFxuQEAgLTQxNCwxOSArNDE2LDIxIEBAIG1wdGNwX2xpYl9uc3RhdF9nZXQoKSB7XG4gfVxuIFxuICMgJDE6IG5zLCAkMjogTUlCIGNvdW50ZXJcbi0jIEdldCB0aGUgY291bnRlciBmcm9tIHRoZSBoaXN0b3J5IChtcHRjcF9saWJfbnN0YXRfe2luaXQsZ2V0fSgpKSBpZiBhdmFpbGFibGUuXG4tIyBJZiBub3QsIGdldCB0aGUgY291bnRlciBmcm9tIG5zdGF0IGlnbm9yaW5nIGFueSBoaXN0b3J5LlxuKyMgR2V0IHRoZSBjb3VudGVyIGZyb20gdGhlIGNhY2hlIChtcHRjcF9saWJfbnN0YXRfe2luaXQsZ2V0fSgpKSBpZiBhdmFpbGFibGUuXG4rIyBJZiBub3QsIGdldCB0aGUgY291bnRlciBmcm9tIG5zdGF0IGlnbm9yaW5nIGFueSBjYWNoZSwgYnV0IHVzaW5nIHRoZSBoaXN0b3J5LlxuIG1wdGNwX2xpYl9nZXRfY291bnRlcigpIHtcbiBcdGxvY2FsIG5zPVwiJHsxfVwiXG4gXHRsb2NhbCBjb3VudGVyPVwiJHsyfVwiXG4tXHRsb2NhbCBoaXN0PVwiL3RtcC8ke25zfS5vdXRcIlxuK1x0bG9jYWwgY2FjaGU9XCIvdG1wLyR7bnN9Lm91dFwiXG4rXHRsb2NhbCBoaXN0PVwiL3RtcC8ke25zfS5uc3RhdFwiXG4gXHRsb2NhbCBjb3VudFxuIFxuLVx0aWYgW1sgLXMgXCIke2hpc3R9XCIgXHUwMDI2XHUwMDI2IFwiJHtjb3VudGVyfVwiID09ICpcIlRjcFwiKiBdXTsgdGhlblxuLVx0XHRjb3VudD0kKGF3ayBcIi9eJHtjb3VudGVyfSAvIHtwcmludCBcXCQyOyBleGl0fVwiIFwiJHtoaXN0fVwiKVxuK1x0aWYgW1sgLXMgXCIke2NhY2hlfVwiIFx1MDAyNlx1MDAyNiBcIiR7Y291bnRlcn1cIiA9PSAqXCJUY3BcIiogXV07IHRoZW5cbitcdFx0Y291bnQ9JChhd2sgXCIvXiR7Y291bnRlcn0gLyB7cHJpbnQgXFwkMjsgZXhpdH1cIiBcIiR7Y2FjaGV9XCIpXG4gXHRlbHNlXG4tXHRcdGNvdW50PSQoaXAgbmV0bnMgZXhlYyBcIiR7bnN9XCIgbnN0YXQgLWFzeiBcIiR7Y291bnRlcn1cIiB8XG4tXHRcdFx0YXdrICdOUj09MSB7bmV4dH0ge3ByaW50ICQyfScpXG4rXHRcdGNvdW50PSQoTlNUQVRfSElTVE9SWT1cIiR7aGlzdH1cIiBpcCBuZXRucyBleGVjIFwiJHtuc31cIiBcXFxuK1x0XHRcdG5zdGF0IC1zeiBcIiR7Y291bnRlcn1cIiB8XG4rXHRcdFx0XHRhd2sgJ05SPT0xIHtuZXh0fSB7cHJpbnQgJDJ9JylcbiBcdGZpXG4gXHRpZiBbIC16IFwiJHtjb3VudH1cIiBdOyB0aGVuXG4gXHRcdG1wdGNwX2xpYl9mYWlsX2lmX2V4cGVjdGVkX2ZlYXR1cmUgXCIke2NvdW50ZXJ9IGNvdW50ZXJcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjc6MjIuOTk3NzE1MzM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTAzODkwNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBNUFRDUCBQYXRjaCBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoaXMgdGFyZ2V0cyBNUFRDUCwgc28gd2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuRmlyc3QsIEknbSBzZWVpbmcgY2hhbmdlcyBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2AuIFRoZSBhZGRpdGlvbiBvZiBgb3BzaXplIFx1MDAzYyBUQ1BPTEVOX01QVENQX01QQ19BQ0tfREFUQWAgaW4gYG1wdGNwX3BhcnNlX29wdGlvbmAgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBib3VuZHMgY2hlY2tpbmcgaXMgYWx3YXlzIHdlbGNvbWUuIFRoZSByZW1vdmFsIG9mIGBSRUFEX09OQ0VgIGZyb20gYHN1YmZsb3ctXHUwMDNlZnVsbHlfZXN0YWJsaXNoZWRgIGRvZXNuJ3Qgc2NyZWFtIHZ1bG5lcmFiaWxpdHksIGJ1dCB3ZSBzaG91bGQgdmVyaWZ5IHRoZSBtZW1vcnkgbW9kZWwgaW1wbGljYXRpb25zLiBCdXQgdGhhdCBgZXh0LVx1MDAzZWNzdW0gPSAwO2AgaW4gYG1wdGNwX3dyaXRlX2RhdGFfZmluYC4uLiB0aGF0J3MgdGhlIGludGVyZXN0aW5nIG9uZS4gIGBleHRgIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IG1wdGNwX2V4dGAsIGFuZCB3ZSdyZSAqaW5pdGlhbGl6aW5nKiBgY3N1bWAuIElzIHRoaXMgYSBmaXggZm9yIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mbyBsZWFrPyBUaGUgY29uY2VybiBpcywgaWYgYGNzdW1gIHdhcyB1bmluaXRpYWxpemVkIGJlZm9yZSwgaXQgY291bGQgaGF2ZSBiZWVuIHNlbnQgb3ZlciB0aGUgbmV0d29yayBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuICBTaW5jZSBpdCdzIGEgY2hlY2tzdW0gZmllbGQsIGl0J3MgZGVmaW5pdGVseSBpbnZvbHZlZCBpbiBuZXR3b3JrIGNvbW11bmljYXRpb24sIGJlY2F1c2UgTVBUQ1Agb3B0aW9ucyBhcmUgd3JpdHRlbiB0byB0aGUgVENQIGhlYWRlci4gIElmIGl0IHdhcyB1bmluaXRpYWxpemVkIGJlZm9yZSwgaXQgd291bGQgaGF2ZSBiZWVuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpyZWFkKiB3aGVuIHdyaXRpbmcgdGhlIFRDUCBvcHRpb24uICBJIG5lZWQgdG8gZGlnIGludG8gYG1wdGNwX3dyaXRlX2RhdGFfZmluYCBhbmQgdmVyaWZ5IGhvdyBgZXh0YCBpcyBvYnRhaW5lZCBhbmQgaWYgdGhpcyBpbml0aWFsaXphdGlvbiBhY3R1YWxseSByZXNvbHZlcyBhIHBvdGVudGlhbCBpc3N1ZS5cblxuTW92aW5nIG9uIHRvIGBuZXQvbXB0Y3AvcG0uY2AsIGBtcHRjcF9wbV9hbm5vdW5jZWRfYWxsb2NgIGhhcyBhIHNpbXBsZSByZW9yZGVyaW5nIHdoaWNoIGlzIHVubGlrZWx5IHRvIGJlIHNlY3VyaXR5IHJlbGV2YW50LCBidXQgd2Ugc2hvdWxkIGFsd2F5cyBjaGVjayB0aGUgY2hhbmdlcy4gIEluIGBuZXQvbXB0Y3AvcG1fa2VybmVsLmNgLCB0aGUgY2hhbmdlcyB3aXRoaW4gYG1wdGNwX25sX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3NgIHJhaXNlIGEgcXVlc3Rpb24gYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBtc2tfbG9jYWxgLiBJcyBpdCBpbml0aWFsaXplZCBiZWZvcmUgYGFubm9fYWRkciA9IG1za19sb2NhbDsgYW5ub19hZGRyLnBvcnQgPSAwOyBhbm5vdW5jZWQgPSBtcHRjcF9wbV9hbm5vdW5jZWRfcmVtb3ZlKG1zaywgXHUwMDI2YW5ub19hZGRyKTtgIGlzIGNhbGxlZD8gR290dGEgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdGhlcmUuICBgbmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jYCwgaXMgbW9kaWZ5aW5nIGhvdyBgaWRgIGlzIGFsbG9jYXRlZC4gVGhhdCdzIHdvcnRoIGEgcXVpY2sgbG9vayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgb2ZmLWJ5LW9uZSBlcnJvcnMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbiBpc3N1ZXMgaW50cm9kdWNlZC5cblxuTm93LCBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHNob3dzIGEgZmV3IGNoYW5nZXM6IHNldHRpbmcgYE1QVENQX1JUWF9ESVNBQkxFRGAgaW4gYSBmZXcgcGxhY2VzLCBhbHRlcmluZyBgbGlrZWx5L3VubGlrZWx5YCB3aGljaCBwcm9iYWJseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gVGhlIGNoYW5nZSBpbiBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuICBUaGV5J3JlIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgIGFuZCBgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcWAgcmVhZHMuIFRoZXkgYXJlIG1vdmluZyBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgICphZnRlciogcmVhZGluZyBgc2VxYCwgYGVuZF9zZXFgLCBgbWF4X3NlcWAgYW5kIGNoZWNraW5nIGBhZnRlcihzZXEsIG1heF9zZXEpYC4gVGhhdCB3YXJyYW50cyBjbG9zZXIgc2NydXRpbnksIGFzIGl0IGNvdWxkIGJlIGEgc3VidGxlIGRhdGEgcmFjZSBvciBpbmNvcnJlY3Qgc2NoZWR1bGluZyBzY2VuYXJpby4gYG1wdGNwX3Jlc2V0X3J0eF90aW1lcmAgY2hlY2tzIGBNUFRDUF9SVFhfRElTQUJMRURgLCB3aGljaCBzaG91bGQgYmUgZmluZS4gTGlrZXdpc2UsIHNldHRpbmcgYE1QVENQX1JUWF9ESVNBQkxFRGAgb24gYFRDUF9DTE9TRWAgaW4gYG1wdGNwX3NldF9zdGF0ZWAgaXMgcHJvYmFibHkgb2theS4gIFJlbW92aW5nIGBSRUFEX09OQ0VgIGluIGBzY2hlZHVsZV8zcmRhY2tfcmV0cmFuc21pc3Npb25gIHNob3VsZCBiZSB2ZXJpZmllZCBmb3IgcG90ZW50aWFsIG1lbW9yeSBtb2RlbCBpc3N1ZXMuXG5cbmBuZXQvbXB0Y3Avc3ViZmxvdy5jYCByZW1vdmVzIGBuZXdfY3R4LVx1MDAzZXRobWFjID0gc3ViZmxvd19yZXEtXHUwMDNldGhtYWM7YCBpbiBgc3ViZmxvd191bHBfY2xvbmVgLiBTZWVtcyBsaWtlIGEgY2xlYW51cC4gTm8gaW1tZWRpYXRlIGFsYXJtcy4gIGBuZXQvbXB0Y3Avc3luY29va2llcy5jYCBjaGFuZ2VzIHRoZSBgam9pbl9lbnRyeWAgc3RydWN0IGFuZCBhZGRzL21vZGlmaWVzIGEgZmV3IGxpbmVzIHdoaWNoIGlzIGxpa2VseSByZWxhdGVkIHRvIGNvb2tpZSBzdGF0ZSBtYW5hZ2VtZW50LiAgTmVlZCB0byBjb25maXJtIHRoYXQgY2hhbmdlcyB0byB0aGUgYGJhY2t1cGAgYW5kIGByZXF1ZXN0X2JrdXBgIGZpZWxkcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgdG8gcHJldmVudCBhbnkgbG9naWMgZXJyb3JzLlxuXG5GaW5hbGx5LCB0aGUgaW5jbHVzaW9uIG9mIHRlc3QgY2hhbmdlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuY2AgYW5kIGBtcHRjcF9saWIuc2hgIGlzIGVuY291cmFnaW5nLiBUaGF0IG1lYW5zIHRoZXJlJ3MgYSBiYXNlbGluZSB0byBqdWRnZSB0aGUgaW1wYWN0LlxuXG5TbywgdGhlIGtleSBhcmVhcyBmb3IgS01TQU4gZnV6emluZywgYmFzZWQgb24gbXkgaW5pdGlhbCByZXZpZXcsIGFyZTpcbjEuIGBleHQtXHUwMDNlY3N1bSA9IDA7YCBpbiBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gOiBIaWdoIHByaW9yaXR5LiBUaGlzIGhhcyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgZmluZGluZyBhbiBpbml0aWFsaXphdGlvbiBwcm9ibGVtLlxuMi4gYFxuXG4iLCJJbnB1dFRva2VucyI6NzEwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyNzozNi4xMDE2MDk4NzVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDQ1NTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF93cml0ZV9kYXRhX2ZpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmM9NTEzPXN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy01OTYtXFxubmV0L21wdGNwL29wdGlvbnMuYzo1OTc6c3RhdGljIHZvaWQgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTU5OC1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1wdGNwX2V4dCAqZXh0KVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz02MjY9c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy02NTQtXFx0XFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBzbmRfZGF0YV9maW5fZW5hYmxlKVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NjU1OlxcdFxcdFxcdG1wdGNwX3dyaXRlX2RhdGFfZmluKHN1YmZsb3csIHNrYiwgXFx1MDAyNm9wdHMtXFx1MDAzZWV4dF9jb3B5KTtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY1Ni1cXHRcXHRvcHRzLVxcdTAwM2VzdWJvcHRpb25zID0gT1BUSU9OX01QVENQX0RTUztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjc6MzYuMjU2MDcwNDM5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjcxMTMzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhlIE1QVENQIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAgRnVuY3Rpb24gQ2FsbCoqXG5cbkFscmlnaHQsIHNvIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAgaXMgYmVpbmcgaW52b2tlZCwgYW5kIGl0J3MgcGFzc2luZyBpbiB0aGUgYWRkcmVzcyBvZiBgb3B0cy1cdTAwM2VleHRfY29weWAgYXMgYW4gYXJndW1lbnQuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHZlcmlmeWluZyBob3cgdGhpcyBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgZXN0YWJsaXNoZWQgb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZywgc28gSSdtIHRoaW5raW5nLCBcIk9rYXksIGxldCdzIGNvcnJlbGF0ZSB0aGlzIHdpdGggdGhlIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc2AgZnVuY3Rpb24gYW5kIHdoYXQgYG9wdHMtXHUwMDNlZXh0X2NvcHlgIGFjdHVhbGx5ICpyZXByZXNlbnRzKiBhdCB0aGlzIHBvaW50LlwiIEknbSBtZW50YWxseSB0cmFjaW5nIHRocm91Z2ggdGhlIGNvbm5lY3Rpb24gc3RhdGUuIEknbSBjaGVja2luZywgaXMgYG9wdHMtXHUwMDNlZXh0X2NvcHlgIGhvbGRpbmcgdGhlIGV4cGVjdGVkIGRhdGEgcmVnYXJkaW5nIHRoZSBuZWdvdGlhdGVkIGV4dGVuc2lvbnM/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcm9sZSBpdCBwbGF5cyBpbiB0aGUgZmxvdyBhbmQgZGV0ZXJtaW5lIGlmIHRoZXJlIG1pZ2h0IGJlIGFueSBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIEkgc2hvdWxkIGxvb2sgZm9yLiBUaGlzIHBhcnRpY3VsYXIgY2FsbCB3aXRoIHRoaXMgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgaXMgYSBrZXkganVuY3R1cmUgdG8gYW5hbHl6ZS4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGVzZSB0d28gZGF0YSBzdHJ1Y3R1cmVzIGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDc0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjc6NDAuNDgzMTg3MjM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODY5OTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmM9NTEzPXN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy01MjYtXFx0ICogdGVsbCB0aGUgY2FsbGVyIHRvIGRlZmVyIHRoZSBlc3RpbWF0ZSB0b1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6NTI3OlxcdCAqIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKCksIHdoaWNoIHdpbGwgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UuXFxubmV0L21wdGNwL29wdGlvbnMuYy01MjgtXFx0ICovXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTU5Nz1zdGF0aWMgdm9pZCBtcHRjcF93cml0ZV9kYXRhX2ZpbihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy02MjUtXFxubmV0L21wdGNwL29wdGlvbnMuYzo2MjY6c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNjI3LVxcdFxcdFxcdFxcdFxcdCAgYm9vbCBzbmRfZGF0YV9maW5fZW5hYmxlLCBpbnQgKnNpemUsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTg3Mj1pbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwNy1cXHRcXHRyZXQgPSB0cnVlO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTA4OlxcdGVsc2UgaWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHNrLCBza2IsIHNuZF9kYXRhX2ZpbiwgXFx1MDAyNm9wdF9zaXplLCBvcHRzKSkge1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTA5LVxcdFxcdGludCBtcF9mYWlsX3NpemU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI3OjQwLjU3MTg5Mzg2NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMwOTE1Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBhbmQgTVBUQ1AgaW50ZXJuYWxzOlxuXG4qKkRpdmluZyBpbnRvIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHRob3VnaHQgcHJvY2VzcyB3ZW50IHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBNUFRDUCdzIGVzdGFibGlzaGVkIG9wdGlvbnMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSwgdGhlIERhdGEgU2VxdWVuY2UgU2l6ZSAoRFNTKSBvcHRpb24uIFNvLCB0aGUgZGlyZWN0IHJvdXRlIGlzIHRvIGxvb2sgYXQgYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzYCB3aXRoaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhpcyBmZWF0dXJlLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgaG93IERTUyBpcyBuZWdvdGlhdGVkIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGhvdyBpdCdzIHN0b3JlZCBhbmQgbWFuYWdlZCBvbiBlc3RhYmxpc2hlZCBjb25uZWN0aW9ucywgYW5kIGhvdyBpdCBpbXBhY3RzIGRhdGEgdHJhbnNtaXNzaW9uLiBLbm93aW5nIHRoZSBleGFjdCBjb2RlIGxvY2F0aW9uIGdpdmVzIG1lIGEgdmVyeSBlZmZpY2llbnQgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uIFRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcsIG9yIHJlZnJlc2hpbmcgbXkgbWVtb3J5IG9mLCB0aGUgZmluZSBkZXRhaWxzIG9mIHRoZSBEU1MgZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxOTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyNzo0NS45MDI4MTIxMjFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyNjpcXHRzdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIDYyNzpcXHRcXHRcXHRcXHRcXHRcXHQgIGJvb2wgc25kX2RhdGFfZmluX2VuYWJsZSwgaW50ICpzaXplLFxcbiA2Mjg6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxuIDYyOTpcXHR7XFxuIDYzMDpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc2spO1xcbiA2MzE6XFx0XFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHN1YmZsb3ctXFx1MDAzZWNvbm4pO1xcbiA2MzI6XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuIDYzMzpcXHRcXHR1bnNpZ25lZCBpbnQgZHNzX3NpemUgPSAwO1xcbiA2MzQ6XFx0XFx0c3RydWN0IG1wdGNwX2V4dCAqbXBleHQ7XFxuIDYzNTpcXHRcXHR1bnNpZ25lZCBpbnQgYWNrX3NpemU7XFxuIDYzNjpcXHRcXHRib29sIHJldCA9IGZhbHNlO1xcbiA2Mzc6XFx0XFxuIDYzODpcXHRcXHQvKiBaZXJvIGB1c2VfYWNrYCBhbmQgYHVzZV9tYXBgIGZsYWdzIHdpdGggb25lIHNob3QuICovXFxuIDYzOTpcXHRcXHRtZW1zZXQoXFx1MDAyNm9wdHMtXFx1MDAzZWV4dF9jb3B5LmZsYWdzLCAwLCBzaXplb2Yob3B0cy1cXHUwMDNlZXh0X2NvcHkuZmxhZ3MpKTtcXG4gNjQwOlxcdFxcdG9wdHMtXFx1MDAzZWNzdW1fcmVxZCA9IFJFQURfT05DRShtc2stXFx1MDAzZWNzdW1fZW5hYmxlZCk7XFxuIDY0MTpcXHRcXHRtcGV4dCA9IHNrYiA/IG1wdGNwX2dldF9leHQoc2tiKSA6IE5VTEw7XFxuIDY0MjpcXHRcXG4gNjQzOlxcdFxcdGlmICghc2tiIHx8IChtcGV4dCBcXHUwMDI2XFx1MDAyNiBtcGV4dC1cXHUwMDNldXNlX21hcCkgfHwgc25kX2RhdGFfZmluX2VuYWJsZSkge1xcbiA2NDQ6XFx0XFx0XFx0dW5zaWduZWQgaW50IG1hcF9zaXplID0gVENQT0xFTl9NUFRDUF9EU1NfQkFTRSArIFRDUE9MRU5fTVBUQ1BfRFNTX01BUDY0O1xcbiA2NDU6XFx0XFxuIDY0NjpcXHRcXHRcXHRpZiAobXBleHQpIHtcXG4gNjQ3OlxcdFxcdFxcdFxcdGlmIChvcHRzLVxcdTAwM2Vjc3VtX3JlcWQpXFxuIDY0ODpcXHRcXHRcXHRcXHRcXHRtYXBfc2l6ZSArPSBUQ1BPTEVOX01QVENQX0RTU19DSEVDS1NVTTtcXG4gNjQ5OlxcdFxcbiA2NTA6XFx0XFx0XFx0XFx0b3B0cy1cXHUwMDNlZXh0X2NvcHkgPSAqbXBleHQ7XFxuIDY1MTpcXHRcXHRcXHR9XFxuIDY1MjpcXHRcXG4gNjUzOlxcdFxcdFxcdGRzc19zaXplID0gbWFwX3NpemU7XFxuIDY1NDpcXHRcXHRcXHRpZiAoc2tiIFxcdTAwMjZcXHUwMDI2IHNuZF9kYXRhX2Zpbl9lbmFibGUpXFxuIDY1NTpcXHRcXHRcXHRcXHRtcHRjcF93cml0ZV9kYXRhX2ZpbihzdWJmbG93LCBza2IsIFxcdTAwMjZvcHRzLVxcdTAwM2VleHRfY29weSk7XFxuIDY1NjpcXHRcXHRcXHRvcHRzLVxcdTAwM2VzdWJvcHRpb25zID0gT1BUSU9OX01QVENQX0RTUztcXG4gNjU3OlxcdFxcdFxcdHJldCA9IHRydWU7XFxuIDY1ODpcXHRcXHR9XFxuIDY1OTpcXHRcXG4gNjYwOlxcdFxcdC8qIHBhc3NpdmUgc29ja2V0cyBtc2sgd2lsbCBzZXQgdGhlICdjYW5fYWNrJyBhZnRlciBhY2NlcHQoKSwgZXZlblxcbiA2NjE6XFx0XFx0ICogaWYgdGhlIGZpcnN0IHN1YmZsb3cgbWF5IGhhdmUgdGhlIGFscmVhZHkgdGhlIHJlbW90ZSBrZXkgaGFuZHlcXG4gNjYyOlxcdFxcdCAqL1xcbiA2NjM6XFx0XFx0aWYgKCFSRUFEX09OQ0UobXNrLVxcdTAwM2VjYW5fYWNrKSkge1xcbiA2NjQ6XFx0XFx0XFx0KnNpemUgPSBBTElHTihkc3Nfc2l6ZSwgNCk7XFxuIDY2NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA2NjY6XFx0XFx0fVxcbiA2Njc6XFx0XFxuIDY2ODpcXHRcXHRpZiAoUkVBRF9PTkNFKG1zay1cXHUwMDNldXNlXzY0Yml0X2FjaykpIHtcXG4gNjY5OlxcdFxcdFxcdGFja19zaXplID0gVENQT0xFTl9NUFRDUF9EU1NfQUNLNjQ7XFxuIDY3MDpcXHRcXHRcXHRvcHRzLVxcdTAwM2VleHRfY29weS5hY2s2NCA9IDE7XFxuIDY3MTpcXHRcXHR9IGVsc2Uge1xcbiA2NzI6XFx0XFx0XFx0YWNrX3NpemUgPSBUQ1BPTEVOX01QVENQX0RTU19BQ0szMjtcXG4gNjczOlxcdFxcdFxcdG9wdHMtXFx1MDAzZWV4dF9jb3B5LmFjazY0ID0gMDtcXG4gNjc0OlxcdFxcdH1cXG4gNjc1OlxcdFxcdG9wdHMtXFx1MDAzZWV4dF9jb3B5LnVzZV9hY2sgPSAxO1xcbiA2NzY6XFx0XFx0b3B0cy1cXHUwMDNlc3Vib3B0aW9ucyA9IE9QVElPTl9NUFRDUF9EU1M7XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdC8qIEFkZCBraW5kL2xlbmd0aC9zdWJ0eXBlL2ZsYWcgb3ZlcmhlYWQgaWYgbWFwcGluZyBpcyBub3QgcG9wdWxhdGVkICovXFxuIDY3OTpcXHRcXHRpZiAoZHNzX3NpemUgPT0gMClcXG4gNjgwOlxcdFxcdFxcdGFja19zaXplICs9IFRDUE9MRU5fTVBUQ1BfRFNTX0JBU0U7XFxuIDY4MTpcXHRcXG4gNjgyOlxcdFxcdC8qIFRoZSBjYWxsZXIgaXMgX190Y3BfdHJhbnNtaXRfc2tiKCksIGFuZCB3aWxsIGNvbXB1dGUgdGhlIG5ldyByY3ZcXG4gNjgzOlxcdFxcdCAqIHduZCBzb29uOiBlbnN1cmUgdGhhdCB0aGUgd2luZG93IGNhbiBzaHJpbmsuXFxuIDY4NDpcXHRcXHQgKi9cXG4gNjg1OlxcdFxcdGlmIChza2IpXFxuIDY4NjpcXHRcXHRcXHR0cC1cXHUwMDNlcmN2X3duZCA9IHRwLVxcdTAwM2VyY3Zfbnh0IC0gdHAtXFx1MDAzZXJjdl93dXA7XFxuIDY4NzpcXHRcXG4gNjg4OlxcdFxcdGRzc19zaXplICs9IGFja19zaXplO1xcbiA2ODk6XFx0XFxuIDY5MDpcXHRcXHQqc2l6ZSA9IEFMSUdOKGRzc19zaXplLCA0KTtcXG4gNjkxOlxcdFxcdHJldHVybiB0cnVlO1xcbiA2OTI6XFx0fVxcbiA2OTM6XFx0XFxuIDY5NDpcXHRzdGF0aWMgdTY0IGFkZF9hZGRyX2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLFxcbiA2OTU6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphZGRyKVxcbiA2OTY6XFx0e1xcbiA2OTc6XFx0XFx0dTE2IHBvcnQgPSBudG9ocyhhZGRyLVxcdTAwM2Vwb3J0KTtcXG4gNjk4OlxcdFxcdHU4IGhtYWNbU0hBMjU2X0RJR0VTVF9TSVpFXTtcXG4gNjk5OlxcdFxcdHU4IG1zZ1sxOV07XFxuIDcwMDpcXHRcXHRpbnQgaSA9IDA7XFxuIDcwMTpcXHRcXG4gNzAyOlxcdFxcdG1zZ1tpKytdID0gYWRkci1cXHUwMDNlaWQ7XFxuIDcwMzpcXHRcXHRpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQpIHtcXG4gNzA0OlxcdFxcdFxcdG1lbWNweShcXHUwMDI2bXNnW2ldLCBcXHUwMDI2YWRkci1cXHUwMDNlYWRkci5zX2FkZHIsIDQpO1xcbiA3MDU6XFx0XFx0XFx0aSArPSA0O1xcbiA3MDY6XFx0XFx0fVxcbiA3MDc6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxuIDcwODpcXHRcXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4gNzA5OlxcdFxcdFxcdG1lbWNweShcXHUwMDI2bXNnW2ldLCBcXHUwMDI2YWRkci1cXHUwMDNlYWRkcjYuczZfYWRkciwgMTYpO1xcbiA3MTA6XFx0XFx0XFx0aSArPSAxNjtcXG4gNzExOlxcdFxcdH1cXG4gNzEyOlxcdCNlbmRpZlxcbiA3MTM6XFx0XFx0bXNnW2krK10gPSBwb3J0IFxcdTAwM2VcXHUwMDNlIDg7XFxuIDcxNDpcXHRcXHRtc2dbaSsrXSA9IHBvcnQgXFx1MDAyNiAweEZGO1xcbiA3MTU6XFx0XFxuIDcxNjpcXHRcXHRtcHRjcF9jcnlwdG9faG1hY19zaGEoa2V5MSwga2V5MiwgbXNnLCBpLCBobWFjKTtcXG4gNzE3OlxcdFxcbiA3MTg6XFx0XFx0cmV0dXJuIGdldF91bmFsaWduZWRfYmU2NChcXHUwMDI2aG1hY1tTSEEyNTZfRElHRVNUX1NJWkUgLSBzaXplb2YodTY0KV0pO1xcbiA3MTk6XFx0fVxcbiA3MjA6XFx0XFxuIDcyMTpcXHRzdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2FkZF9hZGRyKHN0cnVjdCBzb2NrICpzayxcXG4gNzIyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnNpemUsXFxuIDcyMzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZyxcXG4gNzI0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBib29sIGhhc190cyxcXG4gNzI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI3OjQ1LjkwMzA1NzgwMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkzNTgyMjkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25jZXJucyBSZWdhcmRpbmcgRFNTIE9wdGlvbnMgaW4gTVBUQ1AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc2AgZnVuY3Rpb24gYW5kIGZvY3VzaW5nIG9uIGhvdyB0aGUgRFNTIG9wdGlvbnMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgYG9wdHMtXHUwMDNlZXh0X2NvcHlgIGlzIGluaXRpYWxpemVkIGFzIGEgY29weSBvZiBgKm1wZXh0YCBpZiBgbXBleHRgIGlzbid0IE5VTEwuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCB0aGVuLCBJIHJlYWxpemUgdGhhdCBpZiBgbXBleHRgICppcyogTlVMTCwgYG9wdHMtXHUwMDNlZXh0X2NvcHlgIGlzbid0IHByb3Blcmx5IGluaXRpYWxpemVkIGF0IGFsbCEgSXQncyBqdXN0IGxlZnQgZGFuZ2xpbmcuIFRoYXQncyBhIHBvdGVudGlhbCBwcm9ibGVtIHJpZ2h0IHRoZXJlLlxuXG5UaGVuIEkgZ2V0IGRpc3RyYWN0ZWQgYnkgc2VlaW5nIGBtZW1zZXRgIG9mIHRoZSBmbGFncy4gVGhhdCB6ZXJvZXMgdGhvc2UuIEJ1dCB3aGF0IGFib3V0IHRoZSAqcmVzdCogb2YgdGhlIHN0cnVjdHVyZT8gSWYgYG1wZXh0YCBpcyBOVUxMLCBhbGwgdGhlIG90aGVyIGZpZWxkcyBpbiBgb3B0cy1cdTAwM2VleHRfY29weWAgY291bGQgY29udGFpbiBnYXJiYWdlLiBUaGF0J3Mgbm90IGdvb2QuIFdlJ3JlIHJlbHlpbmcgb24gYG9wdHMtXHUwMDNlZXh0X2NvcHlgIGxhdGVyLlxuXG5BbmQgdGhlbiBJIGNhdGNoIG15c2VsZjsgdGhlIGZ1bmN0aW9uIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAgKnRha2VzKiBgXHUwMDI2b3B0cy1cdTAwM2VleHRfY29weWAsIGFuZCBJIHNlZSB0aGF0IGl0IG1vZGlmaWVzIGl0LCBpdCBzZWVtcyBsaWtlIHRoZSBsYWNrIG9mIGluaXRpYWxpemF0aW9uIGlzIGEgcmVhbCBidWcgaGVyZS4gVGhhdCdzIGNyaXRpY2FsIGJlY2F1c2Ugd2UncmUgcGFzc2luZyBpdCBieSByZWZlcmVuY2UuIEkgdGhpbmsgSSBuZWVkIHRvIGRpZyBpbnRvIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAgcmlnaHQgYXdheSBhbmQgc2VlIHdoYXQgaXQgZXhwZWN0cyBhbmQgaWYgaXQgY2FuIGhhbmRsZSBhbiB1bmluaXRpYWxpemVkIGBvcHRzLVx1MDAzZWV4dF9jb3B5YC4gVGhpcyBuZWVkcyBhIGNsb3NlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI3OjU2LjgzODg4Mzc1MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL29wdGlvbnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTcsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTc6XFx0c3RhdGljIHZvaWQgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcXG4gNTk4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbXB0Y3BfZXh0ICpleHQpXFxuIDU5OTpcXHR7XFxuIDYwMDpcXHRcXHQvKiBUaGUgd3JpdGVfc2VxIHZhbHVlIGhhcyBhbHJlYWR5IGJlZW4gaW5jcmVtZW50ZWQsIHNvIHRoZSBhY3R1YWxcXG4gNjAxOlxcdFxcdCAqIHNlcXVlbmNlIG51bWJlciBmb3IgdGhlIERBVEFfRklOIGlzIG9uZSBsZXNzLlxcbiA2MDI6XFx0XFx0ICovXFxuIDYwMzpcXHRcXHR1NjQgZGF0YV9maW5fdHhfc2VxID0gUkVBRF9PTkNFKG1wdGNwX3NrKHN1YmZsb3ctXFx1MDAzZWNvbm4pLVxcdTAwM2V3cml0ZV9zZXEpIC0gMTtcXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0aWYgKCFleHQtXFx1MDAzZXVzZV9tYXAgfHwgIXNrYi1cXHUwMDNlbGVuKSB7XFxuIDYwNjpcXHRcXHRcXHQvKiBSRkM2ODI0IHJlcXVpcmVzIGEgRFNTIG1hcHBpbmcgd2l0aCBzcGVjaWZpYyB2YWx1ZXNcXG4gNjA3OlxcdFxcdFxcdCAqIGlmIERBVEFfRklOIGlzIHNldCBidXQgbm8gZGF0YSBwYXlsb2FkIGlzIG1hcHBlZFxcbiA2MDg6XFx0XFx0XFx0ICovXFxuIDYwOTpcXHRcXHRcXHRleHQtXFx1MDAzZWRhdGFfZmluID0gMTtcXG4gNjEwOlxcdFxcdFxcdGV4dC1cXHUwMDNldXNlX21hcCA9IDE7XFxuIDYxMTpcXHRcXHRcXHRleHQtXFx1MDAzZWRzbjY0ID0gMTtcXG4gNjEyOlxcdFxcdFxcdGV4dC1cXHUwMDNlZGF0YV9zZXEgPSBkYXRhX2Zpbl90eF9zZXE7XFxuIDYxMzpcXHRcXHRcXHRleHQtXFx1MDAzZXN1YmZsb3dfc2VxID0gMDtcXG4gNjE0OlxcdFxcdFxcdGV4dC1cXHUwMDNlZGF0YV9sZW4gPSAxO1xcbiA2MTU6XFx0XFx0XFx0ZXh0LVxcdTAwM2Vjc3VtID0gMDtcXG4gNjE2OlxcdFxcdH0gZWxzZSBpZiAoZXh0LVxcdTAwM2VkYXRhX3NlcSArIGV4dC1cXHUwMDNlZGF0YV9sZW4gPT0gZGF0YV9maW5fdHhfc2VxKSB7XFxuIDYxNzpcXHRcXHRcXHQvKiBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIERTUyBtYXBwaW5nIGFuZCBpdCBpcyB0aGVcXG4gNjE4OlxcdFxcdFxcdCAqIGZpbmFsIG1hcHBpbmcsIERBVEFfRklOIGNvbnN1bWVzIDEgYWRkaXRpb25hbCBieXRlIG9mXFxuIDYxOTpcXHRcXHRcXHQgKiBtYXBwaW5nIHNwYWNlLlxcbiA2MjA6XFx0XFx0XFx0ICovXFxuIDYyMTpcXHRcXHRcXHRleHQtXFx1MDAzZWRhdGFfZmluID0gMTtcXG4gNjIyOlxcdFxcdFxcdGV4dC1cXHUwMDNlZGF0YV9sZW4rKztcXG4gNjIzOlxcdFxcdH1cXG4gNjI0OlxcdH1cXG4gNjI1OlxcdFxcbiA2MjY6XFx0c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyNzo1Ni44MzkxMDM3NjJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM3OTQ1ODc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNUFRDUCBEYXRhIEhhbmRsaW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGV4YW1pbmUgdGhpcyBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gIGZ1bmN0aW9uOiBJJ20gZm9jdXNpbmcgb24gaG93IE1QVENQIGhhbmRsZXMgdGhlIERBVEFfRklOIGZsYWcsIHNwZWNpZmljYWxseSBpbiB0aGUgYWJzZW5jZSBvciBwcmVzZW5jZSBvZiBhY3R1YWwgZGF0YSBpbiBhIHBhY2tldC4gSSBzZWUgdGhhdCBpZiBgZXh0LVx1MDAzZXVzZV9tYXBgIGlzIHplcm8gb3IgdGhlIHBhY2tldCBsZW5ndGggaXMgYWxzbyB6ZXJvICh3aGljaCwgb2YgY291cnNlLCBpbXBsaWVzIG5vIGRhdGEpLCB0aGUgY29kZSBwcm9jZWVkcyB0byBzZXQgYSBidW5jaCBvZiBleHRlbnNpb24gZmllbGRzLiBJbnRlcmVzdGluZy4uLml0IGxvb2tzIGxpa2UgdGhpcyBwYXJ0IGlzIHNwZWNpZmljYWxseSBhZGhlcmluZyB0byBSRkM2ODI0LCB3aGljaCByZXF1aXJlcyBhIERTUyAoRGF0YSBTZXF1ZW5jZSBTcGFjZSkgbWFwcGluZyB3aXRoIHZlcnkgcHJlY2lzZSB2YWx1ZXMgd2hlbiBEQVRBX0ZJTiBpcyBzZXQgYnV0IHRoZSBkYXRhIHBheWxvYWQgaXRzZWxmIGlzIGVtcHR5LiBUaGUgY29kZSBzZXRzIGBkYXRhX2ZpbmAgdG8gMSwgY29uZmlybXMgd2UgYXJlIHVzaW5nIHRoZSBtYXAsIHNldHMgdXAgYSBEU04gKERhdGEgU2VxdWVuY2UgTnVtYmVyKSB2YWx1ZSwgdGhlIHN1YmZsb3cgc2VxdWVuY2UgbnVtYmVyIHRvIDAsIGRhdGEgbGVuZ3RoIHRvIDEgYW5kIGZpbmFsbHkgY29tcHV0ZXMgYSBjaGVja3N1bS5cblxuTm93LCB0aGVyZSdzIGEgcXVpY2sgY29uZGl0aW9uYWwsIGFuZCB0aGVuIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhbiBgZWxzZSBpZmAgYmxvY2ssIHdoZXJlIGl0IHNlZW1zIHRoYXQgd2UgYXJlIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkYXRhIGhhcyBhcnJpdmVkIGluIHRoZSBjb3JyZWN0IHNlcXVlbmNlLlxuXG5Ib2xkIG9uLi4uIEkgbmVlZCB0byBiYWNrdHJhY2sgaGVyZS4gV2h5IHdvdWxkIGBleHQtXHUwMDNldXNlX21hcGAgKmV2ZXIqIGJlIHplcm8gaW4gdGhpcyBjb250ZXh0PyBJJ20gcHJldHR5IHN1cmUgSSBzYXcgc29tZXRoaW5nIGluaXRpYWxpemUgdGhpcy4gQWgsIHJpZ2h0ISBJIHJlbWVtYmVyIG5vdywgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IG15IHRyYWluIG9mIHRob3VnaHQuIEFoIHllcywgSSByZW1lbWJlciBub3csIGl0J3MgZ2V0dGluZyB6ZXJvZWQgYnkgYG1lbXNldChcdTAwMjZvcHRzLVx1MDAzZWV4dF9jb3B5LmZsYWdzLCAwLCBzaXplb2Yob3B0cy1cdTAwM2VleHRfY29weS5mbGFncykpYCBpbiBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3NgLiBPa2F5LCBzbyBpdCBhbGwgbWFrZXMgc2Vuc2Ugbm93LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHN0cnVjdCBtcHRjcF9leHRgIGlzIGRlZmluZWQgY29ycmVjdGx5IHRvIGJlIGFibGUgdG8gZm9sbG93IHRoaXMgY29kZSBtb3JlIGNsb3NlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzU5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjg6MDQuMjE4NTY2MjQ1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyMjAxNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG1wdGNwX2V4dCBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9tcHRjcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L21wdGNwLmg9MTg9c3RydWN0IHNlcV9maWxlO1xcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yMC0vKiBNUFRDUCBza19idWZmIGV4dGVuc2lvbiBkYXRhICovXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyMTpzdHJ1Y3QgbXB0Y3BfZXh0IHtcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTIyLVxcdHU2NFxcdFxcdGRhdGFfc2VxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyODowNC4zMjA3OTI0MTFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5MzQ1NDIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc3RydWN0IG1wdGNwX2V4dGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBpdC4gVGltZSB0byBkaXNzZWN0IGBzdHJ1Y3QgbXB0Y3BfZXh0YC4gSSBrbm93IHRoaXMgc3RydWN0dXJlIGlzIGZ1bmRhbWVudGFsIHRvIE11bHRpUGF0aCBUQ1AgKE1QVENQKSBvcGVyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbXBvbmVudHMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgcHJvdG9jb2wncyBpbXBsZW1lbnRhdGlvbi4gSSBleHBlY3QgdG8gc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogZmxhZ3MsIHNlcXVlbmNlIG51bWJlcnMsIGNoZWNrc3VtcyAodGhvdWdoIHRob3NlIG1pZ2h0IGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgYXQgdGhpcyBsZXZlbCksIGFuZCBwb2ludGVycyBvciBvZmZzZXRzIHRvIG90aGVyIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgZXh0ZW5zaW9uIG1lY2hhbmlzbS4gTVBUQ1AgcmVsaWVzIGhlYXZpbHkgb24gZXh0ZW5zaW9ucyBmb3IgdGhpbmdzIGxpa2Ugc3ViZmxvdy1zcGVjaWZpYyBjb25nZXN0aW9uIGNvbnRyb2wsIHBhdGggbWFuYWdlbWVudCwgYW5kIGNvbm5lY3Rpb24gYXV0aGVudGljYXRpb24uIEknbSBrZWVuIHRvIHNlZSBpZiBpdCdzIGEgc2ltcGxlLCB0YWdnZWQgbGlzdCwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBsaWtlIGEgY2hhaW5lZCBzdHJ1Y3R1cmUgd2l0aCB2ZXJzaW9uaW5nLiBUaGV5IGxpa2VseSBoYWQgdG8gYmFsYW5jZSBmbGV4aWJpbGl0eSB3aXRoIHBlcmZvcm1hbmNlIGNvbmNlcm5zLiBBIGNvbXBsZXggZXh0ZW5zaW9uIHN5c3RlbSBjYW4gYm9nIGRvd24gdGhlIGZhc3QgcGF0aCwgc28gYSB3ZWxsLWRlc2lnbmVkIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgYSBkZWxpY2F0ZSBiYWxhbmNlLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIFRDUCBzdGFjay4gRG9lcyB0aGlzIHN0cnVjdHVyZSBkaXJlY3RseSBtYXAgdG8gb3IgYXVnbWVudCBUQ1AgaGVhZGVycywgb3IgaXMgaXQgYSBzZXBhcmF0ZSBlbnRpdHkgdGhhdCdzIGxpbmtlZCBpbiBzb21lIHdheT8gU2VlaW5nIGhvdyB0aGV5J3ZlIGludGVncmF0ZWQgTVBUQ1Atc3BlY2lmaWMgaW5mb3JtYXRpb24gd2l0aG91dCBkcmFzdGljYWxseSBhbHRlcmluZyBleGlzdGluZyBUQ1AgY29kZSBpcyBhbHdheXMgZmFzY2luYXRpbmcuIEkgYW50aWNpcGF0ZSB0aGVyZSBhcmUgY2xldmVyIHVzZXMgb2YgZmxhZ3Mgb3IgcmVzZXJ2ZWQgZmllbGRzIHdpdGhpbiBzdGFuZGFyZCBUQ1AgaGVhZGVycyB0byBtaW5pbWl6ZSBpbnZhc2l2ZSBjaGFuZ2VzLiBBbHNvLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCB0aGluZ3MgbGlrZSBUQ1Agb3B0aW9ucyBvciBleHRlbnNpb25zP1xuXG5VbHRpbWF0ZWx5LCBJJ20gaG9waW5nIHRvIGdsZWFuIGluc2lnaHRzIGludG8gdGhlaXIgZGVzaWduIGNob2ljZXMg4oCTIGhvdyB0aGV5IHByaW9yaXRpemVkIGZhY3RvcnMgbGlrZSBzY2FsYWJpbGl0eSwgc2VjdXJpdHksIGFuZCBwZXJmb3JtYW5jZS4gSSdtIGVzcGVjaWFsbHkgbG9va2luZyBmb3IgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBhcmVhcyB3aGVyZSB0aGV5IG1pZ2h0IGhhdmUgbWFkZSB0cmFkZS1vZmZzLiBUaGlzIHN0cnVjdHVyZSBpcyB0aGUgbmV4dXMgb2YgYSBsb3Qgb2YgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zLCBhbmQgaXRzIGRldGFpbHMgYXJlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxOTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyODoxMS42MTQyNTA0NDhaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L21wdGNwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjE6XFx0c3RydWN0IG1wdGNwX2V4dCB7XFxuICAyMjpcXHRcXHR1NjRcXHRcXHRkYXRhX3NlcTtcXG4gIDIzOlxcdFxcdHUzMlxcdFxcdHN1YmZsb3dfc2VxO1xcbiAgMjQ6XFx0XFx0dTE2XFx0XFx0ZGF0YV9sZW47XFxuICAyNTpcXHRcXHRfX3N1bTE2XFx0XFx0Y3N1bTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0c3RydWN0X2dyb3VwKGZsYWdzLFxcbiAgMjg6XFx0XFx0XFx0dThcXHR1c2VfbWFwOjEsXFxuICAyOTpcXHRcXHRcXHRcXHRkc242NDoxLFxcbiAgMzA6XFx0XFx0XFx0XFx0ZGF0YV9maW46MSxcXG4gIDMxOlxcdFxcdFxcdFxcdHVzZV9hY2s6MSxcXG4gIDMyOlxcdFxcdFxcdFxcdGFjazY0OjEsXFxuICAzMzpcXHRcXHRcXHRcXHRtcGNfbWFwOjEsXFxuICAzNDpcXHRcXHRcXHRcXHRmcm96ZW46MSxcXG4gIDM1OlxcdFxcdFxcdFxcdHJlc2V0X3RyYW5zaWVudDoxO1xcbiAgMzY6XFx0XFx0XFx0dThcXHRyZXNldF9yZWFzb246NCxcXG4gIDM3OlxcdFxcdFxcdFxcdGNzdW1fcmVxZDoxLFxcbiAgMzg6XFx0XFx0XFx0XFx0aW5maW5pdGVfbWFwOjE7XFxuICAzOTpcXHRcXHQpOyAvKiBlbmQgb2YgZmxhZ3MgZ3JvdXAgKi9cXG4gIDQwOlxcdH07XFxuICA0MTpcXHRcXG4gIDQyOlxcdCNkZWZpbmUgTVBUQ1BPUFRfSE1BQ19MRU5cXHQyMFxcbiAgNDM6XFx0I2RlZmluZSBNUFRDUF9STV9JRFNfTUFYXFx0OFxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI4OjExLjYxNDM1NjU0OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTE0MTc4MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJ3MgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2tpbmcgdGhpcyBgbWVtc2V0YCBjYWxsOiBgbWVtc2V0KFx1MDAyNm9wdHMtXHUwMDNlZXh0X2NvcHkuZmxhZ3MsIDAsIHNpemVvZihvcHRzLVx1MDAzZWV4dF9jb3B5LmZsYWdzKSk7YC4gIFJpZ2h0LCB0aGF0IHplcm9zIG91dCB0aGUgZmxhZ3Mgd2l0aGluIGBvcHRzLVx1MDAzZWV4dF9jb3B5YCwgYW5kIGltcG9ydGFudGx5LCB0aGF0IGluY2x1ZGVzIGB1c2VfbWFwYC4gU28sIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgY2FsbCwgYGV4dC1cdTAwM2V1c2VfbWFwYCBpcyBlZmZlY3RpdmVseSB6ZXJvLlxuXG5UaGVuLCBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gIGdldHMgY2FsbGVkLiBJbnNpZGUgdGhhdCBmdW5jdGlvbiwgaXQgc2VlcyB0aGF0IGAhZXh0LVx1MDAzZXVzZV9tYXBgICh3aGljaCB3ZSBrbm93IGlzIHRydWUgY3VycmVudGx5KS4gVGhhdCB0cmlnZ2VycyBhIHNwZWNpZmljIGJsb2NrIG9mIGNvZGUgdGhhdCBkb2VzIHNvbWUgY3JpdGljYWwgc2V0dXAuIEl0IHNldHM6XG5cbmBgYGNcblx0XHRleHQtXHUwMDNlZGF0YV9maW4gPSAxO1xuXHRcdGV4dC1cdTAwM2V1c2VfbWFwID0gMTtcblx0XHRleHQtXHUwMDNlZHNuNjQgPSAxO1xuXHRcdGV4dC1cdTAwM2VkYXRhX3NlcSA9IGRhdGFfZmluX3R4X3NlcTtcblx0XHRleHQtXHUwMDNlc3ViZmxvd19zZXEgPSAwO1xuXHRcdGV4dC1cdTAwM2VkYXRhX2xlbiA9IDE7XG5cdFx0ZXh0LVx1MDAzZWNzdW0gPSAwO1xuYGBgXG5cbkludGVyZXN0aW5nLi4uIGJlZm9yZSB0aGUgcGF0Y2gsIGBleHQtXHUwMDNlY3N1bWAgd2Fzbid0IGluaXRpYWxpemVkIGluIHRoaXMgc3BlY2lmaWMgYnJhbmNoLiAgVGhhdCdzIGEgZGVmaW5pdGUgdnVsbmVyYWJpbGl0eS5cblxuTm93LCBJJ20ganVzdCBtYWtpbmcgc3VyZSBJIGhhdmUgbXkgdmFyaWFibGVzIHN0cmFpZ2h0LiAgYG9wdHMtXHUwMDNlZXh0X2NvcHlgIGlzIGEgbG9jYWwgdmFyaWFibGUgd2l0aGluIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc2AsIGlzbid0IGl0PyBObywgd2FpdCBhIG1pbnV0ZSwgYG9wdHNgIGlzIHBhc3NlZCBhcyBhIHBvaW50ZXIgKnRvKiBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3NgLiBJIG5lZWQgdG8gYmFjayB1cCBhbmQgc2VlIGhvdyB0aGF0IHBvaW50ZXIgaXMgZ2V0dGluZyBjcmVhdGVkL3BvcHVsYXRlZC4gIExldCBtZSB0cmFjZSB3aGVyZSBgb3B0c2Agb3JpZ2luYXRlcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI4OjE4LjUyODUzNzYzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgwMDA0OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avb3B0aW9ucy5jPTUxMz1zdGF0aWMgYm9vbCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX21wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTI2LVxcdCAqIHRlbGwgdGhlIGNhbGxlciB0byBkZWZlciB0aGUgZXN0aW1hdGUgdG9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjUyNzpcXHQgKiBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcygpLCB3aGljaCB3aWxsIHJlc2VydmUgZW5vdWdoIHNwYWNlLlxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNTI4LVxcdCAqL1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz01OTc9c3RhdGljIHZvaWQgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNjI1LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6NjI2OnN0YXRpYyBib29sIG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTYyNy1cXHRcXHRcXHRcXHRcXHQgIGJvb2wgc25kX2RhdGFfZmluX2VuYWJsZSwgaW50ICpzaXplLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz04NzI9aW50IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy05MDctXFx0XFx0cmV0ID0gdHJ1ZTtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjkwODpcXHRlbHNlIGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzcyhzaywgc2tiLCBzbmRfZGF0YV9maW4sIFxcdTAwMjZvcHRfc2l6ZSwgb3B0cykpIHtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTkwOS1cXHRcXHRpbnQgbXBfZmFpbF9zaXplO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyODoxOC43MjY1NDMxMzNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMyMTY4NDU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvciBzdGF0ZSBvZiBNdWx0aXBhdGggVENQIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZXN0YWJsaXNoZWQuIEkgZXhwZWN0IHRoaXMgbGlrZWx5IGludm9sdmVzIGxvb2tpbmcgYXQgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBjYXBhYmlsaXRpZXMgdGhhdCBoYXZlIGJlZW4gbmVnb3RpYXRlZCBhbmQgYXJlIGN1cnJlbnRseSBpbiB1c2UgZm9yIHRob3NlIHNwZWNpZmljIGNvbm5lY3Rpb25zLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgZGF0YSBvbiB0aGluZ3MgbGlrZSB0aGUgTVBUQ1AgdmVyc2lvbiBuZWdvdGlhdGVkLCB0aGUgc3ViZmxvdyBwcmlvcml0aWVzLCBwb3NzaWJseSB0aGUgdXNlIG9mIHNwZWNpZmljIGV4dGVuc2lvbnMsIG9yIGFueSBjb25uZWN0aW9uLXNwZWNpZmljIHBhcmFtZXRlcnMgdGhhdCBhcmUgYWN0aXZlbHkgaW5mbHVlbmNpbmcgdGhlIGVzdGFibGlzaGVkIGZsb3dzLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byBob3cgTVBUQ1AgaXMgKmFjdHVhbGx5KiBiZWhhdmluZyBpbiBhIGxpdmUgZW52aXJvbm1lbnQsIG5vdCBqdXN0IHdoYXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqc2hvdWxkKiBiZS4gVGhpcyBpcyB0aGUgYmVkcm9jayB0byB1bmRlcnN0YW5kIGFuZCB0aGVuLCBtYXliZSwgZGVidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjg6MjQuMDQ4MjMwODY5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3Avb3B0aW9ucy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MjpcXHRpbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIDg3MzpcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcXG4gODc0OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG4gODc1OlxcdHtcXG4gODc2OlxcdFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XFxuIDg3NzpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc3ViZmxvdy1cXHUwMDNlY29ubik7XFxuIDg3ODpcXHRcXHRpbnQgdG90YWxfc2l6ZSA9IDA7XFxuIDg3OTpcXHRcXHRib29sIHNuZF9kYXRhX2ZpbjtcXG4gODgwOlxcdFxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuIDg4MTpcXHRcXHRpbnQgb3B0X3NpemUgPSAwO1xcbiA4ODI6XFx0XFxuIDg4MzpcXHRcXHRvcHRzLVxcdTAwM2VzdWJvcHRpb25zID0gMDtcXG4gODg0OlxcdFxcbiA4ODU6XFx0XFx0LyogRm9yY2UgbGF0ZXIgbXB0Y3Bfd3JpdGVfb3B0aW9ucygpLCBidXQgZG8gbm90IHVzZSBhbnkgYWN0dWFsXFxuIDg4NjpcXHRcXHQgKiBvcHRpb24gc3BhY2UuXFxuIDg4NzpcXHRcXHQgKi9cXG4gODg4OlxcdFxcdGlmICh1bmxpa2VseShfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykgXFx1MDAyNlxcdTAwMjYgIW1wdGNwX2NoZWNrX2luZmluaXRlX21hcChza2IpKSlcXG4gODg5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4OTA6XFx0XFxuIDg5MTpcXHRcXHRpZiAodW5saWtlbHkoc2tiIFxcdTAwMjZcXHUwMDI2IFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjYgVENQSERSX1JTVCkpIHtcXG4gODkyOlxcdFxcdFxcdGlmIChtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Zhc3RjbG9zZShzaywgXFx1MDAyNm9wdF9zaXplLCByZW1haW5pbmcsIG9wdHMpIHx8XFxuIDg5MzpcXHRcXHRcXHQgICAgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcF9mYWlsKHNrLCBcXHUwMDI2b3B0X3NpemUsIHJlbWFpbmluZywgb3B0cykpIHtcXG4gODk0OlxcdFxcdFxcdFxcdHRvdGFsX3NpemUgKz0gb3B0X3NpemU7XFxuIDg5NTpcXHRcXHRcXHRcXHRyZW1haW5pbmcgLT0gb3B0X3NpemU7XFxuIDg5NjpcXHRcXHRcXHR9XFxuIDg5NzpcXHRcXHRcXHQvKiBNUF9SU1QgY2FuIGJlIHVzZWQgd2l0aCBNUF9GQVNUQ0xPU0UgYW5kIE1QX0ZBSUwgaWYgdGhlcmUgaXMgcm9vbSAqL1xcbiA4OTg6XFx0XFx0XFx0aWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfcnN0KHNrLCBcXHUwMDI2b3B0X3NpemUsIHJlbWFpbmluZywgb3B0cykpIHtcXG4gODk5OlxcdFxcdFxcdFxcdHRvdGFsX3NpemUgKz0gb3B0X3NpemU7XFxuIDkwMDpcXHRcXHRcXHRcXHRyZW1haW5pbmcgLT0gb3B0X3NpemU7XFxuIDkwMTpcXHRcXHRcXHR9XFxuIDkwMjpcXHRcXHRcXHRyZXR1cm4gdG90YWxfc2l6ZTtcXG4gOTAzOlxcdFxcdH1cXG4gOTA0OlxcdFxcbiA5MDU6XFx0XFx0c25kX2RhdGFfZmluID0gbXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spO1xcbiA5MDY6XFx0XFx0aWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfbXAoc2ssIHNrYiwgc25kX2RhdGFfZmluLCBcXHUwMDI2b3B0X3NpemUsIG9wdHMpKVxcbiA5MDc6XFx0XFx0XFx0cmV0ID0gdHJ1ZTtcXG4gOTA4OlxcdFxcdGVsc2UgaWYgKG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNfZHNzKHNrLCBza2IsIHNuZF9kYXRhX2ZpbiwgXFx1MDAyNm9wdF9zaXplLCBvcHRzKSkge1xcbiA5MDk6XFx0XFx0XFx0aW50IG1wX2ZhaWxfc2l6ZTtcXG4gOTEwOlxcdFxcbiA5MTE6XFx0XFx0XFx0cmV0ID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjg6MjQuMDQ4Mzk4NDI5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NjcxNjEwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk15IExpbmUgb2YgSW5xdWlyeTogVHJhY2luZyB0aGUgT3JpZ2lucyBvZiBgb3B0c2AqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIEkndmUgZ290IGBvcHRzYCBoZXJlLCBwYXNzZWQgZnJvbSB0aGUgYG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgIGZ1bmN0aW9uLiBNeSBwcmltYXJ5IHF1ZXN0aW9uIG5vdyBpczogV2hlcmUgZXhhY3RseSBkb2VzIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYCBnZXQgaW52b2tlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgc3RhY2ssIHRoZSBleGVjdXRpb24gZmxvdywgdG8gcmVhbGx5IGdyYXNwIHRoZSBjb250ZXh0IGluIHdoaWNoIGBvcHRzYCBpcyBiZWluZyBnZW5lcmF0ZWQgYW5kIHVzZWQuIEtub3dpbmcgdGhlIGNhbGxlciBpcyBhYnNvbHV0ZWx5IGNydWNpYWwuIElzIGl0IGhhcHBlbmluZyBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cD8gRHVyaW5nIGEgc3BlY2lmaWMgZXZlbnQgaGFuZGxpbmcgcGhhc2U/IFRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwcm9wZXJ0aWVzIGFuZCBwb3RlbnRpYWwgbGltaXRhdGlvbnMuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gYW5kIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk5MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjg6MjkuNjE1NTY0NDk1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQyOTA0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX291dHB1dC5jPTExNTE9c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE5MS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTE5MjpcXHRcXHRvcHRfc2l6ZSA9IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgcmVtYWluaW5nLCBoYXNfdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExOTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2b3B0cy1cXHUwMDNlbXB0Y3ApO1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz04NTA9c3RhdGljIGJvb2wgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19tcF9mYWlsKHN0cnVjdCBzb2NrICpzaywgaW50ICpzaXplLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy04NzEtXFxubmV0L21wdGNwL29wdGlvbnMuYzo4NzI6aW50IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9tcHRjcC9vcHRpb25zLmMtODczLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCByZW1haW5pbmcsIGJvb2wgaGFzX3RzLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0xNDcyPXZvaWQgbXB0Y3Bfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE0OTctXFx0ICpcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE0OTg6XFx0ICogVGhlIHNhbWUgYXBwbGllcyBpbiBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKCkgZnVuY3Rpb24uXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNDk5LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyODoyOS44OTk4NjIxMDRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIxOTM5MzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBUQ1AgRXN0YWJsaXNoZWQgT3B0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBUQ1AgZXN0YWJsaXNoZWQgb3B0aW9ucyBhcmUgaGFuZGxlZC4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIHRoZSBgbmV0L2lwdjQvdGNwX291dHB1dC5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBgdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBrZXJuZWwgbGlrZWx5IGNvbnN0cnVjdHMgYW5kIGFwcGxpZXMgdGhvc2UgY3J1Y2lhbCBvcHRpb25zIGR1cmluZyBkYXRhIHRyYW5zbWlzc2lvbiB3aGVuIGEgVENQIGNvbm5lY3Rpb24gaXMgaW4gdGhlIGVzdGFibGlzaGVkIHN0YXRlLiBJJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGhvbGQgdGhlIGxvZ2ljIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZSB3aW5kb3cgc2NhbGluZywgdGltZXN0YW1wcywgc2VsZWN0aXZlIGFja25vd2xlZGdtZW50cyAoU0FDS3MpLCBhbmQgcG9zc2libHkgZXZlbiBtb3JlIG9ic2N1cmUgb3B0aW9ucyBiYXNlZCBvbiB0aGUgVENQIHN0YXRlLiBJJ20ga2VlbiB0byBkaXNzZWN0IHRoZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBsb2dpYyBmbG93LCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjg6MzYuMTE5MjU4NTQzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3Bfb3V0cHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1MTpcXHRzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMTUyOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxuMTE1MzpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX2tleSAqa2V5KVxcbjExNTQ6XFx0e1xcbjExNTU6XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuMTE1NjpcXHRcXHR1bnNpZ25lZCBpbnQgc2l6ZSA9IDA7XFxuMTE1NzpcXHRcXHR1bnNpZ25lZCBpbnQgZWZmX3NhY2tzO1xcbjExNTg6XFx0XFxuMTE1OTpcXHRcXHRvcHRzLVxcdTAwM2VvcHRpb25zID0gMDtcXG4xMTYwOlxcdFxcbjExNjE6XFx0XFx0LyogQmV0dGVyIHRoYW4gc3dpdGNoIChrZXkudHlwZSkgYXMgaXQgaGFzIHN0YXRpYyBicmFuY2hlcyAqL1xcbjExNjI6XFx0XFx0aWYgKHRjcF9rZXlfaXNfbWQ1KGtleSkpIHtcXG4xMTYzOlxcdFxcdFxcdG9wdHMtXFx1MDAzZW9wdGlvbnMgfD0gT1BUSU9OX01ENTtcXG4xMTY0OlxcdFxcdFxcdHNpemUgKz0gVENQT0xFTl9NRDVTSUdfQUxJR05FRDtcXG4xMTY1OlxcdFxcdH0gZWxzZSBpZiAodGNwX2tleV9pc19hbyhrZXkpKSB7XFxuMTE2NjpcXHRcXHRcXHRvcHRzLVxcdTAwM2VvcHRpb25zIHw9IE9QVElPTl9BTztcXG4xMTY3OlxcdFxcdFxcdHNpemUgKz0gdGNwX2FvX2xlbl9hbGlnbmVkKGtleS1cXHUwMDNlYW9fa2V5KTtcXG4xMTY4OlxcdFxcdH1cXG4xMTY5OlxcdFxcbjExNzA6XFx0XFx0aWYgKGxpa2VseSh0cC1cXHUwMDNlcnhfb3B0LnRzdGFtcF9vaykpIHtcXG4xMTcxOlxcdFxcdFxcdG9wdHMtXFx1MDAzZW9wdGlvbnMgfD0gT1BUSU9OX1RTO1xcbjExNzI6XFx0XFx0XFx0b3B0cy1cXHUwMDNldHN2YWwgPSBza2IgPyB0Y3Bfc2tiX3RpbWVzdGFtcF90cyh0cC1cXHUwMDNldGNwX3VzZWNfdHMsIHNrYikgK1xcbjExNzM6XFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXRzb2Zmc2V0IDogMDtcXG4xMTc0OlxcdFxcdFxcdG9wdHMtXFx1MDAzZXRzZWNyID0gdHAtXFx1MDAzZXJ4X29wdC50c19yZWNlbnQ7XFxuMTE3NTpcXHRcXHRcXHRzaXplICs9IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7XFxuMTE3NjpcXHRcXHR9XFxuMTE3NzpcXHRcXG4xMTc4OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUClcXG4xMTc5OlxcdFxcdC8qIE1QVENQIG9wdGlvbnMgaGF2ZSBwcmVjZWRlbmNlIG92ZXIgU0FDSyBmb3IgdGhlIGxpbWl0ZWQgVENQXFxuMTE4MDpcXHRcXHQgKiBvcHRpb24gc3BhY2UgYmVjYXVzZSBhIE1QVENQIGNvbm5lY3Rpb24gd291bGQgYmUgZm9yY2VkIHRvXFxuMTE4MTpcXHRcXHQgKiBmYWxsIGJhY2sgdG8gcmVndWxhciBUQ1AgaWYgYSByZXF1aXJlZCBtdWx0aXBhdGggb3B0aW9uIGlzXFxuMTE4MjpcXHRcXHQgKiBtaXNzaW5nLiBTQUNLIHN0aWxsIGdldHMgYSBjaGFuY2UgdG8gdXNlIHdoYXRldmVyIHNwYWNlIGlzXFxuMTE4MzpcXHRcXHQgKiBsZWZ0LlxcbjExODQ6XFx0XFx0ICovXFxuMTE4NTpcXHRcXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKSB7XFxuMTE4NjpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVtYWluaW5nID0gTUFYX1RDUF9PUFRJT05fU1BBQ0UgLSBzaXplO1xcbjExODc6XFx0XFx0XFx0Ym9vbCBoYXNfdHMgPSBvcHRzLVxcdTAwM2VvcHRpb25zIFxcdTAwMjYgT1BUSU9OX1RTO1xcbjExODg6XFx0XFx0XFx0aW50IG9wdF9zaXplO1xcbjExODk6XFx0XFxuMTE5MDpcXHRcXHRcXHRvcHRzLVxcdTAwM2VtcHRjcC5kcm9wX3RzID0gMDtcXG4xMTkxOlxcdFxcbjExOTI6XFx0XFx0XFx0b3B0X3NpemUgPSBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHNrLCBza2IsIHJlbWFpbmluZywgaGFzX3RzLFxcbjExOTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2b3B0cy1cXHUwMDNlbXB0Y3ApO1xcbjExOTQ6XFx0XFx0XFx0aWYgKG9wdF9zaXplIFxcdTAwM2U9IDApIHtcXG4xMTk1OlxcdFxcdFxcdFxcdG9wdHMtXFx1MDAzZW9wdGlvbnMgfD0gT1BUSU9OX01QVENQO1xcbjExOTY6XFx0XFx0XFx0XFx0c2l6ZSArPSBvcHRfc2l6ZTtcXG4xMTk3OlxcdFxcbjExOTg6XFx0XFx0XFx0XFx0aWYgKG9wdHMtXFx1MDAzZW1wdGNwLmRyb3BfdHMpXFxuMTE5OTpcXHRcXHRcXHRcXHRcXHRvcHRzLVxcdTAwM2VvcHRpb25zIFxcdTAwMjY9IH5PUFRJT05fVFM7XFxuMTIwMDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI4OjM2LjExOTY5MDcwM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEwODE2MTM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBUQ1AgT3V0cHV0IE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBgb3B0c2AgaGVyZSBpcyBwb2ludGluZyB0byBhIGBzdHJ1Y3QgdGNwX291dF9vcHRpb25zYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHN0cnVjdHVyZSBjb250YWlucy4gSXQncyBsaWtlbHkgdGhhdCB0aGlzIHN0cnVjdCBkZWZpbmVzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgVENQIHNlZ21lbnQgYmVpbmcgc2VudCBvdXQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRjcF9vdXRfb3B0aW9uc2AgdG8ga25vdyB3aGF0IHNwZWNpZmljIHNldHRpbmdzIEknbSBkZWFsaW5nIHdpdGguIFRoaW5ncyBsaWtlIHdpbmRvdyBzY2FsaW5nLCB0aW1lc3RhbXBzLCBzZWxlY3RpdmUgYWNrbm93bGVkZ2VtZW50cywgYW5kIG1heGltdW0gc2VnbWVudCBzaXplIGFkanVzdG1lbnRzIHByb2JhYmx5IGxpdmUgaW4gdGhpcyBzdHJ1Y3QsIGJ1dCBJIG5lZWQgdGhlIGZ1bGwgZGVmaW5pdGlvbiB0byBiZSBjZXJ0YWluLiBHZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydCBvZiB0aGUgVENQIG91dHB1dCBwcm9jZXNzIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjg6NDcuMjI3ODU0NDU3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwMDgzNzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI4OjQ3LjMyODg2OTc2M1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI5MjM3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBqdXN0IHBsYXllZCBvdXQ6XG5cbioqRGl2aW5nIGludG8gVENQIE91dHB1dCBPcHRpb25zKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBvdXRnb2luZyBUQ1Agb3B0aW9ucyBhcmUgaGFuZGxlZC4gVGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQsIGFzIGFsd2F5cywgaXMgZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4gTGV0J3Mgc2VlLi4uSSdtIHRoaW5raW5nLCBcIiBgc3RydWN0IHRjcF9vdXRfb3B0aW9uc2AgXCIuIFRoYXQgc2hvdWxkIGJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmUgSSBuZWVkIHRvIHRyYWNrIGRvd24uIEl0IHdpbGwgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBmaWVsZHMgYW5kIGxvZ2ljIHJlbGF0ZWQgdG8gb3V0Z29pbmcgVENQIG9wdGlvbnMuIEknbGwgc2VhcmNoIGZvciB0aGF0IHNwZWNpZmljIHN0cnVjdHVyZSBkZWZpbml0aW9uIGFuZCBzZWUgd2hlcmUgaXQncyB1c2VkLiBIb3BlZnVsbHksIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgbWVjaGFuaXNtcyBlbXBsb3llZCBmb3IgY29uc3RydWN0aW5nLCBmb3JtYXR0aW5nLCBhbmQgaW5zZXJ0aW5nIHRoZXNlIG9wdGlvbnMgaW50byB0aGUgb3V0Z29pbmcgVENQIHNlZ21lbnRzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiB0aGluZ3MgbGlrZSBNU1MsIHRpbWVzdGFtcHMsIFNBQ0sgb3B0aW9ucywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhpcyBzZWFyY2ggaXMgdGhlIGxhdW5jaCBwb2ludCwgYW5kIHNob3VsZCBsZWFkIG1lIGRvd24gdGhlIHJhYmJpdCBob2xlIHRvIGZpbmQgdGhlIHNwZWNpZmljIGZpbGVzIGFuZCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGNyZWF0aW9uIG9mIG91dGJvdW5kIHBhY2tldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTAyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjg6NTIuMDU4MTEwODczWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE4MTY2NTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI4OjUyLjI3OTkzNTM3NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzgzMzk4MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFRDUCBIZWFkZXIgRGVmaW5pdGlvbioqXG5cbkhtbSwgSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgdGNwX291dF9vcHRpb25zYCwgYW5kIEkgaGF2ZSBhIHNuZWFraW5nIHN1c3BpY2lvbiBhYm91dCB3aGVyZSBpdCBtaWdodCBiZS4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGF0IGl0IGxpdmVzIHdpdGhpbiB0aGUgTGludXgga2VybmVsJ3MgVENQIGhlYWRlcnMsIHNwZWNpZmljYWxseSBpbiBgaW5jbHVkZS9uZXQvdGNwLmhgLiBIb3dldmVyLCBJJ20gYWxzbyB3b25kZXJpbmcgaWYgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgdmFyaWF0aW9uIGluIHRoZSBuYW1pbmcgY29udmVudGlvbi4gQ291bGQgaXQgYmUgZGVmaW5lZCAqd2l0aG91dCogdGhlIHNwYWNlIGJldHdlZW4gdGhlIGBzdHJ1Y3RgIGtleXdvcmQgYW5kIHRoZSBzdHJ1Y3R1cmUgbmFtZSwgcGVyaGFwcyBhcyBgc3RydWN0dGNwX291dF9vcHRpb25zYD8gSXQncyBhIGxvbmcgc2hvdCwgYnV0IHNvbWV0aW1lcyB0aGVzZSB0aGluZ3MgaGF2ZSBzdWJ0bGUgZ290Y2hhcywgYW5kIGl0J3Mgd29ydGggYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhhdCdzIHRoZSBjdWxwcml0IGlmIEknbSBoYXZpbmcgdHJvdWJsZSBsb2NhdGluZyB0aGUgZGVjbGFyYXRpb24gaW4gdGhlIHN0YW5kYXJkIHdheS4gV29ydGggbm90aW5nLCB0aGlzIGtpbmQgb2YgZGVmaW5pdGlvbiBlcnJvciB3b3VsZG4ndCBiZSB0ZXJyaWJseSB1bmNvbW1vbiBhY3Jvc3MgdmVyc2lvbnMgb2YgYSBzeXN0ZW0sIG9yIGV2ZW4gZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyODo1OC42NjMzMzY0MzhaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTYyODI5MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHRjcF9vdXRfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjg6NTguODgyOTcyODc5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4Njg2MTMyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVENQIE91dHB1dCBNb2R1bGUgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBUQ1Agb3V0cHV0IHBhdGguIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0L2lwdjRgIGRpcmVjdG9yeSwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIElQdjQuIFRoZSBgdGNwX291dHB1dC5jYCBmaWxlIGZlZWxzIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIGNvcmUgbG9naWMgZm9yIGhvdyBUQ1Agc2VnbWVudHMgYXJlIGNvbnN0cnVjdGVkLCB0cmFuc21pdHRlZCwgYW5kIHJldHJhbnNtaXR0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZSBjb25nZXN0aW9uIGNvbnRyb2wsIHNlcXVlbmNlIG51bWJlciBtYW5hZ2VtZW50LCB3aW5kb3dpbmcsIGFuZCBwb3RlbnRpYWxseSBldmVuIHRoaW5ncyByZWxhdGVkIHRvIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyBvciBvcHRpb25zIGhhbmRsaW5nLCBhbGwgd2l0aGluIHRoZSBjb250ZXh0IG9mIHNlbmRpbmcgZGF0YSBvdXQgb250byB0aGUgbmV0d29yay4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuZCBtb2RpZnlpbmcgdGhlIHJlbGV2YW50IHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDQzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjk6MDQuNzUxNTkwMjkzWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQzNjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGNwX291dF9vcHRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9vdXRwdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDExPXN0YXRpYyB2b2lkIHNtY19vcHRpb25zX3dyaXRlKF9fYmUzMiAqcHRyLCB1MTYgKm9wdGlvbnMpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDI1LVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MjY6c3RydWN0IHRjcF9vdXRfb3B0aW9ucyB7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQyNy1cXHQvKiBGb2xsb3dpbmcgZ3JvdXAgaXMgY2xlYXJlZCBpbiBfX3RjcF90cmFuc21pdF9za2IoKSAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQ0NT1zdGF0aWMgdm9pZCBtcHRjcF9vcHRpb25zX3dyaXRlKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0cixcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQ2LVxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDgte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQ2OT1zdGF0aWMgdTMyIGJwZl9za29wc19oZHJfb3B0X2xlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDcyLVxcdFxcdFxcdFxcdCBlbnVtIHRjcF9zeW5hY2tfdHlwZSBzeW5hY2tfdHlwZSxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDczOlxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NzQtXFx0XFx0XFx0XFx0IHUzMiByZW1haW5pbmcpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTMzPXN0YXRpYyB2b2lkIGJwZl9za29wc193cml0ZV9oZHJfb3B0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01MzYtXFx0XFx0XFx0XFx0ICAgIGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo1Mzc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTUzOC17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTc4PXN0YXRpYyB1MzIgYnBmX3Nrb3BzX2hkcl9vcHRfbGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01ODEtXFx0XFx0XFx0XFx0IGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo1ODI6XFx0XFx0XFx0XFx0IHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTU4My1cXHRcXHRcXHRcXHQgdTMyIHJlbWFpbmluZylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz01ODg9c3RhdGljIHZvaWQgYnBmX3Nrb3BzX3dyaXRlX2hkcl9vcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTU5MS1cXHRcXHRcXHRcXHQgICAgZW51bSB0Y3Bfc3luYWNrX3R5cGUgc3luYWNrX3R5cGUsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjU5MjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTkzLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz01OTc9c3RhdGljIF9fYmUzMiAqcHJvY2Vzc190Y3BfYW9fb3B0aW9ucyhzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01OTgtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRjcHJzayxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTk5OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTYwMC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNwX2tleSAqa2V5LCBfX2JlMzIgKnB0cilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz02NTM9c3RhdGljIHZvaWQgdGNwX29wdGlvbnNfd3JpdGUoc3RydWN0IHRjcGhkciAqdGgsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTY1NC1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdGNwcnNrLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo2NTU6XFx0XFx0XFx0ICAgICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNjU2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y3Bfa2V5ICprZXkpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODMxPXN0YXRpYyB2b2lkIHNtY19zZXRfb3B0aW9uKHN0cnVjdCB0Y3Bfc29jayAqdHAsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjgzMjpcXHRcXHRcXHQgICBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04MzMtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50ICpyZW1haW5pbmcpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODQ4PXN0YXRpYyB2b2lkIHNtY19zZXRfb3B0aW9uX2NvbmQoY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODQ5LVxcdFxcdFxcdFxcdHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODUwOlxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg1MS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgKnJlbWFpbmluZylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz04NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc2V0X29wdGlvbl9jb25kKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODY3OlxcdFxcdFxcdFxcdCAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODY4LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50ICpyZW1haW5pbmcpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODgxLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4ODI6c3RhdGljIHUzMiB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcoc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODgzLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05MDItICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjkwMzpzdGF0aWMgaW50IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24oc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cywgaW50IHJlcXVpcmVkLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05MDQtXFx0XFx0XFx0XFx0ICBpbnQgcmVtYWluaW5nKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTk1OT1zdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5fb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjk2MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05NjEtXFx0XFx0XFx0XFx0c3RydWN0IHRjcF9rZXkgKmtleSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xMDYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDYzLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbXNzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMDY0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDY1LVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgdGNwX2tleSAqa2V5LFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTExNTE9c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjExNTI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE1My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX2tleSAqa2V5KVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTE1MzY9c3RhdGljIGludCBfX3RjcF90cmFuc21pdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE1NDItXFx0c3RydWN0IHRjcF9za2JfY2IgKnRjYjtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTU0MzpcXHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zIG9wdHM7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE1NDQtXFx0dW5zaWduZWQgaW50IHRjcF9vcHRpb25zX3NpemUsIHRjcF9oZWFkZXJfc2l6ZTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMTAzPXVuc2lnbmVkIGludCB0Y3BfY3VycmVudF9tc3Moc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIxMDgtXFx0dW5zaWduZWQgaW50IGhlYWRlcl9sZW47XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIxMDk6XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyBvcHRzO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMTEwLVxcdHN0cnVjdCB0Y3Bfa2V5IGtleTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zOTMxPXN0cnVjdCBza19idWZmICp0Y3BfbWFrZV9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkzOC1cXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzkzOTpcXHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zIG9wdHM7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5NDAtXFx0c3RydWN0IHRjcF9rZXkga2V5ID0ge307XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI5OjA0LjgzMDAzMTE5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTU4MjEyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBUQ1AgT3V0cHV0IE9wdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgb3B0cztgLiBJdCdzIGRlZmluZWQgYXMgYSBsb2NhbCB2YXJpYWJsZSB3aXRoaW4gYF9fdGNwX3RyYW5zbWl0X3NrYmAsIGFuZCBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBob3cgaXQncyBpbml0aWFsaXplZCwgb3IgcmF0aGVyLCBpZiBpdCdzIGluaXRpYWxpemVkICphdCBhbGwqLiBJIG5lZWQgdG8gYmUgc3VyZS4gVGhpcyBpcyBjbGFzc2ljIEMsIGFmdGVyIGFsbC4gVW5pbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGEgbWluZWZpZWxkLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBzbyBsZXQgbWUganVzdCBwb3Agb3ZlciB0byBgbmV0L2lwdjQvdGNwX291dHB1dC5jYCBhbmQgdGFrZSBhIHBlZWsgYXQgYF9fdGNwX3RyYW5zbWl0X3NrYmAgdG8gY29uZmlybSB0aGlzLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgcGFzc2luZyBnYXJiYWdlIGFyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyOTowOC42ODU4NTYxNDVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9vdXRwdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTM2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTM2OlxcdHN0YXRpYyBpbnQgX190Y3BfdHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNTM3OlxcdFxcdFxcdFxcdCAgICAgIGludCBjbG9uZV9pdCwgZ2ZwX3QgZ2ZwX21hc2ssIHUzMiByY3Zfbnh0KVxcbjE1Mzg6XFx0e1xcbjE1Mzk6XFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbjE1NDA6XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcXG4xNTQxOlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHA7XFxuMTU0MjpcXHRcXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNiO1xcbjE1NDM6XFx0XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyBvcHRzO1xcbjE1NDQ6XFx0XFx0dW5zaWduZWQgaW50IHRjcF9vcHRpb25zX3NpemUsIHRjcF9oZWFkZXJfc2l6ZTtcXG4xNTQ1OlxcdFxcdHN0cnVjdCBza19idWZmICpvc2tiID0gTlVMTDtcXG4xNTQ2OlxcdFxcdHN0cnVjdCB0Y3Bfa2V5IGtleTtcXG4xNTQ3OlxcdFxcdHN0cnVjdCB0Y3BoZHIgKnRoO1xcbjE1NDg6XFx0XFx0dTY0IHByaW9yX3dzdGFtcDtcXG4xNTQ5OlxcdFxcdGludCBlcnI7XFxuMTU1MDpcXHRcXG4xNTUxOlxcdFxcdEJVR19PTighc2tiIHx8ICF0Y3Bfc2tiX3Bjb3VudChza2IpKTtcXG4xNTUyOlxcdFxcdHRwID0gdGNwX3NrKHNrKTtcXG4xNTUzOlxcdFxcdHByaW9yX3dzdGFtcCA9IHRwLVxcdTAwM2V0Y3Bfd3N0YW1wX25zO1xcbjE1NTQ6XFx0XFx0dHAtXFx1MDAzZXRjcF93c3RhbXBfbnMgPSBtYXgodHAtXFx1MDAzZXRjcF93c3RhbXBfbnMsIHRwLVxcdTAwM2V0Y3BfY2xvY2tfY2FjaGUpO1xcbjE1NTU6XFx0XFx0c2tiX3NldF9kZWxpdmVyeV90aW1lKHNrYiwgdHAtXFx1MDAzZXRjcF93c3RhbXBfbnMsIFNLQl9DTE9DS19NT05PVE9OSUMpO1xcbjE1NTY6XFx0XFx0aWYgKGNsb25lX2l0KSB7XFxuMTU1NzpcXHRcXHRcXHRvc2tiID0gc2tiO1xcbjE1NTg6XFx0XFxuMTU1OTpcXHRcXHRcXHR0Y3Bfc2tiX3Rzb3J0ZWRfc2F2ZShvc2tiKSB7XFxuMTU2MDpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiX2Nsb25lZChvc2tiKSkpXFxuMTU2MTpcXHRcXHRcXHRcXHRcXHRza2IgPSBwc2tiX2NvcHkob3NrYiwgZ2ZwX21hc2spO1xcbjE1NjI6XFx0XFx0XFx0XFx0ZWxzZVxcbjE1NjM6XFx0XFx0XFx0XFx0XFx0c2tiID0gc2tiX2Nsb25lKG9za2IsIGdmcF9tYXNrKTtcXG4xNTY0OlxcdFxcdFxcdH0gdGNwX3NrYl90c29ydGVkX3Jlc3RvcmUob3NrYik7XFxuMTU2NTpcXHRcXG4xNTY2OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4xNTY3OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4xNTY4OlxcdFxcdFxcdC8qIHJldHJhbnNtaXQgc2ticyBtaWdodCBoYXZlIGEgbm9uIHplcm8gdmFsdWUgaW4gc2tiLVxcdTAwM2VkZXZcXG4xNTY5OlxcdFxcdFxcdCAqIGJlY2F1c2Ugc2tiLVxcdTAwM2VkZXYgaXMgYWxpYXNlZCB3aXRoIHNrYi1cXHUwMDNlcmJub2RlLnJiX2xlZnRcXG4xNTcwOlxcdFxcdFxcdCAqL1xcbjE1NzE6XFx0XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBOVUxMO1xcbjE1NzI6XFx0XFx0fVxcbjE1NzM6XFx0XFxuMTU3NDpcXHRcXHRpbmV0ID0gaW5ldF9zayhzayk7XFxuMTU3NTpcXHRcXHR0Y2IgPSBUQ1BfU0tCX0NCKHNrYik7XFxuMTU3NjpcXHRcXHRtZW1zZXQoXFx1MDAyNm9wdHMuY2xlYXJlZCwgMCwgc2l6ZW9mKG9wdHMuY2xlYXJlZCkpO1xcbjE1Nzc6XFx0XFxuMTU3ODpcXHRcXHR0Y3BfZ2V0X2N1cnJlbnRfa2V5KHNrLCBcXHUwMDI2a2V5KTtcXG4xNTc5OlxcdFxcdGlmICh1bmxpa2VseSh0Y2ItXFx1MDAzZXRjcF9mbGFncyBcXHUwMDI2IFRDUEhEUl9TWU4pKSB7XFxuMTU4MDpcXHRcXHRcXHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX3N5bl9vcHRpb25zKHNrLCBza2IsIFxcdTAwMjZvcHRzLCBcXHUwMDI2a2V5KTtcXG4xNTgxOlxcdFxcdH0gZWxzZSB7XFxuMTU4MjpcXHRcXHRcXHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgXFx1MDAyNm9wdHMsIFxcdTAwMjZrZXkpO1xcbjE1ODM6XFx0XFx0XFx0LyogRm9yY2UgYSBQU0ggZmxhZyBvbiBhbGwgKEdTTykgcGFja2V0cyB0byBleHBlZGl0ZSBHUk8gZmx1c2hcXG4xNTg0OlxcdFxcdFxcdCAqIGF0IHJlY2VpdmVyIDogVGhpcyBzbGlnaHRseSBpbXByb3ZlIEdSTyBwZXJmb3JtYW5jZS5cXG4xNTg1OlxcdFxcdFxcdCAqIE5vdGUgdGhhdCB3ZSBkbyBub3QgZm9yY2UgdGhlIFBTSCBmbGFnIGZvciBub24gR1NPIHBhY2tldHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI5OjA4LjY4NjExMTAyNVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDE4MjgwMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gQy9DKysgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG9wdGlvbiBzdHJ1Y3R1cmVzOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQ2xlYXJpbmcgTWVtb3J5KipcblxuUmlnaHQsIGBtZW1zZXQoXHUwMDI2b3B0cy5jbGVhcmVkLCAwLCBzaXplb2Yob3B0cy5jbGVhcmVkKSk7YCBpcyBhIGNsYXNzaWMgbW92ZS4gSXQncyBpbml0aWFsaXppbmcgb3IgY2xlYXJpbmcgYSBibG9jayBvZiBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGBvcHRzLmNsZWFyZWRgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwdXJwb3NlLiBJdCdzIGxpa2VseSBpbnRlbmRlZCB0byBzZXQgYWxsIHRoZSBiaXRzIGluIHRoYXQgbWVtb3J5IHJlZ2lvbiB0byB6ZXJvLiBUaGlzIGNvdWxkIGJlIGZvciBhIHZhcmlldHkgb2YgcmVhc29uczogdG8gemVybyBvdXQgZmxhZ3MsIGNvdW50ZXJzLCBvciBtYXliZSB0byBpbml0aWFsaXplIGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlLiBJdCdzIGdvb2QgcHJhY3RpY2UgdG8gY2xlYXIgbWVtb3J5IGJlZm9yZSB1c2UsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggb3B0aW9uIHN0cnVjdHMgb3IgYW55dGhpbmcgd2hlcmUgeW91IHdhbnQgYSBrbm93biwgZGVmYXVsdCBzdGF0ZS5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hhdCBkb2VzIGBvcHRzLmNsZWFyZWRgIGFjdHVhbGx5ICpjb250YWluKj8gS25vd2luZyB0aGUgdHlwZSBhbmQgc2l6ZSBvZiBgb3B0cy5jbGVhcmVkYCBpcyBjcnVjaWFsLiBJcyBpdCBhIHNpbmdsZSBgaW50YCwgYSBgc3RydWN0YCwgYW4gYXJyYXksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgYHNpemVvZigpYCBjYWxsIGlzIGtleSBoZXJlLCBhcyBpdCBkaWN0YXRlcyBob3cgbXVjaCBtZW1vcnkgaXMgYmVpbmcgemVyb2VkLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hhdCBleGFjdGx5IGBvcHRzLmNsZWFyZWRgIHJlcHJlc2VudHMuIFRoYXQgd2lsbCB0ZWxsIG1lIHdoeSB0aGlzIGNsZWFyIGlzIGJlaW5nIHBlcmZvcm1lZCBhbmQgd2hldGhlciBpdCBpcyBzdWZmaWNpZW50LiBJIGFsc28gaGF2ZSB0byBrZWVwIGluIG1pbmQsIGluIGxhcmdlciBjb2RlYmFzZXMsIHRoYXQgbWVtb3J5IG1heSBiZSB0b3VjaGVkIGJ5IG90aGVyIHRocmVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyOToxNC43MDQzOTQ3MzNaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9vdXRwdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjY6XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyB7XFxuIDQyNzpcXHRcXHQvKiBGb2xsb3dpbmcgZ3JvdXAgaXMgY2xlYXJlZCBpbiBfX3RjcF90cmFuc21pdF9za2IoKSAqL1xcbiA0Mjg6XFx0XFx0c3RydWN0X2dyb3VwKGNsZWFyZWQsXFxuIDQyOTpcXHRcXHRcXHR1MTYgbXNzO1xcdFxcdC8qIDAgdG8gZGlzYWJsZSAqL1xcbiA0MzA6XFx0XFx0XFx0dTggYnBmX29wdF9sZW47XFx0XFx0LyogbGVuZ3RoIG9mIEJQRiBoZHIgb3B0aW9uICovXFxuIDQzMTpcXHRcXHRcXHR1OCBudW1fc2Fja19ibG9ja3M7XFx0LyogbnVtYmVyIG9mIFNBQ0sgYmxvY2tzIHRvIGluY2x1ZGUgKi9cXG4gNDMyOlxcdFxcdCk7XFxuIDQzMzpcXHRcXG4gNDM0OlxcdFxcdC8qIENhdXRpb246IGZvbGxvd2luZyBmaWVsZHMgYXJlIG5vdCBjbGVhcmVkIGluIF9fdGNwX3RyYW5zbWl0X3NrYigpICovXFxuIDQzNTpcXHRcXHR1MTYgb3B0aW9ucztcXHRcXHQvKiBiaXQgZmllbGQgb2YgT1BUSU9OXyogKi9cXG4gNDM2OlxcdFxcdHU4IHdzO1xcdFxcdFxcdC8qIHdpbmRvdyBzY2FsZSwgMCB0byBkaXNhYmxlICovXFxuIDQzNzpcXHRcXHR1OCBudW1fYWNjZWNuX2ZpZWxkczo3LFxcdC8qIG51bWJlciBvZiBBY2NFQ04gZmllbGRzIG5lZWRlZCAqL1xcbiA0Mzg6XFx0XFx0ICAgdXNlX3N5bmFja19lY25fYnl0ZXM6MTsgLyogVXNlIHN5bmFja19lY25fYnl0ZXMgb3Igbm90ICovXFxuIDQzOTpcXHRcXHRfX3U4ICpoYXNoX2xvY2F0aW9uO1xcdC8qIHRlbXBvcmFyeSBwb2ludGVyLCBvdmVybG9hZGVkICovXFxuIDQ0MDpcXHRcXHRfX3UzMiB0c3ZhbCwgdHNlY3I7XFx0LyogbmVlZCB0byBpbmNsdWRlIE9QVElPTl9UUyAqL1xcbiA0NDE6XFx0XFx0c3RydWN0IHRjcF9mYXN0b3Blbl9jb29raWUgKmZhc3RvcGVuX2Nvb2tpZTtcXHQvKiBGYXN0IG9wZW4gY29va2llICovXFxuIDQ0MjpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgbXB0Y3A7XFxuIDQ0MzpcXHR9O1xcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRzdGF0aWMgdm9pZCBtcHRjcF9vcHRpb25zX3dyaXRlKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjk6MTQuNzA0NjQxOTczWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzY2NDY4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gdGhhdCBUQ1AgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5BbHJpZ2h0LCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkganVzdCByZWFsaXplZCBzb21ldGhpbmcgc2lnbmlmaWNhbnQhIExvb2tpbmcgYXQgYF9fdGNwX3RyYW5zbWl0X3NrYigpYCwgaXQgc2VlbXMgdGhhdCBgb3B0cy5tcHRjcGAgaXMgKm5vdCogYmVpbmcgY2xlYXJlZCBvdXQgYWZ0ZXIgdXNlLiBBbmQgaGV5LCB0aGUgY29kZSBldmVuIGV4cGxpY2l0bHkgY2FsbHMgb3V0IHRoYXQgc29tZSBmaWVsZHMgYXJlbid0IGNsZWFyZWQgaW4gdGhhdCBmdW5jdGlvbi4gTXkgaW50dWl0aW9uIHdhcyByaWdodCFcblxuQW5kIGBvcHRzLm1wdGNwYCwgb2YgY291cnNlLCBpcyBhIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnNgLiBUaGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gc29tZSBuYXN0eSBzdGF0ZSBsZWFrYWdlLCBlc3BlY2lhbGx5IGlmIGEgcHJldmlvdXMgTVBUQ1AgY29ubmVjdGlvbidzIG9wdGlvbnMgYXJlIGxpbmdlcmluZy4gSSBzaG91bGQgcmVhbGx5IGRpdmUgaW50byBgc3RydWN0IG1wdGNwX291dF9vcHRpb25zYCBhbmQgdW5kZXJzdGFuZCB3aGF0IGtpbmRzIG9mIGluZm9ybWF0aW9uIGl0J3Mgc3RvcmluZy4gSXQncyB0aW1lIHRvIGZ1bGx5IHVucGFjayB3aGF0J3MgaW4gdGhlcmUuIEkgYmV0IHRoZXJlIGFyZSBzb21lIHNlY3VyaXR5IGltcGxpY2F0aW9ucyB0byBjb25zaWRlciBpZiBpdCdzIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGJ1Zywgb3IgYXQgbGVhc3QgYSBzdWJ0bGUgb3B0aW1pemF0aW9uIHRoYXQgbmVlZHMgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzcyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjk6MTkuMzQxMjkyMDI3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTg2NTA4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvbXB0Y3AuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9tcHRjcC5oPTUwPXN0cnVjdCBtcHRjcF9hZGRyX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC02MS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjYyOnN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyB7XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC02My0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI5OjE5LjQzMTE2MDc5NFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDMwNzUyMTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnNgKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnNgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgb3V0Ym91bmQgTVBUQ1Agb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlIGl0c2VsZiwgYW5kICp0aGVuKiBJIG5lZWQgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHBhcmFtZXRlcnMgZm9yIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZGF0YSB0cmFuc2Zlci4gVGhpbmdzIGxpa2UgdGhlIE1QX0NBUEFCTEUgb3B0aW9uJ3MgcGFyYW1ldGVycyBzaG91bGQgYmUgaW4gaGVyZSwgcHJvYmFibHkgdGhlIGFkZHJlc3MgZm9yIHRoZSBTVUJGTE9XX0lORk8sIGFuZCBsaWtlbHkgdGhlIGZsYWdzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb25uZWN0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyBhbmQgdGhlaXIgc2l6ZXMsIGFzIHRob3NlIGNob2ljZXMgb2Z0ZW4gZ2l2ZSBoaW50cyBhYm91dCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIHBvdGVudGlhbCBsaW1pdGF0aW9ucy4gSSdtIGFsc28gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwYWRkaW5nIG9yIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucywgZXNwZWNpYWxseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggZGlmZmVyZW50IENQVSBhcmNoaXRlY3R1cmVzLiBUaGlzIG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZSBvcHRpb24gZGF0YSBpcyBtYXJzaGFsZWQgb3IgdW5tYXJzaGFsZWQgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGZsYWdzIGluIGhlcmUgdGhhdCBjb3VsZCByZWxhdGUgdG8gc2VjdXJpdHkgb3IgY29uZ2VzdGlvbiBjb250cm9sLiBBbmQgb2YgY291cnNlLCBJJ20gaG9waW5nIHRvIGZpbmQgY2xlYXIgZG9jdW1lbnRhdGlvbiwgYWx0aG91Z2guLi4gd2VsbCwgeW91IGtub3cgaG93IHRoYXQgZ29lcyBpbiBrZXJuZWwgY29kZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI5OjIzLjg2MTkxNjA5NloiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbXB0Y3AuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MixcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MjpcXHRzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMge1xcbiAgNjM6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxcbiAgNjQ6XFx0XFx0dTE2IHN1Ym9wdGlvbnM7XFxuICA2NTpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfcm1fbGlzdCBybV9saXN0O1xcbiAgNjY6XFx0XFx0dTggam9pbl9pZDtcXG4gIDY3OlxcdFxcdHU4IGJhY2t1cDtcXG4gIDY4OlxcdFxcdHU4IHJlc2V0X3JlYXNvbjo0LFxcbiAgNjk6XFx0XFx0ICAgcmVzZXRfdHJhbnNpZW50OjEsXFxuICA3MDpcXHRcXHQgICBjc3VtX3JlcWQ6MSxcXG4gIDcxOlxcdFxcdCAgIGFsbG93X2pvaW5faWQwOjEsXFxuICA3MjpcXHRcXHQgICBkcm9wX3RzOjE7XFxuICA3MzpcXHRcXHR1bmlvbiB7XFxuICA3NDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAgNzU6XFx0XFx0XFx0XFx0dTY0IHNuZHJfa2V5O1xcbiAgNzY6XFx0XFx0XFx0XFx0dTY0IHJjdnJfa2V5O1xcbiAgNzc6XFx0XFx0XFx0XFx0dTY0IGRhdGFfc2VxO1xcbiAgNzg6XFx0XFx0XFx0XFx0dTMyIHN1YmZsb3dfc2VxO1xcbiAgNzk6XFx0XFx0XFx0XFx0dTE2IGRhdGFfbGVuO1xcbiAgODA6XFx0XFx0XFx0XFx0X19zdW0xNiBjc3VtO1xcbiAgODE6XFx0XFx0XFx0fTtcXG4gIDgyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvIGFkZHI7XFxuICA4NDpcXHRcXHRcXHRcXHR1NjQgYWhtYWM7XFxuICA4NTpcXHRcXHRcXHR9O1xcbiAgODY6XFx0XFx0XFx0c3RydWN0IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjk6MjMuODYyMDI4NjU2WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDkxMTA3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIE1QVENQIGtlcm5lbCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBtcHRjcF9vdXRfb3B0aW9uc2AqKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoYXQgcmlnaHQ/IFRoZSBgbXB0Y3Bfb3V0X29wdGlvbnNgIHN0cnVjdHVyZSBhY3R1YWxseSAqY29udGFpbnMqIGEgYHN0cnVjdCBtcHRjcF9leHQgZXh0X2NvcHlgPyBIbW0uIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRoYXQncyB1bmV4cGVjdGVkLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9uc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5J3JlIHN0cnVjdHVyZWQgdGhhdCB3YXkgYW5kIHdoYXQgaXQgbWVhbnMgZm9yIHRoZSBvdmVyYWxsIGZsb3cuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBtZW1iZXJzLCB0aGVpciB0eXBlcywgYW5kIGhvdyB0aGlzIGVtYmVkZGVkIHN0cnVjdHVyZSBpcyB1c2VkLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCBtZWFucyBhbiBleHRyYSBjb3B5IGlzIGJlaW5nIG1hZGUgaGVyZSB3aGVuIEkgZG9uJ3QgZXhwZWN0IGl0IHRvIGJlLCBtYXliZSBmb3Igc29tZSBzdHJhbmdlIHJlYXNvbi4gSSBzaG91bGQgY2hlY2sgd2hlcmUgdGhpcyBzdHJ1Y3QgaXMgdXNlZCwgdG9vLiBMZXQncyBzZWUuLi4gaXMgaXQgZm9yIHNvbWUgc29ydCBvZiBzdGF0ZSBtYW5hZ2VtZW50IG9yIG1heWJlIHNvbWUgc29ydCBvZiBjb3B5LW9uLXdyaXRlIG9wdGltaXphdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBmdW5jdGlvbnMgY291bGQgYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBzb21lIHN0cmFuZ2UgYmVoYXZpb3VyIEkndmUgb2JzZXJ2ZWQgb3IgZml4aW5nIHNvbWUgdmVyeSBzdWJ0bGUgYnVnLiBJJ3ZlIGdvdCB0byBmb2xsb3cgdGhpcyB0aHJvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjk6MjkuMTExMTQxOTA1WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9tcHRjcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdFxcdFxcdF9fc3VtMTYgY3N1bTtcXG4gIDgxOlxcdFxcdFxcdH07XFxuICA4MjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAgODM6XFx0XFx0XFx0XFx0c3RydWN0IG1wdGNwX2FkZHJfaW5mbyBhZGRyO1xcbiAgODQ6XFx0XFx0XFx0XFx0dTY0IGFobWFjO1xcbiAgODU6XFx0XFx0XFx0fTtcXG4gIDg2OlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgbXB0Y3BfZXh0IGV4dF9jb3B5O1xcbiAgODg6XFx0XFx0XFx0XFx0dTY0IGZhaWxfc2VxO1xcbiAgODk6XFx0XFx0XFx0fTtcXG4gIDkwOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA5MTpcXHRcXHRcXHRcXHR1MzIgbm9uY2U7XFxuICA5MjpcXHRcXHRcXHRcXHR1MzIgdG9rZW47XFxuICA5MzpcXHRcXHRcXHRcXHR1NjQgdGhtYWM7XFxuICA5NDpcXHRcXHRcXHRcXHR1OCBobWFjW01QVENQT1BUX0hNQUNfTEVOXTtcXG4gIDk1OlxcdFxcdFxcdH07XFxuICA5NjpcXHRcXHR9O1xcbiAgOTc6XFx0I2VuZGlmXFxuICA5ODpcXHR9O1xcbiAgOTk6XFx0XFxuIDEwMDpcXHQjZGVmaW5lIE1QVENQX1NDSEVEX05BTUVfTUFYXFx0MTZcXG4gMTAxOlxcdCNkZWZpbmUgTVBUQ1BfU0NIRURfTUFYXFx0XFx0MTI4XFxuIDEwMjpcXHQjZGVmaW5lIE1QVENQX1NDSEVEX0JVRl9NQVhcXHQoTVBUQ1BfU0NIRURfTkFNRV9NQVggKiBNUFRDUF9TQ0hFRF9NQVgpXFxuIDEwMzpcXHRcXG4gMTA0OlxcdHN0cnVjdCBtcHRjcF9zY2hlZF9vcHMge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyOToyOS4xMTEzMDMxMzVaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQyNjU2NzM0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmluaXRpYWxpemVkIFN0YWNrIE1lbW9yeSBpbiBNUFRDUCBPcHRpb25zKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzLCBhbmQgaXQgbG9va3MgbGlrZSBgZXh0X2NvcHlgICppcyogaW5kZWVkIG5lc3RsZWQgd2l0aGluIGEgdW5pb24gaW5zaWRlIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnNgLiBUaGF0J3MgdGhlIGZpcnN0IHBpZWNlLiBOb3csIEknbSBzZWVpbmcgdGhhdCBgb3B0cy5tcHRjcGAgaXNuJ3QgZ2V0dGluZyBjbGVhcmVkIGluIGBfX3RjcF90cmFuc21pdF9za2IoKWAuIFRoYXQncyBpbW1lZGlhdGVseSByYWlzaW5nIGEgcmVkIGZsYWcuIFRoaXMgbWVhbnMgYG9wdHMubXB0Y3AuZXh0X2NvcHlgIHBvdGVudGlhbGx5IGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGRpcmVjdGx5IGluaGVyaXRlZCBmcm9tIGBfX3RjcF90cmFuc21pdF9za2IoKWAhXG5cbkhvbGQgb24sIHRob3VnaC4uLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLiBJIHNlZSB0aGF0IGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc2AgKmRvZXMqIHBlcmZvcm0gYSBgbWVtc2V0YCBvbiBgb3B0cy1cdTAwM2VleHRfY29weS5mbGFnc2AuIEJ1dCBjcnVjaWFsbHksIGl0ICpkb2Vzbid0KiB6ZXJvIHRoZSAqcmVzdCogb2YgYG9wdHMtXHUwMDNlZXh0X2NvcHlgIGlmIGBtcGV4dGAgaXMgTlVMTCEgVGhpcyBpcyBrZXkuIElmIGBtcGV4dGAgaXMgbnVsbCwgd2hpY2ggaXMgbm90IHVuY29tbW9uIGluIHNvbWUgY29udGV4dHMsIHRoZW4gYG9wdHMtXHUwMDNlZXh0X2NvcHlgIHJlbWFpbnMgbGFyZ2VseSB1bmluaXRpYWxpemVkLCBleGNlcHQgZm9yIHRoYXQgaW5pdGlhbCBgZmxhZ3NgIG1lbWJlci5cblxuTm93LCB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIHdoZW4gYG1wdGNwX3dyaXRlX2RhdGFfZmluYCBpcyBjYWxsZWQ6XG5cbmBgYGNcblx0XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiBzbmRfZGF0YV9maW5fZW5hYmxlKVxuXHRcdFx0bXB0Y3Bfd3JpdGVfZGF0YV9maW4oc3ViZmxvdywgc2tiLCBcdTAwMjZvcHRzLVx1MDAzZWV4dF9jb3B5KTtcbmBgYFxuXG5XaXRoaW4gYG1wdGNwX3dyaXRlX2RhdGFfZmluYCwgdGhlcmUncyBhIHBhcnRpY3VsYXIgYnJhbmNoOlxuXG5gYGBjXG5cdGlmICghZXh0LVx1MDAzZXVzZV9tYXAgfHwgIXNrYi1cdTAwM2VsZW4pIHtcblx0XHRleHQtXHUwMDNlZGF0YV9maW4gPSAxO1xuXHRcdGV4dC1cdTAwM2V1c2VfbWFwID0gMTtcblx0XHRleHQtXHUwMDNlZHNuNjQgPSAxO1xuXHRcdGV4dC1cdTAwM2VkYXRhX3NlcSA9IGRhdGFfZmluX3R4X3NlcTtcblx0XHRleHQtXHUwMDNlc3ViZmxvd19zZXEgPSAwO1xuXHRcdGV4dC1cdTAwM2VkYXRhX2xlbiA9IDE7XG5cdFx0ZXh0LVx1MDAzZWNzdW0gPSAwO1xuXHR9XG5gYGBcblxuV2FpdCBhIG1pbnV0ZS4uLiBCZWZvcmUgdGhpcyBjaGFuZ2UsIGBleHQtXHUwMDNlY3N1bWAgd2Fzbid0IGJlaW5nIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gKnRoaXMqIGNvZGUgcGF0aCEgQW5kIHJlbWVtYmVyLCBgZXh0LVx1MDAzZWNzdW1gIGlzIHBhcnQgb2YgYG9wdHMtXHUwMDNlZXh0X2NvcHlgLCB3aGljaCB3ZSd2ZSBhbHJlYWR5IGVzdGFibGlzaGVkIG1pZ2h0IGNvbnRhaW4gdGhhdCBqdWljeSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeS4gU28sIHdlJ3JlIGdyYWJiaW5nIGEgdmFsdWUsIGFuZCB1c2luZyBpdCB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbi5cblxuQWZ0ZXIgdGhhdCwgdGhlIGBvcHRzYCBzdHJ1Y3R1cmUgZ2V0cyBwYXNzZWQgYmFjayBpbnRvIGBfX3RjcF90cmFuc21pdF9za2IoKWAsIHdoaWNoIGxlYWRzIHRvIGBtcHRjcF9vcHRpb25zX3dyaXRlKClgIGdldHRpbmcgY2FsbGVkIHRvLCBhcyBleHBlY3RlZCwgd3JpdGUgdGhlIG9wdGlvbnMgdG8gdGhlIFRDUCBoZWFkZXIuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0LCBiZWNhdXNlIHRoaXMgdW5pbml0aWFsaXplZCBzdGF0ZSBjb3VsZCBiZSBjYXVzaW5nIGFsbCBzb3J0cyBvZiBvZGQgYmVoYXZpb3JzIGRvd25zdHJlYW0uIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIGBtcHRjcF9vcHRpb25zX3dyaXRlKClgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ4OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI5OjM3LjUzNzg3MzAxNloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX291dHB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0NTpcXHRzdGF0aWMgdm9pZCBtcHRjcF9vcHRpb25zX3dyaXRlKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0cixcXG4gNDQ2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAsXFxuIDQ0NzpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzKVxcbiA0NDg6XFx0e1xcbiA0NDk6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxcbiA0NTA6XFx0XFx0aWYgKHVubGlrZWx5KE9QVElPTl9NUFRDUCBcXHUwMDI2IG9wdHMtXFx1MDAzZW9wdGlvbnMpKVxcbiA0NTE6XFx0XFx0XFx0bXB0Y3Bfd3JpdGVfb3B0aW9ucyh0aCwgcHRyLCB0cCwgXFx1MDAyNm9wdHMtXFx1MDAzZW1wdGNwKTtcXG4gNDUyOlxcdCNlbmRpZlxcbiA0NTM6XFx0fVxcbiA0NTQ6XFx0XFxuIDQ1NTpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUF9CUEZcXG4gNDU2OlxcdHN0YXRpYyBpbnQgYnBmX3Nrb3BzX3dyaXRlX2hkcl9vcHRfYXJnMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA0NTc6XFx0XFx0XFx0XFx0XFx0XFx0ZW51bSB0Y3Bfc3luYWNrX3R5cGUgc3luYWNrX3R5cGUpXFxuIDQ1ODpcXHR7XFxuIDQ1OTpcXHRcXHRpZiAodW5saWtlbHkoIXNrYikpXFxuIDQ2MDpcXHRcXHRcXHRyZXR1cm4gQlBGX1dSSVRFX0hEUl9UQ1BfQ1VSUkVOVF9NU1M7XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdGlmICh1bmxpa2VseShzeW5hY2tfdHlwZSA9PSBUQ1BfU1lOQUNLX0NPT0tJRSkpXFxuIDQ2MzpcXHRcXHRcXHRyZXR1cm4gQlBGX1dSSVRFX0hEUl9UQ1BfU1lOQUNLX0NPT0tJRTtcXG4gNDY0OlxcdFxcbiA0NjU6XFx0XFx0cmV0dXJuIDA7XFxuIDQ2NjpcXHR9XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdC8qIHJlcSwgc3luX3NrYiBhbmQgc3luYWNrX3R5cGUgYXJlIHVzZWQgd2hlbiB3cml0aW5nIHN5bmFjayAqL1xcbiA0Njk6XFx0c3RhdGljIHUzMiBicGZfc2tvcHNfaGRyX29wdF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA0NzA6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gNDcxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc3luX3NrYixcXG4gNDcyOlxcdFxcdFxcdFxcdFxcdCBlbnVtIHRjcF9zeW5hY2tfdHlwZSBzeW5hY2tfdHlwZSxcXG4gNDczOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0IHUzMiByZW1haW5pbmcpXFxuIDQ3NTpcXHR7XFxuIDQ3NjpcXHRcXHRzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gc29ja19vcHM7XFxuIDQ3NzpcXHRcXHRpbnQgZXJyO1xcbiA0Nzg6XFx0XFxuIDQ3OTpcXHRcXHRpZiAobGlrZWx5KCFCUEZfU09DS19PUFNfVEVTVF9GTEFHKHRjcF9zayhzayksXFxuIDQ4MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBCUEZfU09DS19PUFNfV1JJVEVfSERSX09QVF9DQl9GTEFHKSkgfHxcXG4gNDgxOlxcdFxcdCAgICAhcmVtYWluaW5nKVxcbiA0ODI6XFx0XFx0XFx0cmV0dXJuIHJlbWFpbmluZztcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0XFx0LyogcmVtYWluaW5nIGhhcyBhbHJlYWR5IGJlZW4gYWxpZ25lZCB0byA0IGJ5dGVzLCBzbyByZW1haW5pbmcgXFx1MDAzZT0gNCAqL1xcbiA0ODU6XFx0XFxuIDQ4NjpcXHRcXHQvKiBpbml0IHNvY2tfb3BzICovXFxuIDQ4NzpcXHRcXHRtZW1zZXQoXFx1MDAyNnNvY2tfb3BzLCAwLCBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4sIHRlbXApKTtcXG4gNDg4OlxcdFxcbiA0ODk6XFx0XFx0c29ja19vcHMub3AgPSBCUEZfU09DS19PUFNfSERSX09QVF9MRU5fQ0I7XFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdGlmIChyZXEpIHtcXG4gNDkyOlxcdFxcdFxcdC8qIFRoZSBsaXN0ZW4gXFxcInNrXFxcIiBjYW5ub3QgYmUgcGFzc2VkIGhlcmUgYmVjYXVzZVxcbiA0OTM6XFx0XFx0XFx0ICogaXQgaXMgbm90IGxvY2tlZC4gIEl0IHdvdWxkIG5vdCBtYWtlIHRvbyBtdWNoXFxuIDQ5NDpcXHRcXHRcXHQgKiBzZW5zZSB0byBkbyBicGZfc2V0c29ja29wdChsaXN0ZW5fc2spIGJhc2VkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI5OjM3LjUzODA1ODQ1NloiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjYyNzMyOTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNdWx0aXBhdGggVENQIFdyaXRlIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBkZWx2ZSBpbnRvIGBtcHRjcF93cml0ZV9vcHRpb25zYC4gU3BlY2lmaWNhbGx5LCBJIGtub3cgaXQncyBsb2NhdGVkIHdpdGhpbiBgbmV0L21wdGNwL29wdGlvbnMuY2AgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIHJlbGF0ZWQgdG8gaGFuZGxpbmcgdGhlIHZhcmlvdXMgd3JpdGUgb3B0aW9ucyBmb3IgTXVsdGlwYXRoIFRDUC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgdGhlIGRpZmZlcmVudCBjb250cm9sIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgbmVnb3RpYXRlZCBkdXJpbmcgdGhlIHdyaXRlIHByb2Nlc3MuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHByb3BlciBvcGVyYXRpb24gYXMgaXQncyB0aGUgcG9pbnQgd2hlcmUgYXBwbGljYXRpb24gd3JpdGUgcmVxdWVzdHMgYXJlIHBhcnNlZCBhbmQgaW50ZXJwcmV0ZWQgd2l0aGluIHRoZSBNdWx0aXBhdGggY29udGV4dC4gSSdsbCBmb2N1cyBvbiBob3cgdGhleSBhcmUgZW5jb2RlZCBhbmQgZGVjb2RlZCBpbnRvIHRoZSBUQ1AgaGVhZGVyIGZvciB0cmFuc21pc3Npb24gYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgY29ubmVjdGlvbiBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0MjgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjI5OjQyLjgwMDc5Mzk5NVoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL29wdGlvbnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDcyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDcyOlxcdHZvaWQgbXB0Y3Bfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXFxuMTQ3MzpcXHRcXHRcXHRcXHQgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKVxcbjE0NzQ6XFx0e1xcbjE0NzU6XFx0XFx0Y29uc3Qgc3RydWN0IHNvY2sgKnNzayA9IChjb25zdCBzdHJ1Y3Qgc29jayAqKXRwO1xcbjE0NzY6XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcXG4xNDc3OlxcdFxcbjE0Nzg6XFx0XFx0LyogV2hpY2ggb3B0aW9ucyBjYW4gYmUgdXNlZCB0b2dldGhlcj9cXG4xNDc5OlxcdFxcdCAqXFxuMTQ4MDpcXHRcXHQgKiBYOiBtdXR1YWxseSBleGNsdXNpdmVcXG4xNDgxOlxcdFxcdCAqIE86IG9mdGVuIHVzZWQgdG9nZXRoZXJcXG4xNDgyOlxcdFxcdCAqIEM6IGNhbiBiZSB1c2VkIHRvZ2V0aGVyIGluIHNvbWUgY2FzZXNcXG4xNDgzOlxcdFxcdCAqIFA6IGNvdWxkIGJlIHVzZWQgdG9nZXRoZXIgYnV0IHdlIHByZWZlciBub3QgdG8gKG9wdGltaXNhdGlvbnMpXFxuMTQ4NDpcXHRcXHQgKlxcbjE0ODU6XFx0XFx0ICogIE9wdDogfCBNUEMgIHwgTVBKICB8IERTUyAgfCBBREQgIHwgIFJNICB8IFBSSU8gfCBGQUlMIHwgIEZDICB8XFxuMTQ4NjpcXHRcXHQgKiAtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXxcXG4xNDg3OlxcdFxcdCAqICBNUEMgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxcbjE0ODg6XFx0XFx0ICogIE1QSiAgfCAgWCAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XFxuMTQ4OTpcXHRcXHQgKiAgRFNTICB8ICBYICAgfCAgWCAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXxcXG4xNDkwOlxcdFxcdCAqICBBREQgIHwgIFggICB8ICBYICAgfCAgUCAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxcbjE0OTE6XFx0XFx0ICogIFJNICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfCAgUCAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18XFxuMTQ5MjpcXHRcXHQgKiAgUFJJTyB8ICBYICAgfCAgQyAgIHwgIEMgICB8ICBDICAgfCAgQyAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcXG4xNDkzOlxcdFxcdCAqICBGQUlMIHwgIFggICB8ICBYICAgfCAgQyAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18LS0tLS0tfFxcbjE0OTQ6XFx0XFx0ICogIEZDICAgfCAgWCAgIHwgIFggICB8ICBQICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwtLS0tLS18XFxuMTQ5NTpcXHRcXHQgKiAgUlNUICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBYICAgfCAgWCAgIHwgIFggICB8ICBPICAgfCAgTyAgIHxcXG4xNDk2OlxcdFxcdCAqIC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxcbjE0OTc6XFx0XFx0ICpcXG4xNDk4OlxcdFxcdCAqIFRoZSBzYW1lIGFwcGxpZXMgaW4gbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucygpIGZ1bmN0aW9uLlxcbjE0OTk6XFx0XFx0ICovXFxuMTUwMDpcXHRcXHRpZiAobGlrZWx5KE9QVElPTl9NUFRDUF9EU1MgXFx1MDAyNiBvcHRzLVxcdTAwM2VzdWJvcHRpb25zKSkge1xcbjE1MDE6XFx0XFx0XFx0c3RydWN0IG1wdGNwX2V4dCAqbXBleHQgPSBcXHUwMDI2b3B0cy1cXHUwMDNlZXh0X2NvcHk7XFxuMTUwMjpcXHRcXHRcXHR1OCBsZW4gPSBUQ1BPTEVOX01QVENQX0RTU19CQVNFO1xcbjE1MDM6XFx0XFx0XFx0dTggZmxhZ3MgPSAwO1xcbjE1MDQ6XFx0XFxuMTUwNTpcXHRcXHRcXHRpZiAobXBleHQtXFx1MDAzZXVzZV9hY2spIHtcXG4xNTA2OlxcdFxcdFxcdFxcdGZsYWdzID0gTVBUQ1BfRFNTX0hBU19BQ0s7XFxuMTUwNzpcXHRcXHRcXHRcXHRpZiAobXBleHQtXFx1MDAzZWFjazY0KSB7XFxuMTUwODpcXHRcXHRcXHRcXHRcXHRsZW4gKz0gVENQT0xFTl9NUFRDUF9EU1NfQUNLNjQ7XFxuMTUwOTpcXHRcXHRcXHRcXHRcXHRmbGFncyB8PSBNUFRDUF9EU1NfQUNLNjQ7XFxuMTUxMDpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjE1MTE6XFx0XFx0XFx0XFx0XFx0bGVuICs9IFRDUE9MRU5fTVBUQ1BfRFNTX0FDSzMyO1xcbjE1MTI6XFx0XFx0XFx0XFx0fVxcbjE1MTM6XFx0XFx0XFx0fVxcbjE1MTQ6XFx0XFxuMTUxNTpcXHRcXHRcXHRpZiAobXBleHQtXFx1MDAzZXVzZV9tYXApIHtcXG4xNTE2OlxcdFxcdFxcdFxcdGxlbiArPSBUQ1BPTEVOX01QVENQX0RTU19NQVA2NDtcXG4xNTE3OlxcdFxcbjE1MTg6XFx0XFx0XFx0XFx0LyogVXNlIG9ubHkgNjQtYml0IG1hcHBpbmcgZmxhZ3MgZm9yIG5vdywgYWRkXFxuMTUxOTpcXHRcXHRcXHRcXHQgKiBzdXBwb3J0IGZvciBvcHRpb25hbCAzMi1iaXQgbWFwcGluZ3MgbGF0ZXIuXFxuMTUyMDpcXHRcXHRcXHRcXHQgKi9cXG4xNTIxOlxcdFxcdFxcdFxcdGZsYWdzIHw9IE1QVENQX0RTU19IQVNfTUFQIHwgTVBUQ1BfRFNTX0RTTjY0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyOTo0Mi44MDA5NzE4NTVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc1OTg0OTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYG1wdGNwX3dyaXRlX29wdGlvbnNgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtcHRjcF93cml0ZV9vcHRpb25zYC4gSSdtIGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgTVBUQ1AgYXJjaGl0ZWN0dXJlLCBidXQgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqcHJlY2lzZWx5KiBob3cgdGhlc2Ugd3JpdGUgb3B0aW9ucyBhcmUgaGFuZGxlZC4gV2hhdCBhcmUgdGhlIG51YW5jZXM/IFdoYXQgZWRnZSBjYXNlcyBhbSBJIG1pc3Npbmc/IEkgbmVlZCB0byBlbnN1cmUgbXkgZ3Jhc3Agb2YgdGhpcyBmdW5jdGlvbiBpcyBjb21wcmVoZW5zaXZlLiBJJ20gdGhpbmtpbmcgYWJvdXQgaXRzIHJvbGUgaW4gZmxvdyBjb250cm9sLCBjb25nZXN0aW9uIG1hbmFnZW1lbnQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc3ViZmxvdyBzZWxlY3Rpb24gbG9naWMuIERvZXMgaXQgaW50ZXJhY3Qgd2l0aCByZXRyYW5zbWlzc2lvbnMgaW4gc29tZSB3YXk/IEFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSBzb21ldGhpbmcgSSBhbSBpbnRlcmVzdGVkIGluLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgYW55IHJlYWwtd29ybGQgb3B0aW1pemF0aW9uIG9yIGRlYnVnZ2luZyBlZmZvcnRzIEkgbWlnaHQgdW5kZXJ0YWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcxMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6Mjk6NDkuNTYwODI2MDIzWiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3Avb3B0aW9ucy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MjIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MjI6XFx0XFx0XFx0XFx0aWYgKG1wZXh0LVxcdTAwM2VkYXRhX2ZpbilcXG4xNTIzOlxcdFxcdFxcdFxcdFxcdGZsYWdzIHw9IE1QVENQX0RTU19EQVRBX0ZJTjtcXG4xNTI0OlxcdFxcbjE1MjU6XFx0XFx0XFx0XFx0aWYgKG9wdHMtXFx1MDAzZWNzdW1fcmVxZClcXG4xNTI2OlxcdFxcdFxcdFxcdFxcdGxlbiArPSBUQ1BPTEVOX01QVENQX0RTU19DSEVDS1NVTTtcXG4xNTI3OlxcdFxcdFxcdH1cXG4xNTI4OlxcdFxcbjE1Mjk6XFx0XFx0XFx0KnB0cisrID0gbXB0Y3Bfb3B0aW9uKE1QVENQT1BUX0RTUywgbGVuLCAwLCBmbGFncyk7XFxuMTUzMDpcXHRcXG4xNTMxOlxcdFxcdFxcdGlmIChtcGV4dC1cXHUwMDNldXNlX2Fjaykge1xcbjE1MzI6XFx0XFx0XFx0XFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcXG4xNTMzOlxcdFxcdFxcdFxcdHU2NCBhY2tfc2VxO1xcbjE1MzQ6XFx0XFxuMTUzNTpcXHRcXHRcXHRcXHQvKiBEU1Mgb3B0aW9uIGlzIHNldCBvbmx5IGJ5IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMsXFxuMTUzNjpcXHRcXHRcXHRcXHQgKiB0aGUgY2FsbGVyIGlzIF9fdGNwX3RyYW5zbWl0X3NrYigpIGFuZCBzc2sgaXMgYWx3YXlzXFxuMTUzNzpcXHRcXHRcXHRcXHQgKiBub3QgTlVMTC5cXG4xNTM4OlxcdFxcdFxcdFxcdCAqL1xcbjE1Mzk6XFx0XFx0XFx0XFx0c3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7XFxuMTU0MDpcXHRcXHRcXHRcXHRtc2sgPSBtcHRjcF9zayhzdWJmbG93LVxcdTAwM2Vjb25uKTtcXG4xNTQxOlxcdFxcdFxcdFxcdGFja19zZXEgPSBSRUFEX09OQ0UobXNrLVxcdTAwM2VhY2tfc2VxKTtcXG4xNTQyOlxcdFxcdFxcdFxcdGlmIChtcGV4dC1cXHUwMDNlYWNrNjQpIHtcXG4xNTQzOlxcdFxcdFxcdFxcdFxcdHB1dF91bmFsaWduZWRfYmU2NChhY2tfc2VxLCBwdHIpO1xcbjE1NDQ6XFx0XFx0XFx0XFx0XFx0cHRyICs9IDI7XFxuMTU0NTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjE1NDY6XFx0XFx0XFx0XFx0XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGFja19zZXEsIHB0cik7XFxuMTU0NzpcXHRcXHRcXHRcXHRcXHRwdHIgKz0gMTtcXG4xNTQ4OlxcdFxcdFxcdFxcdH1cXG4xNTQ5OlxcdFxcdFxcdFxcdHN1YmZsb3ctXFx1MDAzZXJjdl93bmRfc2VudCA9IG1wdGNwX3NldF9yd2luKG1zaywgdHAsIHRoLFxcbjE1NTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGFja19zZXEpO1xcbjE1NTE6XFx0XFx0XFx0fVxcbjE1NTI6XFx0XFxuMTU1MzpcXHRcXHRcXHRpZiAobXBleHQtXFx1MDAzZXVzZV9tYXApIHtcXG4xNTU0OlxcdFxcdFxcdFxcdHB1dF91bmFsaWduZWRfYmU2NChtcGV4dC1cXHUwMDNlZGF0YV9zZXEsIHB0cik7XFxuMTU1NTpcXHRcXHRcXHRcXHRwdHIgKz0gMjtcXG4xNTU2OlxcdFxcdFxcdFxcdHB1dF91bmFsaWduZWRfYmUzMihtcGV4dC1cXHUwMDNlc3ViZmxvd19zZXEsIHB0cik7XFxuMTU1NzpcXHRcXHRcXHRcXHRwdHIgKz0gMTtcXG4xNTU4OlxcdFxcdFxcdFxcdGlmIChvcHRzLVxcdTAwM2Vjc3VtX3JlcWQpIHtcXG4xNTU5OlxcdFxcdFxcdFxcdFxcdC8qIGRhdGFfbGVuID09IDAgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBpbmZpbml0ZSBtYXBwaW5nLFxcbjE1NjA6XFx0XFx0XFx0XFx0XFx0ICogdGhlIGNoZWNrc3VtIHdpbGwgYWxzbyBiZSBzZXQgdG8gMC5cXG4xNTYxOlxcdFxcdFxcdFxcdFxcdCAqL1xcbjE1NjI6XFx0XFx0XFx0XFx0XFx0cHV0X2xlbl9jc3VtKG1wZXh0LVxcdTAwM2VkYXRhX2xlbixcXG4xNTYzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgKG1wZXh0LVxcdTAwM2VkYXRhX2xlbiA/IG1wdGNwX21ha2VfY3N1bShtcGV4dCkgOiAwKSxcXG4xNTY0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcHRyKTtcXG4xNTY1OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTU2NjpcXHRcXHRcXHRcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMzIobXBleHQtXFx1MDAzZWRhdGFfbGVuIFxcdTAwM2NcXHUwMDNjIDE2IHxcXG4xNTY3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFRDUE9QVF9OT1AgXFx1MDAzY1xcdTAwM2MgOCB8IFRDUE9QVF9OT1AsIHB0cik7XFxuMTU2ODpcXHRcXHRcXHRcXHR9XFxuMTU2OTpcXHRcXHRcXHRcXHRwdHIgKz0gMTtcXG4xNTcwOlxcdFxcdFxcdH1cXG4xNTcxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOToyOTo0OS41NjEwMDM0NjNaIiwiU2VxIjo3MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzODM2MTE2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja3N1bSBDYWxjdWxhdGlvbiBJbmNvbWluZyoqXG5cblJpZ2h0LCAqYWhhISogSSdtIHNlZWluZyB0aGUgYG1wdGNwX21ha2VfY3N1bShtcGV4dClgIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNoZWNrc3VtIGdlbmVyYXRpb24gd2l0aGluIHRoZSBNUFRDUCBmcmFtZXdvcmsuIExldCdzIGdldCByaWdodCB0byBleGFtaW5pbmcgYG1wdGNwX21ha2VfY3N1bWAgYW5kIGRpc3NlY3Qgd2hhdCdzIGdvaW5nIG9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGludGVncml0eSB2ZXJpZmljYXRpb24gaGFwcGVucywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBjaGVja3N1bSBpcyBkZXJpdmVkLiBXaGF0IHNwZWNpZmljIGBtcGV4dGAgZGF0YSBpcyBiZWluZyBmZWQgaW4/IElzIGl0IHRoZSBjb21wbGV0ZSBNUFRDUCBoZWFkZXI/IEp1c3QgdGhlIGV4dGVuc2lvbiBkYXRhPyBBbmQsIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgYWxnb3JpdGhtIGlzIGJlaW5nIHVzZWQ/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgZmllbGRzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCBhbmQgaG93IHRoZXkgdWx0aW1hdGVseSBjb250cmlidXRlIHRvIHRoZSBmaW5hbCBjaGVja3N1bS4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgbHVya2luZyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gTXkgZGVlcCBkaXZlIGJlZ2lucyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzczLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOTozMDowMC45NDQ2MTk4NTZaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjcyOTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX21ha2VfY3N1bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmM9MTQyMz1zdGF0aWMgdm9pZCBtcHRjcF90cmFja19yd2luKHN0cnVjdCB0Y3Bfc29jayAqdHApXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE0MzYtXFxubmV0L21wdGNwL29wdGlvbnMuYzoxNDM3Ol9fc3VtMTYgX19tcHRjcF9tYWtlX2NzdW0odTY0IGRhdGFfc2VxLCB1MzIgc3ViZmxvd19zZXEsIHUxNiBkYXRhX2xlbiwgX193c3VtIHN1bSlcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE0Mzgte1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNDU1LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTQ1NjpzdGF0aWMgX19zdW0xNiBtcHRjcF9tYWtlX2NzdW0oY29uc3Qgc3RydWN0IG1wdGNwX2V4dCAqbXBleHQpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNDU3LXtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE0NTg6XFx0cmV0dXJuIF9fbXB0Y3BfbWFrZV9jc3VtKG1wZXh0LVxcdTAwM2VkYXRhX3NlcSwgbXBleHQtXFx1MDAzZXN1YmZsb3dfc2VxLCBtcGV4dC1cXHUwMDNlZGF0YV9sZW4sXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNDU5LVxcdFxcdFxcdFxcdCB+Y3N1bV91bmZvbGQobXBleHQtXFx1MDAzZWNzdW0pKTtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTQ3Mj12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTYyLVxcdFxcdFxcdFxcdHB1dF9sZW5fY3N1bShtcGV4dC1cXHUwMDNlZGF0YV9sZW4sXFxubmV0L21wdGNwL29wdGlvbnMuYzoxNTYzOlxcdFxcdFxcdFxcdFxcdCAgICAgKG1wZXh0LVxcdTAwM2VkYXRhX2xlbiA/IG1wdGNwX21ha2VfY3N1bShtcGV4dCkgOiAwKSxcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1NjQtXFx0XFx0XFx0XFx0XFx0ICAgICBwdHIpO1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNjE1LVxcdFxcdFxcdHB1dF9sZW5fY3N1bShvcHRzLVxcdTAwM2VkYXRhX2xlbixcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE2MTY6XFx0XFx0XFx0XFx0ICAgICBfX21wdGNwX21ha2VfY3N1bShvcHRzLVxcdTAwM2VkYXRhX3NlcSxcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE2MTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG9wdHMtXFx1MDAzZXN1YmZsb3dfc2VxLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTA5NT12b2lkIG1wdGNwX2NyeXB0b19obWFjX3NoYSh1NjQga2V5MSwgdTY0IGtleTIsIHU4ICptc2csIGludCBsZW4sIHZvaWQgKmhtYWMpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEwOTY6X19zdW0xNiBfX21wdGNwX21ha2VfY3N1bSh1NjQgZGF0YV9zZXEsIHUzMiBzdWJmbG93X3NlcSwgdTE2IGRhdGFfbGVuLCBfX3dzdW0gc3VtKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMDk3LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xMDM0PXN0YXRpYyBlbnVtIG1hcHBpbmdfc3RhdHVzIHZhbGlkYXRlX2RhdGFfY3N1bShzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDk5LVxcdCAqL1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTEwMDpcXHRjc3VtID0gX19tcHRjcF9tYWtlX2NzdW0oc3ViZmxvdy1cXHUwMDNlbWFwX3NlcSxcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExMDEtXFx0XFx0XFx0XFx0IHN1YmZsb3ctXFx1MDAzZW1hcF9zdWJmbG93X3NlcSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MzA6MDEuMDIwOTAwNDMzWiIsIlNlcSI6NzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MTQ3OTQ3ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuaW5pdGlhbGl6ZWQgU3RhY2sgTWVtb3J5IEluZm9ybWF0aW9uIExlYWsgaW4gTVBUQ1AgQ2hlY2tzdW0gQ2FsY3VsYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIHJldmVhbHMgYSBjcml0aWNhbCBmbGF3IGluIHRoZSBNUFRDUCBpbXBsZW1lbnRhdGlvbiBjb25jZXJuaW5nIGNoZWNrc3VtIGNhbGN1bGF0aW9ucy4gSXQgYm9pbHMgZG93biB0byB0aGlzOiBgbXB0Y3BfbWFrZV9jc3VtYCByZWxpZXMgb24gYG1wZXh0LVx1MDAzZWNzdW1gIHRvIGNvbXB1dGUgdGhlIGNoZWNrc3VtLCByaWdodD8gVGhlIHByb2JsZW0gaXMgdGhhdCBgbXBleHQtXHUwMDNlY3N1bWAgY2FuIHJlbWFpbiB1bmluaXRpYWxpemVkLCB3aGljaCBsZWFkcyB0byBhIGNoZWNrc3VtIGNhbGN1bGF0aW9uIHVzaW5nIGdhcmJhZ2Ugc3RhY2sgbWVtb3J5LiBUaGlzIHJlc3VsdGluZyAoaW5jb3JyZWN0KSBjaGVja3N1bSBpcyB0aGVuIHdyaXR0ZW4gdG8gdGhlIFRDUCBoZWFkZXIgYW5kIHRyYW5zbWl0dGVkIGFjcm9zcyB0aGUgbmV0d29yaywgYW5kIHRoYXQncyB0aGUgaW5mby1sZWFrLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgY2hhaW4uIGBfX3RjcF90cmFuc21pdF9za2JgIGFsbG9jYXRlcyBgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyBvcHRzYCBvbiB0aGUgc3RhY2suIFRoZSBzdGFjayBpcyBjbGVhcmVkIGNvcnJlY3RseSwgZXhjZXB0IGZvciBgb3B0cy5tcHRjcGAuIFRoaXMgYG9wdHNgIHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBgbXB0Y3BgIG1lbWJlciwgZ2V0cyBwYXNzZWQgZG93biB0aHJvdWdoIHNldmVyYWwgZnVuY3Rpb25zOiBgdGNwX2VzdGFibGlzaGVkX29wdGlvbnNgLCBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AsIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2Rzc2AsIHVsdGltYXRlbHkgbGVhZGluZyB0byBhIHBvdGVudGlhbCBzY2VuYXJpbyB3aGVyZSBgb3B0cy1cdTAwM2VleHRfY29weWAgaXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQgaWYgYG1wZXh0YCBpcyBOVUxMIGFuZCBgc25kX2RhdGFfZmluX2VuYWJsZWAgaXMgdHJ1ZS4gYG1wdGNwX3dyaXRlX2RhdGFfZmluYCBzZXRzIHNvbWUgb2YgYG9wdHMtXHUwMDNlZXh0X2NvcHlgLCBidXQgaXQgKmRvZXNuJ3QqIGluaXRpYWxpemUgYGV4dC1cdTAwM2Vjc3VtYC5cblxuVGhlIGNvZGUgdGhlbiBwcm9jZWVkcywgd2l0aCBgb3B0cy1cdTAwM2Vjc3VtX3JlcWRgIGJlaW5nIHNldCB0byB0cnVlICppZiogY2hlY2tzdW1zIGFyZSBlbmFibGVkIGF0IHRoZSBzb2NrZXQgbGV2ZWwuIFRoZW4sIGBtcHRjcF93cml0ZV9vcHRpb25zYCBjYWxscyBgbXB0Y3BfbWFrZV9jc3VtYCB3aXRoIHRoZSB1bmluaXRpYWxpemVkIGBtcGV4dC1cdTAwM2Vjc3VtYC4gVGhlIHJlc3VsdCBpcyBhIGNoZWNrc3VtIGJhc2VkIG9uIHJhbmRvbSBzdGFjayBkYXRhIHRoYXQgZ2V0cyBlbWJlZGRlZCBpbiB0aGUgVENQIGhlYWRlciBhbmQsIGNydWNpYWxseSwgdHJhbnNtaXR0ZWQuXG5cblRoaXMgaXMgZXhhY3RseSB0aGUgdHlwZSBvZiBidWcgdGhhdCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIGRlc2lnbmVkIHRvIGZsYWcuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHdvdWxkbid0IGNhdGNoIHRoaXMgYmVjYXVzZSB0aGUgbWVtb3J5IGlzIHRlY2huaWNhbGx5IGFsbG9jYXRlZCwganVzdCB1bmluaXRpYWxpemVkLiBJIGNhbiBjb25maXJtIHRoaXMgaXMgYSByZWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVhay5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoYXQgYG9wdHMtXHUwMDNlY3N1bV9yZXFkYCBjYW4gYWN0dWFsbHkgYmUgdHJ1ZS4gWWVzLCBmcm9tIGEgcXVpY2sgY2hlY2ssIElmIHRoZSBNUFRDUCBzb2NrZXQgaGFzIGNoZWNrc3VtcyBlbmFibGVkLCBpdCAqd2lsbCogYmUgc2V0LlxuXG5GaW5hbGx5LCBJIGNoZWNrZWQgb3RoZXIgcG90ZW50aWFsIHNvdXJjZXMgb2YgdGhlIHNhbWUgaXNzdWUuIEkgZGlkbid0IGZpbmQgYW55IG90aGVyIHBsYWNlcyB3aGVyZSBgZXh0LVx1MDAzZWNzdW1gIGlzIHVzZWQgdW5pbml0aWFsaXplZCwgcGFydGljdWxhcmx5IGluIHRoZSBgbXB0Y3BfcG1fYW5ub3VuY2VkX2FsbG9jYCBhbmQgYG1wdGNwX25sX3JlbW92ZV9pZF96ZXJvX2FkZHJlc3NgIGZ1bmN0aW9ucy4gVGhlcmUgbWF5IGJlIHNvbWUgc21hbGwgZml4ZXMgdGhlcmUsIGJ1dCBub3RoaW5nIHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBpc3N1ZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRlZmluaXRlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgd2hlcmUgYW4gdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaW5mby1sZWFrIG9jY3Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4NDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE5OjMwOjE4LjE2ODg1MTkxNFoiLCJTZXEiOjc0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3BtX2tlcm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzc6XFx0XFx0d2hpbGUgKChtc2sgPSBtcHRjcF90b2tlbl9pdGVyX25leHQobmV0LCBcXHUwMDI2c19zbG90LCBcXHUwMDI2c19udW0pKSAhPSBOVUxMKSB7XFxuMTEzODpcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XFxuMTEzOTpcXHRcXHRcXHRzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvIG1za19sb2NhbDtcXG4xMTQwOlxcdFxcdFxcdHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gYW5ub19hZGRyO1xcbjExNDE6XFx0XFx0XFx0Ym9vbCBhbm5vdW5jZWQ7XFxuMTE0MjpcXHRcXG4xMTQzOlxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWNvbm5fbGlzdCkgfHwgbXB0Y3BfcG1faXNfdXNlcnNwYWNlKG1zaykpXFxuMTE0NDpcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdFxcdFxcdG1wdGNwX2xvY2FsX2FkZHJlc3MoKHN0cnVjdCBzb2NrX2NvbW1vbiAqKW1zaywgXFx1MDAyNm1za19sb2NhbCk7XFxuMTE0NzpcXHRcXHRcXHRpZiAoIW1wdGNwX2FkZHJlc3Nlc19lcXVhbChcXHUwMDI2bXNrX2xvY2FsLCBhZGRyLCBhZGRyLVxcdTAwM2Vwb3J0KSlcXG4xMTQ4OlxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4xMTQ5OlxcdFxcbjExNTA6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xMTUxOlxcdFxcdFxcdC8qIERyb3AgYSBwb3NzaWJseSBwZW5kaW5nIEFERF9BRERSIGZvciB0aGlzIGFkZHJlc3MuICovXFxuMTE1MjpcXHRcXHRcXHRhbm5vX2FkZHIgPSBtc2tfbG9jYWw7XFxuMTE1MzpcXHRcXHRcXHRhbm5vX2FkZHIucG9ydCA9IDA7XFxuMTE1NDpcXHRcXHRcXHRhbm5vdW5jZWQgPSBtcHRjcF9wbV9hbm5vdW5jZWRfcmVtb3ZlKG1zaywgXFx1MDAyNmFubm9fYWRkcik7XFxuMTE1NTpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlcG0ubG9jayk7XFxuMTE1NjpcXHRcXHRcXHRpZiAoYW5ub3VuY2VkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxOTozMDoxOC4xNjg5ODg1OTRaIiwiU2VxIjo3NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIwOTU3MDg5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE1QVENQIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IExlYWsqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3RlcC1ieS1zdGVwLiBJJ3ZlIGJlZW4gZXhhbWluaW5nIHRoaXMgTVBUQ1AgcGF0Y2ggcmVsYXRlZCB0byBLTVNBTiBhbmQgaXRzIGltcGxpY2F0aW9ucy5cblxuRmlyc3QsIEkgbG9va2VkIGF0IHRoZSBpbml0aWFsaXphdGlvbiBvZiBgbXNrX2xvY2FsYCB3aGljaCBzZWVtcyBva2F5LCBhbmQgdGhlIGBhbm5vX2FkZHJgIGxvb2tzIGxpa2UgaXQncyBwcm9wZXJseSBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIGNoYW5nZXMgdG8gYG1wdGNwX3VzZXJzcGFjZV9wbV9hcHBlbmRfbmV3X2xvY2FsX2FkZHJgIGFyZSBhIGxvZ2ljIHNoaWZ0IGluIGhvdyBgaWRgIGlzIGFsbG9jYXRlZCBidXQgZG9uJ3Qgc2VlbSBpbW1lZGlhdGVseSBjcml0aWNhbC4gQWxzbywgdGhvc2UgYml0ZmllbGQgY2hhbmdlcyBpbiBgc3luY29va2llcy5jYCBhcmUganVzdCBvcHRpbWl6aW5nIHN0cnVjdCBzaXplLCBub3QgYSBmaXggZm9yIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBTaW1pbGFybHksIHRoZSByZW1vdmFsIG9mIGFuIGFzc2lnbm1lbnQgaW4gYHN1YmZsb3dfdWxwX2Nsb25lYCBpcyBpcnJlbGV2YW50IGhlcmUuXG5cblRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBsaWVzIGluIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAgYW5kIHRoZSBjcml0aWNhbCBgZXh0LVx1MDAzZWNzdW0gPSAwO2AgZml4LiBUaGlzIHNlZW1zIGxpa2UgYSB0ZXh0Ym9vayB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIHRvIHRoZSBuZXR3b3JrLiBgb3B0cy5tcHRjcGAsIHdoaWNoIGlzIG9uIHRoZSBzdGFjayB3aXRoaW4gYF9fdGNwX3RyYW5zbWl0X3NrYmAsIGlzbid0IGJlaW5nIHByb3Blcmx5IGNsZWFyZWQuIFRoZW4sIGluIHRoZSBmdW5jdGlvbiBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gLCB0aGUgcGF0Y2ggaXMgYWRkaW5nIGBleHQtXHUwMDNlY3N1bSA9IDA7YC4gVGhpcyBtZWFucyB0aGF0IGlmIGl0J3MgY2FsbGVkIHdpdGggYERBVEFfRklOYCBhbmQgbm8gZGF0YSwgc29tZSBvZiB0aGUgZmllbGRzIGluIGBleHRgIGFyZSBpbml0aWFsaXplZCwgYnV0IGBleHQtXHUwMDNlY3N1bWAgaXMgbWlzc2VkLiBMYXRlciwgYG1wdGNwX3dyaXRlX29wdGlvbnNgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBgbXBleHQtXHUwMDNlY3N1bWAgdmlhIGBtcHRjcF9tYWtlX2NzdW1gIGFuZCB3cml0ZXMgaXQgdG8gdGhlIHBhY2tldC4gVGhpcyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0aGVuIGxlYWtzIHRvIHRoZSBuZXR3b3JrIHZpYSB0aGUgVENQIGhlYWRlciBvcHRpb25zLlxuXG5UaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgdGhpcyBpcyBhIGNsYXNzaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgaW5mb3JtYXRpb24gbGVhay4gS0FTQU4gaXMgdXNlbGVzcyBoZXJlIGJlY2F1c2UgaXQgZG9lc24ndCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXQgZm9jdXNlcyBvbiBzcGF0aWFsIGFuZCB0ZW1wb3JhbCBlcnJvcnMuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoIHRoZXNlIHR5cGVzIG9mIGxlYWtzIGJlY2F1c2UgaXQgdHJhY2tzIGluaXRpYWxpemF0aW9uIGF0IHRoZSBiaXQvYnl0ZSBsZXZlbC4gS01TQU4gd2lsbCBzZWUgdGhlIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYG1wdGNwX21ha2VfY3N1bWAuXG5cblRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOPXRydWVgIHRhZyBpcyBjb21wbGV0ZWx5IGp1c3RpZmllZCBoZXJlIGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBmb3IgdGhlIGxlYWsgb2Ygb3RoZXIgdW5pbml0aWFsaXplZCBmaWVsZHMgaW4gdGhlIE1QVENQIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0ZXN0ZWQgdGhvcm91Z2hseSB3aXRoIEtNU0FOLlxuU28sIGxldCdzIHdyaXRlIHRoaXMgZG93biBjbGVhcmx5OlxuXG4xLiAgV2UgaGF2ZSBhIHBhdGNoIGluIGBtcHRjcF93cml0ZV9kYXRhX2ZpbmAgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgIHdoaWNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGV4dC1cdTAwM2Vjc3VtID0gMDtgLlxuMi4gIGBleHRgIGlzIHBhcnQgb2YgYG9wdHMtXHUwMDNlZXh0X2NvcHlgIG9mIGBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgb3B0cy5tcHRjcGAuXG4zLiAgYG9wdHNgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgaW4gYF9fdGNwX3RyYW5zbWl0X3NrYmAgaW4gYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2AuXG40LiAgYF9fdGNwX3RyYW5zbWl0X3NrYmAgY2xlYXJzIG9ubHkgc3BlY2lmaWMgZmllbGRzIGluIGBvcHRzYCwgaXQgZXhwbGljaXRseSBsZWF2ZXMgYG9wdHMubXB0Y3BgIHVuaW5pdGlhbGl6ZWQuXG41LiAgV2hlbiBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3NgIGlzIGNhbGxlZCwgaXQgemVyb2VzIHRoZSBgZmxhZ3NgIG9mIGBvcHRzLVx1MDAzZWV4dF9jb3B5YCwgYnV0IGxlYXZlcyB0aGUgcmVzdCBvZiB0aGUgc3RydWN0IHVuaW5pdGlhbGl6ZWQgaWYgYG1wZXh0YCBpcyBOVUxMLlxuNi4gIElmIGBzbmRfZGF0YV9maW5fZW5hYmxlYCBpcyB0cnVlLCBgbXB0Y3Bfd3JpdGVfZGF0YV9maW5gIGlzIGNhbGxlZC4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgb25seSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYGV4dGAsIHdpdGggYGNzdW1gIGJlaW5nIG1pc3NlZC5cbjcuICBgbXB0Y3Bfd3JpdGVfb3B0aW9uc2AgY2FsbHMgYG1wdGNwX21ha2VfY3N1bShtcGV4dClgLCB3aGljaCByZWFkcyBgbXBleHQtXHUwMDNlY3N1bWAuXG44LiAgVGhlIGNoZWNrc3VtIGlzIHdyaXR0ZW4gdG8gdGhlIFRDUCBoZWFkZXIgYW5kIHNlbnQsIHJlc3VsdGluZyBpbiBhbiBpbmZvLWxlYWsuXG45LiAgS0FTQU4gaXMgdXNlbGVzcyBoZXJlIGJlY2F1c2UgaXQgb25seSBkZXRlY3RzIHNwYXRpYWwgYW5kIHRlbXBvcmFsIGVycm9ycy5cbjEwLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgcmVxdWlyZWQuXG5cbkkgbmVlZCB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzM4MSwiT3V0cHV0VG9rZW5zIjo0NzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTk6MzA6NDAuMjY0NzAxNTE2WiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oKWAgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgIHRvIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBgZXh0LVxcdTAwM2Vjc3VtID0gMDtgLiBUaGUgYGV4dGAgcG9pbnRlciByZWZlcnMgdG8gYG9wdHMtXFx1MDAzZWV4dF9jb3B5YCwgd2hpY2ggaXMgcGFydCBvZiBgc3RydWN0IG1wdGNwX291dF9vcHRpb25zIG9wdHMubXB0Y3BgLiBcXG5cXG5UcmFjaW5nIHRoZSBhbGxvY2F0aW9uLCBgb3B0c2AgaXMgaW5zdGFudGlhdGVkIGFzIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgaW4gYF9fdGNwX3RyYW5zbWl0X3NrYigpYCAoYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2ApLiBDcnVjaWFsbHksIGBfX3RjcF90cmFuc21pdF9za2IoKWAgb25seSBjbGVhcnMgYSBzcGVjaWZpYyBzdWJzZXQgb2YgZmllbGRzIGluIGBvcHRzYCAoYG9wdHMuY2xlYXJlZGApLCBhbmQgZXhwbGljaXRseSBsZWF2ZXMgYG9wdHMubXB0Y3BgIHVuaW5pdGlhbGl6ZWQgKGFzIG5vdGVkIGJ5IHRoZSBjb21tZW50OiBcXFwiQ2F1dGlvbjogZm9sbG93aW5nIGZpZWxkcyBhcmUgbm90IGNsZWFyZWQgaW4gX190Y3BfdHJhbnNtaXRfc2tiKClcXFwiKS5cXG5cXG5XaGVuIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zX2RzcygpYCBwcm9jZXNzZXMgb3B0aW9ucyB3aXRob3V0IGFuIGV4aXN0aW5nIGBtcGV4dGAsIGl0IHplcm9lcyB0aGUgYGZsYWdzYCBvZiBgb3B0cy1cXHUwMDNlZXh0X2NvcHlgIGJ1dCBsZWF2ZXMgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdCAoaW5jbHVkaW5nIGBjc3VtYCkgdW5pbml0aWFsaXplZC4gSWYgYSBEQVRBX0ZJTiBuZWVkcyB0byBiZSBzZW50LCBgbXB0Y3Bfd3JpdGVfZGF0YV9maW4oKWAgaXMgY2FsbGVkLiBCZWZvcmUgdGhpcyBwYXRjaCwgaXQgaW5pdGlhbGl6ZWQgc2V2ZXJhbCBmaWVsZHMgb2YgYGV4dGAgYnV0IG1pc3NlZCBgY3N1bWAuIFxcblxcblN1YnNlcXVlbnRseSwgYG1wdGNwX3dyaXRlX29wdGlvbnMoKWAgY2FsbHMgYG1wdGNwX21ha2VfY3N1bShtcGV4dClgLCB3aGljaCByZWFkcyB0aGUgdW5pbml0aWFsaXplZCBgbXBleHQtXFx1MDAzZWNzdW1gIHN0YWNrIG1lbW9yeSB0byBjb21wdXRlIHRoZSBNUFRDUCBjaGVja3N1bS4gVGhpcyBjaGVja3N1bSBpcyB0aGVuIHdyaXR0ZW4gaW50byB0aGUgVENQIGhlYWRlciBhbmQgc2VudCBvdmVyIHRoZSBuZXR3b3JrLCByZXN1bHRpbmcgaW4gYSBrZXJuZWwgc3RhY2sgbWVtb3J5IGluZm8tbGVhay5cXG5cXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgc3BhdGlhbCAob3V0LW9mLWJvdW5kcykgYW5kIHRlbXBvcmFsICh1c2UtYWZ0ZXItZnJlZSkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEl0IGRvZXMgbm90IHRyYWNrIG1lbW9yeSBpbml0aWFsaXphdGlvbiBzdGF0ZSBhbmQgY2Fubm90IGRldGVjdCByZWFkcyBvZiBsZWdhbGx5IGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBvciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGJ1ZyBhbmQgdmVyaWZ5IHRoYXQgbm8gb3RoZXIgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGxlYWtlZCBpbiBNUFRDUCBvcHRpb25zLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG1wdGNwX3dyaXRlX2RhdGFfZmluKClgIGluIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYGV4dC1cXHUwMDNlY3N1bSA9IDA7YC4gVGhlIGBleHRgIHBvaW50ZXIgcmVmZXJzIHRvIGBvcHRzLVxcdTAwM2VleHRfY29weWAsIHdoaWNoIGlzIHBhcnQgb2YgYHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyBvcHRzLm1wdGNwYC4gXFxuXFxuVHJhY2luZyB0aGUgYWxsb2NhdGlvbiwgYG9wdHNgIGlzIGluc3RhbnRpYXRlZCBhcyBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGluIGBfX3RjcF90cmFuc21pdF9za2IoKWAgKGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgKS4gQ3J1Y2lhbGx5LCBgX190Y3BfdHJhbnNtaXRfc2tiKClgIG9ubHkgY2xlYXJzIGEgc3BlY2lmaWMgc3Vic2V0IG9mIGZpZWxkcyBpbiBgb3B0c2AgKGBvcHRzLmNsZWFyZWRgKSwgYW5kIGV4cGxpY2l0bHkgbGVhdmVzIGBvcHRzLm1wdGNwYCB1bmluaXRpYWxpemVkIChhcyBub3RlZCBieSB0aGUgY29tbWVudDogXFxcIkNhdXRpb246IGZvbGxvd2luZyBmaWVsZHMgYXJlIG5vdCBjbGVhcmVkIGluIF9fdGNwX3RyYW5zbWl0X3NrYigpXFxcIikuXFxuXFxuV2hlbiBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc19kc3MoKWAgcHJvY2Vzc2VzIG9wdGlvbnMgd2l0aG91dCBhbiBleGlzdGluZyBgbXBleHRgLCBpdCB6ZXJvZXMgdGhlIGBmbGFnc2Agb2YgYG9wdHMtXFx1MDAzZWV4dF9jb3B5YCBidXQgbGVhdmVzIHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3QgKGluY2x1ZGluZyBgY3N1bWApIHVuaW5pdGlhbGl6ZWQuIElmIGEgREFUQV9GSU4gbmVlZHMgdG8gYmUgc2VudCwgYG1wdGNwX3dyaXRlX2RhdGFfZmluKClgIGlzIGNhbGxlZC4gQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IGluaXRpYWxpemVkIHNldmVyYWwgZmllbGRzIG9mIGBleHRgIGJ1dCBtaXNzZWQgYGNzdW1gLiBcXG5cXG5TdWJzZXF1ZW50bHksIGBtcHRjcF93cml0ZV9vcHRpb25zKClgIGNhbGxzIGBtcHRjcF9tYWtlX2NzdW0obXBleHQpYCwgd2hpY2ggcmVhZHMgdGhlIHVuaW5pdGlhbGl6ZWQgYG1wZXh0LVxcdTAwM2Vjc3VtYCBzdGFjayBtZW1vcnkgdG8gY29tcHV0ZSB0aGUgTVBUQ1AgY2hlY2tzdW0uIFRoaXMgY2hlY2tzdW0gaXMgdGhlbiB3cml0dGVuIGludG8gdGhlIFRDUCBoZWFkZXIgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgcmVzdWx0aW5nIGluIGEga2VybmVsIHN0YWNrIG1lbW9yeSBpbmZvLWxlYWsuXFxuXFxuU3RhbmRhcmQgS0FTQU4gb25seSBkZXRlY3RzIHNwYXRpYWwgKG91dC1vZi1ib3VuZHMpIGFuZCB0ZW1wb3JhbCAodXNlLWFmdGVyLWZyZWUpIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJdCBkb2VzIG5vdCB0cmFjayBtZW1vcnkgaW5pdGlhbGl6YXRpb24gc3RhdGUgYW5kIGNhbm5vdCBkZXRlY3QgcmVhZHMgb2YgbGVnYWxseSBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2Ugb3IgdGhlIG5ldHdvcmsuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGhpZ2hseSBqdXN0aWZpZWQgdG8gY2F0Y2ggdGhpcyBidWcgYW5kIHZlcmlmeSB0aGF0IG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBsZWFrZWQgaW4gTVBUQ1Agb3B0aW9ucy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:nil,}