Name: series-workflowz97jf Phase: Succeeded StartedAt: 2026-09-12 15:53:15 +0000 UTC FinishedAt: 2026-09-12 19:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[0] Phase: Succeeded StartedAt: 2026-09-12 15:53:15 +0000 UTC FinishedAt: 2026-09-12 15:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 15:53:15 +0000 UTC FinishedAt: 2026-09-12 15:59:03 +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": "211f2a875f6f447745d80d5762d6d614503ac84a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP", "BPF_SYSCALL" ], "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": "211f2a875f6f447745d80d5762d6d614503ac84a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP", "BPF_SYSCALL" ], "series_id": "dddb82c2-5096-436d-891e-0d027167b301" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sk_stream_wait_memory", "tcp_splice_read", "tcp_sendmsg_locked", "tcp_recvmsg_locked", "tcp_bpf_sendmsg", "tcp_bpf_recvmsg_parser", "mptcp_sendmsg", "mptcp_recvmsg", "mptcp_splice_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "211f2a875f6f447745d80d5762d6d614503ac84a", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19zdHJlYW1fd2FpdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7dGNwX3NwbGljZV9yZWFkJiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt0Y3BfcmVjdm1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3NwbGljZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB0byByZWFkcyBvZiBzay1cdTAwM2Vza19lcnIgYWNyb3NzIFRDUCwgTVBUQ1AsIGFuZCBjb3JlIHN0cmVhbSBzb2NrZXQgZnVuY3Rpb25zIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgcmUtcmVhZGluZyBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGFjY2Vzc2VkIGxvY2tsZXNzbHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFN0cnVjdCBzb2NrIGFuZCBpdHMgc2tfZXJyIGZpZWxkIGFyZSBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIHVwb24gc29ja2V0IGNyZWF0aW9uLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBwb3NlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFubm90YXRlcyBsb2NrbGVzcyByZWFkcyBvZiBzay1cdTAwM2Vza19lcnIgd2l0aCBSRUFEX09OQ0UoKSBhY3Jvc3MgVENQLCBNUFRDUCwgc3RyZWFtIHNvY2tldCB3YWl0IHBhdGhzLCBhbmQgVENQIEJQRiBoZWxwZXJzIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgaW1wcm9wZXIgY29tcGlsZXIgb3B0aW1pemF0aW9ucyB3aGVuIHNrX2VyciBpcyBjb25jdXJyZW50bHkgY2xlYXJlZCBieSBzb2NrX2Vycm9yKCkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4gY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbXMgKFRDUCwgTVBUQ1AsIGFuZCBzb2NrbWFwIEJQRiksIG1ha2luZyBpdCB2YWx1YWJsZSB0byBmdXp6IGZvciBzdWJ0bGUgY29uY3VycmVuY3kgcmVncmVzc2lvbnMgYW5kIGVycm9yLWhhbmRsaW5nIGNvcnJlY3RuZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjA1MzhjZGJjMzEwYTI4YTAwZmZhYjVmMDI2MTZmYzM2OGYxMjE1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE1OjU1OjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcbmluZGV4IDVlNWY1ZjliODlhMzguLjZlZTUxM2JkYjUwMzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvdGNwLmhcbkBAIC0zMDkzLDcgJiM0MzszMDkzLDggQEAgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2luYm91bmRfaGFzaChzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gc3RhdGljIGlubGluZSBpbnQgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxuIHtcbi1cdHJldHVybiBzay1cdTAwM2Vza19lcnIgfHxcbiYjNDM7XHQvKiBza19lcnIgY2FuIGJlIGNsZWFyZWQgbG9ja2xlc3NseSBieSBzb2NrX2Vycm9yKCkuICovXG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpIHx8XG4gXHQgICAgICAgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFIHx8XG4gXHQgICAgICAgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHx8XG4gXHQgICAgICAgc2lnbmFsX3BlbmRpbmcoY3VycmVudCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3RyZWFtLmMgYi9uZXQvY29yZS9zdHJlYW0uY1xuaW5kZXggMmQ3NDg1ODE4NjJkMC4uNWMwYWRjMzA3N2YwMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3N0cmVhbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zdHJlYW0uY1xuQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgaW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApXG4gXHR3aGlsZSAoMSkge1xuIFx0XHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCBzayk7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbiYjNDM7XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSB8fCAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFNFTkRfU0hVVERPV04pKVxuIFx0XHRcdGdvdG8gZG9fZXJyb3I7XG4gXHRcdGlmICghKnRpbWVvX3ApXG4gXHRcdFx0Z290byBkb19lYWdhaW47XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggMWM4NjdhMzAyNDQ0Ni4uOWU3ZmE3ZTM5NzI2NSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTg0Myw3ICYjNDM7ODQzLDcgQEAgc3NpemVfdCB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbiYjNDM7XHRcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0XHRyZXQgPSBzb2NrX2Vycm9yKHNrKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbkBAIC0xMjI4LDcgJiM0MzsxMjI4LDcgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRtc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCBcdTAwMjZzaXplX2dvYWwsIGZsYWdzKTtcbiBcbiBcdGVyciA9IC1FUElQRTtcbi1cdGlmIChzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbiBcdFx0Z290byBkb19lcnJvcjtcbiBcbiBcdHdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykpIHtcbkBAIC0yNzYwLDcgJiM0MzsyNzYwLDcgQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbiYjNDM7XHRcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0XHRjb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmE5NjMyM2U2NTc1OGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTI4Niw3ICYjNDM7Mjg2LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbi1cdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuJiM0MztcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC01NTMsMTAgJiM0Mzs1NTMsOSBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdGJvb2wgZW5vc3BjID0gZmFsc2U7XG4gXHRcdHUzMiBjb3B5LCBvc2l6ZTtcbiBcbi1cdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuLVx0XHRcdGVyciA9IC1zay1cdTAwM2Vza19lcnI7XG4mIzQzO1x0XHRlcnIgPSAtUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2Vycik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X2Vycjtcbi1cdFx0fVxuIFxuIFx0XHRjb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpO1xuIFx0XHRpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggZTFmMDhmNzFjZGIxNi4uNzYzMWZhNTgyODM0NyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTIwMjgsNyAmIzQzOzIwMjgsNyBAQCBzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHR9XG4gXG4gXHRyZXQgPSAtRVBJUEU7XG4tXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZXJyIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpKVxuJiM0MztcdGlmICh1bmxpa2VseShSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSB8fCAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFNFTkRfU0hVVERPV04pKSlcbiBcdFx0Z290byBkb19lcnJvcjtcbiBcbiBcdHBmcmFnID0gc2tfcGFnZV9mcmFnKHNrKTtcbkBAIC0yNDI5LDcgJiM0MzsyNDI5LDcgQEAgc3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdCAgICAhdGltZW8pXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4mIzQzO1x0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG5AQCAtNDY1NSw3ICYjNDM7NDY1NSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1wdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4mIzQzO1x0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3N0cmVhbV93YWl0X21lbW9yeSYjMzQ7LAogICAgJiMzNDt0Y3Bfc3BsaWNlX3JlYWQmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O3RjcF9yZWN2bXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDttcHRjcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc3BsaWNlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYW5ub3RhdGVzIGxvY2tsZXNzIHJlYWRzIG9mIHNrLVx1MDAzZXNrX2VyciB3aXRoIFJFQURfT05DRSgpIGFjcm9zcyBUQ1AsIE1QVENQLCBzdHJlYW0gc29ja2V0IHdhaXQgcGF0aHMsIGFuZCBUQ1AgQlBGIGhlbHBlcnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBpbXByb3BlciBjb21waWxlciBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkIGJ5IHNvY2tfZXJyb3IoKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyAoVENQLCBNUFRDUCwgYW5kIHNvY2ttYXAgQlBGKSwgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHN1YnRsZSBjb25jdXJyZW5jeSByZWdyZXNzaW9ucyBhbmQgZXJyb3ItaGFuZGxpbmcgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMDUzOGNkYmMzMTBhMjhhMDBmZmFiNWYwMjYxNmZjMzY4ZjEyMTU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTU6NTU6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDVlNWY1ZjliODlhMzguLjZlZTUxM2JkYjUwMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0zMDkzLDcgJiM0MzszMDkzLDggQEAgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2luYm91bmRfaGFzaChzdHJ1Y3Qgc29jayAqc2ssCiAKIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9yZWN2X3Nob3VsZF9zdG9wKHN0cnVjdCBzb2NrICpzaykKIHsKLQlyZXR1cm4gc2stJmd0O3NrX2VyciB8fAomIzQzOwkvKiBza19lcnIgY2FuIGJlIGNsZWFyZWQgbG9ja2xlc3NseSBieSBzb2NrX2Vycm9yKCkuICovCiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoc2stJmd0O3NrX2VycikgfHwKIAkgICAgICAgc2stJmd0O3NrX3N0YXRlID09IFRDUF9DTE9TRSB8fAogCSAgICAgICAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgfHwKIAkgICAgICAgc2lnbmFsX3BlbmRpbmcoY3VycmVudCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zdHJlYW0uYyBiL25ldC9jb3JlL3N0cmVhbS5jCmluZGV4IDJkNzQ4NTgxODYyZDAuLjVjMGFkYzMwNzdmMDMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3N0cmVhbS5jCkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIGludCBza19zdHJlYW1fd2FpdF9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lb19wKQogCXdoaWxlICgxKSB7CiAJCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTsKIAotCQlpZiAoc2stJmd0O3NrX2VyciB8fCAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFNFTkRfU0hVVERPV04pKQomIzQzOwkJaWYgKFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSB8fCAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFNFTkRfU0hVVERPV04pKQogCQkJZ290byBkb19lcnJvcjsKIAkJaWYgKCEqdGltZW9fcCkKIAkJCWdvdG8gZG9fZWFnYWluOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAxYzg2N2EzMDI0NDQ2Li45ZTdmYTdlMzk3MjY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuYwpAQCAtODQzLDcgJiM0Mzs4NDMsNyBAQCBzc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsCiAJCQkJYnJlYWs7CiAJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQogCQkJCWJyZWFrOwotCQkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpKSB7CiAJCQkJcmV0ID0gc29ja19lcnJvcihzayk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMjI4LDcgJiM0MzsxMjI4LDcgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJmFtcDtzaXplX2dvYWwsIGZsYWdzKTsKIAogCWVyciA9IC1FUElQRTsKLQlpZiAoc2stJmd0O3NrX2VyciB8fCAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFNFTkRfU0hVVERPV04pKQomIzQzOwlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpCiAJCWdvdG8gZG9fZXJyb3I7CiAKIAl3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpKSB7CkBAIC0yNzYwLDcgJiM0MzsyNzYwLDcgQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQogCQkJCWJyZWFrOwogCi0JCQlpZiAoc2stJmd0O3NrX2VycikgewomIzQzOwkJCWlmIChSRUFEX09OQ0Uoc2stJmd0O3NrX2VycikpIHsKIAkJCQljb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuYwppbmRleCAyZTIzNGQxNTViNWU2Li5hOTYzMjNlNjU3NThlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2JwZi5jCkBAIC0yODYsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpCiAJCQlnb3RvIG91dDsKIAotCQlpZiAoc2stJmd0O3NrX2VycikgewomIzQzOwkJaWYgKFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSkgewogCQkJY29waWVkID0gc29ja19lcnJvcihzayk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNTUzLDEwICYjNDM7NTUzLDkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQlib29sIGVub3NwYyA9IGZhbHNlOwogCQl1MzIgY29weSwgb3NpemU7CiAKLQkJaWYgKHNrLSZndDtza19lcnIpIHsKLQkJCWVyciA9IC1zay0mZ3Q7c2tfZXJyOwomIzQzOwkJZXJyID0gLVJFQURfT05DRShzay0mZ3Q7c2tfZXJyKTsKJiM0MzsJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9lcnI7Ci0JCX0KIAogCQljb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpOwogCQlpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGUxZjA4ZjcxY2RiMTYuLjc2MzFmYTU4MjgzNDcgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0yMDI4LDcgJiM0MzsyMDI4LDcgQEAgc3RhdGljIGludCBtcHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogCX0KIAogCXJldCA9IC1FUElQRTsKLQlpZiAodW5saWtlbHkoc2stJmd0O3NrX2VyciB8fCAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFNFTkRfU0hVVERPV04pKSkKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSB8fCAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFNFTkRfU0hVVERPV04pKSkKIAkJZ290byBkb19lcnJvcjsKIAogCXBmcmFnID0gc2tfcGFnZV9mcmFnKHNrKTsKQEAgLTI0MjksNyAmIzQzOzI0MjksNyBAQCBzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCQkgICAgIXRpbWVvKQogCQkJCWJyZWFrOwogCQl9IGVsc2UgewotCQkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpKSB7CiAJCQkJY29waWVkID0gc29ja19lcnJvcihzayk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC00NjU1LDcgJiM0Mzs0NjU1LDcgQEAgc3RhdGljIHNzaXplX3QgbXB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLAogCQkJCWJyZWFrOwogCQkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkKIAkJCQlicmVhazsKLQkJCWlmIChzay0mZ3Q7c2tfZXJyKSB7CiYjNDM7CQkJaWYgKFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSkgewogCQkJCXJldCA9IHNvY2tfZXJyb3Ioc2spOwogCQkJCWJyZWFrOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IENvcmUgTmV0d29ya2luZyBNb2RpZmljYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgc2V2ZXJhbCBpbnN0YW5jZXMgb2YgYHNrLSZndDtza19lcnJgIHJlYWRzIGFjcm9zcyB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGluIGB0Y3AuaGAsIGBzdHJlYW0uY2AsIHZhcmlvdXMgYHRjcC5jYCBmaWxlcyAoaW5jbHVkaW5nIHRoZSBCUEYgYW5kIE1QVENQIHZhcmlhbnRzKS4gSXQmIzM5O3MgYWRkaW5nIGBSRUFEX09OQ0UoKWAgdG8gdGhlc2UgcmVhZHMsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBsaWtlbHkgYWRkcmVzc2VzIGlzc3VlcyBmbGFnZ2VkIGJ5IGEgdG9vbCBsaWtlIEtDU0FOIG9yIHBvdGVudGlhbCBjb21waWxlciBvcHRpbWl6YXRpb24gcHJvYmxlbXMuIFRoaXMgaXMgYWxsICpjb3JlKiBuZXR3b3JraW5nIHN0dWZmLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoaXMgcmVxdWlyZXMgZnV6emluZyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZ3VpZGVsaW5lcy4gSSBuZWVkIHRvIGJlIGRpbGlnZW50IGFib3V0IHRoaXMga2luZCBvZiBjaGFuZ2UsIHNpbmNlIHRoZSBwYXRjaCBhdXRob3IgbWlnaHQgY2xhaW0gJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSwmIzM0OyBidXQgdGhhdCBpcyBub3Qgc3VmZmljaWVudC4KCkxvb2tpbmcgYXQgdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2hhbmdlLgoKSSYjMzk7bSBjaGVja2luZyB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZmlyc3QuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGRlZmluaXRlbHkgKm5vdCogZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBidWlsZCBzeXN0ZW0gY2hhbmdlcy4gSXQmIzM5O3Mgbm90IHVucmVhY2hhYmxlIGhhcmR3YXJlIG9yIGV4Y2x1c2l2ZSB0byBvdGhlciBhcmNoaXRlY3R1cmVzLiBJdCYjMzk7cyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLiBTbywgdGhlICYjMzQ7bmVnYXRpdmUgY3JpdGVyaWEmIzM0OyBhbGwgZmFpbC4KCk5vdywgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBTZWN0aW9uIDMgaXMgY2xlYXI6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzogQ29yZSBTdWJzeXN0ZW1zOiAuLi4gY29yZSBuZXR3b3JraW5nLi4uJiMzNDsuIEJpbmdvISBUaGlzICphYnNvbHV0ZWx5KiBmYWxscyB1bmRlciB0aGF0IGRlZmluaXRpb24uIENoYW5naW5nIHRoaXMsIGV2ZW4gaWYgaXQgKnNlZW1zKiBsaWtlIGEgc2ltcGxlIGNoYW5nZSwgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIHRodXMgbmVlZHMgdG8gYmUgZnV6emVkLiBBZGRpbmcgYFJFQURfT05DRWAgY2FuLCBmb3IgZXhhbXBsZSwgZGlzYWJsZSBzb21lIG9wdGltaXphdGlvbnMgdGhhdCBkZXBlbmQgb24gc3BlY2lmaWMgb3JkZXJpbmcgYXNzdW1wdGlvbnMsIGFuZCByZXZlYWwgYSBoaWRkZW4gYnVnIG9yIGEgbmV3IGNvZGUgcGF0aC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGxvYWQvc3RvcmUgY29kZS4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgKm11c3QqIGJlIGB0cnVlYC4gSSYjMzk7bGwgbm93IGNoZWNrIHRoZSBjb21taXQgbG9nIGluIGdpdCB0byBzZWUgaWYgYW55IG1vcmUgZGV0YWlscyBjYW4gYmUgZ2xlYW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19lcnIgY2FuIGJlIGNsZWFyZWQgbG9ja2xlc3NseSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0zMDk0PXN0YXRpYyBpbmxpbmUgaW50IHRjcF9yZWN2X3Nob3VsZF9zdG9wKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3RjcC5oLTMwOTUte1xuaW5jbHVkZS9uZXQvdGNwLmg6MzA5NjpcdC8qIHNrX2VyciBjYW4gYmUgY2xlYXJlZCBsb2NrbGVzc2x5IGJ5IHNvY2tfZXJyb3IoKS4gKi9cbmluY2x1ZGUvbmV0L3RjcC5oLTMwOTctXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTM2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgVENQL01QVENQIERhdGEgRmxvdyBhbmQgUG90ZW50aWFsIEJvdHRsZW5lY2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93IGFuZCBwb3RlbnRpYWwgY2hva2UgcG9pbnRzIHdpdGhpbiB0aGUgVENQIGFuZCBNUFRDUCBzdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgb2YgZm9jdXNpbmcgb24gYSBzcGVjaWZpYyBzZXQgb2Yga2V5IGZ1bmN0aW9uczogYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9zZW5kbXNnYCwgdGhlbiBJJiMzOTtsbCBsb29rIGludG8gYG1wdGNwX3NlbmRtc2dgLCBgbXB0Y3BfcmVjdm1zZ2AsIGBtcHRjcF9zcGxpY2VfcmVhZGAsIGB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGFuZCBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgc3VzcGVjdHMgd2hlcmUgZGF0YSBpcyBiZWluZyBwcm9jZXNzZWQsIGNvcGllZCwgYW5kIHF1ZXVlZC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGNhbiBnZXQgYSBnb29kIG92ZXJ2aWV3IGJ5IGZvY3VzaW5nIG9uIHRob3NlLgoKTm93LCBhbiBpbXBvcnRhbnQgZmFjdG9yIGluIHRoZSBkYXRhIGZsb3cgaXMgZGV0ZXJtaW5pbmcgd2hlbiB0byBwYXVzZSB0cmFuc21pc3Npb24sIGFuZCBJIHJlbWVtYmVyIGB0Y3BfcmVjdl9zaG91bGRfc3RvcGAgcGxheXMgYSByb2xlIGluIGl0LiBTbyBJIG5lZWQgdG8gc2VlIHdobyYjMzk7cyBjYWxsaW5nICp0aGF0KiBmdW5jdGlvbi4gSSYjMzk7bGwgcmVhY2ggZm9yIGBncmVwcGVyYCB0byBxdWlja2x5IHRyYWNrIGRvd24gYWxsIG9mIHRoZSBjYWxsIHNpdGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBsYXJnZXIgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBkYXRhIHJlY2VwdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcmVjdl9zaG91bGRfc3RvcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0zMDg5PWVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9pbmJvdW5kX2hhc2goc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTMwOTMtXG5pbmNsdWRlL25ldC90Y3AuaDozMDk0OnN0YXRpYyBpbmxpbmUgaW50IHRjcF9yZWN2X3Nob3VsZF9zdG9wKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3RjcC5oLTMwOTUte1xuLS1cbm5ldC9pcHY0L3RjcC5jPTgxMT1zc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L2lwdjQvdGNwLmMtODg2LVxubmV0L2lwdjQvdGNwLmM6ODg3Olx0XHRpZiAodGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spKVxubmV0L2lwdjQvdGNwLmMtODg4LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTI2NTY9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjc1Ni1cdFx0XHRpZiAoIXRpbWVvIHx8XG5uZXQvaXB2NC90Y3AuYzoyNzU3Olx0XHRcdCAgICB0Y3BfcmVjdl9zaG91bGRfc3RvcChzaykpXG5uZXQvaXB2NC90Y3AuYy0yNzU4LVx0XHRcdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjM3ND1zdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQyNy1cdFx0aWYgKGNvcGllZCkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjQyODpcdFx0XHRpZiAodGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spIHx8XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDI5LVx0XHRcdCAgICAhdGltZW8pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDYyND1zdGF0aWMgc3NpemVfdCBtcHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY5OC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2OTk6XHRcdGlmICh0Y3BfcmVjdl9zaG91bGRfc3RvcChzaykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NzAwLVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNjkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1vZGlmaWVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O20gc2VlaW5nIGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmVncmVzc2lvbnMgd2l0aGluIHRoZXNlIG5ldHdvcmsgY29yZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZW0gYW5kIHVuZGVyc3RhbmQgdGhlIGV4dGVudCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCkhlcmXigJlzIG15IG1lbnRhbCBjaGVja2xpc3Q6CiogICBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCBpbiBgbmV0L2NvcmUvc3RyZWFtLmNgIC0gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLCBzbyBhbnkgY2hhbmdlIGhlcmUgaXMgaW1tZWRpYXRlbHkgc3VzcGVjdC4KKiAgIGB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGluIGBuZXQvaXB2NC90Y3AuY2AgLSBUaGVzZSBhcmUgY3JpdGljYWwgZm9yIGRhdGEgdHJhbnNmZXI7IGNoYW5nZXMgaGVyZSBuZWNlc3NpdGF0ZSB0aG9yb3VnaCBpbnNwZWN0aW9uLgoqICAgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9zZW5kbXNnYCBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCAtIEJQRiBob29rcywgd2hpY2ggY291bGQgaW5kaWNhdGUgaW5zdHJ1bWVudGF0aW9uIG9yIHBvdGVudGlhbCBjb250cm9sIGZsb3cgY2hhbmdlcy4KKiAgIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIC0gTVBUQ1Atc3BlY2lmaWMsIGFueSBjaGFuZ2VzIHRvIHRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS4KCkFuZCB0aGVuIHRoZXJlJiMzOTtzIHRoZSBgaW5jbHVkZS9uZXQvdGNwLmhgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCBmdW5jdGlvbiwgaW5saW5lZCBpbnRvIHNldmVyYWwgb3RoZXIga2V5IGZ1bmN0aW9ucy4gVGhpcyBpcyBwb3RlbnRpYWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gSXRzIHVzZSBpbiBzbyBtYW55IG90aGVyIGtleSBmdW5jdGlvbnMgbWVhbnMgaXQgaXMgdmVyeSBpbXBvcnRhbnQuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGFuZCBgdGNwX3NlbmRtc2dfbG9ja2VkYCBzcGVjaWZpY2FsbHkuIEFyZSB0aGV5IGRlY2xhcmVkIHN0YXRpYyBvciBub24tc3RhdGljPyBJIG5lZWQgdG8ga25vdyB0aGVpciB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC9pcHY0L3RjcC5jYCBhbmQgZmlndXJlIHRoaXMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZHx0Y3BfcmVjdm1zZ19sb2NrZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0xMTE0PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcbm5ldC9pcHY0L3RjcC5jLTExMTUtXG5uZXQvaXB2NC90Y3AuYzoxMTE2OmludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2lwdjQvdGNwLmMtMTExNy17XG4tLVxubmV0L2lwdjQvdGNwLmMtMTI0MC1cbm5ldC9pcHY0L3RjcC5jOjEyNDE6XHRcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XG5uZXQvaXB2NC90Y3AuYy0xMjQyLVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE0NDQtfVxubmV0L2lwdjQvdGNwLmM6MTQ0NTpFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2VuZG1zZ19sb2NrZWQpO1xubmV0L2lwdjQvdGNwLmMtMTQ0Ni1cbm5ldC9pcHY0L3RjcC5jPTE0NDc9aW50IHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDUxLVx0bG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jOjE0NTI6XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2l6ZSk7XG5uZXQvaXB2NC90Y3AuYy0xNDUzLVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0xOTM2PXN0YXRpYyB2b2lkIHRjcF96ZXJvY29weV9zZXRfaGludF9mb3Jfc2tiKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3AuYy0xOTcyLVxubmV0L2lwdjQvdGNwLmM6MTk3MzpzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9pcHY0L3RjcC5jLTE5NzQtXHRcdFx0ICAgICAgaW50IGZsYWdzLCBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCAqdHNzLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTE5NzY9c3RhdGljIGludCByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTE5OTQtXG5uZXQvaXB2NC90Y3AuYzoxOTk1Olx0ZXJyID0gdGNwX3JlY3Ztc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2csIGlucSwgTVNHX0RPTlRXQUlULFxubmV0L2lwdjQvdGNwLmMtMTk5Ni1cdFx0XHRcdCB0c3MsIFx1MDAyNnpjLVx1MDAzZW1zZ19mbGFncyk7XG4tLVxubmV0L2lwdjQvdGNwLmM9MjUwMD1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwLmMtMjY1NS1cbm5ldC9pcHY0L3RjcC5jOjI2NTY6c3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvaXB2NC90Y3AuYy0yNjU3LVx0XHRcdCAgICAgIGludCBmbGFncywgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcyxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yOTMxPWludCB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTI5NDQtXHRsb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdGNwLmM6Mjk0NTpcdHJldCA9IHRjcF9yZWN2bXNnX2xvY2tlZChzaywgbXNnLCBsZW4sIGZsYWdzLCBcdTAwMjZ0c3MsIFx1MDAyNmNtc2dfZmxhZ3MpO1xubmV0L2lwdjQvdGNwLmMtMjk0Ni1cdHJlbGVhc2Vfc29jayhzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gVENQIEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCYjMzk7cyBleHBvc2VkLCBgRVhQT1JUX1NZTUJPTF9HUExgIHRvIGJlIHByZWNpc2UsIHdoaWNoIG1lYW5zIGtUTFMsIHRjcF9icGYgYW5kIGB0Y3Bfc2VuZG1zZ2AgY2FuIGFsbCBjYWxsIGl0LiBUaGF0IG1ha2VzIHNlbnNlLCBhIGNydWNpYWwgaW50ZXJuYWwgZnVuY3Rpb24gbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBmb3IgdGhvc2UgZmVhdHVyZXMuCgpCdXQgd2FpdCBhIHNlY29uZC4uLiB3aGF0IGFib3V0IHRoZSByZWNlaXZlIHNpZGU/IElzIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIHZpc2libGUgaW4gdGhlIHNhbWUgd2F5PyBIbW1tLCBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIGRlY2xhcmVkICpzdGF0aWMqLiBOZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCBjb3VsZCBjaGFuZ2UgdGhlIGZsb3cgaW4gYSBzdWJ0bGUgd2F5LiBHb3R0YSByZW1lbWJlciB0byBrZWVwIGFuIGV5ZSBvbiBob3cgdGhhdCBpbXBhY3RzIHRoZSBzdGFjay4KCkp1c3QgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBlZGdlIGNhc2VzLCBsZXQmIzM5O3MgYWxzbyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgdGNwX3NwbGljZV9yZWFkYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBleHBvc3VyZS4gSXMgaXQgZXhwb3J0ZWQsIG9yIGlzIGl0IGFsc28gYSBzdGF0aWMgaW50ZXJuYWwgZnVuY3Rpb24/IFRoZSBpbXBsaWNhdGlvbnMgZm9yIGtlcm5lbCBpbnRlcm5hbHMgYW5kIHNlY3VyaXR5IGNvdWxkIGRpZmZlciBzaWduaWZpY2FudGx5IGJhc2VkIG9uIHRoYXQgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzc2l6ZV90IHRjcF9zcGxpY2VfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTc4OD1zdGF0aWMgaW50IF9fdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zcGxpY2Vfc3RhdGUgKnRzcylcbi0tXG5uZXQvaXB2NC90Y3AuYy04MTAtICoqL1xubmV0L2lwdjQvdGNwLmM6ODExOnNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbm5ldC9pcHY0L3RjcC5jLTgxMi1cdFx0XHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTk2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBUQ1AgRGF0YSBGbG93KioKCk9rYXksIHNvIGB0Y3Bfc3BsaWNlX3JlYWRgIGlzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfc2VuZG1zZ2AuIEFyZSB0aGV5IHJlbGF0ZWQsIGFuZCBob3c/IFRvIGZpbmQgb3V0LCBJIHNob3VsZCBkaXZlIGludG8gYHRjcF9icGYuY2AuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBleHBsb3JpbmcgaG93IHRoZXNlIGRpZmZlcmVudCBmdW5jdGlvbnMgd29yayB0b2dldGhlciB3aXRoaW4gdGhlIFRDUCBkYXRhIGZsb3cuIEkgd2FudCB0byBzZWUgaG93IHRoZSBCUEYgaW50ZWdyYXRpb24gcGxheXMgd2l0aCB0aGUgZGF0YSBwYXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYHRjcF9icGYuY2AgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyfHRjcF9icGZfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MTUzPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjE2NDppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NS1cdFx0XHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE3Ny19XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTc4OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NDE4PXN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy00ODYtXHRcdG9yaWdzaXplID0gbXNnLVx1MDAzZXNnLnNpemU7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NDg3Olx0XHRyZXQgPSB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc2tfcmVkaXIsIHJlZGlyX2luZ3Jlc3MsXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg4LVx0XHRcdFx0XHQgICAgbXNnLCB0b3NlbmQsIGZsYWdzKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjUzNDpzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTM1LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM5PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY0OS1cdHByb3RbVENQX0JQRl9UWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTA6XHRwcm90W1RDUF9CUEZfVFhdLnNlbmRtc2dcdFx0PSB0Y3BfYnBmX3NlbmRtc2c7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUxLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Mi1cdHByb3RbVENQX0JQRl9SWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTM6XHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1NC1cbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXHRwcm90W1RDUF9CUEZfVFhSWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9UWF07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU2Olx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny19XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY4OT1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzEyLVx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxubmV0L2lwdjQvdGNwX2JwZi5jOjcxMzpcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzE0LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDY1CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgRnVuY3Rpb24gU3ltYm9sIEVsaWdpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3NlbmRtc2dgIOKAkyB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBgdGNwX2JwZi5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhleSBiZSBjb25zaWRlcmVkIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXM/CgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIEZvY3VzU3ltYm9sIHJ1bGVzOiBXZSYjMzk7cmUgc3VwcG9zZWQgdG8gYXZvaWQgdWJpcXVpdG91cyBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIG5vdGhpbmcgY2FsbGVkIGJ5ICpldmVyeSogcHJvZ3JhbS4gV2Ugd2FudCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgYWJvdXQgc3RhdGljICppbmxpbmUqIGZ1bmN0aW9ucyBpcyBpbnRlcmVzdGluZywgYmVjYXVzZSB0aG9zZSBjYW4mIzM5O3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGluIGEgYC5jYCBmaWxlLCBhbmQgdW5sZXNzIHRoZSBjb21waWxlciBpbmxpbmVzIHRoZW0sIHRoZXkgKmRvKiBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdGhlIHZtbGludXggaW1hZ2UuIFRoaXMgaXMgaW1wb3J0YW50LCBlc3BlY2lhbGx5IHNpbmNlIEkga25vdyBgdGNwX2JwZl9zZW5kbXNnYCBpcyBhc3NpZ25lZCB0byBgcHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnYCwgc28gaXQgKnNob3VsZCogaGF2ZSBhbiBhZGRyZXNzLgoKVGhhdCBzYWlkLCBJIHdvbmRlciBhYm91dCBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBzcGFjZS4gTm93LCB3aGF0IGFib3V0IGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYD8gSSBuZWVkIHRvIGNoZWNrIHRob3NlIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfc2VuZG1zZ3xtcHRjcF9yZWN2bXNnfG1wdGNwX3NwbGljZV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MTI2MT1tcHRjcF9jYXJ2ZV9kYXRhX2ZyYWcoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTI3OC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEyNzk6c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMjgwLVx0aW50IG1zc19ub3c7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTM3ND1zdGF0aWMgdm9pZCBtcHRjcF91cGRhdGVfaW5maW5pdGVfbWFwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTM5NC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzOTU6c3RhdGljIGludCBtcHRjcF9zZW5kbXNnX2ZyYWcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTM5Ni1cdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzOTc6XHRcdFx0ICAgICAgc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyAqaW5mbylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzOTgte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MzMtXHRcdG1wdGNwX3VwZGF0ZV9pbmZpbml0ZV9tYXAobXNrLCBzc2ssIG1wZXh0KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE1MzQ6XHR0cmFjZV9tcHRjcF9zZW5kbXNnX2ZyYWcobXBleHQpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTUzNS1cdG1wdGNwX3N1YmZsb3dfY3R4KHNzayktXHUwMDNlcmVsX3dyaXRlX3NlcSAmIzQzOz0gY29weTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNTg3PXN0cnVjdCBzb2NrICptcHRjcF9zdWJmbG93X2dldF9zZW5kKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY2Mi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE2NjM6c3RhdGljIHZvaWQgbXB0Y3BfcHVzaF9yZWxlYXNlKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gKmluZm8pXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjY0LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNzA1PXN0YXRpYyBpbnQgX19zdWJmbG93X3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNzA2Olx0XHRcdFx0ICBzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvICppbmZvKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTcwNy17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTcxOC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE3MTk6XHRcdFx0cmV0ID0gbXB0Y3Bfc2VuZG1zZ19mcmFnKHNrLCBzc2ssIGRmcmFnLCBpbmZvKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE3MjAtXHRcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNzQ5PXZvaWQgX19tcHRjcF9wdXNoX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTc1Mi1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNzUzOlx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0ge1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTc1NC1cdFx0XHRcdC5mbGFncyA9IGZsYWdzLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE4MTc9c3RhdGljIHZvaWQgX19tcHRjcF9zdWJmbG93X3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgZmlyc3QpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTgxOS1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxODIwOlx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0ge1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTgyMS1cdFx0LmRhdGFfbG9ja19oZWxkID0gdHJ1ZSxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xODg0PXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODg1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTg4NjpzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2dfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODg3LVx0XHRcdFx0ICBzaXplX3QgbGVuLCBpbnQgKmNvcGllZF9zeW4pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTk4MD1zdGF0aWMgdm9pZCBtcHRjcF9ycHNfcmVjb3JkX3N1YmZsb3dzKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTk5My1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE5OTQ6c3RhdGljIGludCBtcHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTk5NS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjAxMy1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIwMTQ6XHRcdHJldCA9IG1wdGNwX3NlbmRtc2dfZmFzdG9wZW4oc2ssIG1zZywgbGVuLCBcdTAwMjZjb3BpZWRfc3luKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIwMTUtXHRcdGNvcGllZCAmIzQzOz0gY29waWVkX3N5bjtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMTM2PXN0YXRpYyB2b2lkIG1wdGNwX2VhdF9yZWN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjE0Ni1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxNDc6c3RhdGljIGludCBfX21wdGNwX3JlY3Ztc2dfbXNrcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDgtXHRcdFx0XHRzaXplX3QgbGVuLCBpbnQgZmxhZ3MsIGludCBjb3BpZWRfdG90YWwsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjM1Mz1zdGF0aWMgdW5zaWduZWQgaW50IG1wdGNwX2lucV9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzczLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjM3NDpzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzc1LVx0XHRcdCBpbnQgZmxhZ3MpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQwNi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI0MDc6XHRcdGJ5dGVzX3JlYWQgPSBfX21wdGNwX3JlY3Ztc2dfbXNrcShzaywgbXNnLCBsZW4gLSBjb3BpZWQsIGZsYWdzLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQwOC1cdFx0XHRcdFx0XHQgIGNvcGllZCwgXHUwMDI2dHNzLCBcdTAwMjZjbXNnX2ZsYWdzLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4NTg9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NjAte1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg2MTpcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NjItXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4OTctXHRcdFx0d2hpbGUgKGluZm8uc2VudCBcdTAwM2MgaW5mby5saW1pdCkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg5ODpcdFx0XHRcdHJldCA9IG1wdGNwX3NlbmRtc2dfZnJhZyhzaywgc3NrLCBkZnJhZywgXHUwMDI2aW5mbyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk5LVx0XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDIxMD1zdGF0aWMgc3RydWN0IHByb3RvIG1wdGNwX3Byb3QgPSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIyMC1cdC5kZXN0cm95XHQ9IG1wdGNwX2Rlc3Ryb3ksXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjIxOlx0LnNlbmRtc2dcdD0gbXB0Y3Bfc2VuZG1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMjItXHQuaW9jdGxcdFx0PSBtcHRjcF9pb2N0bCxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQyMjM6XHQucmVjdm1zZ1x0PSBtcHRjcF9yZWN2bXNnLFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIyNC1cdC5yZWxlYXNlX2NiXHQ9IG1wdGNwX3JlbGVhc2VfY2IsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDU5Mj1zdGF0aWMgaW50IG1wdGNwX3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ1OTctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0NTk4OnN0YXRpYyBpbnQgX19tcHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc3BsaWNlX3N0YXRlICp0c3MpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTk5LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NjA5LS8qKlxubmV0L21wdGNwL3Byb3RvY29sLmM6NDYxMDogKiAgbXB0Y3Bfc3BsaWNlX3JlYWQgLSBzcGxpY2UgZGF0YSBmcm9tIE1QVENQIHNvY2tldCB0byBhIHBpcGVcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2MTEtICogQHNvY2s6XHRzb2NrZXQgdG8gc3BsaWNlIGZyb21cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NjIzLSAqKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2MjQ6c3RhdGljIHNzaXplX3QgbXB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDYyNS1cdFx0XHRcdCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NDktXHR3aGlsZSAodHNzLmxlbikge1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDY1MDpcdFx0cmV0ID0gX19tcHRjcF9zcGxpY2VfcmVhZChzaywgXHUwMDI2dHNzKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NTEtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00Njc1LVx0XHRcdH1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2NzY6XHRcdFx0LyogaWYgX19tcHRjcF9zcGxpY2VfcmVhZCgpIGdvdCBub3RoaW5nIHdoaWxlIHdlIGhhdmVcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NzctXHRcdFx0ICogYW4gc2tiIGluIHJlY2VpdmUgcXVldWUsIHdlIGRvIG5vdCB3YW50IHRvIGxvb3AuXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDcxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtcHRjcF9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ3MzEtXHQucmVhZF9zb2NrXHQgICA9IG1wdGNwX3JlYWRfc29jayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ3MzI6XHQuc3BsaWNlX3JlYWRcdCAgID0gbXB0Y3Bfc3BsaWNlX3JlYWQsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NzMzLX07XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDgyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtcHRjcF92Nl9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ4NDMtXHQucmVhZF9zb2NrXHQgICA9IG1wdGNwX3JlYWRfc29jayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ4NDQ6XHQuc3BsaWNlX3JlYWRcdCAgID0gbXB0Y3Bfc3BsaWNlX3JlYWQsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00ODQ1LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBzY29wZSBhbmQgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBicm9hZGx5IGFjY2Vzc2libGUgb3IgcmVzdHJpY3RlZCB0byBzcGVjaWZpYyBjb250ZXh0cy4gVGhlIGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIGhlbHBmdWwsIGJ1dCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgY29kZSBpdHNlbGYsIHN0YXJ0aW5nIHdpdGggYG5ldC9jb3JlL3N0cmVhbS5jYCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIHVuZGVyc3RhbmRpbmcgaXRzIHByZXZhbGVuY2UuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYGludCBza19zdHJlYW1fd2FpdF9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lb19wKWAgYW5kIHRoZW4gZGV0ZXJtaW5lLCBiYXNlZCBvbiBpdHMgY2hhcmFjdGVyaXN0aWNzLCB3aGV0aGVyIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBhY3RpdmVseSB1c2VkIHRocm91Z2hvdXQgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIHdpbGwgZ3VpZGUgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2lnbmlmaWNhbmNlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgc2tfc3RyZWFtX3dhaXRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc3RyZWFtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc3RyZWFtLmM9MTAwPXZvaWQgc2tfc3RyZWFtX3dhaXRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4tLVxubmV0L2NvcmUvc3RyZWFtLmMtMTIwLSAqL1xubmV0L2NvcmUvc3RyZWFtLmM6MTIxOmludCBza19zdHJlYW1fd2FpdF9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lb19wKVxubmV0L2NvcmUvc3RyZWFtLmMtMTIyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNzgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YC4uLiB3aGF0JiMzOTtzIGNhbGxpbmcgKnRoYXQqPywmIzM0OyB3aGljaCwgaW4gdGhpcyBjb250ZXh0LCB0cmFuc2xhdGVzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbiBhbmQgZmlndXJlIG91dCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgYmVpbmcgY2FsbGVkIGJ5IHRoZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIHBlcmhhcHMgYSB1c2VyLXNwYWNlIGRyaXZlciwgb3Igc29tZXdoZXJlIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIGFib3V0IGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIElzIGl0IHBhcnQgb2YgdGhlIGRhdGEgZmxvdyBwYXRoPyBJcyBpdCBpbnZvbHZlZCBpbiBlcnJvciBoYW5kbGluZz8gSSBuZWVkIHRoZSBiaWcgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUga2V5IGNhbGwgc2l0ZXMgYW5kIHRoZW4gaW1tZWRpYXRlbHkgY29uc2lkZXIgaG93IHRoZSBzeXN0ZW0gZGVzaWduIGxlYWRzIHRoZSBwcm9ncmFtIHRvIHRoYXQgcG9pbnQgb2YgZXhlY3V0aW9uLiBUaGVuIEkmIzM5O2xsIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGJlaGF2aW5nIGluIGEgd2F5IHRoYXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3N0cmVhbV93YWl0X21lbW9yeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTE0MT1zbWJfc2VuZF9rdmVjKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IG1zZ2hkciAqc21iX21zZyxcbi0tXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTE3NC1cdFx0ICogRXZlbiBpZiByZWd1bGFyIHNpZ25hbHMgYXJlIG1hc2tlZCwgRUlOVFIgbWlnaHQgYmVcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6MTc1Olx0XHQgKiBwcm9wYWdhdGVkIGZyb20gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KCkgdG8gaGVyZSB3aGVuXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTE3Ni1cdFx0ICogVElGX05PVElGWV9TSUdOQUwgaXMgdXNlZCBmb3IgdGFzayB3b3JrLiBGb3IgZXhhbXBsZSxcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MTI0MD1pbnQgc2tfc3RyZWFtX3dhaXRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApO1xuaW5jbHVkZS9uZXQvc29jay5oOjEyNDE6aW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApO1xuaW5jbHVkZS9uZXQvc29jay5oLTEyNDItdm9pZCBza19zdHJlYW1fd2FpdF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW9fcCk7XG4tLVxubmV0L2NvcmUvc3RyZWFtLmM9MTAwPXZvaWQgc2tfc3RyZWFtX3dhaXRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4tLVxubmV0L2NvcmUvc3RyZWFtLmMtMTE2LS8qKlxubmV0L2NvcmUvc3RyZWFtLmM6MTE3OiAqIHNrX3N0cmVhbV93YWl0X21lbW9yeSAtIFdhaXQgZm9yIG1vcmUgbWVtb3J5IGZvciBhIHNvY2tldFxubmV0L2NvcmUvc3RyZWFtLmMtMTE4LSAqIEBzazogc29ja2V0IHRvIHdhaXQgZm9yIG1lbW9yeVxuLS1cbm5ldC9jb3JlL3N0cmVhbS5jLTEyMC0gKi9cbm5ldC9jb3JlL3N0cmVhbS5jOjEyMTppbnQgc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW9fcClcbm5ldC9jb3JlL3N0cmVhbS5jLTEyMi17XG4tLVxubmV0L2NvcmUvc3RyZWFtLmMtMTg2LX1cbm5ldC9jb3JlL3N0cmVhbS5jOjE4NzpFWFBPUlRfU1lNQk9MKHNrX3N0cmVhbV93YWl0X21lbW9yeSk7XG5uZXQvY29yZS9zdHJlYW0uYy0xODgtXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDA0LVxubmV0L2lwdjQvdGNwLmM6MTQwNTpcdFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcdTAwMjZ0aW1lbyk7XG5uZXQvaXB2NC90Y3AuYy0xNDA2LVx0XHRpZiAoZXJyICE9IDApXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTUzND1zdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTYwNS13YWl0X2Zvcl9tZW1vcnk6XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjA2Olx0XHRlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssIFx1MDAyNnRpbWVvKTtcbm5ldC9pcHY0L3RjcF9icGYuYy02MDctXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mjk3Mj1zdGF0aWMgYm9vbCB0Y3Bfd3JpdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LCBpbnQgbm9uYWdsZSxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzA2Mi1cdFx0LyogQXJnaCwgd2UgaGl0IGFuIGVtcHR5IHNrYigpLCBwcmVzdW1hYmx5IGEgdGhyZWFkXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzA2MzpcdFx0ICogaXMgc2xlZXBpbmcgaW4gc2VuZG1zZygpL3NrX3N0cmVhbV93YWl0X21lbW9yeSgpLlxubmV0L2lwdjQvdGNwX291dHB1dC5jLTMwNjQtXHRcdCAqIFdlIGRvIG5vdCB3YW50IHRvIHNlbmQgYSBwdXJlLWFjayBwYWNrZXQgYW5kIGhhdmVcbi0tXG5uZXQva2NtL2tjbXNvY2suYz03NTI9c3RhdGljIGludCBrY21fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2tjbS9rY21zb2NrLmMtNzgyLVx0XHRzZXRfYml0KFNPQ0tfTk9TUEFDRSwgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbm5ldC9rY20va2Ntc29jay5jOjc4MzpcdFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcdTAwMjZ0aW1lbyk7XG5uZXQva2NtL2tjbXNvY2suYy03ODQtXHRcdGlmIChlcnIpXG4tLVxubmV0L2tjbS9rY21zb2NrLmMtNzkyLVx0XHRcdGtjbV9wdXNoKGtjbSk7XG5uZXQva2NtL2tjbXNvY2suYzo3OTM6XHRcdFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcdTAwMjZ0aW1lbyk7XG5uZXQva2NtL2tjbXNvY2suYy03OTQtXHRcdFx0aWYgKGVycilcbi0tXG5uZXQva2NtL2tjbXNvY2suYy04OTMtXHRcdGtjbV9wdXNoKGtjbSk7XG5uZXQva2NtL2tjbXNvY2suYzo4OTQ6XHRcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xubmV0L2tjbS9rY21zb2NrLmMtODk1LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE5OTQ9c3RhdGljIGludCBtcHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxMDUtXHRcdF9fbXB0Y3BfcHVzaF9wZW5kaW5nKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxMDY6XHRcdHJldCA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjEwNy1cdFx0aWYgKHJldClcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz0xNTYwPXN0YXRpYyBpbnQgc2N0cF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncywgaW50IGVycilcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy0xNTg5LSAqL1xubmV0L3NjdHAvc29ja2V0LmM6MTU5MDovKiBCVUc6ICBXZSBkbyBub3QgaW1wbGVtZW50IHRoZSBlcXVpdmFsZW50IG9mIHNrX3N0cmVhbV93YWl0X21lbW9yeSgpLiAqL1xubmV0L3NjdHAvc29ja2V0LmMtMTU5MS1cbi0tXG5uZXQvc21jL3NtY190eC5jPTc3PXN0YXRpYyBpbnQgc21jX3R4X3dhaXQoc3RydWN0IHNtY19zb2NrICpzbWMsIGludCBmbGFncylcbi0tXG5uZXQvc21jL3NtY190eC5jLTg0LVxubmV0L3NtYy9zbWNfdHguYzo4NTpcdC8qIHNpbWlsYXIgdG8gc2tfc3RyZWFtX3dhaXRfbWVtb3J5ICovXG5uZXQvc21jL3NtY190eC5jLTg2LVx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjktXHRcdGlmICh1bmxpa2VseShyYykpIHtcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ3MDpcdFx0XHRyYyA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtNDcxLVx0XHRcdGlmICghcmMpXG4tLVxubmV0L3Rscy90bHNfc3cuYz03NjY9c3RhdGljIGludCB0bHNfc3dfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L3Rscy90bHNfc3cuYy05NzAtd2FpdF9mb3JfbWVtb3J5OlxubmV0L3Rscy90bHNfc3cuYzo5NzE6XHRcdHJldCA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xubmV0L3Rscy90bHNfc3cuYy05NzItXHRcdGlmIChyZXQpIHtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTMwNz1zdGF0aWMgaW50IGVzcGludGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMzQ2LVxubmV0L3hmcm0vZXNwaW50Y3AuYzozNDc6XHRcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zNDgtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjYyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2NvbmZpZyBFeHBsb3JhdGlvbiBmb3IgTmV0d29yayBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGVzZSBjb2RlIHBhdGhzLiBGaXJzdCB1cCwgYG5ldC9pcHY0L3RjcC5jYC4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgaXQgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgYENPTkZJR19JTkVUYC4gTm93LCBgbmV0L2NvcmUvc3RyZWFtLmNgIOKAkyB0aGF0IG9uZSYjMzk7cyB1c3VhbGx5IGJha2VkIGluOyBpdCYjMzk7cyBlaXRoZXIgYWx3YXlzIGJ1aWx0IG9yIHRpZWQgdG8gYENPTkZJR19ORVRgLiBCdXQgdGhhdCB0aGlyZCBmaWxlLCBgbmV0L2lwdjQvdGNwX2JwZi5jYCwgdGhhdCBvbmUgcmVxdWlyZXMgYSBjbG9zZXIgbG9vay4gSSBiZXR0ZXIgb3BlbiB1cCBpdHMgTWFrZWZpbGUgdG8gY29uZmlybSB0aG9zZSBkZXRhaWxzIGFuZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NjI9b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSAmIzQzOz0gdGNwX2lsbGlub2lzLm9cbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSB0Y3BfYnBmLm9cbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHVkcF9icGYub1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4NTUtXG5uZXQvaXB2NC90Y3AuYzo0ODU2OmJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxubmV0L2lwdjQvdGNwLmMtNDg1Ny17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTMzPXN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtOTAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6OTE6c3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcbm5ldC9pcHY0L3RjcF9icGYuYy05Mi1cdFx0XHRpbnQgZmxhZ3MsIGJvb2wgdW5jaGFyZ2UpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE1Mi1cbm5ldC9pcHY0L3RjcF9icGYuYzoxNTM6c3RhdGljIGludCB0Y3BfYnBmX3B1c2hfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE1NC1cdFx0XHQgICAgICAgdTMyIGFwcGx5X2J5dGVzLCBpbnQgZmxhZ3MsIGJvb2wgdW5jaGFyZ2UpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE1OC1cdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTU5Olx0cmV0ID0gdGNwX2JwZl9wdXNoKHNrLCBtc2csIGFwcGx5X2J5dGVzLCBmbGFncywgdW5jaGFyZ2UpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTE2MC1cdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE2My1cbm5ldC9pcHY0L3RjcF9icGYuYzoxNjQ6aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjUtXHRcdFx0ICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcywgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xNzMtXHRyZXQgPSBpbmdyZXNzID8gYnBmX3RjcF9pbmdyZXNzKHNrLCBwc29jaywgbXNnLCBieXRlcykgOlxubmV0L2lwdjQvdGNwX2JwZi5jOjE3NDpcdFx0XHR0Y3BfYnBmX3B1c2hfbG9ja2VkKHNrLCBtc2csIGJ5dGVzLCBmbGFncywgZmFsc2UpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTE3NS1cdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xNzctfVxubmV0L2lwdjQvdGNwX2JwZi5jOjE3ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTE3OS1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVx0XHRcdFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTMzNC1cbm5ldC9pcHY0L3RjcF9icGYuYzozMzU6c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxubmV0L2lwdjQvdGNwX2JwZi5jLTMzNi17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTM2Ny1cbm5ldC9pcHY0L3RjcF9icGYuYzozNjg6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY5LVx0XHRcdCAgIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDE3LVxubmV0L2lwdjQvdGNwX2JwZi5jOjQxODpzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbm5ldC9pcHY0L3RjcF9icGYuYy00MTktXHRcdFx0XHRzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTQ2MS1cdGNhc2UgX19TS19QQVNTOlxubmV0L2lwdjQvdGNwX2JwZi5jOjQ2MjpcdFx0cmV0ID0gdGNwX2JwZl9wdXNoKHNrLCBtc2csIHRvc2VuZCwgZmxhZ3MsIHRydWUpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTQ2My1cdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg2LVx0XHRvcmlnc2l6ZSA9IG1zZy1cdTAwM2VzZy5zaXplO1xubmV0L2lwdjQvdGNwX2JwZi5jOjQ4NzpcdFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ4OC1cdFx0XHRcdFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTUzMy1cbm5ldC9pcHY0L3RjcF9icGYuYzo1MzQ6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2lwdjQvdGNwX2JwZi5jLTUzNS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTU5OC1cbm5ldC9pcHY0L3RjcF9icGYuYzo1OTk6XHRcdGVyciA9IHRjcF9icGZfc2VuZF92ZXJkaWN0KHNrLCBwc29jaywgbXNnX3R4LCBcdTAwMjZjb3BpZWQsIGZsYWdzKTtcbm5ldC9pcHY0L3RjcF9icGYuYy02MDAtXHRcdGlmICh1bmxpa2VseShlcnIgXHUwMDNjIDApKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz02MzY9c3RhdGljIERFRklORV9TUElOTE9DSyh0Y3B2Nl9wcm90X2xvY2spO1xubmV0L2lwdjQvdGNwX2JwZi5jOjYzNzpzdGF0aWMgc3RydWN0IHByb3RvIHRjcF9icGZfcHJvdHNbVENQX0JQRl9OVU1fUFJPVFNdW1RDUF9CUEZfTlVNX0NGR1NdO1xubmV0L2lwdjQvdGNwX2JwZi5jLTYzOC1cbm5ldC9pcHY0L3RjcF9icGYuYzo2Mzk6c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcbm5ldC9pcHY0L3RjcF9icGYuYy02NDAtXHRcdFx0XHQgICBzdHJ1Y3QgcHJvdG8gKmJhc2UpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY0NC1cdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVx0XHQ9IHNvY2tfbWFwX2Nsb3NlO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY0NTpcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY0Ni1cdHByb3RbVENQX0JQRl9CQVNFXS5zb2NrX2lzX3JlYWRhYmxlXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NDc6XHRwcm90W1RDUF9CUEZfQkFTRV0uaW9jdGxcdFx0PSB0Y3BfYnBmX2lvY3RsO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY0OC1cbm5ldC9pcHY0L3RjcF9icGYuYy02NDktXHRwcm90W1RDUF9CUEZfVFhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUwOlx0cHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnXHRcdD0gdGNwX2JwZl9zZW5kbXNnO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1MS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NTItXHRwcm90W1RDUF9CUEZfUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUzOlx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02NTQtXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU1LVx0cHJvdFtUQ1BfQlBGX1RYUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfVFhdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY1NjpcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02NTctfVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OC1cbm5ldC9pcHY0L3RjcF9icGYuYzo2NTk6c3RhdGljIHZvaWQgdGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxubmV0L2lwdjQvdGNwX2JwZi5jLTY2MC17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY2My1cdFx0aWYgKGxpa2VseShvcHMgIT0gdGNwdjZfcHJvdF9zYXZlZCkpIHtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NjQ6XHRcdFx0dGNwX2JwZl9yZWJ1aWxkX3Byb3Rvcyh0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfSVBWNl0sIG9wcyk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjY1LVx0XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnRjcHY2X3Byb3Rfc2F2ZWQsIG9wcyk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY3MC1cbm5ldC9pcHY0L3RjcF9icGYuYzo2NzE6c3RhdGljIGludCBfX2luaXQgdGNwX2JwZl92NF9idWlsZF9wcm90byh2b2lkKVxubmV0L2lwdjQvdGNwX2JwZi5jLTY3Mi17XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjczOlx0dGNwX2JwZl9yZWJ1aWxkX3Byb3Rvcyh0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfSVBWNF0sIFx1MDAyNnRjcF9wcm90KTtcbm5ldC9pcHY0L3RjcF9icGYuYy02NzQtXHRyZXR1cm4gMDtcbm5ldC9pcHY0L3RjcF9icGYuYy02NzUtfVxubmV0L2lwdjQvdGNwX2JwZi5jOjY3NjpsYXRlX2luaXRjYWxsKHRjcF9icGZfdjRfYnVpbGRfcHJvdG8pO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY3Ny1cbm5ldC9pcHY0L3RjcF9icGYuYzo2Nzg6c3RhdGljIGludCB0Y3BfYnBmX2Fzc2VydF9wcm90b19vcHMoc3RydWN0IHByb3RvICpvcHMpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc5LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg4LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9pcHY0L3RjcF9icGYuYzo2ODk6aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVx0XHRcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03MTItXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzEzOlx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cbm5ldC9pcHY0L3RjcF9icGYuYy03MTQtXHQgKi9cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzIzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjcyNDppbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzI1LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUwLVx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xubmV0L2lwdjQvdGNwX2JwZi5jOjc1MTpcdFx0aWYgKHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhwc29jay1cdTAwM2Vza19wcm90bykpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2lwdjQvdGNwX2JwZi5jLTc1My1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTQ6XHRcdHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cdTAwM2Vza19wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU1LVx0fVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NTctXHQvKiBQYWlycyB3aXRoIGxvY2tsZXNzIHJlYWQgaW4gc2tfY2xvbmVfbG9jaygpICovXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzU4Olx0c29ja19yZXBsYWNlX3Byb3RvKHNrLCBcdTAwMjZ0Y3BfYnBmX3Byb3RzW2ZhbWlseV1bY29uZmlnXSk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU5LVx0cmV0dXJuIDA7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYwLX1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NjE6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl91cGRhdGVfcHJvdG8pO1xubmV0L2lwdjQvdGNwX2JwZi5jLTc2Mi1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NjM6LyogSWYgYSBjaGlsZCBnb3QgY2xvbmVkIGZyb20gYSBsaXN0ZW5pbmcgc29ja2V0IHRoYXQgaGFkIHRjcF9icGZcbm5ldC9pcHY0L3RjcF9icGYuYy03NjQtICogcHJvdG9jb2wgY2FsbGJhY2tzIGluc3RhbGxlZCwgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBjYWxsYmFja3MgdG9cbm5ldC9pcHY0L3RjcF9icGYuYy03NjUtICogdGhlIGRlZmF1bHQgb25lcyBiZWNhdXNlIHRoZSBjaGlsZCBkb2VzIG5vdCBpbmhlcml0IHRoZSBwc29jayBzdGF0ZVxubmV0L2lwdjQvdGNwX2JwZi5jOjc2NjogKiB0aGF0IHRjcF9icGYgY2FsbGJhY2tzIGV4cGVjdC5cbm5ldC9pcHY0L3RjcF9icGYuYy03NjctICovXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzY4OnZvaWQgdGNwX2JwZl9jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcbm5ldC9pcHY0L3RjcF9icGYuYy03Njkte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NzEtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzcyOlx0aWYgKGlzX2luc2lkZXZhcihwcm90LCB0Y3BfYnBmX3Byb3RzKSlcbm5ldC9pcHY0L3RjcF9icGYuYy03NzMtXHRcdG5ld3NrLVx1MDAzZXNrX3Byb3QgPSBzay1cdTAwM2Vza19wcm90X2NyZWF0b3I7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MTA3MD1zdGF0aWMgdm9pZCB0Y3BfcnR0X2VzdGltYXRvcihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgbXJ0dF91cylcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMTIyLVxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTEyMzpcdFx0XHR0Y3BfYnBmX3J0dChzaywgbXJ0dF91cywgc3J0dCk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMTI0LVx0XHR9XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEzMi1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjExMzM6XHRcdHRjcF9icGZfcnR0KHNrLCBtcnR0X3VzLCBzcnR0KTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTExMzQtXHR9XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzQ1ND1zdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDg0LVx0ICAgIChlY25fb2tfZHN0IFx1MDAyNiBEU1RfRkVBVFVSRV9FQ05fQ0EpIHx8XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDg1Olx0ICAgIHRjcF9icGZfY2FfbmVlZHNfZWNuKChzdHJ1Y3Qgc29jayAqKXJlcSkpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDg2LVx0XHRpbmV0X3JzayhyZXEpLVx1MDAzZWVjbl9vayA9IDE7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xMTYyPXN0YXRpYyBpbnQgdGNwX3Y0X3NlbmRfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTE5MS1cdFx0aWYgKCFJTkVUX0VDTl9pc19jYXBhYmxlKHRvcykgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjExOTI6XHRcdCAgICB0Y3BfYnBmX2NhX25lZWRzX2Vjbigoc3RydWN0IHNvY2sgKilyZXEpKVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTkzLVx0XHRcdHRvcyB8PSBJTkVUX0VDTl9FQ1RfMDtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM2MC1cdC5nZXRzb2Nrb3B0XHRcdD0gdGNwX2dldHNvY2tvcHQsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzNjE6XHQuYnBmX2J5cGFzc19nZXRzb2Nrb3B0XHQ9IHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQsXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNjItXHQua2VlcGFsaXZlXHRcdD0gdGNwX3NldF9rZWVwYWxpdmUsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzcyLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM3MzpcdC5wc29ja191cGRhdGVfc2tfcHJvdFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3NC0jZW5kaWZcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02NjMtXHRuZXd0cC1cdTAwM2VicGZfY2hnX2NjX2lucHJvZ3Jlc3MgPSAwO1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjY2NDpcdHRjcF9icGZfY2xvbmUoc2ssIG5ld3NrKTtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzk3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIEtjb25maWcgZm9yIFNvY2tldCBhbmQgTVBUQ1AgU3VwcG9ydCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIG15IGN1cnJlbnQgcHJvamVjdCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBuZXR3b3JrIHNvY2tldHMgYW5kIE1QVENQLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEtjb25maWcuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgZW5hYmxlZCBvciBhdCBsZWFzdCBjb25maWd1cmFibGUuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBgTkVUX1NPQ0tfTVNHYCBpcyBhdmFpbGFibGUuIFRoYXQmIzM5O3MgYSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2ssIHNvIGl04oCZcyB0aGUgaW1tZWRpYXRlIHByaW9yaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIFdoZXJlIGlzIGl0IGRlZmluZWQsIHdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFRoZW4sIG9mIGNvdXJzZSwgTVBUQ1AuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBNUFRDUCBpcyBlbmFibGVkLCBhbmQgaWYgc28sIGhvdy4gQXJlIHRoZXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMga2VybmVsIGZlYXR1cmVzPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgZ2VuZXJhbCBzZWFyY2ggYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3MuIFRoaXMgaXMgYWxsIGFib3V0IHZlcmlmeWluZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQmIzM5O3MgY2FwYWJpbGl0aWVzIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgd3JpdGluZyBhIGxpbmUgb2YgY29kZS4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IGNoYXNpbmcgZ2hvc3RzISBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIHdhc3RlIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXG4tLVxubmV0L0tjb25maWctNDc4LVxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTQ4MC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBORVRfU09DS19NU0cgU2VsZWN0b3IqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBzdHJhaWdodGZvcndhcmQ6ICYjMzQ7TGV0JiMzOTtzIGlzb2xhdGUgd2hhdCYjMzk7cyBhY3R1YWxseSB1c2luZyB0aGUgYE5FVF9TT0NLX01TR2Agc2VsZWN0b3IuJiMzNDsgVGhpcyBwcm9iYWJseSBtZWFucyBJJiMzOTttIGluIHRoZSBtaWRkbGUgb2YgZGVidWdnaW5nIGEgbmV0d29ya2luZyBvciBzb2NrZXQtcmVsYXRlZCBpc3N1ZS4gVGhpcyBzZWxlY3RvciBpcyBhIGtleSBzaWduYWwgaW4gdGhlIHN5c3RlbSwgYW5kIGl0IGNvdWxkIGJlIGluZGljYXRpbmcgYW55IG51bWJlciBvZiB0aGluZ3MsIGZyb20gbmV3IGRhdGEgYXJyaXZpbmcgb24gYSBzb2NrZXQgdG8gdGhlIHNvY2tldCBzdGF0ZSBjaGFuZ2luZy4gCgpNeSBuZXh0IHN0ZXBzIHdpbGwgZGVwZW5kIG9uIHRoZSBjb250ZXh0LCBvZiBjb3Vyc2UsIGJ1dCB0aGUgY29yZSBvYmplY3RpdmUgcmVtYWlucyB0aGUgc2FtZTogSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBjb2RlIHBhdGhzIHRoYXQgYXJlIHJlZ2lzdGVyaW5nLCB1c2luZywgb3IgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50LiBJJiMzOTtsbCBsaWtlbHkgYmUgdHJhY2luZyBmdW5jdGlvbiBjYWxscywgZXhhbWluaW5nIGtlcm5lbCBtb2R1bGVzIChpZiBhcHBsaWNhYmxlKSwgYW5kIHBvc3NpYmx5IGFuYWx5emluZyBwYWNrZXQgY2FwdHVyZXMgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgYXJvdW5kIHRoZSBgTkVUX1NPQ0tfTVNHYCBldmVudHMuIEkgbWlnaHQgYmUgbG9va2luZyBmb3IgcmFjZSBjb25kaXRpb25zLCByZXNvdXJjZSBsZWFrcywgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgc29ja2V0LXVzaW5nIGNvbXBvbmVudHMuIEkgbWlnaHQgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBleHBvc2VkIGJ5IHRoaXMgc2VsZWN0b3IuIFRoZSBnb2FsIGhlcmUgaXMgZWZmaWNpZW50LCB0YXJnZXRlZCBkaWFnbm9zdGljcywgbGV2ZXJhZ2luZyBteSBleHBlcnRpc2UgdG8gcXVpY2tseSBuYXJyb3cgZG93biB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE5FVF9TT0NLX01TRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTMzLVx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbmtlcm5lbC9icGYvS2NvbmZpZzozNDpcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbi0tXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4tLVxubmV0L0tjb25maWctMzY2LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnOjM2NzpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTM2OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg1LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY0L0tjb25maWc6Mzg2Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZy0zODctXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05My1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2Ni9LY29uZmlnOjk0Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZy05NS1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE9fR0NNXG5uZXQvdGxzL0tjb25maWc6MTE6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvdGxzL0tjb25maWctMTItXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4NDMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBCUEYgYW5kIE1QVENQIENvbXBhdGliaWxpdHkqKgoKT2theSwgc28gYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBORVRfU09DS19NU0dgIHdoZW4gYE5FVGAgaXMgc2VsZWN0ZWQuIEJ1dCwgSSBuZWVkIHRvIGNvbnNpZGVyIE1QVENQIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBpbnRlcmFjdC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyBNUFRDUCBpcyBjb25maWd1cmVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgYEJQRl9TWVNDQUxMYCBpbnRlcmFjdHMgd2l0aCBpdC4gVGhpcyBpcyBhIGNyaXRpY2FsIGNoZWNrIHRvIGVuc3VyZSB0aGUgZmVhdHVyZSBzZXQgSSYjMzk7bSB3b3JraW5nIHdpdGggaXMgY29uc2lzdGVudCBhbmQgY29tcGF0aWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnLTEtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxubmV0L21wdGNwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWctMTktXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxubmV0L21wdGNwL0tjb25maWctMjEtXHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjY2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gdGhlIE11bHRpcGF0aCBUQ1AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBpbnN0cnVjdGlvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBNUFRDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBzcGVjaWZpYyBmaWxlIHRvIGV4YW1pbmUgaXMgYG5ldC9tcHRjcC9LY29uZmlnYC4gSSBhbHJlYWR5IGtub3cgd2hhdCB0aGlzIGZpbGUgaG91c2VzOiBpdCYjMzk7cyB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIE11bHRpcGF0aCBUQ1AuIE15IGd1ZXNzIGlzLCB0aGUgcHJvdmlkZWQgbGluZXMgKDEtMTUgYXMgcmVxdWVzdGVkKSBjb250YWluIHRoZSBoaWdoLWxldmVsIE1QVENQIGZlYXR1cmVzIGFuZCBtYXliZSBzb21lIGJhc2ljIGRlcGVuZGVuY2llcyBvciBpbnRyb2R1Y3Rpb24gY29tbWVudHMuIFRoYXQgcGFydCBzZWVtcyBjbGVhciBlbm91Z2g7IEkmIzM5O2xsIGV4cGVjdCB0byBmaW5kIGFuIG92ZXJ2aWV3IG9mIHRoZSBtb2R1bGVzJiMzOTsgYXJjaGl0ZWN0dXJlIHRoZXJlLiBUaW1lIHRvIHNlZSB3aGF0IGl0ICphY3R1YWxseSogbG9va3MgbGlrZSB0byBiZSBjZXJ0YWluIG9mIG15IGFzc3VtcHRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0XG4gICAyOlx0Y29uZmlnIE1QVENQXG4gICAzOlx0XHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcbiAgMTA6XHRcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcbiAgMTE6XHRcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxuICAxMjpcdFx0ICBNUFRDUC5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBNUFRDUFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NDkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFN0YWNrIEludGVyYWN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhcmVhLCBsaWtlbHkgcmVsYXRlZCB0byBuZXR3b3JraW5nLCBhbmQgdGhlc2UgdGVybXMga2VlcCBwb3BwaW5nIHVwOiBgSU5FVGAsIGBNUFRDUGAsIGFuZCBgQlBGX1NZU0NBTExgLCBvciBwb3RlbnRpYWxseSBgTkVUX1NPQ0tfTVNHYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGVzZSB0aGluZ3MgaW50ZXJhY3QuIEkgcmVjb2duaXplIHRoZW0gYXMgY29yZSBjb21wb25lbnRzIGFuZCBtZWNoYW5pc21zIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBoaXN0b3J5LCB0aGUgJiMzOTt3aHkmIzM5OyBvZiB0aGUgY29kZSwgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgdGhlIEdpdCBjb21taXQgbG9nIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24uIFRoYXQgbG9nIHNob3VsZCBnaXZlIG1lIHRoZSBoaXN0b3JpY2FsIGNvbnRleHQsIHRoZSBwcm9ibGVtIGJlaW5nIGFkZHJlc3NlZCwgYW5kIHRoZSB0aG91Z2h0IHByb2Nlc3Mgb2YgdGhlIGRldmVsb3BlcnMgaW52b2x2ZWQuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtsbCBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYW5kIGludGVncmF0aW9uIG9mIHRoZXNlIGVsZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxODExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIEVycm9yIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb21taXQgdGhpcyBpcyByZWxhdGVkIHRvLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUga2VybmVsIHNvdXJjZSBsb2dzIHVzaW5nIGEgZ3JlcHBlciBzZWFyY2gsIGJ1dCBncmVwcGVyIGlzIG9uIGtlcm5lbCBzb3VyY2UsIHNvIEkgd2lsbCBzd2l0Y2ggdG8gZ2l0IGxvZyB0byBmaW5kIHRoZSBhc3NvY2lhdGVkIGNvbW1pdC4KCk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIGEgY29kZSByZWZhY3RvciBmb3IgaG93IGBzay0mZ3Q7c2tfZXJyYCBpcyBjaGVja2VkIGFjcm9zcyBzZXZlcmFsIFRDUC1yZWxhdGVkIGZ1bmN0aW9ucy4gIEVzc2VudGlhbGx5LCB0aGUgY2hhbmdlIGludm9sdmVzIHJlcGxhY2luZyBkaXJlY3QgYWNjZXNzIG9mIGBzay0mZ3Q7c2tfZXJyYCB3aXRoIGBSRUFEX09OQ0Uoc2stJmd0O3NrX2VycilgIGluIHNldmVyYWwgY29udGV4dHMgbGlrZSBgdGNwX3JlY3Zfc2hvdWxkX3N0b3BgLCBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCwgYHRjcF9zcGxpY2VfcmVhZGAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBgdGNwX3JlY3Ztc2dfbG9ja2VkYCwgYW5kIHRoZSBgbXB0Y3BgIHNlbmQgYW5kIHJlY3YgcGF0aHMuIEFsc28sIEkgc2VlIGB0Y3BfYnBmX3NlbmRtc2dgIGhhcyBiZWVuIGNoYW5nZWQgd2l0aCBob3cgYHNrLSZndDtza19lcnJgIGlzIGhhbmRsZWQuICAKCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFib3V0IGVuc3VyaW5nIHRoYXQgdGhlIGVycm9yIHN0YXR1cyBvZiBhIHNvY2tldCAoYHNrX2VycmApIGlzIHJlYWQgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIuIGBza19lcnJgIGNhbiBiZSBtb2RpZmllZCBjb25jdXJyZW50bHkgYnkgYHNvY2tfZXJyb3IoKWAsIHNvIGEgcmVndWxhciBsb2FkIGNvdWxkIGJlIHJhY3kuIFVzaW5nIGBSRUFEX09OQ0VgIGVuZm9yY2VzIGEgbWVtb3J5IGJhcnJpZXIsIGd1YXJhbnRlZWluZyB0aGF0IHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBvZiBgc2tfZXJyYCBpcyBvYnNlcnZlZC4gVGhpcyBzaG91bGQgaW1wcm92ZSBkYXRhIGNvbnNpc3RlbmN5LCBlc3BlY2lhbGx5IGluIG11bHRpdGhyZWFkZWQgc2NlbmFyaW9zLCBvciBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIG1lbW9yeSBhY2Nlc3Mgb3JkZXIgaXMgbm90IHN0cmljdC4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBpbXByb3ZlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdFxuIDU0NjpcdFx0cHNvY2sgPSBza19wc29ja19nZXQoc2spO1xuIDU0NzpcdFx0aWYgKHVubGlrZWx5KCFwc29jaykpXG4gNTQ4Olx0XHRcdHJldHVybiB0Y3Bfc2VuZG1zZyhzaywgbXNnLCBzaXplKTtcbiA1NDk6XHRcbiA1NTA6XHRcdGxvY2tfc29jayhzayk7XG4gNTUxOlx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4gNTUyOlx0XHR3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpKSB7XG4gNTUzOlx0XHRcdGJvb2wgZW5vc3BjID0gZmFsc2U7XG4gNTU0Olx0XHRcdHUzMiBjb3B5LCBvc2l6ZTtcbiA1NTU6XHRcbiA1NTY6XHRcdFx0ZXJyID0gLVJFQURfT05DRShzay1cdTAwM2Vza19lcnIpO1xuIDU1NzpcdFx0XHRpZiAoZXJyKVxuIDU1ODpcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiA1NTk6XHRcbiA1NjA6XHRcdFx0Y29weSA9IG1zZ19kYXRhX2xlZnQobXNnKTtcbiA1NjE6XHRcdFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxuIDU2MjpcdFx0XHRcdGdvdG8gd2FpdF9mb3Jfc25kYnVmO1xuIDU2MzpcdFx0XHRpZiAocHNvY2stXHUwMDNlY29yaykge1xuIDU2NDpcdFx0XHRcdG1zZ190eCA9IHBzb2NrLVx1MDAzZWNvcms7XG4gNTY1Olx0XHRcdH0gZWxzZSB7XG4gNTY2Olx0XHRcdFx0bXNnX3R4ID0gXHUwMDI2dG1wO1xuIDU2NzpcdFx0XHRcdHNrX21zZ19pbml0KG1zZ190eCk7XG4gNTY4Olx0XHRcdH1cbiA1Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB0Y3BfcmVjdm1zZ19sb2NrZWRgKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjc2MC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCB0aGUgZXhhY3QgbG9naWMgYmVpbmcgZXhlY3V0ZWQgaW4gdGhhdCBhcmVhIG9mIHRoZSBmdW5jdGlvbi4gTGV0IG1lIHNlZSB3aGF0IHRoYXQgY2h1bmsgb2YgY29kZSBpcyBkb2luZyAtIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSB0byB0aGUgaXNzdWUgaW4gaG93IHRoZSBkYXRhIGlzIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBpcyBhIGJ1ZmZlciBtYW5hZ2VtZW50IHByb2JsZW0sIGEgc3luY2hyb25pemF0aW9uIGlzc3VlLCBhIHNlcXVlbmNpbmcgcHJvYmxlbSwgb3IgbWF5YmUgZXZlbiBzb21ldGhpbmcgc3VidGxlIHJlbGF0ZWQgdG8gZmxhZ3Mgb3IgcHJvdG9jb2wgc3RhdGUuIEtub3dpbmcgdGhhdCBzcGVjaWZpYyBjb2RlIGJsb2NrIHdpbGwgaGVscC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1MDpcdFx0XHQvKiBXZWxsLCBpZiB3ZSBoYXZlIGJhY2tsb2csIHRyeSB0byBwcm9jZXNzIGl0IG5vdyB5ZXQuICovXG4yNzUxOlx0XG4yNzUyOlx0XHRcdGlmIChjb3BpZWQgXHUwMDNlPSB0YXJnZXQgXHUwMDI2XHUwMDI2ICFSRUFEX09OQ0Uoc2stXHUwMDNlc2tfYmFja2xvZy50YWlsKSlcbjI3NTM6XHRcdFx0XHRicmVhaztcbjI3NTQ6XHRcbjI3NTU6XHRcdFx0aWYgKGNvcGllZCkge1xuMjc1NjpcdFx0XHRcdGlmICghdGltZW8gfHxcbjI3NTc6XHRcdFx0XHQgICAgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spKVxuMjc1ODpcdFx0XHRcdFx0YnJlYWs7XG4yNzU5Olx0XHRcdH0gZWxzZSB7XG4yNzYwOlx0XHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbjI3NjE6XHRcdFx0XHRcdGJyZWFrO1xuMjc2MjpcdFxuMjc2MzpcdFx0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuMjc2NDpcdFx0XHRcdFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XG4yNzY1Olx0XHRcdFx0XHRicmVhaztcbjI3NjY6XHRcdFx0XHR9XG4yNzY3Olx0XG4yNzY4Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pXG4yNzY5Olx0XHRcdFx0XHRicmVhaztcbjI3NzA6XHRcbjI3NzE6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XG4yNzcyOlx0XHRcdFx0XHQvKiBUaGlzIG9jY3VycyB3aGVuIHVzZXIgdHJpZXMgdG8gcmVhZFxuMjc3MzpcdFx0XHRcdFx0ICogZnJvbSBuZXZlciBjb25uZWN0ZWQgc29ja2V0LlxuMjc3NDpcdFx0XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTE5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB0Y3Bfc3BsaWNlX3JlYWRgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB0Y3Bfc3BsaWNlX3JlYWRgIOKAkyBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBkYXRhIHRyYW5zZmVyIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIFRDUCBzdGFjay4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBkZWZpbmVkIGluIGBuZXQvaXB2NC90Y3AuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0IG9mIElQdjQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgZGF0YSBpcyBtb3ZlZCBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIHRvIHRoZSBhcHBsaWNhdGlvbiwgaG9wZWZ1bGx5IGJ5cGFzc2luZyB1bm5lY2Vzc2FyeSBjb3B5aW5nIHdoZW5ldmVyIHBvc3NpYmxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBidWZmZXIgbWFuYWdlbWVudCwgbWVtb3J5IG1hcHBpbmcsIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgdGhhdCBsZXZlcmFnZSB0aGUga2VybmVsJiMzOTtzIGFiaWxpdHkgdG8gbWluaW1pemUgZGF0YSBtb3ZlbWVudC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBrZWVwIG15IGV5ZSBvdXQgZm9yIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3BsaWNlIGluZnJhc3RydWN0dXJlLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGlzIHdob2xlIGFwcHJvYWNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzU6XHRcbiA4MzY6XHRcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spO1xuIDgzNzpcdFx0d2hpbGUgKHRzcy5sZW4pIHtcbiA4Mzg6XHRcdFx0cmV0ID0gX190Y3Bfc3BsaWNlX3JlYWQoc2ssIFx1MDAyNnRzcyk7XG4gODM5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gODQwOlx0XHRcdFx0YnJlYWs7XG4gODQxOlx0XHRcdGVsc2UgaWYgKCFyZXQpIHtcbiA4NDI6XHRcdFx0XHRpZiAoc3BsaWNlZClcbiA4NDM6XHRcdFx0XHRcdGJyZWFrO1xuIDg0NDpcdFx0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG4gODQ1Olx0XHRcdFx0XHRicmVhaztcbiA4NDY6XHRcdFx0XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikpIHtcbiA4NDc6XHRcdFx0XHRcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xuIDg0ODpcdFx0XHRcdFx0YnJlYWs7XG4gODQ5Olx0XHRcdFx0fVxuIDg1MDpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKVxuIDg1MTpcdFx0XHRcdFx0YnJlYWs7XG4gODUyOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xuIDg1MzpcdFx0XHRcdFx0LypcbiA4NTQ6XHRcdFx0XHRcdCAqIFRoaXMgb2NjdXJzIHdoZW4gdXNlciB0cmllcyB0byByZWFkXG4gODU1Olx0XHRcdFx0XHQgKiBmcm9tIG5ldmVyIGNvbm5lY3RlZCBzb2NrZXQuXG4gODU2Olx0XHRcdFx0XHQgKi9cbiA4NTc6XHRcdFx0XHRcdHJldCA9IC1FTk9UQ09OTjtcbiA4NTg6XHRcdFx0XHRcdGJyZWFrO1xuIDg1OTpcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3MzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBEZXRlcm1pbmF0aW9uOiBBIFN5c3RlbWF0aWMgUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBlZmZlY3RpdmUgYEZvY3VzU3ltYm9sc2AgdG8gZ3VpZGUgdGhlIGZ1enplciwgc3BlY2lmaWNhbGx5IHRvIHByZXZlbnQgZGlsdXRpb24gb2YgZWZmb3J0LiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHN0aWNraW5nIHRvIHRoZSBndWlkZWxpbmVzIGluIFNlY3Rpb24gNCBvZiB0aGUgZG9jdW1lbnRhdGlvbi4gSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCB0YXJnZXQgc3BlY2lmaWMgbG9naWMgYW5kIGVudHJ5cG9pbnRzLgoKT2theSwgSSYjMzk7dmUgZ290IHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluOiBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCwgYHRjcF9zcGxpY2VfcmVhZGAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBgdGNwX3JlY3Ztc2dfbG9ja2VkYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBgdGNwX2JwZl9zZW5kbXNnYCwgYG1wdGNwX3NlbmRtc2dgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc3BsaWNlX3JlYWRgLiBOb3csIEkgbmVlZCB0byBldmFsdWF0ZSBlYWNoIG9uZSBhZ2FpbnN0IHRob3NlIGNyaXRlcmlhLgoKRmlyc3QsIEkgYW0gY2hlY2tpbmcgd2hldGhlciB0aGUgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90LiBTb21lIGFyZSBzdGF0aWMsIGxpa2UgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGJ1dCBJIGtub3cgaXQmIzM5O3Mgb2Z0ZW4gbm90IGlubGluZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2FsbHMgdGhlbS4gSXQgbG9va3MgbGlrZSBgdGNwX3JlY3Ztc2dgIGNhbGxzIGl0IGFuZCBpdCBpcyBub24tc3RhdGljLiBCZWNhdXNlIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGhhcyBtdWx0aXBsZSBjYWxsZXJzLCBHQ0Mgd2lsbCBsaWtlbHkgbm90IGlubGluZSBpdC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBoYXMgYSBzeW1ib2wuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKTm93LCBjb25zaWRlcmluZyB0aGUgZG9jdW1lbnRhdGlvbiwgSSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgbm90IGluY2x1ZGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgdG9vIGdlbmVyYWwuIFdoaWxlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBhcmUgYXNzb2NpYXRlZCB3aXRoIFRDUCBzb2NrZXRzLCBhbmQgSSBuZWVkIHRvIGF2b2lkIHRoZXNlIGhvdC1wYXRocywgaXQgaXMgb2theSBzaW5jZSBpdCBpcyBhIHNwZWNpZmljIGVudHJ5cG9pbnQgZm9yIFRDUCBzb2NrZXRzIGFuZCBjb250YWlucyB0aGUgYWx0ZXJlZCBsb2dpYy4KClNvLCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbnMgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIGdvb2QgRm9jdXNTeW1ib2xzOiBgdGNwX3NwbGljZV9yZWFkYCwgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAsIGB0Y3BfYnBmX3NlbmRtc2dgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYC4gVGhhdCBsb29rcyBwcmV0dHkgdGFyZ2V0ZWQuCgpJIHN0aWxsIG5lZWQgdG8gYWRkcmVzcyBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAuIFdhaXQgYSBtaW51dGUsIEkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRob3NlIHN5bWJvbHMgZXhpc3QgaW4gdm1saW51eC4KCk9rYXksIGxldCYjMzk7cyBhZGRyZXNzIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLiBJJiMzOTt2ZSBnb3QgYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCwgd2hpY2ggaXMgc3RhdGljIGlubGluZSwgYnV0IGlzIGNhbGxlZCBieSBgdGNwX3NwbGljZV9yZWFkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zcGxpY2VfcmVhZGAsIHdoaWNoIGFyZSBub24tc3RhdGljLgoKRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgcmVsZXZhbnQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgYG5ldC9jb3JlL3N0cmVhbS5jYCwgYG5ldC9pcHY0L3RjcC5jYCwgYG5ldC9pcHY0L3RjcF9icGYuY2AsIGFuZCBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCBhbmQgSSBoYXZlIGlkZW50aWZpZWQgdGhlIHJpZ2h0IGZ1bmN0aW9ucyBmb3IgZWFjaC4KCkkgdGhpbmsgSSYjMzk7dmUgbmFycm93ZWQgaXQgZG93biB0bzogYHNrX3N0cmVhbV93YWl0X21lbW9yeWAsIGB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGB0Y3BfYnBmX3NlbmRtc2dgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYC4KCk5vdywgSSBhbHNvIGhhdmUgdG8gY29uc2lkZXIgdGhlaXIgRW5hYmxlQ29uZmlncy4gRm9yIGBuZXQvaXB2NC90Y3AuY2AgYW5kIGBpbmNsdWRlL25ldC90Y3AuaGAsIGl0JiMzOTtzIGBJTkVUYC4gRm9yIGBuZXQvaXB2NC90Y3BfYnBmLmNgLCBpdCYjMzk7cyBgQlBGX1NZU0NBTExgLCBzaW5jZSBgTkVUX1NPQ0tfTVNHYCBpcyBzZWxlY3RlZCBieSBvdGhlciBjb25maWdzLCBub3QgZGlyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHVzZXIgZW5hYmxlcyBgQlBGX1NZU0NBTExgLgoKT2theSwgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgSSBuZWVkIHRvIGRlZmluZSB0aGUgRm9jdXNTeW1ib2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfTVBUQ1ApICYjNDM7PSBtcHRjcC5vXG4gICAzOlx0XG4gICA0Olx0bXB0Y3AteSA6PSBwcm90b2NvbC5vIHN1YmZsb3cubyBvcHRpb25zLm8gdG9rZW4ubyBjcnlwdG8ubyBjdHJsLm8gcG0ubyBkaWFnLm8gXFxcbiAgIDU6XHRcdCAgIG1pYi5vIHBtX25ldGxpbmsubyBzb2Nrb3B0Lm8gcG1fdXNlcnNwYWNlLm8gZmFzdG9wZW4ubyBzY2hlZC5vIFxcXG4gICA2Olx0XHQgICBtcHRjcF9wbV9nZW4ubyBwbV9rZXJuZWwub1xuICAgNzpcdFxuICAgODpcdG9iai0kKENPTkZJR19TWU5fQ09PS0lFUykgJiM0Mzs9IHN5bmNvb2tpZXMub1xuICAgOTpcdG9iai0kKENPTkZJR19JTkVUX01QVENQX0RJQUcpICYjNDM7PSBtcHRjcF9kaWFnLm9cbiAgMTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4MjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIE1QVENQKioKCk9rYXksIHNvIEkmIzM5O20gd29ya2luZyBvbiBnZXR0aW5nIHRoaXMgTVBUQ1AgY29uZmlndXJhdGlvbiByaWdodC4gQmFzZWQgb24gdGhlIGZpbGUgc3RydWN0dXJlLCBgcHJvdG9jb2wub2AgaXMgY2xlYXJseSBuZXN0ZWQgd2l0aGluIGBtcHRjcC5vYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX01QVENQYCBpcyBzZXQuIE5vdywgYENPTkZJR19NUFRDUGAgaXRzZWxmIGhhcyBhIGRlcGVuZGVuY3kgb24gYElORVRgLiBTbywgdGhlIGJhc2UgcmVxdWlyZW1lbnRzIGFyZTogYElORVRgLCBgTVBUQ1BgLCBhbmQgYEJQRl9TWVNDQUxMYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHN3ZWVwIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBEaXZpbmcgaW50byBgbmV0L21wdGNwL0tjb25maWdgLCBpdCBjb25maXJtcyB0aGUgYGRlcGVuZHMgb24gSU5FVGAsIHdoaWNoIEkgZXhwZWN0ZWQsIGFuZCB0aGVuIGl0ICpzZWxlY3RzKiBhIGZldyB0aGluZ3M6IGBTS0JfRVhURU5TSU9OU2AsIGBDUllQVE9fTElCX1NIQTI1NmAsIGFuZCBgQ1JZUFRPX0xJQl9VVElMU2AuIFRoZXNlIGFyZSBhbGwgYXV0b21hdGljIHNlbGVjdGlvbnMsIHdoaWNoIGlzIGdvb2Qg4oCTIGxlc3MgbWFudWFsIGludGVydmVudGlvbiBpcyBhbHdheXMgYSB3aW4uCgpGaW5hbGx5LCByZWdhcmRpbmcgYEJQRl9TWVNDQUxMYCwgSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSBjaGVjayBga2VybmVsL2JwZi9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTA4CgkJCQkJCQlvdXRwdXQ6IDIyNwoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUQ1AvTVBUQ1AgYHNrX2VycmAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgc3RyYWlnaHRmb3J3YXJkOyBgQlBGX1NZU0NBTExgIGlzIHNlbGYtY29udGFpbmVkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIGBORVRgIGlzIGEgZ2l2ZW4gZm9yIG5ldHdvcmtpbmcgY29kZSwgYW5kIGBJTkVUYCBpcyBzdGFuZGFyZCBmb3IgSVB2NC9UQ1AuIE5vIHN1cnByaXNlcyB0aGVyZS4KClRoZSBwYXRjaCBpdHNlbGYgaXMgZm9jdXNlZCBvbiBhZGRyZXNzaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCBgc2stJmd0O3NrX2VycmAuIEl0IHVzZXMgYFJFQURfT05DRSgpYCB0byBlbnN1cmUgc2FmZSwgY29uY3VycmVudCBhY2Nlc3Mgd2hlbiBgc29ja19lcnJvcigpYCBtaWdodCBiZSBjbGVhcmluZyBpdC4gVGhpcyBpbXBhY3RzIHNldmVyYWwgY29yZSBmdW5jdGlvbnMgYWNyb3NzIFRDUCwgc3RyZWFtIHNvY2tldHMsIFRDUCBCUEYsIGFuZCBNUFRDUC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCwgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAsIHRoZSBzcGxpY2UgZnVuY3Rpb25zIChgdGNwX3NwbGljZV9yZWFkYCwgYG1wdGNwX3NwbGljZV9yZWFkYCksIGFuZCB0aGUgYHNlbmRtc2dgIGFuZCBgcmVjdm1zZ2AgcGF0aHMgaW4gYm90aCBUQ1AsIE1QVENQLCBhbmQgQlBGLiBUaGVzZSBhcmUgYWxsIGNyaXRpY2FsIHBhdGhzLgoKTG9va2luZyBhdCB0aGUgbGlzdCBvZiAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7LCBpdCBzZWVtcyB3ZSYjMzk7cmUgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBkYXRhIHRyYW5zZmVyLCBhbmQgbWVzc2FnZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGggaG93IGVycm9yIHN0YXRlcyBhcmUgbWFuYWdlZCBpbiB0aG9zZSBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGEgZm9jdXNlZCBzZXQgb2YgZnVuY3Rpb25zLgoKQmFzZWQgb24gdGhpcywgYW5kIHRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IHNvY2tldCBvcGVyYXRpb25zLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBJdCYjMzk7cyB0aGUgcmlnaHQgY2FsbCB0byBmbHVzaCBvdXQgYW55IHN1YnRsZSBiZWhhdmlvcmFsIGNoYW5nZXMgb3IgcmVncmVzc2lvbnMgdGhpcyBtaWdodCBpbnRyb2R1Y2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucy4KCkdpdmVuIHRoZSBjb2RlJiMzOTtzIHNjb3BlIGFuZCB0aGUgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9ucywgdGhpcyBsb29rcyBjbGVhbiBhbmQgd2VsbC1zdXBwb3J0ZWQsIG5vIHJlZCBmbGFncy4gSXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfc3RyZWFtX3dhaXRfbWVtb3J5JiMzNDssCiAgICAmIzM0O3RjcF9zcGxpY2VfcmVhZCYjMzQ7LAogICAgJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7dGNwX3JlY3Ztc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyJiMzNDssCiAgICAmIzM0O21wdGNwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7bXB0Y3BfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDttcHRjcF9zcGxpY2VfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbm5vdGF0ZXMgbG9ja2xlc3MgcmVhZHMgb2Ygc2stXHUwMDNlc2tfZXJyIHdpdGggUkVBRF9PTkNFKCkgYWNyb3NzIFRDUCwgTVBUQ1AsIHN0cmVhbSBzb2NrZXQgd2FpdCBwYXRocywgYW5kIFRDUCBCUEYgaGVscGVycyB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGltcHJvcGVyIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgd2hlbiBza19lcnIgaXMgY29uY3VycmVudGx5IGNsZWFyZWQgYnkgc29ja19lcnJvcigpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW1zIChUQ1AsIE1QVENQLCBhbmQgc29ja21hcCBCUEYpLCBtYWtpbmcgaXQgdmFsdWFibGUgdG8gZnV6eiBmb3Igc3VidGxlIGNvbmN1cnJlbmN5IHJlZ3Jlc3Npb25zIGFuZCBlcnJvci1oYW5kbGluZyBjb3JyZWN0bmVzcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3N0cmVhbV93YWl0X21lbW9yeSYjMzQ7LAogICAgJiMzNDt0Y3Bfc3BsaWNlX3JlYWQmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O3RjcF9yZWN2bXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDttcHRjcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc3BsaWNlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYW5ub3RhdGVzIGxvY2tsZXNzIHJlYWRzIG9mIHNrLVx1MDAzZXNrX2VyciB3aXRoIFJFQURfT05DRSgpIGFjcm9zcyBUQ1AsIE1QVENQLCBzdHJlYW0gc29ja2V0IHdhaXQgcGF0aHMsIGFuZCBUQ1AgQlBGIGhlbHBlcnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBpbXByb3BlciBjb21waWxlciBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkIGJ5IHNvY2tfZXJyb3IoKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyAoVENQLCBNUFRDUCwgYW5kIHNvY2ttYXAgQlBGKSwgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHN1YnRsZSBjb25jdXJyZW5jeSByZWdyZXNzaW9ucyBhbmQgZXJyb3ItaGFuZGxpbmcgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFJFQURfT05DRSgpIGFubm90YXRpb25zIHRvIHJlYWRzIG9mIHNrLVx1MDAzZXNrX2VyciBhY3Jvc3MgVENQLCBNUFRDUCwgYW5kIGNvcmUgc3RyZWFtIHNvY2tldCBmdW5jdGlvbnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciByZS1yZWFkaW5nIG9wdGltaXphdGlvbnMgd2hlbiBza19lcnIgaXMgYWNjZXNzZWQgbG9ja2xlc3NseS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gU3RydWN0IHNvY2sgYW5kIGl0cyBza19lcnIgZmllbGQgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZXJlZm9yZSwgdGhlIHBhdGNoIHBvc2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIwNTM4Y2RiYzMxMGEyOGEwMGZmYWI1ZjAyNjE2ZmMzNjhmMTIxNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxNTo1NToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggNWU1ZjVmOWI4OWEzOC4uNmVlNTEzYmRiNTAzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTMwOTMsNyAmIzQzOzMwOTMsOCBAQCBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfaW5ib3VuZF9oYXNoKHN0cnVjdCBzb2NrICpzaywKIAogc3RhdGljIGlubGluZSBpbnQgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc3RydWN0IHNvY2sgKnNrKQogewotCXJldHVybiBzay0mZ3Q7c2tfZXJyIHx8CiYjNDM7CS8qIHNrX2VyciBjYW4gYmUgY2xlYXJlZCBsb2NrbGVzc2x5IGJ5IHNvY2tfZXJyb3IoKS4gKi8KJiM0MzsJcmV0dXJuIFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSB8fAogCSAgICAgICBzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0NMT1NFIHx8CiAJICAgICAgIChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOKSB8fAogCSAgICAgICBzaWduYWxfcGVuZGluZyhjdXJyZW50KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N0cmVhbS5jIGIvbmV0L2NvcmUvc3RyZWFtLmMKaW5kZXggMmQ3NDg1ODE4NjJkMC4uNWMwYWRjMzA3N2YwMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3RyZWFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc3RyZWFtLmMKQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgaW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApCiAJd2hpbGUgKDEpIHsKIAkJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCi0JCWlmIChzay0mZ3Q7c2tfZXJyIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpCiYjNDM7CQlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpCiAJCQlnb3RvIGRvX2Vycm9yOwogCQlpZiAoISp0aW1lb19wKQogCQkJZ290byBkb19lYWdhaW47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDFjODY3YTMwMjQ0NDYuLjllN2ZhN2UzOTcyNjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC04NDMsNyAmIzQzOzg0Myw3IEBAIHNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcywKIAkJCQlicmVhazsKIAkJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpCiAJCQkJYnJlYWs7Ci0JCQlpZiAoc2stJmd0O3NrX2VycikgewomIzQzOwkJCWlmIChSRUFEX09OQ0Uoc2stJmd0O3NrX2VycikpIHsKIAkJCQlyZXQgPSBzb2NrX2Vycm9yKHNrKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTEyMjgsNyAmIzQzOzEyMjgsNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmYW1wO3NpemVfZ29hbCwgZmxhZ3MpOwogCiAJZXJyID0gLUVQSVBFOwotCWlmIChzay0mZ3Q7c2tfZXJyIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpCiYjNDM7CWlmIChSRUFEX09OQ0Uoc2stJmd0O3NrX2VycikgfHwgKHNrLSZndDtza19zaHV0ZG93biAmYW1wOyBTRU5EX1NIVVRET1dOKSkKIAkJZ290byBkb19lcnJvcjsKIAogCXdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykpIHsKQEAgLTI3NjAsNyAmIzQzOzI3NjAsNyBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpCiAJCQkJYnJlYWs7CiAKLQkJCWlmIChzay0mZ3Q7c2tfZXJyKSB7CiYjNDM7CQkJaWYgKFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSkgewogCQkJCWNvcGllZCA9IHNvY2tfZXJyb3Ioc2spOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jCmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmE5NjMyM2U2NTc1OGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTI4Niw3ICYjNDM7Mjg2LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzaywKIAkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkKIAkJCWdvdG8gb3V0OwogCi0JCWlmIChzay0mZ3Q7c2tfZXJyKSB7CiYjNDM7CQlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpKSB7CiAJCQljb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC01NTMsMTAgJiM0Mzs1NTMsOSBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJCWJvb2wgZW5vc3BjID0gZmFsc2U7CiAJCXUzMiBjb3B5LCBvc2l6ZTsKIAotCQlpZiAoc2stJmd0O3NrX2VycikgewotCQkJZXJyID0gLXNrLSZndDtza19lcnI7CiYjNDM7CQllcnIgPSAtUkVBRF9PTkNFKHNrLSZndDtza19lcnIpOwomIzQzOwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2VycjsKLQkJfQogCiAJCWNvcHkgPSBtc2dfZGF0YV9sZWZ0KG1zZyk7CiAJCWlmICghc2tfc3RyZWFtX21lbW9yeV9mcmVlKHNrKSkKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmMKaW5kZXggZTFmMDhmNzFjZGIxNi4uNzYzMWZhNTgyODM0NyAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmMKQEAgLTIwMjgsNyAmIzQzOzIwMjgsNyBAQCBzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJfQogCiAJcmV0ID0gLUVQSVBFOwotCWlmICh1bmxpa2VseShzay0mZ3Q7c2tfZXJyIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpKQomIzQzOwlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpKQogCQlnb3RvIGRvX2Vycm9yOwogCiAJcGZyYWcgPSBza19wYWdlX2ZyYWcoc2spOwpAQCAtMjQyOSw3ICYjNDM7MjQyOSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJCSAgICAhdGltZW8pCiAJCQkJYnJlYWs7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoc2stJmd0O3NrX2VycikgewomIzQzOwkJCWlmIChSRUFEX09OQ0Uoc2stJmd0O3NrX2VycikpIHsKIAkJCQljb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTQ2NTUsNyAmIzQzOzQ2NTUsNyBAQCBzdGF0aWMgc3NpemVfdCBtcHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsCiAJCQkJYnJlYWs7CiAJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQogCQkJCWJyZWFrOwotCQkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpKSB7CiAJCQkJcmV0ID0gc29ja19lcnJvcihzayk7CiAJCQkJYnJlYWs7CiAJCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk3CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDgwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzay0mZ3Q7c2tfZXJyYCBEYXRhIFJhY2UgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2U6IGl0JiMzOTtzIGFkZGluZyBgUkVBRF9PTkNFYCBhcm91bmQgc2V2ZXJhbCBhY2Nlc3NlcyB0byBgc2stJmd0O3NrX2VycmAgYWNyb3NzIGJvdGggVENQIGFuZCBNUFRDUCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZDogYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCwgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAsIGB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYHRjcF9icGZfc2VuZG1zZ2AsIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYC4gVGhlIHVzZSBvZiBgUkVBRF9PTkNFYCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIHRvIGFkZHJlc3MgcG90ZW50aWFsIGRhdGEgcmFjZXMsIGxpa2VseSBpZGVudGlmaWVkIGJ5IEtDU0FOIG9yIHNpbWlsYXIgdG9vbHMsIG9yIHBlcmhhcHMganVzdCBhIHByb2FjdGl2ZSBtZWFzdXJlIHRvIGVuc3VyZSBjb3JyZWN0IGNvbXBpbGVyIGJlaGF2aW9yIGFyb3VuZCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlLgoKYHNrLSZndDtza19lcnJgIGlzIGFuIGludGVnZXIgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IHNvY2tgLiBTaW5jZSB0aGUgYHN0cnVjdCBzb2NrYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgd3JhcHBpbmcgZXhpc3RpbmcgcmVhZHMgd2l0aCBgUkVBRF9PTkNFYCwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIHRvIHByZXZlbnQgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBmcm9tIHJlLW9yZGVyaW5nIG1lbW9yeSBhY2Nlc3NlcyBpbiB3YXlzIHRoYXQgY291bGQgZXhwb3NlIHN0YWxlIHZhbHVlcy4KCkkmIzM5O20gY29uZmlkZW50IHRoaXMgaXNuJiMzOTt0IGFsdGVyaW5nIGxlbmd0aHMsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluaXRpYWxpemF0aW9uIHByb2JsZW1zLiBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O3ZlIG1lbnRhbGx5IGdvbmUgdGhyb3VnaCBteSB1c3VhbCBjaGVja2xpc3Q6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZSwgbm90aGluZyBoZXJlIHRoYXQgdHJhbnNtaXRzIHBhcnRpYWxseSBpbml0aWFsaXplZCBzdHJ1Y3R1cmVzIG9yIGZpZWxkcy4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIGBzay0mZ3Q7c2tfZXJyYCBpcyBpbml0aWFsaXplZCBkdXJpbmcgc29ja2V0IGFsbG9jYXRpb24gdXNpbmcgZWl0aGVyIGBrbWVtX2NhY2hlX2FsbG9jYCB3aXRoIHplcm9pbmcgb3IgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCBsYXRlciByZWFkcz8qKiBOb3QgYSBmYWN0b3IuIFRoZSBjaGFuZ2UgaXMgY29uZmluZWQgdG8gYSBzaW5nbGUgaW50ZWdlciBmaWVsZC4KNC4gICoqQm91bmRzIGNoZWNrcyBvciBsZW5ndGggaXNzdWVzPyoqIE5vIGNoYW5nZXMgdG8gYW55IHN1cnJvdW5kaW5nIGNvZGUgdGhhdCBtaWdodCBiZSBzdWJqZWN0IHRvIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MuCgpUaGVyZWZvcmUsIHRoaXMgc2VlbXMgbGlrZSBhIHB1cmVseSBhZGRpdGl2ZSBhbm5vdGF0aW9uL2NvbmN1cnJlbmN5IGZpeC4gSXQmIzM5O3Mgc2FmZSwgYW5kIGxpa2VseSBuZWNlc3NhcnkgZm9yIHJvYnVzdG5lc3MsIHBhcnRpY3VsYXJseSBnaXZlbiBtb2Rlcm4gY29uY3VycmVuY3kgdG9vbHMuIFdoaWxlIEkmIzM5O2QgcnVuIEtDU0FOLCBLVFNBTiwgb3Igc2ltaWxhciB0b29scywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4uIFRpbWUgdG8gcnVuIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgdG8gcmVhZHMgb2Ygc2stXHUwMDNlc2tfZXJyIGFjcm9zcyBUQ1AsIE1QVENQLCBhbmQgY29yZSBzdHJlYW0gc29ja2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGNvbXBpbGVyIHJlLXJlYWRpbmcgb3B0aW1pemF0aW9ucyB3aGVuIHNrX2VyciBpcyBhY2Nlc3NlZCBsb2NrbGVzc2x5LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBTdHJ1Y3Qgc29jayBhbmQgaXRzIHNrX2VyciBmaWVsZCBhcmUgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCB1cG9uIHNvY2tldCBjcmVhdGlvbi4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggcG9zZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB0byByZWFkcyBvZiBzay1cdTAwM2Vza19lcnIgYWNyb3NzIFRDUCwgTVBUQ1AsIGFuZCBjb3JlIHN0cmVhbSBzb2NrZXQgZnVuY3Rpb25zIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgcmUtcmVhZGluZyBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGFjY2Vzc2VkIGxvY2tsZXNzbHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFN0cnVjdCBzb2NrIGFuZCBpdHMgc2tfZXJyIGZpZWxkIGFyZSBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIHVwb24gc29ja2V0IGNyZWF0aW9uLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBwb3NlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU1OjEzLjQxOTQ3MzMzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTUwMjAyOTQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19zdHJlYW1fd2FpdF9tZW1vcnlcIixcbiAgICBcInRjcF9zcGxpY2VfcmVhZFwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3BfcmVjdm1zZ19sb2NrZWRcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwibXB0Y3Bfc2VuZG1zZ1wiLFxuICAgIFwibXB0Y3BfcmVjdm1zZ1wiLFxuICAgIFwibXB0Y3Bfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgdG8gcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciBhY3Jvc3MgVENQLCBNUFRDUCwgYW5kIGNvcmUgc3RyZWFtIHNvY2tldCBmdW5jdGlvbnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciByZS1yZWFkaW5nIG9wdGltaXphdGlvbnMgd2hlbiBza19lcnIgaXMgYWNjZXNzZWQgbG9ja2xlc3NseS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gU3RydWN0IHNvY2sgYW5kIGl0cyBza19lcnIgZmllbGQgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZXJlZm9yZSwgdGhlIHBhdGNoIHBvc2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbm5vdGF0ZXMgbG9ja2xlc3MgcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciB3aXRoIFJFQURfT05DRSgpIGFjcm9zcyBUQ1AsIE1QVENQLCBzdHJlYW0gc29ja2V0IHdhaXQgcGF0aHMsIGFuZCBUQ1AgQlBGIGhlbHBlcnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBpbXByb3BlciBjb21waWxlciBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkIGJ5IHNvY2tfZXJyb3IoKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyAoVENQLCBNUFRDUCwgYW5kIHNvY2ttYXAgQlBGKSwgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHN1YnRsZSBjb25jdXJyZW5jeSByZWdyZXNzaW9ucyBhbmQgZXJyb3ItaGFuZGxpbmcgY29ycmVjdG5lc3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU1OjEzLjQxOTQ3ODc1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4MTY0NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjA1MzhjZGJjMzEwYTI4YTAwZmZhYjVmMDI2MTZmYzM2OGYxMjE1NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAxNTo1NToxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuaW5kZXggNWU1ZjVmOWI4OWEzOC4uNmVlNTEzYmRiNTAzMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuQEAgLTMwOTMsNyArMzA5Myw4IEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9pbmJvdW5kX2hhc2goc3RydWN0IHNvY2sgKnNrLFxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuLVxcdHJldHVybiBzay1cXHUwMDNlc2tfZXJyIHx8XFxuK1xcdC8qIHNrX2VyciBjYW4gYmUgY2xlYXJlZCBsb2NrbGVzc2x5IGJ5IHNvY2tfZXJyb3IoKS4gKi9cXG4rXFx0cmV0dXJuIFJFQURfT05DRShzay1cXHUwMDNlc2tfZXJyKSB8fFxcbiBcXHQgICAgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSB8fFxcbiBcXHQgICAgICAgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTikgfHxcXG4gXFx0ICAgICAgIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpO1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zdHJlYW0uYyBiL25ldC9jb3JlL3N0cmVhbS5jXFxuaW5kZXggMmQ3NDg1ODE4NjJkMC4uNWMwYWRjMzA3N2YwMyAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9zdHJlYW0uY1xcbisrKyBiL25ldC9jb3JlL3N0cmVhbS5jXFxuQEAgLTEzMyw3ICsxMzMsNyBAQCBpbnQgc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW9fcClcXG4gXFx0d2hpbGUgKDEpIHtcXG4gXFx0XFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spO1xcbiBcXG4tXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19lcnIgfHwgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFNFTkRfU0hVVERPV04pKVxcbitcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpIHx8IChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcXG4gXFx0XFx0XFx0Z290byBkb19lcnJvcjtcXG4gXFx0XFx0aWYgKCEqdGltZW9fcClcXG4gXFx0XFx0XFx0Z290byBkb19lYWdhaW47XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcXG5pbmRleCAxYzg2N2EzMDI0NDQ2Li45ZTdmYTdlMzk3MjY1IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwLmNcXG5AQCAtODQzLDcgKzg0Myw3IEBAIHNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpKSB7XFxuIFxcdFxcdFxcdFxcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbkBAIC0xMjI4LDcgKzEyMjgsNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0bXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgXFx1MDAyNnNpemVfZ29hbCwgZmxhZ3MpO1xcbiBcXG4gXFx0ZXJyID0gLUVQSVBFO1xcbi1cXHRpZiAoc2stXFx1MDAzZXNrX2VyciB8fCAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgU0VORF9TSFVURE9XTikpXFxuK1xcdGlmIChSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2VycikgfHwgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFNFTkRfU0hVVERPV04pKVxcbiBcXHRcXHRnb3RvIGRvX2Vycm9yO1xcbiBcXG4gXFx0d2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSkge1xcbkBAIC0yNzYwLDcgKzI3NjAsNyBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpKSB7XFxuIFxcdFxcdFxcdFxcdGNvcGllZCA9IHNvY2tfZXJyb3Ioc2spO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcXG5pbmRleCAyZTIzNGQxNTViNWU2Li5hOTYzMjNlNjU3NThlIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xcbkBAIC0yODYsNyArMjg2LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpKSB7XFxuIFxcdFxcdFxcdGNvcGllZCA9IHNvY2tfZXJyb3Ioc2spO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbkBAIC01NTMsMTAgKzU1Myw5IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0Ym9vbCBlbm9zcGMgPSBmYWxzZTtcXG4gXFx0XFx0dTMyIGNvcHksIG9zaXplO1xcbiBcXG4tXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19lcnIpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLXNrLVxcdTAwM2Vza19lcnI7XFxuK1xcdFxcdGVyciA9IC1SRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2Vycik7XFxuK1xcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0Y29weSA9IG1zZ19kYXRhX2xlZnQobXNnKTtcXG4gXFx0XFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuaW5kZXggZTFmMDhmNzFjZGIxNi4uNzYzMWZhNTgyODM0NyAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuQEAgLTIwMjgsNyArMjAyOCw3IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gLUVQSVBFO1xcbi1cXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2VyciB8fCAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgU0VORF9TSFVURE9XTikpKVxcbitcXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpIHx8IChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBTRU5EX1NIVVRET1dOKSkpXFxuIFxcdFxcdGdvdG8gZG9fZXJyb3I7XFxuIFxcbiBcXHRwZnJhZyA9IHNrX3BhZ2VfZnJhZyhzayk7XFxuQEAgLTI0MjksNyArMjQyOSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0ICAgICF0aW1lbylcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfZXJyKSB7XFxuK1xcdFxcdFxcdGlmIChSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2VycikpIHtcXG4gXFx0XFx0XFx0XFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuQEAgLTQ2NTUsNyArNDY1NSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1wdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpKSB7XFxuIFxcdFxcdFxcdFxcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1NToxMy45NzgzMTE4MzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwNzU5NTM4MDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19zdHJlYW1fd2FpdF9tZW1vcnlcIixcbiAgICBcInRjcF9zcGxpY2VfcmVhZFwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3BfcmVjdm1zZ19sb2NrZWRcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwibXB0Y3Bfc2VuZG1zZ1wiLFxuICAgIFwibXB0Y3BfcmVjdm1zZ1wiLFxuICAgIFwibXB0Y3Bfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbm5vdGF0ZXMgbG9ja2xlc3MgcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciB3aXRoIFJFQURfT05DRSgpIGFjcm9zcyBUQ1AsIE1QVENQLCBzdHJlYW0gc29ja2V0IHdhaXQgcGF0aHMsIGFuZCBUQ1AgQlBGIGhlbHBlcnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBpbXByb3BlciBjb21waWxlciBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkIGJ5IHNvY2tfZXJyb3IoKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyAoVENQLCBNUFRDUCwgYW5kIHNvY2ttYXAgQlBGKSwgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHN1YnRsZSBjb25jdXJyZW5jeSByZWdyZXNzaW9ucyBhbmQgZXJyb3ItaGFuZGxpbmcgY29ycmVjdG5lc3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjA1MzhjZGJjMzEwYTI4YTAwZmZhYjVmMDI2MTZmYzM2OGYxMjE1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE1OjU1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggNWU1ZjVmOWI4OWEzOC4uNmVlNTEzYmRiNTAzMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4rKysgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTMwOTMsNyArMzA5Myw4IEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9pbmJvdW5kX2hhc2goc3RydWN0IHNvY2sgKnNrLFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9yZWN2X3Nob3VsZF9zdG9wKHN0cnVjdCBzb2NrICpzaylcbiB7XG4tXHRyZXR1cm4gc2stXHUwMDNlc2tfZXJyIHx8XG4rXHQvKiBza19lcnIgY2FuIGJlIGNsZWFyZWQgbG9ja2xlc3NseSBieSBzb2NrX2Vycm9yKCkuICovXG4rXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikgfHxcbiBcdCAgICAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UgfHxcbiBcdCAgICAgICAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTikgfHxcbiBcdCAgICAgICBzaWduYWxfcGVuZGluZyhjdXJyZW50KTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zdHJlYW0uYyBiL25ldC9jb3JlL3N0cmVhbS5jXG5pbmRleCAyZDc0ODU4MTg2MmQwLi41YzBhZGMzMDc3ZjAzIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc3RyZWFtLmNcbisrKyBiL25ldC9jb3JlL3N0cmVhbS5jXG5AQCAtMTMzLDcgKzEzMyw3IEBAIGludCBza19zdHJlYW1fd2FpdF9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lb19wKVxuIFx0d2hpbGUgKDEpIHtcbiBcdFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spO1xuIFxuLVx0XHRpZiAoc2stXHUwMDNlc2tfZXJyIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpXG4rXHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSB8fCAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFNFTkRfU0hVVERPV04pKVxuIFx0XHRcdGdvdG8gZG9fZXJyb3I7XG4gXHRcdGlmICghKnRpbWVvX3ApXG4gXHRcdFx0Z290byBkb19lYWdhaW47XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggMWM4NjdhMzAyNDQ0Ni4uOWU3ZmE3ZTM5NzI2NSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTg0Myw3ICs4NDMsNyBAQCBzc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuK1x0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG5AQCAtMTIyOCw3ICsxMjI4LDcgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRtc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCBcdTAwMjZzaXplX2dvYWwsIGZsYWdzKTtcbiBcbiBcdGVyciA9IC1FUElQRTtcbi1cdGlmIChzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbitcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSB8fCAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFNFTkRfU0hVVERPV04pKVxuIFx0XHRnb3RvIGRvX2Vycm9yO1xuIFxuIFx0d2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSkge1xuQEAgLTI3NjAsNyArMjc2MCw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG4gXHRcdFx0XHRicmVhaztcbiBcbi1cdFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4rXHRcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0XHRjb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmE5NjMyM2U2NTc1OGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4rXHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdGNvcGllZCA9IHNvY2tfZXJyb3Ioc2spO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG5AQCAtNTUzLDEwICs1NTMsOSBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdGJvb2wgZW5vc3BjID0gZmFsc2U7XG4gXHRcdHUzMiBjb3B5LCBvc2l6ZTtcbiBcbi1cdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuLVx0XHRcdGVyciA9IC1zay1cdTAwM2Vza19lcnI7XG4rXHRcdGVyciA9IC1SRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKTtcbitcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdH1cbiBcbiBcdFx0Y29weSA9IG1zZ19kYXRhX2xlZnQobXNnKTtcbiBcdFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGUxZjA4ZjcxY2RiMTYuLjc2MzFmYTU4MjgzNDcgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0yMDI4LDcgKzIwMjgsNyBAQCBzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHR9XG4gXG4gXHRyZXQgPSAtRVBJUEU7XG4tXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZXJyIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpKVxuK1x0aWYgKHVubGlrZWx5KFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpKVxuIFx0XHRnb3RvIGRvX2Vycm9yO1xuIFxuIFx0cGZyYWcgPSBza19wYWdlX2ZyYWcoc2spO1xuQEAgLTI0MjksNyArMjQyOSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0XHQgICAgIXRpbWVvKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuK1x0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG5AQCAtNDY1NSw3ICs0NjU1LDcgQEAgc3RhdGljIHNzaXplX3QgbXB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbitcdFx0XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikpIHtcbiBcdFx0XHRcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTU6MTMuOTc4MzE0MjE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI1NTYyMzg1MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpczogQ29yZSBOZXR3b3JraW5nIE1vZGlmaWNhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgc2V2ZXJhbCBpbnN0YW5jZXMgb2YgYHNrLVx1MDAzZXNrX2VycmAgcmVhZHMgYWNyb3NzIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBzcGVjaWZpY2FsbHkgaW4gYHRjcC5oYCwgYHN0cmVhbS5jYCwgdmFyaW91cyBgdGNwLmNgIGZpbGVzIChpbmNsdWRpbmcgdGhlIEJQRiBhbmQgTVBUQ1AgdmFyaWFudHMpLiBJdCdzIGFkZGluZyBgUkVBRF9PTkNFKClgIHRvIHRoZXNlIHJlYWRzLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyBhbiBhdHRlbXB0IHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgbGlrZWx5IGFkZHJlc3NlcyBpc3N1ZXMgZmxhZ2dlZCBieSBhIHRvb2wgbGlrZSBLQ1NBTiBvciBwb3RlbnRpYWwgY29tcGlsZXIgb3B0aW1pemF0aW9uIHByb2JsZW1zLiBUaGlzIGlzIGFsbCAqY29yZSogbmV0d29ya2luZyBzdHVmZi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoaXMgcmVxdWlyZXMgZnV6emluZyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZ3VpZGVsaW5lcy4gSSBuZWVkIHRvIGJlIGRpbGlnZW50IGFib3V0IHRoaXMga2luZCBvZiBjaGFuZ2UsIHNpbmNlIHRoZSBwYXRjaCBhdXRob3IgbWlnaHQgY2xhaW0gXCJubyBmdW5jdGlvbmFsIGNoYW5nZSxcIiBidXQgdGhhdCBpcyBub3Qgc3VmZmljaWVudC5cblxuTG9va2luZyBhdCB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBjaGFuZ2UuXG5cbkknbSBjaGVja2luZyB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZmlyc3QuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGRlZmluaXRlbHkgKm5vdCogZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBidWlsZCBzeXN0ZW0gY2hhbmdlcy4gSXQncyBub3QgdW5yZWFjaGFibGUgaGFyZHdhcmUgb3IgZXhjbHVzaXZlIHRvIG90aGVyIGFyY2hpdGVjdHVyZXMuIEl0J3MgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4gU28sIHRoZSBcIm5lZ2F0aXZlIGNyaXRlcmlhXCIgYWxsIGZhaWwuXG5cbk5vdywgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBTZWN0aW9uIDMgaXMgY2xlYXI6IFwiUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzogQ29yZSBTdWJzeXN0ZW1zOiAuLi4gY29yZSBuZXR3b3JraW5nLi4uXCIuIEJpbmdvISBUaGlzICphYnNvbHV0ZWx5KiBmYWxscyB1bmRlciB0aGF0IGRlZmluaXRpb24uIENoYW5naW5nIHRoaXMsIGV2ZW4gaWYgaXQgKnNlZW1zKiBsaWtlIGEgc2ltcGxlIGNoYW5nZSwgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIHRodXMgbmVlZHMgdG8gYmUgZnV6emVkLiBBZGRpbmcgYFJFQURfT05DRWAgY2FuLCBmb3IgZXhhbXBsZSwgZGlzYWJsZSBzb21lIG9wdGltaXphdGlvbnMgdGhhdCBkZXBlbmQgb24gc3BlY2lmaWMgb3JkZXJpbmcgYXNzdW1wdGlvbnMsIGFuZCByZXZlYWwgYSBoaWRkZW4gYnVnIG9yIGEgbmV3IGNvZGUgcGF0aC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGxvYWQvc3RvcmUgY29kZS5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCAqbXVzdCogYmUgYHRydWVgLiBJJ2xsIG5vdyBjaGVjayB0aGUgY29tbWl0IGxvZyBpbiBnaXQgdG8gc2VlIGlmIGFueSBtb3JlIGRldGFpbHMgY2FuIGJlIGdsZWFuZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MTkuNTQwNzAyMzIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODc3MzQ2NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfZXJyIGNhbiBiZSBjbGVhcmVkIGxvY2tsZXNzbHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9MzA5ND1zdGF0aWMgaW5saW5lIGludCB0Y3BfcmVjdl9zaG91bGRfc3RvcChzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvdGNwLmgtMzA5NS17XFxuaW5jbHVkZS9uZXQvdGNwLmg6MzA5NjpcXHQvKiBza19lcnIgY2FuIGJlIGNsZWFyZWQgbG9ja2xlc3NseSBieSBzb2NrX2Vycm9yKCkuICovXFxuaW5jbHVkZS9uZXQvdGNwLmgtMzA5Ny1cXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjIxLjYyODQ0Mzc3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MDkwOTMwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBUQ1AvTVBUQ1AgRGF0YSBGbG93IGFuZCBQb3RlbnRpYWwgQm90dGxlbmVja3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93IGFuZCBwb3RlbnRpYWwgY2hva2UgcG9pbnRzIHdpdGhpbiB0aGUgVENQIGFuZCBNUFRDUCBzdGFja3MuIEknbSB0aGlua2luZyBvZiBmb2N1c2luZyBvbiBhIHNwZWNpZmljIHNldCBvZiBrZXkgZnVuY3Rpb25zOiBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3NlbmRtc2dgLCB0aGVuIEknbGwgbG9vayBpbnRvIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBgbXB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NwbGljZV9yZWFkYCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCBhbmQgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IHN1c3BlY3RzIHdoZXJlIGRhdGEgaXMgYmVpbmcgcHJvY2Vzc2VkLCBjb3BpZWQsIGFuZCBxdWV1ZWQuIEknbSBwcmV0dHkgc3VyZSBJIGNhbiBnZXQgYSBnb29kIG92ZXJ2aWV3IGJ5IGZvY3VzaW5nIG9uIHRob3NlLlxuXG5Ob3csIGFuIGltcG9ydGFudCBmYWN0b3IgaW4gdGhlIGRhdGEgZmxvdyBpcyBkZXRlcm1pbmluZyB3aGVuIHRvIHBhdXNlIHRyYW5zbWlzc2lvbiwgYW5kIEkgcmVtZW1iZXIgYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCBwbGF5cyBhIHJvbGUgaW4gaXQuIFNvIEkgbmVlZCB0byBzZWUgd2hvJ3MgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24uIEknbGwgcmVhY2ggZm9yIGBncmVwcGVyYCB0byBxdWlja2x5IHRyYWNrIGRvd24gYWxsIG9mIHRoZSBjYWxsIHNpdGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBsYXJnZXIgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBkYXRhIHJlY2VwdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1NzoyNS4xMzc1MzkxMDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MTg5MjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfcmVjdl9zaG91bGRfc3RvcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0zMDg5PWVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9pbmJvdW5kX2hhc2goc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMzA5My1cXG5pbmNsdWRlL25ldC90Y3AuaDozMDk0OnN0YXRpYyBpbmxpbmUgaW50IHRjcF9yZWN2X3Nob3VsZF9zdG9wKHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC90Y3AuaC0zMDk1LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTgxMT1zc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy04ODYtXFxubmV0L2lwdjQvdGNwLmM6ODg3OlxcdFxcdGlmICh0Y3BfcmVjdl9zaG91bGRfc3RvcChzaykpXFxubmV0L2lwdjQvdGNwLmMtODg4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjY1Nj1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI3NTYtXFx0XFx0XFx0aWYgKCF0aW1lbyB8fFxcbm5ldC9pcHY0L3RjcC5jOjI3NTc6XFx0XFx0XFx0ICAgIHRjcF9yZWN2X3Nob3VsZF9zdG9wKHNrKSlcXG5uZXQvaXB2NC90Y3AuYy0yNzU4LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjM3ND1zdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDI3LVxcdFxcdGlmIChjb3BpZWQpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDI4OlxcdFxcdFxcdGlmICh0Y3BfcmVjdl9zaG91bGRfc3RvcChzaykgfHxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDI5LVxcdFxcdFxcdCAgICAhdGltZW8pXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00NjI0PXN0YXRpYyBzc2l6ZV90IG1wdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2OTgtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDY5OTpcXHRcXHRpZiAodGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ3MDAtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjI2Ljg5OTQzNjkyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzMzIxNTUwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1vZGlmaWVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBJJ20gc2VlaW5nIGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmVncmVzc2lvbnMgd2l0aGluIHRoZXNlIG5ldHdvcmsgY29yZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZW0gYW5kIHVuZGVyc3RhbmQgdGhlIGV4dGVudCBvZiB0aGUgbW9kaWZpY2F0aW9ucy5cblxuSGVyZeKAmXMgbXkgbWVudGFsIGNoZWNrbGlzdDpcbiogICBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCBpbiBgbmV0L2NvcmUvc3RyZWFtLmNgIC0gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLCBzbyBhbnkgY2hhbmdlIGhlcmUgaXMgaW1tZWRpYXRlbHkgc3VzcGVjdC5cbiogICBgdGNwX3NwbGljZV9yZWFkYCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBpbiBgbmV0L2lwdjQvdGNwLmNgIC0gVGhlc2UgYXJlIGNyaXRpY2FsIGZvciBkYXRhIHRyYW5zZmVyOyBjaGFuZ2VzIGhlcmUgbmVjZXNzaXRhdGUgdGhvcm91Z2ggaW5zcGVjdGlvbi5cbiogICBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3NlbmRtc2dgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIC0gQlBGIGhvb2tzLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBpbnN0cnVtZW50YXRpb24gb3IgcG90ZW50aWFsIGNvbnRyb2wgZmxvdyBjaGFuZ2VzLlxuKiAgIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIC0gTVBUQ1Atc3BlY2lmaWMsIGFueSBjaGFuZ2VzIHRvIHRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS5cblxuQW5kIHRoZW4gdGhlcmUncyB0aGUgYGluY2x1ZGUvbmV0L3RjcC5oYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGB0Y3BfcmVjdl9zaG91bGRfc3RvcGAgZnVuY3Rpb24sIGlubGluZWQgaW50byBzZXZlcmFsIG90aGVyIGtleSBmdW5jdGlvbnMuIFRoaXMgaXMgcG90ZW50aWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0cyB1c2UgaW4gc28gbWFueSBvdGhlciBrZXkgZnVuY3Rpb25zIG1lYW5zIGl0IGlzIHZlcnkgaW1wb3J0YW50LlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGFuZCBgdGNwX3NlbmRtc2dfbG9ja2VkYCBzcGVjaWZpY2FsbHkuIEFyZSB0aGV5IGRlY2xhcmVkIHN0YXRpYyBvciBub24tc3RhdGljPyBJIG5lZWQgdG8ga25vdyB0aGVpciB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIExldCdzIGhlYWQgb3ZlciB0byBgbmV0L2lwdjQvdGNwLmNgIGFuZCBmaWd1cmUgdGhpcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNjksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MzAuMjMxNTk0ODIxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTUwNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9zZW5kbXNnX2xvY2tlZHx0Y3BfcmVjdm1zZ19sb2NrZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9MTExND1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XFxubmV0L2lwdjQvdGNwLmMtMTExNS1cXG5uZXQvaXB2NC90Y3AuYzoxMTE2OmludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcC5jLTExMTcte1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTI0MC1cXG5uZXQvaXB2NC90Y3AuYzoxMjQxOlxcdFxcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XFxubmV0L2lwdjQvdGNwLmMtMTI0Mi1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0NDQtfVxcbm5ldC9pcHY0L3RjcC5jOjE0NDU6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDQ2LVxcbm5ldC9pcHY0L3RjcC5jPTE0NDc9aW50IHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0NTEtXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3AuYzoxNDUyOlxcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBzaXplKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDUzLVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xOTM2PXN0YXRpYyB2b2lkIHRjcF96ZXJvY29weV9zZXRfaGludF9mb3Jfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE5NzItXFxubmV0L2lwdjQvdGNwLmM6MTk3MzpzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvaXB2NC90Y3AuYy0xOTc0LVxcdFxcdFxcdCAgICAgIGludCBmbGFncywgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcyxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTE5NzY9c3RhdGljIGludCByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTk5NC1cXG5uZXQvaXB2NC90Y3AuYzoxOTk1OlxcdGVyciA9IHRjcF9yZWN2bXNnX2xvY2tlZChzaywgXFx1MDAyNm1zZywgaW5xLCBNU0dfRE9OVFdBSVQsXFxubmV0L2lwdjQvdGNwLmMtMTk5Ni1cXHRcXHRcXHRcXHQgdHNzLCBcXHUwMDI2emMtXFx1MDAzZW1zZ19mbGFncyk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yNTAwPXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI2NTUtXFxubmV0L2lwdjQvdGNwLmM6MjY1NjpzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvaXB2NC90Y3AuYy0yNjU3LVxcdFxcdFxcdCAgICAgIGludCBmbGFncywgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcyxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI5MzE9aW50IHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yOTQ0LVxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdGNwLmM6Mjk0NTpcXHRyZXQgPSB0Y3BfcmVjdm1zZ19sb2NrZWQoc2ssIG1zZywgbGVuLCBmbGFncywgXFx1MDAyNnRzcywgXFx1MDAyNmNtc2dfZmxhZ3MpO1xcbm5ldC9pcHY0L3RjcC5jLTI5NDYtXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MzAuMjc5NTUwNzcxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU3OTc3MTQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRDUCBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEl0J3MgZXhwb3NlZCwgYEVYUE9SVF9TWU1CT0xfR1BMYCB0byBiZSBwcmVjaXNlLCB3aGljaCBtZWFucyBrVExTLCB0Y3BfYnBmIGFuZCBgdGNwX3NlbmRtc2dgIGNhbiBhbGwgY2FsbCBpdC4gVGhhdCBtYWtlcyBzZW5zZSwgYSBjcnVjaWFsIGludGVybmFsIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGFjY2Vzc2libGUgZm9yIHRob3NlIGZlYXR1cmVzLlxuXG5CdXQgd2FpdCBhIHNlY29uZC4uLiB3aGF0IGFib3V0IHRoZSByZWNlaXZlIHNpZGU/IElzIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIHZpc2libGUgaW4gdGhlIHNhbWUgd2F5PyBIbW1tLCBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIGRlY2xhcmVkICpzdGF0aWMqLiBOZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCBjb3VsZCBjaGFuZ2UgdGhlIGZsb3cgaW4gYSBzdWJ0bGUgd2F5LiBHb3R0YSByZW1lbWJlciB0byBrZWVwIGFuIGV5ZSBvbiBob3cgdGhhdCBpbXBhY3RzIHRoZSBzdGFjay5cblxuSnVzdCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgZWRnZSBjYXNlcywgbGV0J3MgYWxzbyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgdGNwX3NwbGljZV9yZWFkYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBleHBvc3VyZS4gSXMgaXQgZXhwb3J0ZWQsIG9yIGlzIGl0IGFsc28gYSBzdGF0aWMgaW50ZXJuYWwgZnVuY3Rpb24/IFRoZSBpbXBsaWNhdGlvbnMgZm9yIGtlcm5lbCBpbnRlcm5hbHMgYW5kIHNlY3VyaXR5IGNvdWxkIGRpZmZlciBzaWduaWZpY2FudGx5IGJhc2VkIG9uIHRoYXQgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MzIuODU5MzI0NjExWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE0NDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzc2l6ZV90IHRjcF9zcGxpY2VfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz03ODg9c3RhdGljIGludCBfX3RjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc3BsaWNlX3N0YXRlICp0c3MpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy04MTAtICoqL1xcbm5ldC9pcHY0L3RjcC5jOjgxMTpzc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXFxubmV0L2lwdjQvdGNwLmMtODEyLVxcdFxcdFxcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjMyLjkwNzQ3NTY5MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzc0MDE3OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVENQIERhdGEgRmxvdyoqXG5cbk9rYXksIHNvIGB0Y3Bfc3BsaWNlX3JlYWRgIGlzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfc2VuZG1zZ2AuIEFyZSB0aGV5IHJlbGF0ZWQsIGFuZCBob3c/IFRvIGZpbmQgb3V0LCBJIHNob3VsZCBkaXZlIGludG8gYHRjcF9icGYuY2AuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBleHBsb3JpbmcgaG93IHRoZXNlIGRpZmZlcmVudCBmdW5jdGlvbnMgd29yayB0b2dldGhlciB3aXRoaW4gdGhlIFRDUCBkYXRhIGZsb3cuIEkgd2FudCB0byBzZWUgaG93IHRoZSBCUEYgaW50ZWdyYXRpb24gcGxheXMgd2l0aCB0aGUgZGF0YSBwYXRoLiBMZXQncyBzZWUgd2hhdCBgdGNwX2JwZi5jYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxOTYsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1NzozNS4yODE0OTY0ODNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDcyNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJ8dGNwX2JwZl9zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmM9MTUzPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjMtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjE2NDppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjUtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcywgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE3Ny19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjE3ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz00MTg9c3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg2LVxcdFxcdG9yaWdzaXplID0gbXNnLVxcdTAwM2VzZy5zaXplO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo0ODc6XFx0XFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00ODgtXFx0XFx0XFx0XFx0XFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo1MzQ6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcF9icGYuYy01MzUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTYzOT1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY0OS1cXHRwcm90W1RDUF9CUEZfVFhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY1MDpcXHRwcm90W1RDUF9CUEZfVFhdLnNlbmRtc2dcXHRcXHQ9IHRjcF9icGZfc2VuZG1zZztcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUxLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTItXFx0cHJvdFtUQ1BfQlBGX1JYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTM6XFx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NTQtXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1NS1cXHRwcm90W1RDUF9CUEZfVFhSWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9UWF07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY1NjpcXHRwcm90W1RDUF9CUEZfVFhSWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU3LX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02ODk9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzEyLVxcdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3JcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzEzOlxcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcxNC1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MzUuMzI4NTcyOTgyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5OTA1ODkwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBGdW5jdGlvbiBTeW1ib2wgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3NlbmRtc2dgIOKAkyB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBgdGNwX2JwZi5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhleSBiZSBjb25zaWRlcmVkIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXM/XG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBGb2N1c1N5bWJvbCBydWxlczogV2UncmUgc3VwcG9zZWQgdG8gYXZvaWQgdWJpcXVpdG91cyBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIG5vdGhpbmcgY2FsbGVkIGJ5ICpldmVyeSogcHJvZ3JhbS4gV2Ugd2FudCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgYWJvdXQgc3RhdGljICppbmxpbmUqIGZ1bmN0aW9ucyBpcyBpbnRlcmVzdGluZywgYmVjYXVzZSB0aG9zZSBjYW4ndCBiZSB0YXJnZXRlZCBkaXJlY3RseS4gSG93ZXZlciwgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYSBgLmNgIGZpbGUsIGFuZCB1bmxlc3MgdGhlIGNvbXBpbGVyIGlubGluZXMgdGhlbSwgdGhleSAqZG8qIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB0aGUgdm1saW51eCBpbWFnZS4gVGhpcyBpcyBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgc2luY2UgSSBrbm93IGB0Y3BfYnBmX3NlbmRtc2dgIGlzIGFzc2lnbmVkIHRvIGBwcm90W1RDUF9CUEZfVFhdLnNlbmRtc2dgLCBzbyBpdCAqc2hvdWxkKiBoYXZlIGFuIGFkZHJlc3MuXG5cblRoYXQgc2FpZCwgSSB3b25kZXIgYWJvdXQgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgc3BhY2UuIE5vdywgd2hhdCBhYm91dCBgbXB0Y3Bfc2VuZG1zZ2AsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zcGxpY2VfcmVhZGA/IEkgbmVlZCB0byBjaGVjayB0aG9zZSBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NjUsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MzguMzE5MTY0Nzc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzExMjQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9zZW5kbXNnfG1wdGNwX3JlY3Ztc2d8bXB0Y3Bfc3BsaWNlX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MTI2MT1tcHRjcF9jYXJ2ZV9kYXRhX2ZyYWcoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMjc4LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEyNzk6c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyB7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTI4MC1cXHRpbnQgbXNzX25vdztcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEzNzQ9c3RhdGljIHZvaWQgbXB0Y3BfdXBkYXRlX2luZmluaXRlX21hcChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTM5NC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMzk1OnN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZ19mcmFnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMzk2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzOTc6XFx0XFx0XFx0ICAgICAgc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMzk4LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MzMtXFx0XFx0bXB0Y3BfdXBkYXRlX2luZmluaXRlX21hcChtc2ssIHNzaywgbXBleHQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE1MzQ6XFx0dHJhY2VfbXB0Y3Bfc2VuZG1zZ19mcmFnKG1wZXh0KTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTM1LVxcdG1wdGNwX3N1YmZsb3dfY3R4KHNzayktXFx1MDAzZXJlbF93cml0ZV9zZXEgKz0gY29weTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE1ODc9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE2NjItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTY2MzpzdGF0aWMgdm9pZCBtcHRjcF9wdXNoX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjY0LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE3MDU9c3RhdGljIGludCBfX3N1YmZsb3dfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNzA2OlxcdFxcdFxcdFxcdCAgc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzA3LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE3MTgtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTcxOTpcXHRcXHRcXHRyZXQgPSBtcHRjcF9zZW5kbXNnX2ZyYWcoc2ssIHNzaywgZGZyYWcsIGluZm8pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE3MjAtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNzQ5PXZvaWQgX19tcHRjcF9wdXNoX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzUyLVxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTc1MzpcXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTc1NC1cXHRcXHRcXHRcXHQuZmxhZ3MgPSBmbGFncyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE4MTc9c3RhdGljIHZvaWQgX19tcHRjcF9zdWJmbG93X3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgZmlyc3QpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODE5LVxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTgyMDpcXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTgyMS1cXHRcXHQuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTg4ND1zdGF0aWMgaW50IG1wdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE4ODUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTg4NjpzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2dfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTg4Ny1cXHRcXHRcXHRcXHQgIHNpemVfdCBsZW4sIGludCAqY29waWVkX3N5bilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE5ODA9c3RhdGljIHZvaWQgbXB0Y3BfcnBzX3JlY29yZF9zdWJmbG93cyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTk5My1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxOTk0OnN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTk1LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIwMTMtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjAxNDpcXHRcXHRyZXQgPSBtcHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHNrLCBtc2csIGxlbiwgXFx1MDAyNmNvcGllZF9zeW4pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIwMTUtXFx0XFx0Y29waWVkICs9IGNvcGllZF9zeW47XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMTM2PXN0YXRpYyB2b2lkIG1wdGNwX2VhdF9yZWN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQ2LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxNDc6c3RhdGljIGludCBfX21wdGNwX3JlY3Ztc2dfbXNrcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQ4LVxcdFxcdFxcdFxcdHNpemVfdCBsZW4sIGludCBmbGFncywgaW50IGNvcGllZF90b3RhbCxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNTM9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzczLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzNzQ6c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzNzUtXFx0XFx0XFx0IGludCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQwNzpcXHRcXHRieXRlc19yZWFkID0gX19tcHRjcF9yZWN2bXNnX21za3Eoc2ssIG1zZywgbGVuIC0gY29waWVkLCBmbGFncyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgY29waWVkLCBcXHUwMDI2dHNzLCBcXHUwMDI2Y21zZ19mbGFncyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4NTg9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg2MC17XFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg2MTpcXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg2Mi1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg5Ny1cXHRcXHRcXHR3aGlsZSAoaW5mby5zZW50IFxcdTAwM2MgaW5mby5saW1pdCkge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4OTg6XFx0XFx0XFx0XFx0cmV0ID0gbXB0Y3Bfc2VuZG1zZ19mcmFnKHNrLCBzc2ssIGRmcmFnLCBcXHUwMDI2aW5mbyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg5OS1cXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MjEwPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMjAtXFx0LmRlc3Ryb3lcXHQ9IG1wdGNwX2Rlc3Ryb3ksXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIyMTpcXHQuc2VuZG1zZ1xcdD0gbXB0Y3Bfc2VuZG1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjIyLVxcdC5pb2N0bFxcdFxcdD0gbXB0Y3BfaW9jdGwsXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIyMzpcXHQucmVjdm1zZ1xcdD0gbXB0Y3BfcmVjdm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjI0LVxcdC5yZWxlYXNlX2NiXFx0PSBtcHRjcF9yZWxlYXNlX2NiLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDU5Mj1zdGF0aWMgaW50IG1wdGNwX3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDU5Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0NTk4OnN0YXRpYyBpbnQgX19tcHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc3BsaWNlX3N0YXRlICp0c3MpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDU5OS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NjA5LS8qKlxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2MTA6ICogIG1wdGNwX3NwbGljZV9yZWFkIC0gc3BsaWNlIGRhdGEgZnJvbSBNUFRDUCBzb2NrZXQgdG8gYSBwaXBlXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDYxMS0gKiBAc29jazpcXHRzb2NrZXQgdG8gc3BsaWNlIGZyb21cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2MjMtICoqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2MjQ6c3RhdGljIHNzaXplX3QgbXB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2MjUtXFx0XFx0XFx0XFx0IHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NjQ5LVxcdHdoaWxlICh0c3MubGVuKSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDY1MDpcXHRcXHRyZXQgPSBfX21wdGNwX3NwbGljZV9yZWFkKHNrLCBcXHUwMDI2dHNzKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NjUxLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00Njc1LVxcdFxcdFxcdH1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0Njc2OlxcdFxcdFxcdC8qIGlmIF9fbXB0Y3Bfc3BsaWNlX3JlYWQoKSBnb3Qgbm90aGluZyB3aGlsZSB3ZSBoYXZlXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3Ny1cXHRcXHRcXHQgKiBhbiBza2IgaW4gcmVjZWl2ZSBxdWV1ZSwgd2UgZG8gbm90IHdhbnQgdG8gbG9vcC5cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ3MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXB0Y3Bfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ3MzEtXFx0LnJlYWRfc29ja1xcdCAgID0gbXB0Y3BfcmVhZF9zb2NrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ3MzI6XFx0LnNwbGljZV9yZWFkXFx0ICAgPSBtcHRjcF9zcGxpY2VfcmVhZCxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NzMzLX07XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00ODIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1wdGNwX3Y2X3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00ODQzLVxcdC5yZWFkX3NvY2tcXHQgICA9IG1wdGNwX3JlYWRfc29jayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0ODQ0OlxcdC5zcGxpY2VfcmVhZFxcdCAgID0gbXB0Y3Bfc3BsaWNlX3JlYWQsXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDg0NS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1NzozOC4zNjYyODE5ODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM2MjE2OTA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGBza19zdHJlYW1fd2FpdF9tZW1vcnlgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBzY29wZSBhbmQgdXNhZ2UuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgYnJvYWRseSBhY2Nlc3NpYmxlIG9yIHJlc3RyaWN0ZWQgdG8gc3BlY2lmaWMgY29udGV4dHMuIFRoZSBkb2N1bWVudGF0aW9uIHNob3VsZCBiZSBoZWxwZnVsLCBidXQgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY29kZSBpdHNlbGYsIHN0YXJ0aW5nIHdpdGggYG5ldC9jb3JlL3N0cmVhbS5jYCB3aGVyZSBpdCdzIGRlZmluZWQuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgdW5kZXJzdGFuZGluZyBpdHMgcHJldmFsZW5jZS4gSSdsbCBmb2N1cyBvbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGBpbnQgc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW9fcClgIGFuZCB0aGVuIGRldGVybWluZSwgYmFzZWQgb24gaXRzIGNoYXJhY3RlcmlzdGljcywgd2hldGhlciBpdCdzIGV4cG9ydGVkIGFuZCBhY3RpdmVseSB1c2VkIHRocm91Z2hvdXQgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIHdpbGwgZ3VpZGUgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2lnbmlmaWNhbmNlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjQwLjcyODQ1MzE1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTMyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHNrX3N0cmVhbV93YWl0X21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zdHJlYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9zdHJlYW0uYz0xMDA9dm9pZCBza19zdHJlYW1fd2FpdF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcXG4tLVxcbm5ldC9jb3JlL3N0cmVhbS5jLTEyMC0gKi9cXG5uZXQvY29yZS9zdHJlYW0uYzoxMjE6aW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApXFxubmV0L2NvcmUvc3RyZWFtLmMtMTIyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6NDAuNzc0MzcwMzg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5ODg4MTE5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBza19zdHJlYW1fd2FpdF9tZW1vcnlgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBza19zdHJlYW1fd2FpdF9tZW1vcnlgLi4uIHdoYXQncyBjYWxsaW5nICp0aGF0Kj8sXCIgd2hpY2gsIGluIHRoaXMgY29udGV4dCwgdHJhbnNsYXRlcyB0byB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZnVuY3Rpb24gYW5kIGZpZ3VyZSBvdXQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGJlaW5nIGNhbGxlZCBieSB0aGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBwZXJoYXBzIGEgdXNlci1zcGFjZSBkcml2ZXIsIG9yIHNvbWV3aGVyZSBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgdGVsbCBtZSBhYm91dCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBJcyBpdCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cgcGF0aD8gSXMgaXQgaW52b2x2ZWQgaW4gZXJyb3IgaGFuZGxpbmc/IEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUga2V5IGNhbGwgc2l0ZXMgYW5kIHRoZW4gaW1tZWRpYXRlbHkgY29uc2lkZXIgaG93IHRoZSBzeXN0ZW0gZGVzaWduIGxlYWRzIHRoZSBwcm9ncmFtIHRvIHRoYXQgcG9pbnQgb2YgZXhlY3V0aW9uLiBUaGVuIEknbGwgYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgYmVoYXZpbmcgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBhIHBvdGVudGlhbCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1Nzo0Mi43NjMxODkxNDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzYwMTQwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfc3RyZWFtX3dhaXRfbWVtb3J5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9MTQxPXNtYl9zZW5kX2t2ZWMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3QgbXNnaGRyICpzbWJfbXNnLFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xNzQtXFx0XFx0ICogRXZlbiBpZiByZWd1bGFyIHNpZ25hbHMgYXJlIG1hc2tlZCwgRUlOVFIgbWlnaHQgYmVcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjE3NTpcXHRcXHQgKiBwcm9wYWdhdGVkIGZyb20gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KCkgdG8gaGVyZSB3aGVuXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xNzYtXFx0XFx0ICogVElGX05PVElGWV9TSUdOQUwgaXMgdXNlZCBmb3IgdGFzayB3b3JrLiBGb3IgZXhhbXBsZSxcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0xMjQwPWludCBza19zdHJlYW1fd2FpdF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW9fcCk7XFxuaW5jbHVkZS9uZXQvc29jay5oOjEyNDE6aW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApO1xcbmluY2x1ZGUvbmV0L3NvY2suaC0xMjQyLXZvaWQgc2tfc3RyZWFtX3dhaXRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvX3ApO1xcbi0tXFxubmV0L2NvcmUvc3RyZWFtLmM9MTAwPXZvaWQgc2tfc3RyZWFtX3dhaXRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxuLS1cXG5uZXQvY29yZS9zdHJlYW0uYy0xMTYtLyoqXFxubmV0L2NvcmUvc3RyZWFtLmM6MTE3OiAqIHNrX3N0cmVhbV93YWl0X21lbW9yeSAtIFdhaXQgZm9yIG1vcmUgbWVtb3J5IGZvciBhIHNvY2tldFxcbm5ldC9jb3JlL3N0cmVhbS5jLTExOC0gKiBAc2s6IHNvY2tldCB0byB3YWl0IGZvciBtZW1vcnlcXG4tLVxcbm5ldC9jb3JlL3N0cmVhbS5jLTEyMC0gKi9cXG5uZXQvY29yZS9zdHJlYW0uYzoxMjE6aW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApXFxubmV0L2NvcmUvc3RyZWFtLmMtMTIyLXtcXG4tLVxcbm5ldC9jb3JlL3N0cmVhbS5jLTE4Ni19XFxubmV0L2NvcmUvc3RyZWFtLmM6MTg3OkVYUE9SVF9TWU1CT0woc2tfc3RyZWFtX3dhaXRfbWVtb3J5KTtcXG5uZXQvY29yZS9zdHJlYW0uYy0xODgtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQwNC1cXG5uZXQvaXB2NC90Y3AuYzoxNDA1OlxcdFxcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXFx1MDAyNnRpbWVvKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDA2LVxcdFxcdGlmIChlcnIgIT0gMClcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz01MzQ9c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTYwNS13YWl0X2Zvcl9tZW1vcnk6XFxubmV0L2lwdjQvdGNwX2JwZi5jOjYwNjpcXHRcXHRlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssIFxcdTAwMjZ0aW1lbyk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTYwNy1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mjk3Mj1zdGF0aWMgYm9vbCB0Y3Bfd3JpdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LCBpbnQgbm9uYWdsZSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zMDYyLVxcdFxcdC8qIEFyZ2gsIHdlIGhpdCBhbiBlbXB0eSBza2IoKSwgcHJlc3VtYWJseSBhIHRocmVhZFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozMDYzOlxcdFxcdCAqIGlzIHNsZWVwaW5nIGluIHNlbmRtc2coKS9za19zdHJlYW1fd2FpdF9tZW1vcnkoKS5cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzA2NC1cXHRcXHQgKiBXZSBkbyBub3Qgd2FudCB0byBzZW5kIGEgcHVyZS1hY2sgcGFja2V0IGFuZCBoYXZlXFxuLS1cXG5uZXQva2NtL2tjbXNvY2suYz03NTI9c3RhdGljIGludCBrY21fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQva2NtL2tjbXNvY2suYy03ODItXFx0XFx0c2V0X2JpdChTT0NLX05PU1BBQ0UsIFxcdTAwMjZzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmbGFncyk7XFxubmV0L2tjbS9rY21zb2NrLmM6NzgzOlxcdFxcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXFx1MDAyNnRpbWVvKTtcXG5uZXQva2NtL2tjbXNvY2suYy03ODQtXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9rY20va2Ntc29jay5jLTc5Mi1cXHRcXHRcXHRrY21fcHVzaChrY20pO1xcbm5ldC9rY20va2Ntc29jay5jOjc5MzpcXHRcXHRcXHRlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssIFxcdTAwMjZ0aW1lbyk7XFxubmV0L2tjbS9rY21zb2NrLmMtNzk0LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQva2NtL2tjbXNvY2suYy04OTMtXFx0XFx0a2NtX3B1c2goa2NtKTtcXG5uZXQva2NtL2tjbXNvY2suYzo4OTQ6XFx0XFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcXHUwMDI2dGltZW8pO1xcbm5ldC9rY20va2Ntc29jay5jLTg5NS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTk5ND1zdGF0aWMgaW50IG1wdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTA1LVxcdFxcdF9fbXB0Y3BfcHVzaF9wZW5kaW5nKHNrLCBtc2ctXFx1MDAzZW1zZ19mbGFncyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjEwNjpcXHRcXHRyZXQgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssIFxcdTAwMjZ0aW1lbyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjEwNy1cXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9MTU2MD1zdGF0aWMgaW50IHNjdHBfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsIGludCBlcnIpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0xNTg5LSAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjE1OTA6LyogQlVHOiAgV2UgZG8gbm90IGltcGxlbWVudCB0aGUgZXF1aXZhbGVudCBvZiBza19zdHJlYW1fd2FpdF9tZW1vcnkoKS4gKi9cXG5uZXQvc2N0cC9zb2NrZXQuYy0xNTkxLVxcbi0tXFxubmV0L3NtYy9zbWNfdHguYz03Nz1zdGF0aWMgaW50IHNtY190eF93YWl0KHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc21jL3NtY190eC5jLTg0LVxcbm5ldC9zbWMvc21jX3R4LmM6ODU6XFx0Lyogc2ltaWxhciB0byBza19zdHJlYW1fd2FpdF9tZW1vcnkgKi9cXG5uZXQvc21jL3NtY190eC5jLTg2LVxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjktXFx0XFx0aWYgKHVubGlrZWx5KHJjKSkge1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ3MDpcXHRcXHRcXHRyYyA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXFx1MDAyNnRpbWVvKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NzEtXFx0XFx0XFx0aWYgKCFyYylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9NzY2PXN0YXRpYyBpbnQgdGxzX3N3X3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy05NzAtd2FpdF9mb3JfbWVtb3J5Olxcbm5ldC90bHMvdGxzX3N3LmM6OTcxOlxcdFxcdHJldCA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXFx1MDAyNnRpbWVvKTtcXG5uZXQvdGxzL3Rsc19zdy5jLTk3Mi1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTMwNz1zdGF0aWMgaW50IGVzcGludGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zNDYtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzozNDc6XFx0XFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcXHUwMDI2dGltZW8pO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzQ4LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjQ0LjI5OTIxMTA2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODc3OTU5MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktjb25maWcgRXhwbG9yYXRpb24gZm9yIE5ldHdvcmsgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoZXNlIGNvZGUgcGF0aHMuIEZpcnN0IHVwLCBgbmV0L2lwdjQvdGNwLmNgLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBpdCBzaG91bGQgYmUgY29udHJvbGxlZCBieSBgQ09ORklHX0lORVRgLiBOb3csIGBuZXQvY29yZS9zdHJlYW0uY2Ag4oCTIHRoYXQgb25lJ3MgdXN1YWxseSBiYWtlZCBpbjsgaXQncyBlaXRoZXIgYWx3YXlzIGJ1aWx0IG9yIHRpZWQgdG8gYENPTkZJR19ORVRgLiBCdXQgdGhhdCB0aGlyZCBmaWxlLCBgbmV0L2lwdjQvdGNwX2JwZi5jYCwgdGhhdCBvbmUgcmVxdWlyZXMgYSBjbG9zZXIgbG9vay4gSSBiZXR0ZXIgb3BlbiB1cCBpdHMgTWFrZWZpbGUgdG8gY29uZmlybSB0aG9zZSBkZXRhaWxzIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjYyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6NDcuMTc3MTcyNzg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMzMjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICs9IHRjcF9pbGxpbm9pcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gdGNwX2JwZi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB1ZHBfYnBmLm9cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg1NS1cXG5uZXQvaXB2NC90Y3AuYzo0ODU2OmJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbm5ldC9pcHY0L3RjcC5jLTQ4NTcte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTMzPXN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy05MC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6OTE6c3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtOTItXFx0XFx0XFx0aW50IGZsYWdzLCBib29sIHVuY2hhcmdlKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE1Mi1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTUzOnN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTU0LVxcdFxcdFxcdCAgICAgICB1MzIgYXBwbHlfYnl0ZXMsIGludCBmbGFncywgYm9vbCB1bmNoYXJnZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNTgtXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTU5OlxcdHJldCA9IHRjcF9icGZfcHVzaChzaywgbXNnLCBhcHBseV9ieXRlcywgZmxhZ3MsIHVuY2hhcmdlKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYwLVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNjQ6aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTY1LVxcdFxcdFxcdCAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMsIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzMtXFx0cmV0ID0gaW5ncmVzcyA/IGJwZl90Y3BfaW5ncmVzcyhzaywgcHNvY2ssIG1zZywgYnl0ZXMpIDpcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTc0OlxcdFxcdFxcdHRjcF9icGZfcHVzaF9sb2NrZWQoc2ssIG1zZywgYnl0ZXMsIGZsYWdzLCBmYWxzZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTE3NS1cXHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzctfVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNzg6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzM0LVxcbm5ldC9pcHY0L3RjcF9icGYuYzozMzU6c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zMzYte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2Ny1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzY4OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjktXFx0XFx0XFx0ICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQxNy1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDE4OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00MTktXFx0XFx0XFx0XFx0c3RydWN0IHNrX21zZyAqbXNnLCBpbnQgKmNvcGllZCwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ2MS1cXHRjYXNlIF9fU0tfUEFTUzpcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDYyOlxcdFxcdHJldCA9IHRjcF9icGZfcHVzaChzaywgbXNnLCB0b3NlbmQsIGZsYWdzLCB0cnVlKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDYzLVxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg2LVxcdFxcdG9yaWdzaXplID0gbXNnLVxcdTAwM2VzZy5zaXplO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo0ODc6XFx0XFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00ODgtXFx0XFx0XFx0XFx0XFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo1MzQ6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcF9icGYuYy01MzUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTU5OC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NTk5OlxcdFxcdGVyciA9IHRjcF9icGZfc2VuZF92ZXJkaWN0KHNrLCBwc29jaywgbXNnX3R4LCBcXHUwMDI2Y29waWVkLCBmbGFncyk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTYwMC1cXHRcXHRpZiAodW5saWtlbHkoZXJyIFxcdTAwM2MgMCkpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM2PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGNwdjZfcHJvdF9sb2NrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjM3OnN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGNwX2JwZl9wcm90c1tUQ1BfQlBGX05VTV9QUk9UU11bVENQX0JQRl9OVU1fQ0ZHU107XFxubmV0L2lwdjQvdGNwX2JwZi5jLTYzOC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjM5OnN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY0MC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcHJvdG8gKmJhc2UpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ0LVxcdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVxcdFxcdD0gc29ja19tYXBfY2xvc2U7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY0NTpcXHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NDYtXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjQ3OlxcdHByb3RbVENQX0JQRl9CQVNFXS5pb2N0bFxcdFxcdD0gdGNwX2JwZl9pb2N0bDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ4LVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NDktXFx0cHJvdFtUQ1BfQlBGX1RYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTA6XFx0cHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnXFx0XFx0PSB0Y3BfYnBmX3NlbmRtc2c7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1MS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUyLVxcdHByb3RbVENQX0JQRl9SWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUzOlxcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU0LVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXFx0cHJvdFtUQ1BfQlBGX1RYUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfVFhdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTY6XFx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny19XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU5OnN0YXRpYyB2b2lkIHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChzdHJ1Y3QgcHJvdG8gKm9wcylcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjYwLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NjMtXFx0XFx0aWYgKGxpa2VseShvcHMgIT0gdGNwdjZfcHJvdF9zYXZlZCkpIHtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjY0OlxcdFxcdFxcdHRjcF9icGZfcmVidWlsZF9wcm90b3ModGNwX2JwZl9wcm90c1tUQ1BfQlBGX0lQVjZdLCBvcHMpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NjUtXFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnRjcHY2X3Byb3Rfc2F2ZWQsIG9wcyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcwLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzE6c3RhdGljIGludCBfX2luaXQgdGNwX2JwZl92NF9idWlsZF9wcm90byh2b2lkKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzIte1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzM6XFx0dGNwX2JwZl9yZWJ1aWxkX3Byb3Rvcyh0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfSVBWNF0sIFxcdTAwMjZ0Y3BfcHJvdCk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3NC1cXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc1LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc2OmxhdGVfaW5pdGNhbGwodGNwX2JwZl92NF9idWlsZF9wcm90byk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3Ny1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc4OnN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02Nzkte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4OC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY4OTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVxcdFxcdFxcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcxMi1cXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXFxubmV0L2lwdjQvdGNwX2JwZi5jOjcxMzpcXHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxcbm5ldC9pcHY0L3RjcF9icGYuYy03MTQtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzIzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3MjQ6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MjUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1MC1cXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbm5ldC9pcHY0L3RjcF9icGYuYzo3NTE6XFx0XFx0aWYgKHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhwc29jay1cXHUwMDNlc2tfcHJvdG8pKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NTItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1My1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzU0OlxcdFxcdHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cXHUwMDNlc2tfcHJvdG8pO1xcbm5ldC9pcHY0L3RjcF9icGYuYy03NTUtXFx0fVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Ny1cXHQvKiBQYWlycyB3aXRoIGxvY2tsZXNzIHJlYWQgaW4gc2tfY2xvbmVfbG9jaygpICovXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1ODpcXHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIFxcdTAwMjZ0Y3BfYnBmX3Byb3RzW2ZhbWlseV1bY29uZmlnXSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1OS1cXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYwLX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzYxOkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NjM6LyogSWYgYSBjaGlsZCBnb3QgY2xvbmVkIGZyb20gYSBsaXN0ZW5pbmcgc29ja2V0IHRoYXQgaGFkIHRjcF9icGZcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzY0LSAqIHByb3RvY29sIGNhbGxiYWNrcyBpbnN0YWxsZWQsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgY2FsbGJhY2tzIHRvXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc2NS0gKiB0aGUgZGVmYXVsdCBvbmVzIGJlY2F1c2UgdGhlIGNoaWxkIGRvZXMgbm90IGluaGVyaXQgdGhlIHBzb2NrIHN0YXRlXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc2NjogKiB0aGF0IHRjcF9icGYgY2FsbGJhY2tzIGV4cGVjdC5cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzY3LSAqL1xcbm5ldC9pcHY0L3RjcF9icGYuYzo3Njg6dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03Njkte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3MS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzcyOlxcdGlmIChpc19pbnNpZGV2YXIocHJvdCwgdGNwX2JwZl9wcm90cykpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3My1cXHRcXHRuZXdzay1cXHUwMDNlc2tfcHJvdCA9IHNrLVxcdTAwM2Vza19wcm90X2NyZWF0b3I7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0xMDcwPXN0YXRpYyB2b2lkIHRjcF9ydHRfZXN0aW1hdG9yKHN0cnVjdCBzb2NrICpzaywgbG9uZyBtcnR0X3VzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEyMi1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoxMTIzOlxcdFxcdFxcdHRjcF9icGZfcnR0KHNrLCBtcnR0X3VzLCBzcnR0KTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMTI0LVxcdFxcdH1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTExMzItXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTEzMzpcXHRcXHR0Y3BfYnBmX3J0dChzaywgbXJ0dF91cywgc3J0dCk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEzNC1cXHR9XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NDU0PXN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ4NC1cXHQgICAgKGVjbl9va19kc3QgXFx1MDAyNiBEU1RfRkVBVFVSRV9FQ05fQ0EpIHx8XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzQ4NTpcXHQgICAgdGNwX2JwZl9jYV9uZWVkc19lY24oKHN0cnVjdCBzb2NrICopcmVxKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDg2LVxcdFxcdGluZXRfcnNrKHJlcSktXFx1MDAzZWVjbl9vayA9IDE7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTExNjI9c3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExOTEtXFx0XFx0aWYgKCFJTkVUX0VDTl9pc19jYXBhYmxlKHRvcykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjExOTI6XFx0XFx0ICAgIHRjcF9icGZfY2FfbmVlZHNfZWNuKChzdHJ1Y3Qgc29jayAqKXJlcSkpXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTkzLVxcdFxcdFxcdHRvcyB8PSBJTkVUX0VDTl9FQ1RfMDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Nz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNjAtXFx0LmdldHNvY2tvcHRcXHRcXHQ9IHRjcF9nZXRzb2Nrb3B0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM2MTpcXHQuYnBmX2J5cGFzc19nZXRzb2Nrb3B0XFx0PSB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM2Mi1cXHQua2VlcGFsaXZlXFx0XFx0PSB0Y3Bfc2V0X2tlZXBhbGl2ZSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3Mi0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzczOlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzc0LSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTU0Nj1zdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02NjMtXFx0bmV3dHAtXFx1MDAzZWJwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjY2NDpcXHR0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6NDcuMjI1NTE3NDUzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMjU4MjgyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBLY29uZmlnIGZvciBTb2NrZXQgYW5kIE1QVENQIFN1cHBvcnQqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgbXkgY3VycmVudCBwcm9qZWN0LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIG5ldHdvcmsgc29ja2V0cyBhbmQgTVBUQ1AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgS2NvbmZpZy4gR290dGEgbWFrZSBzdXJlIHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBlbmFibGVkIG9yIGF0IGxlYXN0IGNvbmZpZ3VyYWJsZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGBORVRfU09DS19NU0dgIGlzIGF2YWlsYWJsZS4gVGhhdCdzIGEgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2NrLCBzbyBpdOKAmXMgdGhlIGltbWVkaWF0ZSBwcmlvcml0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBXaGVyZSBpcyBpdCBkZWZpbmVkLCB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBUaGVuLCBvZiBjb3Vyc2UsIE1QVENQLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBNUFRDUCBpcyBlbmFibGVkLCBhbmQgaWYgc28sIGhvdy4gQXJlIHRoZXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMga2VybmVsIGZlYXR1cmVzPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBnZW5lcmFsIHNlYXJjaCBhbmQgdGhlbiBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4gVGhpcyBpcyBhbGwgYWJvdXQgdmVyaWZ5aW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCdzIGNhcGFiaWxpdGllcyBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHdyaXRpbmcgYSBsaW5lIG9mIGNvZGUuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IGNoYXNpbmcgZ2hvc3RzISBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgSSBjYW4ndCBhZmZvcmQgdG8gd2FzdGUgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3OTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1Nzo1MC4yNTEzNDgyMTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDgwNTk5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TT0NLX01TR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ3OC1cXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTQ4MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjUxLjc5OTQxMzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQyMjU3OTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgTkVUX1NPQ0tfTVNHIFNlbGVjdG9yKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogXCJMZXQncyBpc29sYXRlIHdoYXQncyBhY3R1YWxseSB1c2luZyB0aGUgYE5FVF9TT0NLX01TR2Agc2VsZWN0b3IuXCIgVGhpcyBwcm9iYWJseSBtZWFucyBJJ20gaW4gdGhlIG1pZGRsZSBvZiBkZWJ1Z2dpbmcgYSBuZXR3b3JraW5nIG9yIHNvY2tldC1yZWxhdGVkIGlzc3VlLiBUaGlzIHNlbGVjdG9yIGlzIGEga2V5IHNpZ25hbCBpbiB0aGUgc3lzdGVtLCBhbmQgaXQgY291bGQgYmUgaW5kaWNhdGluZyBhbnkgbnVtYmVyIG9mIHRoaW5ncywgZnJvbSBuZXcgZGF0YSBhcnJpdmluZyBvbiBhIHNvY2tldCB0byB0aGUgc29ja2V0IHN0YXRlIGNoYW5naW5nLiBcblxuTXkgbmV4dCBzdGVwcyB3aWxsIGRlcGVuZCBvbiB0aGUgY29udGV4dCwgb2YgY291cnNlLCBidXQgdGhlIGNvcmUgb2JqZWN0aXZlIHJlbWFpbnMgdGhlIHNhbWU6IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyB0aGF0IGFyZSByZWdpc3RlcmluZywgdXNpbmcsIG9yIHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudC4gSSdsbCBsaWtlbHkgYmUgdHJhY2luZyBmdW5jdGlvbiBjYWxscywgZXhhbWluaW5nIGtlcm5lbCBtb2R1bGVzIChpZiBhcHBsaWNhYmxlKSwgYW5kIHBvc3NpYmx5IGFuYWx5emluZyBwYWNrZXQgY2FwdHVyZXMgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgYXJvdW5kIHRoZSBgTkVUX1NPQ0tfTVNHYCBldmVudHMuIEkgbWlnaHQgYmUgbG9va2luZyBmb3IgcmFjZSBjb25kaXRpb25zLCByZXNvdXJjZSBsZWFrcywgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgc29ja2V0LXVzaW5nIGNvbXBvbmVudHMuIEkgbWlnaHQgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBleHBvc2VkIGJ5IHRoaXMgc2VsZWN0b3IuIFRoZSBnb2FsIGhlcmUgaXMgZWZmaWNpZW50LCB0YXJnZXRlZCBkaWFnbm9zdGljcywgbGV2ZXJhZ2luZyBteSBleHBlcnRpc2UgdG8gcXVpY2tseSBuYXJyb3cgZG93biB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNTYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1Nzo1NC4yMjE5OTU4NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE0Nzg2NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9TT0NLX01TR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMzMtXFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG5rZXJuZWwvYnBmL0tjb25maWc6MzQ6XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuLS1cXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjYtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZzozNjc6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTM2OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZy0zODctXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjYvS2NvbmZpZzo5NDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZy05NS1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xcbi0tXFxubmV0L3Rscy9LY29uZmlnLTEwLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxubmV0L3Rscy9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvdGxzL0tjb25maWctMTItXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjU1Ljc5MzQ3OTQyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODcwMDkxNDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIEJQRiBhbmQgTVBUQ1AgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIHNvIGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgTkVUX1NPQ0tfTVNHYCB3aGVuIGBORVRgIGlzIHNlbGVjdGVkLiBCdXQsIEkgbmVlZCB0byBjb25zaWRlciBNUFRDUCBhcyB3ZWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3QuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgTVBUQ1AgaXMgY29uZmlndXJlZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IGBCUEZfU1lTQ0FMTGAgaW50ZXJhY3RzIHdpdGggaXQuIFRoaXMgaXMgYSBjcml0aWNhbCBjaGVjayB0byBlbnN1cmUgdGhlIGZlYXR1cmUgc2V0IEknbSB3b3JraW5nIHdpdGggaXMgY29uc2lzdGVudCBhbmQgY29tcGF0aWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NDMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1Nzo1Ny42NjM1NzM0NjhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDM3NjQyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1QVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnLTEtXFxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWctMjQtXFxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjU5LjIwNzM0MzgxM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzEzNjIwMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNdWx0aXBhdGggVENQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBpbnN0cnVjdGlvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBNUFRDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBzcGVjaWZpYyBmaWxlIHRvIGV4YW1pbmUgaXMgYG5ldC9tcHRjcC9LY29uZmlnYC4gSSBhbHJlYWR5IGtub3cgd2hhdCB0aGlzIGZpbGUgaG91c2VzOiBpdCdzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgTXVsdGlwYXRoIFRDUC4gTXkgZ3Vlc3MgaXMsIHRoZSBwcm92aWRlZCBsaW5lcyAoMS0xNSBhcyByZXF1ZXN0ZWQpIGNvbnRhaW4gdGhlIGhpZ2gtbGV2ZWwgTVBUQ1AgZmVhdHVyZXMgYW5kIG1heWJlIHNvbWUgYmFzaWMgZGVwZW5kZW5jaWVzIG9yIGludHJvZHVjdGlvbiBjb21tZW50cy4gVGhhdCBwYXJ0IHNlZW1zIGNsZWFyIGVub3VnaDsgSSdsbCBleHBlY3QgdG8gZmluZCBhbiBvdmVydmlldyBvZiB0aGUgbW9kdWxlcycgYXJjaGl0ZWN0dXJlIHRoZXJlLiBUaW1lIHRvIHNlZSB3aGF0IGl0ICphY3R1YWxseSogbG9va3MgbGlrZSB0byBiZSBjZXJ0YWluIG9mIG15IGFzc3VtcHRpb25zLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTg6MDEuNTIwOTY3NTY4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0XFxuICAgMjpcXHRjb25maWcgTVBUQ1BcXG4gICAzOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXFxuICAxMDpcXHRcXHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XFxuICAxMTpcXHRcXHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcXG4gIDEyOlxcdFxcdCAgTVBUQ1AuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIE1QVENQXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuICAxODpcXHRcXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBNUFRDUF9JUFY2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjAxLjUyMTA1NTUyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTIyMTgzNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU3RhY2sgSW50ZXJhY3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBhcmVhLCBsaWtlbHkgcmVsYXRlZCB0byBuZXR3b3JraW5nLCBhbmQgdGhlc2UgdGVybXMga2VlcCBwb3BwaW5nIHVwOiBgSU5FVGAsIGBNUFRDUGAsIGFuZCBgQlBGX1NZU0NBTExgLCBvciBwb3RlbnRpYWxseSBgTkVUX1NPQ0tfTVNHYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGVzZSB0aGluZ3MgaW50ZXJhY3QuIEkgcmVjb2duaXplIHRoZW0gYXMgY29yZSBjb21wb25lbnRzIGFuZCBtZWNoYW5pc21zIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBoaXN0b3J5LCB0aGUgJ3doeScgb2YgdGhlIGNvZGUsIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBjaGFuZ2VzLCB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBHaXQgY29tbWl0IGxvZyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhdGNoIGluIHF1ZXN0aW9uLiBUaGF0IGxvZyBzaG91bGQgZ2l2ZSBtZSB0aGUgaGlzdG9yaWNhbCBjb250ZXh0LCB0aGUgcHJvYmxlbSBiZWluZyBhZGRyZXNzZWQsIGFuZCB0aGUgdGhvdWdodCBwcm9jZXNzIG9mIHRoZSBkZXZlbG9wZXJzIGludm9sdmVkLiBJJ20gaG9waW5nIGl0J2xsIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBhbmQgaW50ZWdyYXRpb24gb2YgdGhlc2UgZWxlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzQ5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODowNC4wNDMyNDcxNThaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjYyNjY4ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODowNS42MDk1MzgxMzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzIwMjMzODQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBFcnJvciBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbW1pdCB0aGlzIGlzIHJlbGF0ZWQgdG8uIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGtlcm5lbCBzb3VyY2UgbG9ncyB1c2luZyBhIGdyZXBwZXIgc2VhcmNoLCBidXQgZ3JlcHBlciBpcyBvbiBrZXJuZWwgc291cmNlLCBzbyBJIHdpbGwgc3dpdGNoIHRvIGdpdCBsb2cgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBjb21taXQuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCdzIGNsZWFyIHRoaXMgaXMgYSBjb2RlIHJlZmFjdG9yIGZvciBob3cgYHNrLVx1MDAzZXNrX2VycmAgaXMgY2hlY2tlZCBhY3Jvc3Mgc2V2ZXJhbCBUQ1AtcmVsYXRlZCBmdW5jdGlvbnMuICBFc3NlbnRpYWxseSwgdGhlIGNoYW5nZSBpbnZvbHZlcyByZXBsYWNpbmcgZGlyZWN0IGFjY2VzcyBvZiBgc2stXHUwMDNlc2tfZXJyYCB3aXRoIGBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKWAgaW4gc2V2ZXJhbCBjb250ZXh0cyBsaWtlIGB0Y3BfcmVjdl9zaG91bGRfc3RvcGAsIGBza19zdHJlYW1fd2FpdF9tZW1vcnlgLCBgdGNwX3NwbGljZV9yZWFkYCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCBhbmQgdGhlIGBtcHRjcGAgc2VuZCBhbmQgcmVjdiBwYXRocy4gQWxzbywgSSBzZWUgYHRjcF9icGZfc2VuZG1zZ2AgaGFzIGJlZW4gY2hhbmdlZCB3aXRoIGhvdyBgc2stXHUwMDNlc2tfZXJyYCBpcyBoYW5kbGVkLiAgXG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFib3V0IGVuc3VyaW5nIHRoYXQgdGhlIGVycm9yIHN0YXR1cyBvZiBhIHNvY2tldCAoYHNrX2VycmApIGlzIHJlYWQgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIuIGBza19lcnJgIGNhbiBiZSBtb2RpZmllZCBjb25jdXJyZW50bHkgYnkgYHNvY2tfZXJyb3IoKWAsIHNvIGEgcmVndWxhciBsb2FkIGNvdWxkIGJlIHJhY3kuIFVzaW5nIGBSRUFEX09OQ0VgIGVuZm9yY2VzIGEgbWVtb3J5IGJhcnJpZXIsIGd1YXJhbnRlZWluZyB0aGF0IHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBvZiBgc2tfZXJyYCBpcyBvYnNlcnZlZC4gVGhpcyBzaG91bGQgaW1wcm92ZSBkYXRhIGNvbnNpc3RlbmN5LCBlc3BlY2lhbGx5IGluIG11bHRpdGhyZWFkZWQgc2NlbmFyaW9zLCBvciBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIG1lbW9yeSBhY2Nlc3Mgb3JkZXIgaXMgbm90IHN0cmljdC4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBpbXByb3ZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjEyLjgxMTg3OTE4MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ1OlxcdFxcbiA1NDY6XFx0XFx0cHNvY2sgPSBza19wc29ja19nZXQoc2spO1xcbiA1NDc6XFx0XFx0aWYgKHVubGlrZWx5KCFwc29jaykpXFxuIDU0ODpcXHRcXHRcXHRyZXR1cm4gdGNwX3NlbmRtc2coc2ssIG1zZywgc2l6ZSk7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDU1MTpcXHRcXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4gNTUyOlxcdFxcdHdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykpIHtcXG4gNTUzOlxcdFxcdFxcdGJvb2wgZW5vc3BjID0gZmFsc2U7XFxuIDU1NDpcXHRcXHRcXHR1MzIgY29weSwgb3NpemU7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdFxcdGVyciA9IC1SRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2Vycik7XFxuIDU1NzpcXHRcXHRcXHRpZiAoZXJyKVxcbiA1NTg6XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRcXHRjb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpO1xcbiA1NjE6XFx0XFx0XFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxcbiA1NjI6XFx0XFx0XFx0XFx0Z290byB3YWl0X2Zvcl9zbmRidWY7XFxuIDU2MzpcXHRcXHRcXHRpZiAocHNvY2stXFx1MDAzZWNvcmspIHtcXG4gNTY0OlxcdFxcdFxcdFxcdG1zZ190eCA9IHBzb2NrLVxcdTAwM2Vjb3JrO1xcbiA1NjU6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTY2OlxcdFxcdFxcdFxcdG1zZ190eCA9IFxcdTAwMjZ0bXA7XFxuIDU2NzpcXHRcXHRcXHRcXHRza19tc2dfaW5pdChtc2dfdHgpO1xcbiA1Njg6XFx0XFx0XFx0fVxcbiA1Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjEyLjgxMTk3MDI4MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4ODQyMzg2MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3BfcmVjdm1zZ19sb2NrZWRgKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBgdGNwX3JlY3Ztc2dfbG9ja2VkYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI3NjAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLCB0aGUgZXhhY3QgbG9naWMgYmVpbmcgZXhlY3V0ZWQgaW4gdGhhdCBhcmVhIG9mIHRoZSBmdW5jdGlvbi4gTGV0IG1lIHNlZSB3aGF0IHRoYXQgY2h1bmsgb2YgY29kZSBpcyBkb2luZyAtIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHRvIHRoZSBpc3N1ZSBpbiBob3cgdGhlIGRhdGEgaXMgYmVpbmcgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgYnVmZmVyIG1hbmFnZW1lbnQgcHJvYmxlbSwgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUsIGEgc2VxdWVuY2luZyBwcm9ibGVtLCBvciBtYXliZSBldmVuIHNvbWV0aGluZyBzdWJ0bGUgcmVsYXRlZCB0byBmbGFncyBvciBwcm90b2NvbCBzdGF0ZS4gS25vd2luZyB0aGF0IHNwZWNpZmljIGNvZGUgYmxvY2sgd2lsbCBoZWxwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTg6MjEuNjU0MzYwMzI3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzUwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzUwOlxcdFxcdFxcdC8qIFdlbGwsIGlmIHdlIGhhdmUgYmFja2xvZywgdHJ5IHRvIHByb2Nlc3MgaXQgbm93IHlldC4gKi9cXG4yNzUxOlxcdFxcbjI3NTI6XFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNlPSB0YXJnZXQgXFx1MDAyNlxcdTAwMjYgIVJFQURfT05DRShzay1cXHUwMDNlc2tfYmFja2xvZy50YWlsKSlcXG4yNzUzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3NTQ6XFx0XFxuMjc1NTpcXHRcXHRcXHRpZiAoY29waWVkKSB7XFxuMjc1NjpcXHRcXHRcXHRcXHRpZiAoIXRpbWVvIHx8XFxuMjc1NzpcXHRcXHRcXHRcXHQgICAgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spKVxcbjI3NTg6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjc1OTpcXHRcXHRcXHR9IGVsc2Uge1xcbjI3NjA6XFx0XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG4yNzYxOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3NjI6XFx0XFxuMjc2MzpcXHRcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpKSB7XFxuMjc2NDpcXHRcXHRcXHRcXHRcXHRjb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTtcXG4yNzY1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3NjY6XFx0XFx0XFx0XFx0fVxcbjI3Njc6XFx0XFxuMjc2ODpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKVxcbjI3Njk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjc3MDpcXHRcXG4yNzcxOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuMjc3MjpcXHRcXHRcXHRcXHRcXHQvKiBUaGlzIG9jY3VycyB3aGVuIHVzZXIgdHJpZXMgdG8gcmVhZFxcbjI3NzM6XFx0XFx0XFx0XFx0XFx0ICogZnJvbSBuZXZlciBjb25uZWN0ZWQgc29ja2V0LlxcbjI3NzQ6XFx0XFx0XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjIxLjY1NDU0NzgwN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjA5NDYyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgdGNwX3NwbGljZV9yZWFkYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYHRjcF9zcGxpY2VfcmVhZGAg4oCTIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGRhdGEgdHJhbnNmZXIgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgVENQIHN0YWNrLiBTcGVjaWZpY2FsbHksIGl0J3MgZGVmaW5lZCBpbiBgbmV0L2lwdjQvdGNwLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29udGV4dCBvZiBJUHY0LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgZGF0YSBpcyBtb3ZlZCBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIHRvIHRoZSBhcHBsaWNhdGlvbiwgaG9wZWZ1bGx5IGJ5cGFzc2luZyB1bm5lY2Vzc2FyeSBjb3B5aW5nIHdoZW5ldmVyIHBvc3NpYmxlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIGJ1ZmZlciBtYW5hZ2VtZW50LCBtZW1vcnkgbWFwcGluZywgYW5kIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyB0aGF0IGxldmVyYWdlIHRoZSBrZXJuZWwncyBhYmlsaXR5IHRvIG1pbmltaXplIGRhdGEgbW92ZW1lbnQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBrZWVwIG15IGV5ZSBvdXQgZm9yIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3BsaWNlIGluZnJhc3RydWN0dXJlLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGlzIHdob2xlIGFwcHJvYWNoLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTE5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODoyNC4yNjQwMTE5NzZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzNTpcXHRcXG4gODM2OlxcdFxcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fTk9OQkxPQ0spO1xcbiA4Mzc6XFx0XFx0d2hpbGUgKHRzcy5sZW4pIHtcXG4gODM4OlxcdFxcdFxcdHJldCA9IF9fdGNwX3NwbGljZV9yZWFkKHNrLCBcXHUwMDI2dHNzKTtcXG4gODM5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4NDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg0MTpcXHRcXHRcXHRlbHNlIGlmICghcmV0KSB7XFxuIDg0MjpcXHRcXHRcXHRcXHRpZiAoc3BsaWNlZClcXG4gODQzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NDQ6XFx0XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG4gODQ1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NDY6XFx0XFx0XFx0XFx0aWYgKFJFQURfT05DRShzay1cXHUwMDNlc2tfZXJyKSkge1xcbiA4NDc6XFx0XFx0XFx0XFx0XFx0cmV0ID0gc29ja19lcnJvcihzayk7XFxuIDg0ODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gODQ5OlxcdFxcdFxcdFxcdH1cXG4gODUwOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pXFxuIDg1MTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gODUyOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuIDg1MzpcXHRcXHRcXHRcXHRcXHQvKlxcbiA4NTQ6XFx0XFx0XFx0XFx0XFx0ICogVGhpcyBvY2N1cnMgd2hlbiB1c2VyIHRyaWVzIHRvIHJlYWRcXG4gODU1OlxcdFxcdFxcdFxcdFxcdCAqIGZyb20gbmV2ZXIgY29ubmVjdGVkIHNvY2tldC5cXG4gODU2OlxcdFxcdFxcdFxcdFxcdCAqL1xcbiA4NTc6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVOT1RDT05OO1xcbiA4NTg6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg1OTpcXHRcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjI0LjI2NDIzMTg0NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MDAwNjAwMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBEZXRlcm1pbmF0aW9uOiBBIFN5c3RlbWF0aWMgUmV2aWV3KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgZWZmZWN0aXZlIGBGb2N1c1N5bWJvbHNgIHRvIGd1aWRlIHRoZSBmdXp6ZXIsIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IGRpbHV0aW9uIG9mIGVmZm9ydC4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHN0aWNraW5nIHRvIHRoZSBndWlkZWxpbmVzIGluIFNlY3Rpb24gNCBvZiB0aGUgZG9jdW1lbnRhdGlvbi4gSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCB0YXJnZXQgc3BlY2lmaWMgbG9naWMgYW5kIGVudHJ5cG9pbnRzLlxuXG5Pa2F5LCBJJ3ZlIGdvdCB0aGUgZnVuY3Rpb25zIEknbSBpbnRlcmVzdGVkIGluOiBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCwgYHRjcF9zcGxpY2VfcmVhZGAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBgdGNwX3JlY3Ztc2dfbG9ja2VkYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBgdGNwX2JwZl9zZW5kbXNnYCwgYG1wdGNwX3NlbmRtc2dgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc3BsaWNlX3JlYWRgLiBOb3csIEkgbmVlZCB0byBldmFsdWF0ZSBlYWNoIG9uZSBhZ2FpbnN0IHRob3NlIGNyaXRlcmlhLlxuXG5GaXJzdCwgSSBhbSBjaGVja2luZyB3aGV0aGVyIHRoZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBub3QuIFNvbWUgYXJlIHN0YXRpYywgbGlrZSBgdGNwX3JlY3Ztc2dfbG9ja2VkYCwgYnV0IEkga25vdyBpdCdzIG9mdGVuIG5vdCBpbmxpbmVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNhbGxzIHRoZW0uIEl0IGxvb2tzIGxpa2UgYHRjcF9yZWN2bXNnYCBjYWxscyBpdCBhbmQgaXQgaXMgbm9uLXN0YXRpYy4gQmVjYXVzZSBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBoYXMgbXVsdGlwbGUgY2FsbGVycywgR0NDIHdpbGwgbGlrZWx5IG5vdCBpbmxpbmUgaXQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHRjcF9yZWN2bXNnX2xvY2tlZGAgaGFzIGEgc3ltYm9sLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBkb2N1bWVudGF0aW9uLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBub3QgaW5jbHVkaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSB0b28gZ2VuZXJhbC4gV2hpbGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGFyZSBhc3NvY2lhdGVkIHdpdGggVENQIHNvY2tldHMsIGFuZCBJIG5lZWQgdG8gYXZvaWQgdGhlc2UgaG90LXBhdGhzLCBpdCBpcyBva2F5IHNpbmNlIGl0IGlzIGEgc3BlY2lmaWMgZW50cnlwb2ludCBmb3IgVENQIHNvY2tldHMgYW5kIGNvbnRhaW5zIHRoZSBhbHRlcmVkIGxvZ2ljLlxuXG5TbywgbGV0J3MgZXhhbWluZSB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbnMgdG8gc2VlIGlmIHRoZXkncmUgZ29vZCBGb2N1c1N5bWJvbHM6IGB0Y3Bfc3BsaWNlX3JlYWRgLCBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCwgYHRjcF9icGZfc2VuZG1zZ2AsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYG1wdGNwX3NlbmRtc2dgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc3BsaWNlX3JlYWRgLiBUaGF0IGxvb2tzIHByZXR0eSB0YXJnZXRlZC5cblxuSSBzdGlsbCBuZWVkIHRvIGFkZHJlc3MgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLiBXYWl0IGEgbWludXRlLCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aG9zZSBzeW1ib2xzIGV4aXN0IGluIHZtbGludXguXG5cbk9rYXksIGxldCdzIGFkZHJlc3Mgc3RhdGljIGlubGluZSBmdW5jdGlvbnMuIEkndmUgZ290IGB0Y3BfcmVjdl9zaG91bGRfc3RvcGAsIHdoaWNoIGlzIHN0YXRpYyBpbmxpbmUsIGJ1dCBpcyBjYWxsZWQgYnkgYHRjcF9zcGxpY2VfcmVhZGAsIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc3BsaWNlX3JlYWRgLCB3aGljaCBhcmUgbm9uLXN0YXRpYy5cblxuRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgcmVsZXZhbnQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgYG5ldC9jb3JlL3N0cmVhbS5jYCwgYG5ldC9pcHY0L3RjcC5jYCwgYG5ldC9pcHY0L3RjcF9icGYuY2AsIGFuZCBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCBhbmQgSSBoYXZlIGlkZW50aWZpZWQgdGhlIHJpZ2h0IGZ1bmN0aW9ucyBmb3IgZWFjaC5cblxuSSB0aGluayBJJ3ZlIG5hcnJvd2VkIGl0IGRvd24gdG86IGBza19zdHJlYW1fd2FpdF9tZW1vcnlgLCBgdGNwX3NwbGljZV9yZWFkYCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCBgdGNwX2JwZl9zZW5kbXNnYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBgbXB0Y3Bfc2VuZG1zZ2AsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zcGxpY2VfcmVhZGAuXG5cbk5vdywgSSBhbHNvIGhhdmUgdG8gY29uc2lkZXIgdGhlaXIgRW5hYmxlQ29uZmlncy4gRm9yIGBuZXQvaXB2NC90Y3AuY2AgYW5kIGBpbmNsdWRlL25ldC90Y3AuaGAsIGl0J3MgYElORVRgLiBGb3IgYG5ldC9pcHY0L3RjcF9icGYuY2AsIGl0J3MgYEJQRl9TWVNDQUxMYCwgc2luY2UgYE5FVF9TT0NLX01TR2AgaXMgc2VsZWN0ZWQgYnkgb3RoZXIgY29uZmlncywgbm90IGRpcmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB1c2VyIGVuYWJsZXMgYEJQRl9TWVNDQUxMYC5cblxuT2theSwgSSd2ZSBnb3QgZXZlcnl0aGluZyBJIG5lZWQgdG8gZGVmaW5lIHRoZSBGb2N1c1N5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjMzLjI2NDgzNDU5OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3AvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfTVBUQ1ApICs9IG1wdGNwLm9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0bXB0Y3AteSA6PSBwcm90b2NvbC5vIHN1YmZsb3cubyBvcHRpb25zLm8gdG9rZW4ubyBjcnlwdG8ubyBjdHJsLm8gcG0ubyBkaWFnLm8gXFxcXFxcbiAgIDU6XFx0XFx0ICAgbWliLm8gcG1fbmV0bGluay5vIHNvY2tvcHQubyBwbV91c2Vyc3BhY2UubyBmYXN0b3Blbi5vIHNjaGVkLm8gXFxcXFxcbiAgIDY6XFx0XFx0ICAgbXB0Y3BfcG1fZ2VuLm8gcG1fa2VybmVsLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0b2JqLSQoQ09ORklHX1NZTl9DT09LSUVTKSArPSBzeW5jb29raWVzLm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19JTkVUX01QVENQX0RJQUcpICs9IG1wdGNwX2RpYWcub1xcbiAgMTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjMzLjI2NDg5MDkwOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjkxNzQwMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBNUFRDUCoqXG5cbk9rYXksIHNvIEknbSB3b3JraW5nIG9uIGdldHRpbmcgdGhpcyBNUFRDUCBjb25maWd1cmF0aW9uIHJpZ2h0LiBCYXNlZCBvbiB0aGUgZmlsZSBzdHJ1Y3R1cmUsIGBwcm90b2NvbC5vYCBpcyBjbGVhcmx5IG5lc3RlZCB3aXRoaW4gYG1wdGNwLm9gLCB3aGljaCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfTVBUQ1BgIGlzIHNldC4gTm93LCBgQ09ORklHX01QVENQYCBpdHNlbGYgaGFzIGEgZGVwZW5kZW5jeSBvbiBgSU5FVGAuIFNvLCB0aGUgYmFzZSByZXF1aXJlbWVudHMgYXJlOiBgSU5FVGAsIGBNUFRDUGAsIGFuZCBgQlBGX1NZU0NBTExgLlxuXG5MZXQncyBkbyBhIHF1aWNrIHN3ZWVwIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIERpdmluZyBpbnRvIGBuZXQvbXB0Y3AvS2NvbmZpZ2AsIGl0IGNvbmZpcm1zIHRoZSBgZGVwZW5kcyBvbiBJTkVUYCwgd2hpY2ggSSBleHBlY3RlZCwgYW5kIHRoZW4gaXQgKnNlbGVjdHMqIGEgZmV3IHRoaW5nczogYFNLQl9FWFRFTlNJT05TYCwgYENSWVBUT19MSUJfU0hBMjU2YCwgYW5kIGBDUllQVE9fTElCX1VUSUxTYC4gVGhlc2UgYXJlIGFsbCBhdXRvbWF0aWMgc2VsZWN0aW9ucywgd2hpY2ggaXMgZ29vZCDigJMgbGVzcyBtYW51YWwgaW50ZXJ2ZW50aW9uIGlzIGFsd2F5cyBhIHdpbi5cblxuRmluYWxseSwgcmVnYXJkaW5nIGBCUEZfU1lTQ0FMTGAsIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODIxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTg6MzYuOTU2NjM1MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTg6MzYuOTU2NzExMzcxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1NDMwNjQwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVENQL01QVENQIGBza19lcnJgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQ7IGBCUEZfU1lTQ0FMTGAgaXMgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gYE5FVGAgaXMgYSBnaXZlbiBmb3IgbmV0d29ya2luZyBjb2RlLCBhbmQgYElORVRgIGlzIHN0YW5kYXJkIGZvciBJUHY0L1RDUC4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGZvY3VzZWQgb24gYWRkcmVzc2luZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggYHNrLVx1MDAzZXNrX2VycmAuIEl0IHVzZXMgYFJFQURfT05DRSgpYCB0byBlbnN1cmUgc2FmZSwgY29uY3VycmVudCBhY2Nlc3Mgd2hlbiBgc29ja19lcnJvcigpYCBtaWdodCBiZSBjbGVhcmluZyBpdC4gVGhpcyBpbXBhY3RzIHNldmVyYWwgY29yZSBmdW5jdGlvbnMgYWNyb3NzIFRDUCwgc3RyZWFtIHNvY2tldHMsIFRDUCBCUEYsIGFuZCBNUFRDUC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgdGNwX3JlY3Zfc2hvdWxkX3N0b3BgLCBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCwgdGhlIHNwbGljZSBmdW5jdGlvbnMgKGB0Y3Bfc3BsaWNlX3JlYWRgLCBgbXB0Y3Bfc3BsaWNlX3JlYWRgKSwgYW5kIHRoZSBgc2VuZG1zZ2AgYW5kIGByZWN2bXNnYCBwYXRocyBpbiBib3RoIFRDUCwgTVBUQ1AsIGFuZCBCUEYuIFRoZXNlIGFyZSBhbGwgY3JpdGljYWwgcGF0aHMuXG5cbkxvb2tpbmcgYXQgdGhlIGxpc3Qgb2YgXCJGb2N1c1N5bWJvbHNcIiwgaXQgc2VlbXMgd2UncmUgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBkYXRhIHRyYW5zZmVyLCBhbmQgbWVzc2FnZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGggaG93IGVycm9yIHN0YXRlcyBhcmUgbWFuYWdlZCBpbiB0aG9zZSBvcGVyYXRpb25zLiBUaGF0J3MgZ29vZDsgaXQncyBhIGZvY3VzZWQgc2V0IG9mIGZ1bmN0aW9ucy5cblxuQmFzZWQgb24gdGhpcywgYW5kIHRoZSBmYWN0IHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgc29ja2V0IG9wZXJhdGlvbnMsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIEl0J3MgdGhlIHJpZ2h0IGNhbGwgdG8gZmx1c2ggb3V0IGFueSBzdWJ0bGUgYmVoYXZpb3JhbCBjaGFuZ2VzIG9yIHJlZ3Jlc3Npb25zIHRoaXMgbWlnaHQgaW50cm9kdWNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMuXG5cbkdpdmVuIHRoZSBjb2RlJ3Mgc2NvcGUgYW5kIHRoZSB0YXJnZXRlZCBtb2RpZmljYXRpb25zLCB0aGlzIGxvb2tzIGNsZWFuIGFuZCB3ZWxsLXN1cHBvcnRlZCwgbm8gcmVkIGZsYWdzLiBJdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDUwOCwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODo0MS40OTk3NzgxNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTEwODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19zdHJlYW1fd2FpdF9tZW1vcnlcIixcbiAgICBcInRjcF9zcGxpY2VfcmVhZFwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3BfcmVjdm1zZ19sb2NrZWRcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwibXB0Y3Bfc2VuZG1zZ1wiLFxuICAgIFwibXB0Y3BfcmVjdm1zZ1wiLFxuICAgIFwibXB0Y3Bfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbm5vdGF0ZXMgbG9ja2xlc3MgcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciB3aXRoIFJFQURfT05DRSgpIGFjcm9zcyBUQ1AsIE1QVENQLCBzdHJlYW0gc29ja2V0IHdhaXQgcGF0aHMsIGFuZCBUQ1AgQlBGIGhlbHBlcnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBpbXByb3BlciBjb21waWxlciBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkIGJ5IHNvY2tfZXJyb3IoKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyAoVENQLCBNUFRDUCwgYW5kIHNvY2ttYXAgQlBGKSwgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHN1YnRsZSBjb25jdXJyZW5jeSByZWdyZXNzaW9ucyBhbmQgZXJyb3ItaGFuZGxpbmcgY29ycmVjdG5lc3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTVBUQ1BcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tfc3RyZWFtX3dhaXRfbWVtb3J5XCIsXG4gICAgXCJ0Y3Bfc3BsaWNlX3JlYWRcIixcbiAgICBcInRjcF9zZW5kbXNnX2xvY2tlZFwiLFxuICAgIFwidGNwX3JlY3Ztc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcIm1wdGNwX3NlbmRtc2dcIixcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIixcbiAgICBcIm1wdGNwX3NwbGljZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYW5ub3RhdGVzIGxvY2tsZXNzIHJlYWRzIG9mIHNrLVxcdTAwM2Vza19lcnIgd2l0aCBSRUFEX09OQ0UoKSBhY3Jvc3MgVENQLCBNUFRDUCwgc3RyZWFtIHNvY2tldCB3YWl0IHBhdGhzLCBhbmQgVENQIEJQRiBoZWxwZXJzIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgaW1wcm9wZXIgY29tcGlsZXIgb3B0aW1pemF0aW9ucyB3aGVuIHNrX2VyciBpcyBjb25jdXJyZW50bHkgY2xlYXJlZCBieSBzb2NrX2Vycm9yKCkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4gY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbXMgKFRDUCwgTVBUQ1AsIGFuZCBzb2NrbWFwIEJQRiksIG1ha2luZyBpdCB2YWx1YWJsZSB0byBmdXp6IGZvciBzdWJ0bGUgY29uY3VycmVuY3kgcmVncmVzc2lvbnMgYW5kIGVycm9yLWhhbmRsaW5nIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODo0MS41NzM2OTY0NDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzQ3Nzk2Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTg6NDEuNTc0MTYwNTQ5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEzNDczMjgzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgdG8gcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciBhY3Jvc3MgVENQLCBNUFRDUCwgYW5kIGNvcmUgc3RyZWFtIHNvY2tldCBmdW5jdGlvbnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciByZS1yZWFkaW5nIG9wdGltaXphdGlvbnMgd2hlbiBza19lcnIgaXMgYWNjZXNzZWQgbG9ja2xlc3NseS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gU3RydWN0IHNvY2sgYW5kIGl0cyBza19lcnIgZmllbGQgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZXJlZm9yZSwgdGhlIHBhdGNoIHBvc2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMDUzOGNkYmMzMTBhMjhhMDBmZmFiNWYwMjYxNmZjMzY4ZjEyMTU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTU6NTU6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXG5pbmRleCA1ZTVmNWY5Yjg5YTM4Li42ZWU1MTNiZGI1MDMyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmhcbisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oXG5AQCAtMzA5Myw3ICszMDkzLDggQEAgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2luYm91bmRfaGFzaChzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gc3RhdGljIGlubGluZSBpbnQgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxuIHtcbi1cdHJldHVybiBzay1cdTAwM2Vza19lcnIgfHxcbitcdC8qIHNrX2VyciBjYW4gYmUgY2xlYXJlZCBsb2NrbGVzc2x5IGJ5IHNvY2tfZXJyb3IoKS4gKi9cbitcdHJldHVybiBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSB8fFxuIFx0ICAgICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSB8fFxuIFx0ICAgICAgIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB8fFxuIFx0ICAgICAgIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N0cmVhbS5jIGIvbmV0L2NvcmUvc3RyZWFtLmNcbmluZGV4IDJkNzQ4NTgxODYyZDAuLjVjMGFkYzMwNzdmMDMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zdHJlYW0uY1xuKysrIGIvbmV0L2NvcmUvc3RyZWFtLmNcbkBAIC0xMzMsNyArMTMzLDcgQEAgaW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApXG4gXHR3aGlsZSAoMSkge1xuIFx0XHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCBzayk7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbitcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpXG4gXHRcdFx0Z290byBkb19lcnJvcjtcbiBcdFx0aWYgKCEqdGltZW9fcClcbiBcdFx0XHRnb3RvIGRvX2VhZ2FpbjtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCAxYzg2N2EzMDI0NDQ2Li45ZTdmYTdlMzk3MjY1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbisrKyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtODQzLDcgKzg0Myw3IEBAIHNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4rXHRcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0XHRyZXQgPSBzb2NrX2Vycm9yKHNrKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbkBAIC0xMjI4LDcgKzEyMjgsNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdG1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssIFx1MDAyNnNpemVfZ29hbCwgZmxhZ3MpO1xuIFxuIFx0ZXJyID0gLUVQSVBFO1xuLVx0aWYgKHNrLVx1MDAzZXNrX2VyciB8fCAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFNFTkRfU0hVVERPV04pKVxuK1x0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpXG4gXHRcdGdvdG8gZG9fZXJyb3I7XG4gXG4gXHR3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpKSB7XG5AQCAtMjc2MCw3ICsyNzYwLDcgQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbitcdFx0XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikpIHtcbiBcdFx0XHRcdGNvcGllZCA9IHNvY2tfZXJyb3Ioc2spO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xuaW5kZXggMmUyMzRkMTU1YjVlNi4uYTk2MzIzZTY1NzU4ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xuKysrIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5AQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbitcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC01NTMsMTAgKzU1Myw5IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0Ym9vbCBlbm9zcGMgPSBmYWxzZTtcbiBcdFx0dTMyIGNvcHksIG9zaXplO1xuIFxuLVx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4tXHRcdFx0ZXJyID0gLXNrLVx1MDAzZXNrX2VycjtcbitcdFx0ZXJyID0gLVJFQURfT05DRShzay1cdTAwM2Vza19lcnIpO1xuK1x0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X2Vycjtcbi1cdFx0fVxuIFxuIFx0XHRjb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpO1xuIFx0XHRpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggZTFmMDhmNzFjZGIxNi4uNzYzMWZhNTgyODM0NyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTIwMjgsNyArMjAyOCw3IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdH1cbiBcbiBcdHJldCA9IC1FUElQRTtcbi1cdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSkpXG4rXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSkpXG4gXHRcdGdvdG8gZG9fZXJyb3I7XG4gXG4gXHRwZnJhZyA9IHNrX3BhZ2VfZnJhZyhzayk7XG5AQCAtMjQyOSw3ICsyNDI5LDcgQEAgc3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdCAgICAhdGltZW8pXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4rXHRcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0XHRjb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbkBAIC00NjU1LDcgKzQ2NTUsNyBAQCBzdGF0aWMgc3NpemVfdCBtcHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuK1x0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODo0MS41NzQxNjE3MTlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTEzNDczMDc0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc2stXHUwMDNlc2tfZXJyYCBEYXRhIFJhY2UgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZTogaXQncyBhZGRpbmcgYFJFQURfT05DRWAgYXJvdW5kIHNldmVyYWwgYWNjZXNzZXMgdG8gYHNrLVx1MDAzZXNrX2VycmAgYWNyb3NzIGJvdGggVENQIGFuZCBNUFRDUCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZDogYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCwgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAsIGB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYHRjcF9icGZfc2VuZG1zZ2AsIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYC4gVGhlIHVzZSBvZiBgUkVBRF9PTkNFYCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIHRvIGFkZHJlc3MgcG90ZW50aWFsIGRhdGEgcmFjZXMsIGxpa2VseSBpZGVudGlmaWVkIGJ5IEtDU0FOIG9yIHNpbWlsYXIgdG9vbHMsIG9yIHBlcmhhcHMganVzdCBhIHByb2FjdGl2ZSBtZWFzdXJlIHRvIGVuc3VyZSBjb3JyZWN0IGNvbXBpbGVyIGJlaGF2aW9yIGFyb3VuZCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlLlxuXG5gc2stXHUwMDNlc2tfZXJyYCBpcyBhbiBpbnRlZ2VyIGZpZWxkIHdpdGhpbiB0aGUgYHN0cnVjdCBzb2NrYC4gU2luY2UgdGhlIGBzdHJ1Y3Qgc29ja2AgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCwgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSXQncyBlc3NlbnRpYWxseSB3cmFwcGluZyBleGlzdGluZyByZWFkcyB3aXRoIGBSRUFEX09OQ0VgLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gcHJldmVudCBjb21waWxlciBvcHRpbWl6YXRpb25zIGZyb20gcmUtb3JkZXJpbmcgbWVtb3J5IGFjY2Vzc2VzIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2Ugc3RhbGUgdmFsdWVzLlxuXG5JJ20gY29uZmlkZW50IHRoaXMgaXNuJ3QgYWx0ZXJpbmcgbGVuZ3RocywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMuIFRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSd2ZSBtZW50YWxseSBnb25lIHRocm91Z2ggbXkgdXN1YWwgY2hlY2tsaXN0OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZSwgbm90aGluZyBoZXJlIHRoYXQgdHJhbnNtaXRzIHBhcnRpYWxseSBpbml0aWFsaXplZCBzdHJ1Y3R1cmVzIG9yIGZpZWxkcy5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBgc2stXHUwMDNlc2tfZXJyYCBpcyBpbml0aWFsaXplZCBkdXJpbmcgc29ja2V0IGFsbG9jYXRpb24gdXNpbmcgZWl0aGVyIGBrbWVtX2NhY2hlX2FsbG9jYCB3aXRoIHplcm9pbmcgb3IgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdpdGggbGF0ZXIgcmVhZHM/KiogTm90IGEgZmFjdG9yLiBUaGUgY2hhbmdlIGlzIGNvbmZpbmVkIHRvIGEgc2luZ2xlIGludGVnZXIgZmllbGQuXG40LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBpc3N1ZXM/KiogTm8gY2hhbmdlcyB0byBhbnkgc3Vycm91bmRpbmcgY29kZSB0aGF0IG1pZ2h0IGJlIHN1YmplY3QgdG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcy5cblxuVGhlcmVmb3JlLCB0aGlzIHNlZW1zIGxpa2UgYSBwdXJlbHkgYWRkaXRpdmUgYW5ub3RhdGlvbi9jb25jdXJyZW5jeSBmaXguIEl0J3Mgc2FmZSwgYW5kIGxpa2VseSBuZWNlc3NhcnkgZm9yIHJvYnVzdG5lc3MsIHBhcnRpY3VsYXJseSBnaXZlbiBtb2Rlcm4gY29uY3VycmVuY3kgdG9vbHMuIFdoaWxlIEknZCBydW4gS0NTQU4sIEtUU0FOLCBvciBzaW1pbGFyIHRvb2xzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi4gVGltZSB0byBydW4gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NywiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODo1Mi45MjE0NzI5NTRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgdG8gcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciBhY3Jvc3MgVENQLCBNUFRDUCwgYW5kIGNvcmUgc3RyZWFtIHNvY2tldCBmdW5jdGlvbnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciByZS1yZWFkaW5nIG9wdGltaXphdGlvbnMgd2hlbiBza19lcnIgaXMgYWNjZXNzZWQgbG9ja2xlc3NseS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gU3RydWN0IHNvY2sgYW5kIGl0cyBza19lcnIgZmllbGQgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZXJlZm9yZSwgdGhlIHBhdGNoIHBvc2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFJFQURfT05DRSgpIGFubm90YXRpb25zIHRvIHJlYWRzIG9mIHNrLVxcdTAwM2Vza19lcnIgYWNyb3NzIFRDUCwgTVBUQ1AsIGFuZCBjb3JlIHN0cmVhbSBzb2NrZXQgZnVuY3Rpb25zIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgcmUtcmVhZGluZyBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGFjY2Vzc2VkIGxvY2tsZXNzbHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFN0cnVjdCBzb2NrIGFuZCBpdHMgc2tfZXJyIGZpZWxkIGFyZSBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIHVwb24gc29ja2V0IGNyZWF0aW9uLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBwb3NlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 15:53:15 +0000 UTC FinishedAt: 2026-09-12 15:58:54 +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": "211f2a875f6f447745d80d5762d6d614503ac84a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP", "BPF_SYSCALL" ], "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": "211f2a875f6f447745d80d5762d6d614503ac84a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP", "BPF_SYSCALL" ], "series_id": "dddb82c2-5096-436d-891e-0d027167b301" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sk_stream_wait_memory", "tcp_splice_read", "tcp_sendmsg_locked", "tcp_recvmsg_locked", "tcp_bpf_sendmsg", "tcp_bpf_recvmsg_parser", "mptcp_sendmsg", "mptcp_recvmsg", "mptcp_splice_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "211f2a875f6f447745d80d5762d6d614503ac84a", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19zdHJlYW1fd2FpdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7dGNwX3NwbGljZV9yZWFkJiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt0Y3BfcmVjdm1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3NwbGljZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB0byByZWFkcyBvZiBzay1cdTAwM2Vza19lcnIgYWNyb3NzIFRDUCwgTVBUQ1AsIGFuZCBjb3JlIHN0cmVhbSBzb2NrZXQgZnVuY3Rpb25zIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgcmUtcmVhZGluZyBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGFjY2Vzc2VkIGxvY2tsZXNzbHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFN0cnVjdCBzb2NrIGFuZCBpdHMgc2tfZXJyIGZpZWxkIGFyZSBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIHVwb24gc29ja2V0IGNyZWF0aW9uLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBwb3NlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFubm90YXRlcyBsb2NrbGVzcyByZWFkcyBvZiBzay1cdTAwM2Vza19lcnIgd2l0aCBSRUFEX09OQ0UoKSBhY3Jvc3MgVENQLCBNUFRDUCwgc3RyZWFtIHNvY2tldCB3YWl0IHBhdGhzLCBhbmQgVENQIEJQRiBoZWxwZXJzIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgaW1wcm9wZXIgY29tcGlsZXIgb3B0aW1pemF0aW9ucyB3aGVuIHNrX2VyciBpcyBjb25jdXJyZW50bHkgY2xlYXJlZCBieSBzb2NrX2Vycm9yKCkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4gY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbXMgKFRDUCwgTVBUQ1AsIGFuZCBzb2NrbWFwIEJQRiksIG1ha2luZyBpdCB2YWx1YWJsZSB0byBmdXp6IGZvciBzdWJ0bGUgY29uY3VycmVuY3kgcmVncmVzc2lvbnMgYW5kIGVycm9yLWhhbmRsaW5nIGNvcnJlY3RuZXNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjA1MzhjZGJjMzEwYTI4YTAwZmZhYjVmMDI2MTZmYzM2OGYxMjE1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE1OjU1OjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcbmluZGV4IDVlNWY1ZjliODlhMzguLjZlZTUxM2JkYjUwMzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvdGNwLmhcbkBAIC0zMDkzLDcgJiM0MzszMDkzLDggQEAgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2luYm91bmRfaGFzaChzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gc3RhdGljIGlubGluZSBpbnQgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxuIHtcbi1cdHJldHVybiBzay1cdTAwM2Vza19lcnIgfHxcbiYjNDM7XHQvKiBza19lcnIgY2FuIGJlIGNsZWFyZWQgbG9ja2xlc3NseSBieSBzb2NrX2Vycm9yKCkuICovXG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpIHx8XG4gXHQgICAgICAgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFIHx8XG4gXHQgICAgICAgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHx8XG4gXHQgICAgICAgc2lnbmFsX3BlbmRpbmcoY3VycmVudCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3RyZWFtLmMgYi9uZXQvY29yZS9zdHJlYW0uY1xuaW5kZXggMmQ3NDg1ODE4NjJkMC4uNWMwYWRjMzA3N2YwMyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3N0cmVhbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zdHJlYW0uY1xuQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgaW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApXG4gXHR3aGlsZSAoMSkge1xuIFx0XHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCBzayk7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbiYjNDM7XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSB8fCAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFNFTkRfU0hVVERPV04pKVxuIFx0XHRcdGdvdG8gZG9fZXJyb3I7XG4gXHRcdGlmICghKnRpbWVvX3ApXG4gXHRcdFx0Z290byBkb19lYWdhaW47XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggMWM4NjdhMzAyNDQ0Ni4uOWU3ZmE3ZTM5NzI2NSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTg0Myw3ICYjNDM7ODQzLDcgQEAgc3NpemVfdCB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbiYjNDM7XHRcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0XHRyZXQgPSBzb2NrX2Vycm9yKHNrKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbkBAIC0xMjI4LDcgJiM0MzsxMjI4LDcgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRtc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCBcdTAwMjZzaXplX2dvYWwsIGZsYWdzKTtcbiBcbiBcdGVyciA9IC1FUElQRTtcbi1cdGlmIChzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbiBcdFx0Z290byBkb19lcnJvcjtcbiBcbiBcdHdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykpIHtcbkBAIC0yNzYwLDcgJiM0MzsyNzYwLDcgQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbiYjNDM7XHRcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0XHRjb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmE5NjMyM2U2NTc1OGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTI4Niw3ICYjNDM7Mjg2LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbi1cdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuJiM0MztcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC01NTMsMTAgJiM0Mzs1NTMsOSBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdGJvb2wgZW5vc3BjID0gZmFsc2U7XG4gXHRcdHUzMiBjb3B5LCBvc2l6ZTtcbiBcbi1cdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuLVx0XHRcdGVyciA9IC1zay1cdTAwM2Vza19lcnI7XG4mIzQzO1x0XHRlcnIgPSAtUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2Vycik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X2Vycjtcbi1cdFx0fVxuIFxuIFx0XHRjb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpO1xuIFx0XHRpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggZTFmMDhmNzFjZGIxNi4uNzYzMWZhNTgyODM0NyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTIwMjgsNyAmIzQzOzIwMjgsNyBAQCBzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHR9XG4gXG4gXHRyZXQgPSAtRVBJUEU7XG4tXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZXJyIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpKVxuJiM0MztcdGlmICh1bmxpa2VseShSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSB8fCAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFNFTkRfU0hVVERPV04pKSlcbiBcdFx0Z290byBkb19lcnJvcjtcbiBcbiBcdHBmcmFnID0gc2tfcGFnZV9mcmFnKHNrKTtcbkBAIC0yNDI5LDcgJiM0MzsyNDI5LDcgQEAgc3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdCAgICAhdGltZW8pXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4mIzQzO1x0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG5AQCAtNDY1NSw3ICYjNDM7NDY1NSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1wdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4mIzQzO1x0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3N0cmVhbV93YWl0X21lbW9yeSYjMzQ7LAogICAgJiMzNDt0Y3Bfc3BsaWNlX3JlYWQmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O3RjcF9yZWN2bXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDttcHRjcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc3BsaWNlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYW5ub3RhdGVzIGxvY2tsZXNzIHJlYWRzIG9mIHNrLVx1MDAzZXNrX2VyciB3aXRoIFJFQURfT05DRSgpIGFjcm9zcyBUQ1AsIE1QVENQLCBzdHJlYW0gc29ja2V0IHdhaXQgcGF0aHMsIGFuZCBUQ1AgQlBGIGhlbHBlcnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBpbXByb3BlciBjb21waWxlciBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkIGJ5IHNvY2tfZXJyb3IoKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyAoVENQLCBNUFRDUCwgYW5kIHNvY2ttYXAgQlBGKSwgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHN1YnRsZSBjb25jdXJyZW5jeSByZWdyZXNzaW9ucyBhbmQgZXJyb3ItaGFuZGxpbmcgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMDUzOGNkYmMzMTBhMjhhMDBmZmFiNWYwMjYxNmZjMzY4ZjEyMTU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTU6NTU6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDVlNWY1ZjliODlhMzguLjZlZTUxM2JkYjUwMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0zMDkzLDcgJiM0MzszMDkzLDggQEAgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2luYm91bmRfaGFzaChzdHJ1Y3Qgc29jayAqc2ssCiAKIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9yZWN2X3Nob3VsZF9zdG9wKHN0cnVjdCBzb2NrICpzaykKIHsKLQlyZXR1cm4gc2stJmd0O3NrX2VyciB8fAomIzQzOwkvKiBza19lcnIgY2FuIGJlIGNsZWFyZWQgbG9ja2xlc3NseSBieSBzb2NrX2Vycm9yKCkuICovCiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoc2stJmd0O3NrX2VycikgfHwKIAkgICAgICAgc2stJmd0O3NrX3N0YXRlID09IFRDUF9DTE9TRSB8fAogCSAgICAgICAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgfHwKIAkgICAgICAgc2lnbmFsX3BlbmRpbmcoY3VycmVudCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zdHJlYW0uYyBiL25ldC9jb3JlL3N0cmVhbS5jCmluZGV4IDJkNzQ4NTgxODYyZDAuLjVjMGFkYzMwNzdmMDMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3N0cmVhbS5jCkBAIC0xMzMsNyAmIzQzOzEzMyw3IEBAIGludCBza19zdHJlYW1fd2FpdF9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lb19wKQogCXdoaWxlICgxKSB7CiAJCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTsKIAotCQlpZiAoc2stJmd0O3NrX2VyciB8fCAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFNFTkRfU0hVVERPV04pKQomIzQzOwkJaWYgKFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSB8fCAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFNFTkRfU0hVVERPV04pKQogCQkJZ290byBkb19lcnJvcjsKIAkJaWYgKCEqdGltZW9fcCkKIAkJCWdvdG8gZG9fZWFnYWluOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAxYzg2N2EzMDI0NDQ2Li45ZTdmYTdlMzk3MjY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuYwpAQCAtODQzLDcgJiM0Mzs4NDMsNyBAQCBzc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsCiAJCQkJYnJlYWs7CiAJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQogCQkJCWJyZWFrOwotCQkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpKSB7CiAJCQkJcmV0ID0gc29ja19lcnJvcihzayk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMjI4LDcgJiM0MzsxMjI4LDcgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJmFtcDtzaXplX2dvYWwsIGZsYWdzKTsKIAogCWVyciA9IC1FUElQRTsKLQlpZiAoc2stJmd0O3NrX2VyciB8fCAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFNFTkRfU0hVVERPV04pKQomIzQzOwlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpCiAJCWdvdG8gZG9fZXJyb3I7CiAKIAl3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpKSB7CkBAIC0yNzYwLDcgJiM0MzsyNzYwLDcgQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQogCQkJCWJyZWFrOwogCi0JCQlpZiAoc2stJmd0O3NrX2VycikgewomIzQzOwkJCWlmIChSRUFEX09OQ0Uoc2stJmd0O3NrX2VycikpIHsKIAkJCQljb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuYwppbmRleCAyZTIzNGQxNTViNWU2Li5hOTYzMjNlNjU3NThlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2JwZi5jCkBAIC0yODYsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpCiAJCQlnb3RvIG91dDsKIAotCQlpZiAoc2stJmd0O3NrX2VycikgewomIzQzOwkJaWYgKFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSkgewogCQkJY29waWVkID0gc29ja19lcnJvcihzayk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNTUzLDEwICYjNDM7NTUzLDkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQlib29sIGVub3NwYyA9IGZhbHNlOwogCQl1MzIgY29weSwgb3NpemU7CiAKLQkJaWYgKHNrLSZndDtza19lcnIpIHsKLQkJCWVyciA9IC1zay0mZ3Q7c2tfZXJyOwomIzQzOwkJZXJyID0gLVJFQURfT05DRShzay0mZ3Q7c2tfZXJyKTsKJiM0MzsJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9lcnI7Ci0JCX0KIAogCQljb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpOwogCQlpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGUxZjA4ZjcxY2RiMTYuLjc2MzFmYTU4MjgzNDcgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0yMDI4LDcgJiM0MzsyMDI4LDcgQEAgc3RhdGljIGludCBtcHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogCX0KIAogCXJldCA9IC1FUElQRTsKLQlpZiAodW5saWtlbHkoc2stJmd0O3NrX2VyciB8fCAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFNFTkRfU0hVVERPV04pKSkKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSB8fCAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFNFTkRfU0hVVERPV04pKSkKIAkJZ290byBkb19lcnJvcjsKIAogCXBmcmFnID0gc2tfcGFnZV9mcmFnKHNrKTsKQEAgLTI0MjksNyAmIzQzOzI0MjksNyBAQCBzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCQkgICAgIXRpbWVvKQogCQkJCWJyZWFrOwogCQl9IGVsc2UgewotCQkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpKSB7CiAJCQkJY29waWVkID0gc29ja19lcnJvcihzayk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC00NjU1LDcgJiM0Mzs0NjU1LDcgQEAgc3RhdGljIHNzaXplX3QgbXB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLAogCQkJCWJyZWFrOwogCQkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkKIAkJCQlicmVhazsKLQkJCWlmIChzay0mZ3Q7c2tfZXJyKSB7CiYjNDM7CQkJaWYgKFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSkgewogCQkJCXJldCA9IHNvY2tfZXJyb3Ioc2spOwogCQkJCWJyZWFrOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IENvcmUgTmV0d29ya2luZyBNb2RpZmljYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgc2V2ZXJhbCBpbnN0YW5jZXMgb2YgYHNrLSZndDtza19lcnJgIHJlYWRzIGFjcm9zcyB0aGUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IGluIGB0Y3AuaGAsIGBzdHJlYW0uY2AsIHZhcmlvdXMgYHRjcC5jYCBmaWxlcyAoaW5jbHVkaW5nIHRoZSBCUEYgYW5kIE1QVENQIHZhcmlhbnRzKS4gSXQmIzM5O3MgYWRkaW5nIGBSRUFEX09OQ0UoKWAgdG8gdGhlc2UgcmVhZHMsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBsaWtlbHkgYWRkcmVzc2VzIGlzc3VlcyBmbGFnZ2VkIGJ5IGEgdG9vbCBsaWtlIEtDU0FOIG9yIHBvdGVudGlhbCBjb21waWxlciBvcHRpbWl6YXRpb24gcHJvYmxlbXMuIFRoaXMgaXMgYWxsICpjb3JlKiBuZXR3b3JraW5nIHN0dWZmLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoaXMgcmVxdWlyZXMgZnV6emluZyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZ3VpZGVsaW5lcy4gSSBuZWVkIHRvIGJlIGRpbGlnZW50IGFib3V0IHRoaXMga2luZCBvZiBjaGFuZ2UsIHNpbmNlIHRoZSBwYXRjaCBhdXRob3IgbWlnaHQgY2xhaW0gJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSwmIzM0OyBidXQgdGhhdCBpcyBub3Qgc3VmZmljaWVudC4KCkxvb2tpbmcgYXQgdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2hhbmdlLgoKSSYjMzk7bSBjaGVja2luZyB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZmlyc3QuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGRlZmluaXRlbHkgKm5vdCogZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBidWlsZCBzeXN0ZW0gY2hhbmdlcy4gSXQmIzM5O3Mgbm90IHVucmVhY2hhYmxlIGhhcmR3YXJlIG9yIGV4Y2x1c2l2ZSB0byBvdGhlciBhcmNoaXRlY3R1cmVzLiBJdCYjMzk7cyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLiBTbywgdGhlICYjMzQ7bmVnYXRpdmUgY3JpdGVyaWEmIzM0OyBhbGwgZmFpbC4KCk5vdywgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBTZWN0aW9uIDMgaXMgY2xlYXI6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzogQ29yZSBTdWJzeXN0ZW1zOiAuLi4gY29yZSBuZXR3b3JraW5nLi4uJiMzNDsuIEJpbmdvISBUaGlzICphYnNvbHV0ZWx5KiBmYWxscyB1bmRlciB0aGF0IGRlZmluaXRpb24uIENoYW5naW5nIHRoaXMsIGV2ZW4gaWYgaXQgKnNlZW1zKiBsaWtlIGEgc2ltcGxlIGNoYW5nZSwgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIHRodXMgbmVlZHMgdG8gYmUgZnV6emVkLiBBZGRpbmcgYFJFQURfT05DRWAgY2FuLCBmb3IgZXhhbXBsZSwgZGlzYWJsZSBzb21lIG9wdGltaXphdGlvbnMgdGhhdCBkZXBlbmQgb24gc3BlY2lmaWMgb3JkZXJpbmcgYXNzdW1wdGlvbnMsIGFuZCByZXZlYWwgYSBoaWRkZW4gYnVnIG9yIGEgbmV3IGNvZGUgcGF0aC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGxvYWQvc3RvcmUgY29kZS4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgKm11c3QqIGJlIGB0cnVlYC4gSSYjMzk7bGwgbm93IGNoZWNrIHRoZSBjb21taXQgbG9nIGluIGdpdCB0byBzZWUgaWYgYW55IG1vcmUgZGV0YWlscyBjYW4gYmUgZ2xlYW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19lcnIgY2FuIGJlIGNsZWFyZWQgbG9ja2xlc3NseSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0zMDk0PXN0YXRpYyBpbmxpbmUgaW50IHRjcF9yZWN2X3Nob3VsZF9zdG9wKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3RjcC5oLTMwOTUte1xuaW5jbHVkZS9uZXQvdGNwLmg6MzA5NjpcdC8qIHNrX2VyciBjYW4gYmUgY2xlYXJlZCBsb2NrbGVzc2x5IGJ5IHNvY2tfZXJyb3IoKS4gKi9cbmluY2x1ZGUvbmV0L3RjcC5oLTMwOTctXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTM2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgVENQL01QVENQIERhdGEgRmxvdyBhbmQgUG90ZW50aWFsIEJvdHRsZW5lY2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93IGFuZCBwb3RlbnRpYWwgY2hva2UgcG9pbnRzIHdpdGhpbiB0aGUgVENQIGFuZCBNUFRDUCBzdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgb2YgZm9jdXNpbmcgb24gYSBzcGVjaWZpYyBzZXQgb2Yga2V5IGZ1bmN0aW9uczogYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9zZW5kbXNnYCwgdGhlbiBJJiMzOTtsbCBsb29rIGludG8gYG1wdGNwX3NlbmRtc2dgLCBgbXB0Y3BfcmVjdm1zZ2AsIGBtcHRjcF9zcGxpY2VfcmVhZGAsIGB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGFuZCBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgc3VzcGVjdHMgd2hlcmUgZGF0YSBpcyBiZWluZyBwcm9jZXNzZWQsIGNvcGllZCwgYW5kIHF1ZXVlZC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGNhbiBnZXQgYSBnb29kIG92ZXJ2aWV3IGJ5IGZvY3VzaW5nIG9uIHRob3NlLgoKTm93LCBhbiBpbXBvcnRhbnQgZmFjdG9yIGluIHRoZSBkYXRhIGZsb3cgaXMgZGV0ZXJtaW5pbmcgd2hlbiB0byBwYXVzZSB0cmFuc21pc3Npb24sIGFuZCBJIHJlbWVtYmVyIGB0Y3BfcmVjdl9zaG91bGRfc3RvcGAgcGxheXMgYSByb2xlIGluIGl0LiBTbyBJIG5lZWQgdG8gc2VlIHdobyYjMzk7cyBjYWxsaW5nICp0aGF0KiBmdW5jdGlvbi4gSSYjMzk7bGwgcmVhY2ggZm9yIGBncmVwcGVyYCB0byBxdWlja2x5IHRyYWNrIGRvd24gYWxsIG9mIHRoZSBjYWxsIHNpdGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBsYXJnZXIgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBkYXRhIHJlY2VwdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcmVjdl9zaG91bGRfc3RvcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0zMDg5PWVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9pbmJvdW5kX2hhc2goc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTMwOTMtXG5pbmNsdWRlL25ldC90Y3AuaDozMDk0OnN0YXRpYyBpbmxpbmUgaW50IHRjcF9yZWN2X3Nob3VsZF9zdG9wKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3RjcC5oLTMwOTUte1xuLS1cbm5ldC9pcHY0L3RjcC5jPTgxMT1zc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L2lwdjQvdGNwLmMtODg2LVxubmV0L2lwdjQvdGNwLmM6ODg3Olx0XHRpZiAodGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spKVxubmV0L2lwdjQvdGNwLmMtODg4LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTI2NTY9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjc1Ni1cdFx0XHRpZiAoIXRpbWVvIHx8XG5uZXQvaXB2NC90Y3AuYzoyNzU3Olx0XHRcdCAgICB0Y3BfcmVjdl9zaG91bGRfc3RvcChzaykpXG5uZXQvaXB2NC90Y3AuYy0yNzU4LVx0XHRcdFx0YnJlYWs7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjM3ND1zdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQyNy1cdFx0aWYgKGNvcGllZCkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjQyODpcdFx0XHRpZiAodGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spIHx8XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDI5LVx0XHRcdCAgICAhdGltZW8pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDYyND1zdGF0aWMgc3NpemVfdCBtcHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY5OC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2OTk6XHRcdGlmICh0Y3BfcmVjdl9zaG91bGRfc3RvcChzaykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NzAwLVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNjkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1vZGlmaWVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O20gc2VlaW5nIGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmVncmVzc2lvbnMgd2l0aGluIHRoZXNlIG5ldHdvcmsgY29yZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZW0gYW5kIHVuZGVyc3RhbmQgdGhlIGV4dGVudCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCkhlcmXigJlzIG15IG1lbnRhbCBjaGVja2xpc3Q6CiogICBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCBpbiBgbmV0L2NvcmUvc3RyZWFtLmNgIC0gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLCBzbyBhbnkgY2hhbmdlIGhlcmUgaXMgaW1tZWRpYXRlbHkgc3VzcGVjdC4KKiAgIGB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGluIGBuZXQvaXB2NC90Y3AuY2AgLSBUaGVzZSBhcmUgY3JpdGljYWwgZm9yIGRhdGEgdHJhbnNmZXI7IGNoYW5nZXMgaGVyZSBuZWNlc3NpdGF0ZSB0aG9yb3VnaCBpbnNwZWN0aW9uLgoqICAgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9zZW5kbXNnYCBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCAtIEJQRiBob29rcywgd2hpY2ggY291bGQgaW5kaWNhdGUgaW5zdHJ1bWVudGF0aW9uIG9yIHBvdGVudGlhbCBjb250cm9sIGZsb3cgY2hhbmdlcy4KKiAgIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIC0gTVBUQ1Atc3BlY2lmaWMsIGFueSBjaGFuZ2VzIHRvIHRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS4KCkFuZCB0aGVuIHRoZXJlJiMzOTtzIHRoZSBgaW5jbHVkZS9uZXQvdGNwLmhgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCBmdW5jdGlvbiwgaW5saW5lZCBpbnRvIHNldmVyYWwgb3RoZXIga2V5IGZ1bmN0aW9ucy4gVGhpcyBpcyBwb3RlbnRpYWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gSXRzIHVzZSBpbiBzbyBtYW55IG90aGVyIGtleSBmdW5jdGlvbnMgbWVhbnMgaXQgaXMgdmVyeSBpbXBvcnRhbnQuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGFuZCBgdGNwX3NlbmRtc2dfbG9ja2VkYCBzcGVjaWZpY2FsbHkuIEFyZSB0aGV5IGRlY2xhcmVkIHN0YXRpYyBvciBub24tc3RhdGljPyBJIG5lZWQgdG8ga25vdyB0aGVpciB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC9pcHY0L3RjcC5jYCBhbmQgZmlndXJlIHRoaXMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9zZW5kbXNnX2xvY2tlZHx0Y3BfcmVjdm1zZ19sb2NrZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0xMTE0PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcbm5ldC9pcHY0L3RjcC5jLTExMTUtXG5uZXQvaXB2NC90Y3AuYzoxMTE2OmludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2lwdjQvdGNwLmMtMTExNy17XG4tLVxubmV0L2lwdjQvdGNwLmMtMTI0MC1cbm5ldC9pcHY0L3RjcC5jOjEyNDE6XHRcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XG5uZXQvaXB2NC90Y3AuYy0xMjQyLVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE0NDQtfVxubmV0L2lwdjQvdGNwLmM6MTQ0NTpFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2VuZG1zZ19sb2NrZWQpO1xubmV0L2lwdjQvdGNwLmMtMTQ0Ni1cbm5ldC9pcHY0L3RjcC5jPTE0NDc9aW50IHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDUxLVx0bG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jOjE0NTI6XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2l6ZSk7XG5uZXQvaXB2NC90Y3AuYy0xNDUzLVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0xOTM2PXN0YXRpYyB2b2lkIHRjcF96ZXJvY29weV9zZXRfaGludF9mb3Jfc2tiKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3AuYy0xOTcyLVxubmV0L2lwdjQvdGNwLmM6MTk3MzpzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9pcHY0L3RjcC5jLTE5NzQtXHRcdFx0ICAgICAgaW50IGZsYWdzLCBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCAqdHNzLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTE5NzY9c3RhdGljIGludCByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTE5OTQtXG5uZXQvaXB2NC90Y3AuYzoxOTk1Olx0ZXJyID0gdGNwX3JlY3Ztc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2csIGlucSwgTVNHX0RPTlRXQUlULFxubmV0L2lwdjQvdGNwLmMtMTk5Ni1cdFx0XHRcdCB0c3MsIFx1MDAyNnpjLVx1MDAzZW1zZ19mbGFncyk7XG4tLVxubmV0L2lwdjQvdGNwLmM9MjUwMD1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwLmMtMjY1NS1cbm5ldC9pcHY0L3RjcC5jOjI2NTY6c3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvaXB2NC90Y3AuYy0yNjU3LVx0XHRcdCAgICAgIGludCBmbGFncywgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcyxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yOTMxPWludCB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTI5NDQtXHRsb2NrX3NvY2soc2spO1xubmV0L2lwdjQvdGNwLmM6Mjk0NTpcdHJldCA9IHRjcF9yZWN2bXNnX2xvY2tlZChzaywgbXNnLCBsZW4sIGZsYWdzLCBcdTAwMjZ0c3MsIFx1MDAyNmNtc2dfZmxhZ3MpO1xubmV0L2lwdjQvdGNwLmMtMjk0Ni1cdHJlbGVhc2Vfc29jayhzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gVENQIEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBJdCYjMzk7cyBleHBvc2VkLCBgRVhQT1JUX1NZTUJPTF9HUExgIHRvIGJlIHByZWNpc2UsIHdoaWNoIG1lYW5zIGtUTFMsIHRjcF9icGYgYW5kIGB0Y3Bfc2VuZG1zZ2AgY2FuIGFsbCBjYWxsIGl0LiBUaGF0IG1ha2VzIHNlbnNlLCBhIGNydWNpYWwgaW50ZXJuYWwgZnVuY3Rpb24gbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBmb3IgdGhvc2UgZmVhdHVyZXMuCgpCdXQgd2FpdCBhIHNlY29uZC4uLiB3aGF0IGFib3V0IHRoZSByZWNlaXZlIHNpZGU/IElzIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIHZpc2libGUgaW4gdGhlIHNhbWUgd2F5PyBIbW1tLCBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIGRlY2xhcmVkICpzdGF0aWMqLiBOZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCBjb3VsZCBjaGFuZ2UgdGhlIGZsb3cgaW4gYSBzdWJ0bGUgd2F5LiBHb3R0YSByZW1lbWJlciB0byBrZWVwIGFuIGV5ZSBvbiBob3cgdGhhdCBpbXBhY3RzIHRoZSBzdGFjay4KCkp1c3QgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBlZGdlIGNhc2VzLCBsZXQmIzM5O3MgYWxzbyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgdGNwX3NwbGljZV9yZWFkYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBleHBvc3VyZS4gSXMgaXQgZXhwb3J0ZWQsIG9yIGlzIGl0IGFsc28gYSBzdGF0aWMgaW50ZXJuYWwgZnVuY3Rpb24/IFRoZSBpbXBsaWNhdGlvbnMgZm9yIGtlcm5lbCBpbnRlcm5hbHMgYW5kIHNlY3VyaXR5IGNvdWxkIGRpZmZlciBzaWduaWZpY2FudGx5IGJhc2VkIG9uIHRoYXQgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzc2l6ZV90IHRjcF9zcGxpY2VfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTc4OD1zdGF0aWMgaW50IF9fdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zcGxpY2Vfc3RhdGUgKnRzcylcbi0tXG5uZXQvaXB2NC90Y3AuYy04MTAtICoqL1xubmV0L2lwdjQvdGNwLmM6ODExOnNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbm5ldC9pcHY0L3RjcC5jLTgxMi1cdFx0XHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTk2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBUQ1AgRGF0YSBGbG93KioKCk9rYXksIHNvIGB0Y3Bfc3BsaWNlX3JlYWRgIGlzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfc2VuZG1zZ2AuIEFyZSB0aGV5IHJlbGF0ZWQsIGFuZCBob3c/IFRvIGZpbmQgb3V0LCBJIHNob3VsZCBkaXZlIGludG8gYHRjcF9icGYuY2AuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBleHBsb3JpbmcgaG93IHRoZXNlIGRpZmZlcmVudCBmdW5jdGlvbnMgd29yayB0b2dldGhlciB3aXRoaW4gdGhlIFRDUCBkYXRhIGZsb3cuIEkgd2FudCB0byBzZWUgaG93IHRoZSBCUEYgaW50ZWdyYXRpb24gcGxheXMgd2l0aCB0aGUgZGF0YSBwYXRoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYHRjcF9icGYuY2AgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyfHRjcF9icGZfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MTUzPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjE2NDppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NS1cdFx0XHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE3Ny19XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTc4OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NDE4PXN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy00ODYtXHRcdG9yaWdzaXplID0gbXNnLVx1MDAzZXNnLnNpemU7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NDg3Olx0XHRyZXQgPSB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc2tfcmVkaXIsIHJlZGlyX2luZ3Jlc3MsXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg4LVx0XHRcdFx0XHQgICAgbXNnLCB0b3NlbmQsIGZsYWdzKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjUzNDpzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTM1LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM5PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY0OS1cdHByb3RbVENQX0JQRl9UWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTA6XHRwcm90W1RDUF9CUEZfVFhdLnNlbmRtc2dcdFx0PSB0Y3BfYnBmX3NlbmRtc2c7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUxLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Mi1cdHByb3RbVENQX0JQRl9SWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTM6XHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1NC1cbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXHRwcm90W1RDUF9CUEZfVFhSWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9UWF07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU2Olx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny19XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY4OT1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzEyLVx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxubmV0L2lwdjQvdGNwX2JwZi5jOjcxMzpcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzE0LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDY1CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgRnVuY3Rpb24gU3ltYm9sIEVsaWdpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3NlbmRtc2dgIOKAkyB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBgdGNwX2JwZi5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhleSBiZSBjb25zaWRlcmVkIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXM/CgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIEZvY3VzU3ltYm9sIHJ1bGVzOiBXZSYjMzk7cmUgc3VwcG9zZWQgdG8gYXZvaWQgdWJpcXVpdG91cyBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIG5vdGhpbmcgY2FsbGVkIGJ5ICpldmVyeSogcHJvZ3JhbS4gV2Ugd2FudCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgYWJvdXQgc3RhdGljICppbmxpbmUqIGZ1bmN0aW9ucyBpcyBpbnRlcmVzdGluZywgYmVjYXVzZSB0aG9zZSBjYW4mIzM5O3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGluIGEgYC5jYCBmaWxlLCBhbmQgdW5sZXNzIHRoZSBjb21waWxlciBpbmxpbmVzIHRoZW0sIHRoZXkgKmRvKiBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdGhlIHZtbGludXggaW1hZ2UuIFRoaXMgaXMgaW1wb3J0YW50LCBlc3BlY2lhbGx5IHNpbmNlIEkga25vdyBgdGNwX2JwZl9zZW5kbXNnYCBpcyBhc3NpZ25lZCB0byBgcHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnYCwgc28gaXQgKnNob3VsZCogaGF2ZSBhbiBhZGRyZXNzLgoKVGhhdCBzYWlkLCBJIHdvbmRlciBhYm91dCBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBzcGFjZS4gTm93LCB3aGF0IGFib3V0IGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYD8gSSBuZWVkIHRvIGNoZWNrIHRob3NlIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfc2VuZG1zZ3xtcHRjcF9yZWN2bXNnfG1wdGNwX3NwbGljZV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MTI2MT1tcHRjcF9jYXJ2ZV9kYXRhX2ZyYWcoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTI3OC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEyNzk6c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMjgwLVx0aW50IG1zc19ub3c7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTM3ND1zdGF0aWMgdm9pZCBtcHRjcF91cGRhdGVfaW5maW5pdGVfbWFwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTM5NC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzOTU6c3RhdGljIGludCBtcHRjcF9zZW5kbXNnX2ZyYWcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTM5Ni1cdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzOTc6XHRcdFx0ICAgICAgc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyAqaW5mbylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzOTgte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MzMtXHRcdG1wdGNwX3VwZGF0ZV9pbmZpbml0ZV9tYXAobXNrLCBzc2ssIG1wZXh0KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE1MzQ6XHR0cmFjZV9tcHRjcF9zZW5kbXNnX2ZyYWcobXBleHQpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTUzNS1cdG1wdGNwX3N1YmZsb3dfY3R4KHNzayktXHUwMDNlcmVsX3dyaXRlX3NlcSAmIzQzOz0gY29weTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNTg3PXN0cnVjdCBzb2NrICptcHRjcF9zdWJmbG93X2dldF9zZW5kKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY2Mi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE2NjM6c3RhdGljIHZvaWQgbXB0Y3BfcHVzaF9yZWxlYXNlKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gKmluZm8pXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjY0LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNzA1PXN0YXRpYyBpbnQgX19zdWJmbG93X3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNzA2Olx0XHRcdFx0ICBzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvICppbmZvKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTcwNy17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTcxOC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE3MTk6XHRcdFx0cmV0ID0gbXB0Y3Bfc2VuZG1zZ19mcmFnKHNrLCBzc2ssIGRmcmFnLCBpbmZvKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE3MjAtXHRcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNzQ5PXZvaWQgX19tcHRjcF9wdXNoX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTc1Mi1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNzUzOlx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0ge1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTc1NC1cdFx0XHRcdC5mbGFncyA9IGZsYWdzLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE4MTc9c3RhdGljIHZvaWQgX19tcHRjcF9zdWJmbG93X3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgZmlyc3QpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTgxOS1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxODIwOlx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0ge1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTgyMS1cdFx0LmRhdGFfbG9ja19oZWxkID0gdHJ1ZSxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xODg0PXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODg1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTg4NjpzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2dfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODg3LVx0XHRcdFx0ICBzaXplX3QgbGVuLCBpbnQgKmNvcGllZF9zeW4pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTk4MD1zdGF0aWMgdm9pZCBtcHRjcF9ycHNfcmVjb3JkX3N1YmZsb3dzKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTk5My1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE5OTQ6c3RhdGljIGludCBtcHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTk5NS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjAxMy1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIwMTQ6XHRcdHJldCA9IG1wdGNwX3NlbmRtc2dfZmFzdG9wZW4oc2ssIG1zZywgbGVuLCBcdTAwMjZjb3BpZWRfc3luKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIwMTUtXHRcdGNvcGllZCAmIzQzOz0gY29waWVkX3N5bjtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMTM2PXN0YXRpYyB2b2lkIG1wdGNwX2VhdF9yZWN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjE0Ni1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxNDc6c3RhdGljIGludCBfX21wdGNwX3JlY3Ztc2dfbXNrcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDgtXHRcdFx0XHRzaXplX3QgbGVuLCBpbnQgZmxhZ3MsIGludCBjb3BpZWRfdG90YWwsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjM1Mz1zdGF0aWMgdW5zaWduZWQgaW50IG1wdGNwX2lucV9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzczLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjM3NDpzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzc1LVx0XHRcdCBpbnQgZmxhZ3MpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQwNi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI0MDc6XHRcdGJ5dGVzX3JlYWQgPSBfX21wdGNwX3JlY3Ztc2dfbXNrcShzaywgbXNnLCBsZW4gLSBjb3BpZWQsIGZsYWdzLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQwOC1cdFx0XHRcdFx0XHQgIGNvcGllZCwgXHUwMDI2dHNzLCBcdTAwMjZjbXNnX2ZsYWdzLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4NTg9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NjAte1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg2MTpcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NjItXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4OTctXHRcdFx0d2hpbGUgKGluZm8uc2VudCBcdTAwM2MgaW5mby5saW1pdCkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg5ODpcdFx0XHRcdHJldCA9IG1wdGNwX3NlbmRtc2dfZnJhZyhzaywgc3NrLCBkZnJhZywgXHUwMDI2aW5mbyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk5LVx0XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDIxMD1zdGF0aWMgc3RydWN0IHByb3RvIG1wdGNwX3Byb3QgPSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIyMC1cdC5kZXN0cm95XHQ9IG1wdGNwX2Rlc3Ryb3ksXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjIxOlx0LnNlbmRtc2dcdD0gbXB0Y3Bfc2VuZG1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMjItXHQuaW9jdGxcdFx0PSBtcHRjcF9pb2N0bCxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQyMjM6XHQucmVjdm1zZ1x0PSBtcHRjcF9yZWN2bXNnLFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIyNC1cdC5yZWxlYXNlX2NiXHQ9IG1wdGNwX3JlbGVhc2VfY2IsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDU5Mj1zdGF0aWMgaW50IG1wdGNwX3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ1OTctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0NTk4OnN0YXRpYyBpbnQgX19tcHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc3BsaWNlX3N0YXRlICp0c3MpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTk5LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NjA5LS8qKlxubmV0L21wdGNwL3Byb3RvY29sLmM6NDYxMDogKiAgbXB0Y3Bfc3BsaWNlX3JlYWQgLSBzcGxpY2UgZGF0YSBmcm9tIE1QVENQIHNvY2tldCB0byBhIHBpcGVcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2MTEtICogQHNvY2s6XHRzb2NrZXQgdG8gc3BsaWNlIGZyb21cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NjIzLSAqKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2MjQ6c3RhdGljIHNzaXplX3QgbXB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDYyNS1cdFx0XHRcdCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NDktXHR3aGlsZSAodHNzLmxlbikge1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDY1MDpcdFx0cmV0ID0gX19tcHRjcF9zcGxpY2VfcmVhZChzaywgXHUwMDI2dHNzKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NTEtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00Njc1LVx0XHRcdH1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2NzY6XHRcdFx0LyogaWYgX19tcHRjcF9zcGxpY2VfcmVhZCgpIGdvdCBub3RoaW5nIHdoaWxlIHdlIGhhdmVcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NzctXHRcdFx0ICogYW4gc2tiIGluIHJlY2VpdmUgcXVldWUsIHdlIGRvIG5vdCB3YW50IHRvIGxvb3AuXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDcxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtcHRjcF9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ3MzEtXHQucmVhZF9zb2NrXHQgICA9IG1wdGNwX3JlYWRfc29jayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ3MzI6XHQuc3BsaWNlX3JlYWRcdCAgID0gbXB0Y3Bfc3BsaWNlX3JlYWQsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NzMzLX07XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDgyMD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtcHRjcF92Nl9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ4NDMtXHQucmVhZF9zb2NrXHQgICA9IG1wdGNwX3JlYWRfc29jayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ4NDQ6XHQuc3BsaWNlX3JlYWRcdCAgID0gbXB0Y3Bfc3BsaWNlX3JlYWQsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00ODQ1LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBzY29wZSBhbmQgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBicm9hZGx5IGFjY2Vzc2libGUgb3IgcmVzdHJpY3RlZCB0byBzcGVjaWZpYyBjb250ZXh0cy4gVGhlIGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIGhlbHBmdWwsIGJ1dCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgY29kZSBpdHNlbGYsIHN0YXJ0aW5nIHdpdGggYG5ldC9jb3JlL3N0cmVhbS5jYCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIHVuZGVyc3RhbmRpbmcgaXRzIHByZXZhbGVuY2UuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYGludCBza19zdHJlYW1fd2FpdF9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lb19wKWAgYW5kIHRoZW4gZGV0ZXJtaW5lLCBiYXNlZCBvbiBpdHMgY2hhcmFjdGVyaXN0aWNzLCB3aGV0aGVyIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBhY3RpdmVseSB1c2VkIHRocm91Z2hvdXQgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIHdpbGwgZ3VpZGUgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2lnbmlmaWNhbmNlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgc2tfc3RyZWFtX3dhaXRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc3RyZWFtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc3RyZWFtLmM9MTAwPXZvaWQgc2tfc3RyZWFtX3dhaXRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4tLVxubmV0L2NvcmUvc3RyZWFtLmMtMTIwLSAqL1xubmV0L2NvcmUvc3RyZWFtLmM6MTIxOmludCBza19zdHJlYW1fd2FpdF9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lb19wKVxubmV0L2NvcmUvc3RyZWFtLmMtMTIyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNzgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YC4uLiB3aGF0JiMzOTtzIGNhbGxpbmcgKnRoYXQqPywmIzM0OyB3aGljaCwgaW4gdGhpcyBjb250ZXh0LCB0cmFuc2xhdGVzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbiBhbmQgZmlndXJlIG91dCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgYmVpbmcgY2FsbGVkIGJ5IHRoZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIHBlcmhhcHMgYSB1c2VyLXNwYWNlIGRyaXZlciwgb3Igc29tZXdoZXJlIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIGFib3V0IGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIElzIGl0IHBhcnQgb2YgdGhlIGRhdGEgZmxvdyBwYXRoPyBJcyBpdCBpbnZvbHZlZCBpbiBlcnJvciBoYW5kbGluZz8gSSBuZWVkIHRoZSBiaWcgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUga2V5IGNhbGwgc2l0ZXMgYW5kIHRoZW4gaW1tZWRpYXRlbHkgY29uc2lkZXIgaG93IHRoZSBzeXN0ZW0gZGVzaWduIGxlYWRzIHRoZSBwcm9ncmFtIHRvIHRoYXQgcG9pbnQgb2YgZXhlY3V0aW9uLiBUaGVuIEkmIzM5O2xsIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGJlaGF2aW5nIGluIGEgd2F5IHRoYXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3N0cmVhbV93YWl0X21lbW9yeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jPTE0MT1zbWJfc2VuZF9rdmVjKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IG1zZ2hkciAqc21iX21zZyxcbi0tXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTE3NC1cdFx0ICogRXZlbiBpZiByZWd1bGFyIHNpZ25hbHMgYXJlIG1hc2tlZCwgRUlOVFIgbWlnaHQgYmVcbmZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM6MTc1Olx0XHQgKiBwcm9wYWdhdGVkIGZyb20gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KCkgdG8gaGVyZSB3aGVuXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jLTE3Ni1cdFx0ICogVElGX05PVElGWV9TSUdOQUwgaXMgdXNlZCBmb3IgdGFzayB3b3JrLiBGb3IgZXhhbXBsZSxcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MTI0MD1pbnQgc2tfc3RyZWFtX3dhaXRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApO1xuaW5jbHVkZS9uZXQvc29jay5oOjEyNDE6aW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApO1xuaW5jbHVkZS9uZXQvc29jay5oLTEyNDItdm9pZCBza19zdHJlYW1fd2FpdF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW9fcCk7XG4tLVxubmV0L2NvcmUvc3RyZWFtLmM9MTAwPXZvaWQgc2tfc3RyZWFtX3dhaXRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4tLVxubmV0L2NvcmUvc3RyZWFtLmMtMTE2LS8qKlxubmV0L2NvcmUvc3RyZWFtLmM6MTE3OiAqIHNrX3N0cmVhbV93YWl0X21lbW9yeSAtIFdhaXQgZm9yIG1vcmUgbWVtb3J5IGZvciBhIHNvY2tldFxubmV0L2NvcmUvc3RyZWFtLmMtMTE4LSAqIEBzazogc29ja2V0IHRvIHdhaXQgZm9yIG1lbW9yeVxuLS1cbm5ldC9jb3JlL3N0cmVhbS5jLTEyMC0gKi9cbm5ldC9jb3JlL3N0cmVhbS5jOjEyMTppbnQgc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW9fcClcbm5ldC9jb3JlL3N0cmVhbS5jLTEyMi17XG4tLVxubmV0L2NvcmUvc3RyZWFtLmMtMTg2LX1cbm5ldC9jb3JlL3N0cmVhbS5jOjE4NzpFWFBPUlRfU1lNQk9MKHNrX3N0cmVhbV93YWl0X21lbW9yeSk7XG5uZXQvY29yZS9zdHJlYW0uYy0xODgtXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDA0LVxubmV0L2lwdjQvdGNwLmM6MTQwNTpcdFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcdTAwMjZ0aW1lbyk7XG5uZXQvaXB2NC90Y3AuYy0xNDA2LVx0XHRpZiAoZXJyICE9IDApXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTUzND1zdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTYwNS13YWl0X2Zvcl9tZW1vcnk6XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjA2Olx0XHRlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssIFx1MDAyNnRpbWVvKTtcbm5ldC9pcHY0L3RjcF9icGYuYy02MDctXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mjk3Mj1zdGF0aWMgYm9vbCB0Y3Bfd3JpdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LCBpbnQgbm9uYWdsZSxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzA2Mi1cdFx0LyogQXJnaCwgd2UgaGl0IGFuIGVtcHR5IHNrYigpLCBwcmVzdW1hYmx5IGEgdGhyZWFkXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzA2MzpcdFx0ICogaXMgc2xlZXBpbmcgaW4gc2VuZG1zZygpL3NrX3N0cmVhbV93YWl0X21lbW9yeSgpLlxubmV0L2lwdjQvdGNwX291dHB1dC5jLTMwNjQtXHRcdCAqIFdlIGRvIG5vdCB3YW50IHRvIHNlbmQgYSBwdXJlLWFjayBwYWNrZXQgYW5kIGhhdmVcbi0tXG5uZXQva2NtL2tjbXNvY2suYz03NTI9c3RhdGljIGludCBrY21fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2tjbS9rY21zb2NrLmMtNzgyLVx0XHRzZXRfYml0KFNPQ0tfTk9TUEFDRSwgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbm5ldC9rY20va2Ntc29jay5jOjc4MzpcdFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcdTAwMjZ0aW1lbyk7XG5uZXQva2NtL2tjbXNvY2suYy03ODQtXHRcdGlmIChlcnIpXG4tLVxubmV0L2tjbS9rY21zb2NrLmMtNzkyLVx0XHRcdGtjbV9wdXNoKGtjbSk7XG5uZXQva2NtL2tjbXNvY2suYzo3OTM6XHRcdFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcdTAwMjZ0aW1lbyk7XG5uZXQva2NtL2tjbXNvY2suYy03OTQtXHRcdFx0aWYgKGVycilcbi0tXG5uZXQva2NtL2tjbXNvY2suYy04OTMtXHRcdGtjbV9wdXNoKGtjbSk7XG5uZXQva2NtL2tjbXNvY2suYzo4OTQ6XHRcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xubmV0L2tjbS9rY21zb2NrLmMtODk1LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE5OTQ9c3RhdGljIGludCBtcHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxMDUtXHRcdF9fbXB0Y3BfcHVzaF9wZW5kaW5nKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxMDY6XHRcdHJldCA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjEwNy1cdFx0aWYgKHJldClcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz0xNTYwPXN0YXRpYyBpbnQgc2N0cF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncywgaW50IGVycilcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy0xNTg5LSAqL1xubmV0L3NjdHAvc29ja2V0LmM6MTU5MDovKiBCVUc6ICBXZSBkbyBub3QgaW1wbGVtZW50IHRoZSBlcXVpdmFsZW50IG9mIHNrX3N0cmVhbV93YWl0X21lbW9yeSgpLiAqL1xubmV0L3NjdHAvc29ja2V0LmMtMTU5MS1cbi0tXG5uZXQvc21jL3NtY190eC5jPTc3PXN0YXRpYyBpbnQgc21jX3R4X3dhaXQoc3RydWN0IHNtY19zb2NrICpzbWMsIGludCBmbGFncylcbi0tXG5uZXQvc21jL3NtY190eC5jLTg0LVxubmV0L3NtYy9zbWNfdHguYzo4NTpcdC8qIHNpbWlsYXIgdG8gc2tfc3RyZWFtX3dhaXRfbWVtb3J5ICovXG5uZXQvc21jL3NtY190eC5jLTg2LVx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjktXHRcdGlmICh1bmxpa2VseShyYykpIHtcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ3MDpcdFx0XHRyYyA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtNDcxLVx0XHRcdGlmICghcmMpXG4tLVxubmV0L3Rscy90bHNfc3cuYz03NjY9c3RhdGljIGludCB0bHNfc3dfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L3Rscy90bHNfc3cuYy05NzAtd2FpdF9mb3JfbWVtb3J5OlxubmV0L3Rscy90bHNfc3cuYzo5NzE6XHRcdHJldCA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xubmV0L3Rscy90bHNfc3cuYy05NzItXHRcdGlmIChyZXQpIHtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTMwNz1zdGF0aWMgaW50IGVzcGludGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMzQ2LVxubmV0L3hmcm0vZXNwaW50Y3AuYzozNDc6XHRcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xubmV0L3hmcm0vZXNwaW50Y3AuYy0zNDgtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjYyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2NvbmZpZyBFeHBsb3JhdGlvbiBmb3IgTmV0d29yayBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGVzZSBjb2RlIHBhdGhzLiBGaXJzdCB1cCwgYG5ldC9pcHY0L3RjcC5jYC4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgaXQgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgYENPTkZJR19JTkVUYC4gTm93LCBgbmV0L2NvcmUvc3RyZWFtLmNgIOKAkyB0aGF0IG9uZSYjMzk7cyB1c3VhbGx5IGJha2VkIGluOyBpdCYjMzk7cyBlaXRoZXIgYWx3YXlzIGJ1aWx0IG9yIHRpZWQgdG8gYENPTkZJR19ORVRgLiBCdXQgdGhhdCB0aGlyZCBmaWxlLCBgbmV0L2lwdjQvdGNwX2JwZi5jYCwgdGhhdCBvbmUgcmVxdWlyZXMgYSBjbG9zZXIgbG9vay4gSSBiZXR0ZXIgb3BlbiB1cCBpdHMgTWFrZWZpbGUgdG8gY29uZmlybSB0aG9zZSBkZXRhaWxzIGFuZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NjI9b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSAmIzQzOz0gdGNwX2lsbGlub2lzLm9cbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSB0Y3BfYnBmLm9cbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHVkcF9icGYub1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4NTUtXG5uZXQvaXB2NC90Y3AuYzo0ODU2OmJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxubmV0L2lwdjQvdGNwLmMtNDg1Ny17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTMzPXN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtOTAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6OTE6c3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcbm5ldC9pcHY0L3RjcF9icGYuYy05Mi1cdFx0XHRpbnQgZmxhZ3MsIGJvb2wgdW5jaGFyZ2UpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE1Mi1cbm5ldC9pcHY0L3RjcF9icGYuYzoxNTM6c3RhdGljIGludCB0Y3BfYnBmX3B1c2hfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE1NC1cdFx0XHQgICAgICAgdTMyIGFwcGx5X2J5dGVzLCBpbnQgZmxhZ3MsIGJvb2wgdW5jaGFyZ2UpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE1OC1cdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTU5Olx0cmV0ID0gdGNwX2JwZl9wdXNoKHNrLCBtc2csIGFwcGx5X2J5dGVzLCBmbGFncywgdW5jaGFyZ2UpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTE2MC1cdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE2My1cbm5ldC9pcHY0L3RjcF9icGYuYzoxNjQ6aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjUtXHRcdFx0ICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcywgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xNzMtXHRyZXQgPSBpbmdyZXNzID8gYnBmX3RjcF9pbmdyZXNzKHNrLCBwc29jaywgbXNnLCBieXRlcykgOlxubmV0L2lwdjQvdGNwX2JwZi5jOjE3NDpcdFx0XHR0Y3BfYnBmX3B1c2hfbG9ja2VkKHNrLCBtc2csIGJ5dGVzLCBmbGFncywgZmFsc2UpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTE3NS1cdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xNzctfVxubmV0L2lwdjQvdGNwX2JwZi5jOjE3ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTE3OS1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIyLVx0XHRcdFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTMzNC1cbm5ldC9pcHY0L3RjcF9icGYuYzozMzU6c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxubmV0L2lwdjQvdGNwX2JwZi5jLTMzNi17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTM2Ny1cbm5ldC9pcHY0L3RjcF9icGYuYzozNjg6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY5LVx0XHRcdCAgIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDE3LVxubmV0L2lwdjQvdGNwX2JwZi5jOjQxODpzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbm5ldC9pcHY0L3RjcF9icGYuYy00MTktXHRcdFx0XHRzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTQ2MS1cdGNhc2UgX19TS19QQVNTOlxubmV0L2lwdjQvdGNwX2JwZi5jOjQ2MjpcdFx0cmV0ID0gdGNwX2JwZl9wdXNoKHNrLCBtc2csIHRvc2VuZCwgZmxhZ3MsIHRydWUpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTQ2My1cdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg2LVx0XHRvcmlnc2l6ZSA9IG1zZy1cdTAwM2VzZy5zaXplO1xubmV0L2lwdjQvdGNwX2JwZi5jOjQ4NzpcdFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ4OC1cdFx0XHRcdFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTUzMy1cbm5ldC9pcHY0L3RjcF9icGYuYzo1MzQ6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2lwdjQvdGNwX2JwZi5jLTUzNS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTU5OC1cbm5ldC9pcHY0L3RjcF9icGYuYzo1OTk6XHRcdGVyciA9IHRjcF9icGZfc2VuZF92ZXJkaWN0KHNrLCBwc29jaywgbXNnX3R4LCBcdTAwMjZjb3BpZWQsIGZsYWdzKTtcbm5ldC9pcHY0L3RjcF9icGYuYy02MDAtXHRcdGlmICh1bmxpa2VseShlcnIgXHUwMDNjIDApKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz02MzY9c3RhdGljIERFRklORV9TUElOTE9DSyh0Y3B2Nl9wcm90X2xvY2spO1xubmV0L2lwdjQvdGNwX2JwZi5jOjYzNzpzdGF0aWMgc3RydWN0IHByb3RvIHRjcF9icGZfcHJvdHNbVENQX0JQRl9OVU1fUFJPVFNdW1RDUF9CUEZfTlVNX0NGR1NdO1xubmV0L2lwdjQvdGNwX2JwZi5jLTYzOC1cbm5ldC9pcHY0L3RjcF9icGYuYzo2Mzk6c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcbm5ldC9pcHY0L3RjcF9icGYuYy02NDAtXHRcdFx0XHQgICBzdHJ1Y3QgcHJvdG8gKmJhc2UpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY0NC1cdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVx0XHQ9IHNvY2tfbWFwX2Nsb3NlO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY0NTpcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY0Ni1cdHByb3RbVENQX0JQRl9CQVNFXS5zb2NrX2lzX3JlYWRhYmxlXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NDc6XHRwcm90W1RDUF9CUEZfQkFTRV0uaW9jdGxcdFx0PSB0Y3BfYnBmX2lvY3RsO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY0OC1cbm5ldC9pcHY0L3RjcF9icGYuYy02NDktXHRwcm90W1RDUF9CUEZfVFhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUwOlx0cHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnXHRcdD0gdGNwX2JwZl9zZW5kbXNnO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1MS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NTItXHRwcm90W1RDUF9CUEZfUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUzOlx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02NTQtXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU1LVx0cHJvdFtUQ1BfQlBGX1RYUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfVFhdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY1NjpcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02NTctfVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OC1cbm5ldC9pcHY0L3RjcF9icGYuYzo2NTk6c3RhdGljIHZvaWQgdGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHN0cnVjdCBwcm90byAqb3BzKVxubmV0L2lwdjQvdGNwX2JwZi5jLTY2MC17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY2My1cdFx0aWYgKGxpa2VseShvcHMgIT0gdGNwdjZfcHJvdF9zYXZlZCkpIHtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NjQ6XHRcdFx0dGNwX2JwZl9yZWJ1aWxkX3Byb3Rvcyh0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfSVBWNl0sIG9wcyk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjY1LVx0XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnRjcHY2X3Byb3Rfc2F2ZWQsIG9wcyk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY3MC1cbm5ldC9pcHY0L3RjcF9icGYuYzo2NzE6c3RhdGljIGludCBfX2luaXQgdGNwX2JwZl92NF9idWlsZF9wcm90byh2b2lkKVxubmV0L2lwdjQvdGNwX2JwZi5jLTY3Mi17XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjczOlx0dGNwX2JwZl9yZWJ1aWxkX3Byb3Rvcyh0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfSVBWNF0sIFx1MDAyNnRjcF9wcm90KTtcbm5ldC9pcHY0L3RjcF9icGYuYy02NzQtXHRyZXR1cm4gMDtcbm5ldC9pcHY0L3RjcF9icGYuYy02NzUtfVxubmV0L2lwdjQvdGNwX2JwZi5jOjY3NjpsYXRlX2luaXRjYWxsKHRjcF9icGZfdjRfYnVpbGRfcHJvdG8pO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY3Ny1cbm5ldC9pcHY0L3RjcF9icGYuYzo2Nzg6c3RhdGljIGludCB0Y3BfYnBmX2Fzc2VydF9wcm90b19vcHMoc3RydWN0IHByb3RvICpvcHMpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc5LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg4LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbm5ldC9pcHY0L3RjcF9icGYuYzo2ODk6aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVx0XHRcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03MTItXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzEzOlx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cbm5ldC9pcHY0L3RjcF9icGYuYy03MTQtXHQgKi9cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzIzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjcyNDppbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzI1LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUwLVx0aWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xubmV0L2lwdjQvdGNwX2JwZi5jOjc1MTpcdFx0aWYgKHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhwc29jay1cdTAwM2Vza19wcm90bykpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2lwdjQvdGNwX2JwZi5jLTc1My1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTQ6XHRcdHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cdTAwM2Vza19wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU1LVx0fVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NTctXHQvKiBQYWlycyB3aXRoIGxvY2tsZXNzIHJlYWQgaW4gc2tfY2xvbmVfbG9jaygpICovXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzU4Olx0c29ja19yZXBsYWNlX3Byb3RvKHNrLCBcdTAwMjZ0Y3BfYnBmX3Byb3RzW2ZhbWlseV1bY29uZmlnXSk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU5LVx0cmV0dXJuIDA7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYwLX1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NjE6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl91cGRhdGVfcHJvdG8pO1xubmV0L2lwdjQvdGNwX2JwZi5jLTc2Mi1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NjM6LyogSWYgYSBjaGlsZCBnb3QgY2xvbmVkIGZyb20gYSBsaXN0ZW5pbmcgc29ja2V0IHRoYXQgaGFkIHRjcF9icGZcbm5ldC9pcHY0L3RjcF9icGYuYy03NjQtICogcHJvdG9jb2wgY2FsbGJhY2tzIGluc3RhbGxlZCwgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBjYWxsYmFja3MgdG9cbm5ldC9pcHY0L3RjcF9icGYuYy03NjUtICogdGhlIGRlZmF1bHQgb25lcyBiZWNhdXNlIHRoZSBjaGlsZCBkb2VzIG5vdCBpbmhlcml0IHRoZSBwc29jayBzdGF0ZVxubmV0L2lwdjQvdGNwX2JwZi5jOjc2NjogKiB0aGF0IHRjcF9icGYgY2FsbGJhY2tzIGV4cGVjdC5cbm5ldC9pcHY0L3RjcF9icGYuYy03NjctICovXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzY4OnZvaWQgdGNwX2JwZl9jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcbm5ldC9pcHY0L3RjcF9icGYuYy03Njkte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NzEtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzcyOlx0aWYgKGlzX2luc2lkZXZhcihwcm90LCB0Y3BfYnBmX3Byb3RzKSlcbm5ldC9pcHY0L3RjcF9icGYuYy03NzMtXHRcdG5ld3NrLVx1MDAzZXNrX3Byb3QgPSBzay1cdTAwM2Vza19wcm90X2NyZWF0b3I7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MTA3MD1zdGF0aWMgdm9pZCB0Y3BfcnR0X2VzdGltYXRvcihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgbXJ0dF91cylcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMTIyLVxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTEyMzpcdFx0XHR0Y3BfYnBmX3J0dChzaywgbXJ0dF91cywgc3J0dCk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMTI0LVx0XHR9XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEzMi1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjExMzM6XHRcdHRjcF9icGZfcnR0KHNrLCBtcnR0X3VzLCBzcnR0KTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTExMzQtXHR9XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzQ1ND1zdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDg0LVx0ICAgIChlY25fb2tfZHN0IFx1MDAyNiBEU1RfRkVBVFVSRV9FQ05fQ0EpIHx8XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDg1Olx0ICAgIHRjcF9icGZfY2FfbmVlZHNfZWNuKChzdHJ1Y3Qgc29jayAqKXJlcSkpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDg2LVx0XHRpbmV0X3JzayhyZXEpLVx1MDAzZWVjbl9vayA9IDE7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xMTYyPXN0YXRpYyBpbnQgdGNwX3Y0X3NlbmRfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTE5MS1cdFx0aWYgKCFJTkVUX0VDTl9pc19jYXBhYmxlKHRvcykgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjExOTI6XHRcdCAgICB0Y3BfYnBmX2NhX25lZWRzX2Vjbigoc3RydWN0IHNvY2sgKilyZXEpKVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTkzLVx0XHRcdHRvcyB8PSBJTkVUX0VDTl9FQ1RfMDtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTMzNDc9c3RydWN0IHByb3RvIHRjcF9wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM2MC1cdC5nZXRzb2Nrb3B0XHRcdD0gdGNwX2dldHNvY2tvcHQsXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjMzNjE6XHQuYnBmX2J5cGFzc19nZXRzb2Nrb3B0XHQ9IHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQsXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNjItXHQua2VlcGFsaXZlXHRcdD0gdGNwX3NldF9rZWVwYWxpdmUsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzcyLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM3MzpcdC5wc29ja191cGRhdGVfc2tfcHJvdFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3NC0jZW5kaWZcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02NjMtXHRuZXd0cC1cdTAwM2VicGZfY2hnX2NjX2lucHJvZ3Jlc3MgPSAwO1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjY2NDpcdHRjcF9icGZfY2xvbmUoc2ssIG5ld3NrKTtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzk3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIEtjb25maWcgZm9yIFNvY2tldCBhbmQgTVBUQ1AgU3VwcG9ydCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIG15IGN1cnJlbnQgcHJvamVjdCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBuZXR3b3JrIHNvY2tldHMgYW5kIE1QVENQLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEtjb25maWcuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgZW5hYmxlZCBvciBhdCBsZWFzdCBjb25maWd1cmFibGUuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBgTkVUX1NPQ0tfTVNHYCBpcyBhdmFpbGFibGUuIFRoYXQmIzM5O3MgYSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2ssIHNvIGl04oCZcyB0aGUgaW1tZWRpYXRlIHByaW9yaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIFdoZXJlIGlzIGl0IGRlZmluZWQsIHdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFRoZW4sIG9mIGNvdXJzZSwgTVBUQ1AuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBNUFRDUCBpcyBlbmFibGVkLCBhbmQgaWYgc28sIGhvdy4gQXJlIHRoZXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMga2VybmVsIGZlYXR1cmVzPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgZ2VuZXJhbCBzZWFyY2ggYW5kIHRoZW4gZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3MuIFRoaXMgaXMgYWxsIGFib3V0IHZlcmlmeWluZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQmIzM5O3MgY2FwYWJpbGl0aWVzIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgd3JpdGluZyBhIGxpbmUgb2YgY29kZS4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IGNoYXNpbmcgZ2hvc3RzISBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIHdhc3RlIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXG4tLVxubmV0L0tjb25maWctNDc4LVxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTQ4MC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBORVRfU09DS19NU0cgU2VsZWN0b3IqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBzdHJhaWdodGZvcndhcmQ6ICYjMzQ7TGV0JiMzOTtzIGlzb2xhdGUgd2hhdCYjMzk7cyBhY3R1YWxseSB1c2luZyB0aGUgYE5FVF9TT0NLX01TR2Agc2VsZWN0b3IuJiMzNDsgVGhpcyBwcm9iYWJseSBtZWFucyBJJiMzOTttIGluIHRoZSBtaWRkbGUgb2YgZGVidWdnaW5nIGEgbmV0d29ya2luZyBvciBzb2NrZXQtcmVsYXRlZCBpc3N1ZS4gVGhpcyBzZWxlY3RvciBpcyBhIGtleSBzaWduYWwgaW4gdGhlIHN5c3RlbSwgYW5kIGl0IGNvdWxkIGJlIGluZGljYXRpbmcgYW55IG51bWJlciBvZiB0aGluZ3MsIGZyb20gbmV3IGRhdGEgYXJyaXZpbmcgb24gYSBzb2NrZXQgdG8gdGhlIHNvY2tldCBzdGF0ZSBjaGFuZ2luZy4gCgpNeSBuZXh0IHN0ZXBzIHdpbGwgZGVwZW5kIG9uIHRoZSBjb250ZXh0LCBvZiBjb3Vyc2UsIGJ1dCB0aGUgY29yZSBvYmplY3RpdmUgcmVtYWlucyB0aGUgc2FtZTogSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBjb2RlIHBhdGhzIHRoYXQgYXJlIHJlZ2lzdGVyaW5nLCB1c2luZywgb3IgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50LiBJJiMzOTtsbCBsaWtlbHkgYmUgdHJhY2luZyBmdW5jdGlvbiBjYWxscywgZXhhbWluaW5nIGtlcm5lbCBtb2R1bGVzIChpZiBhcHBsaWNhYmxlKSwgYW5kIHBvc3NpYmx5IGFuYWx5emluZyBwYWNrZXQgY2FwdHVyZXMgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgYXJvdW5kIHRoZSBgTkVUX1NPQ0tfTVNHYCBldmVudHMuIEkgbWlnaHQgYmUgbG9va2luZyBmb3IgcmFjZSBjb25kaXRpb25zLCByZXNvdXJjZSBsZWFrcywgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgc29ja2V0LXVzaW5nIGNvbXBvbmVudHMuIEkgbWlnaHQgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBleHBvc2VkIGJ5IHRoaXMgc2VsZWN0b3IuIFRoZSBnb2FsIGhlcmUgaXMgZWZmaWNpZW50LCB0YXJnZXRlZCBkaWFnbm9zdGljcywgbGV2ZXJhZ2luZyBteSBleHBlcnRpc2UgdG8gcXVpY2tseSBuYXJyb3cgZG93biB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE5FVF9TT0NLX01TRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTMzLVx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbmtlcm5lbC9icGYvS2NvbmZpZzozNDpcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbi0tXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4tLVxubmV0L0tjb25maWctMzY2LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnOjM2NzpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTM2OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg1LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY0L0tjb25maWc6Mzg2Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZy0zODctXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05My1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2Ni9LY29uZmlnOjk0Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZy05NS1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE9fR0NNXG5uZXQvdGxzL0tjb25maWc6MTE6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvdGxzL0tjb25maWctMTItXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4NDMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBCUEYgYW5kIE1QVENQIENvbXBhdGliaWxpdHkqKgoKT2theSwgc28gYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBORVRfU09DS19NU0dgIHdoZW4gYE5FVGAgaXMgc2VsZWN0ZWQuIEJ1dCwgSSBuZWVkIHRvIGNvbnNpZGVyIE1QVENQIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmZWF0dXJlcyBpbnRlcmFjdC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyBNUFRDUCBpcyBjb25maWd1cmVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgYEJQRl9TWVNDQUxMYCBpbnRlcmFjdHMgd2l0aCBpdC4gVGhpcyBpcyBhIGNyaXRpY2FsIGNoZWNrIHRvIGVuc3VyZSB0aGUgZmVhdHVyZSBzZXQgSSYjMzk7bSB3b3JraW5nIHdpdGggaXMgY29uc2lzdGVudCBhbmQgY29tcGF0aWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnLTEtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxubmV0L21wdGNwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWctMTktXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxubmV0L21wdGNwL0tjb25maWctMjEtXHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjY2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gdGhlIE11bHRpcGF0aCBUQ1AgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBpbnN0cnVjdGlvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBNUFRDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBzcGVjaWZpYyBmaWxlIHRvIGV4YW1pbmUgaXMgYG5ldC9tcHRjcC9LY29uZmlnYC4gSSBhbHJlYWR5IGtub3cgd2hhdCB0aGlzIGZpbGUgaG91c2VzOiBpdCYjMzk7cyB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIE11bHRpcGF0aCBUQ1AuIE15IGd1ZXNzIGlzLCB0aGUgcHJvdmlkZWQgbGluZXMgKDEtMTUgYXMgcmVxdWVzdGVkKSBjb250YWluIHRoZSBoaWdoLWxldmVsIE1QVENQIGZlYXR1cmVzIGFuZCBtYXliZSBzb21lIGJhc2ljIGRlcGVuZGVuY2llcyBvciBpbnRyb2R1Y3Rpb24gY29tbWVudHMuIFRoYXQgcGFydCBzZWVtcyBjbGVhciBlbm91Z2g7IEkmIzM5O2xsIGV4cGVjdCB0byBmaW5kIGFuIG92ZXJ2aWV3IG9mIHRoZSBtb2R1bGVzJiMzOTsgYXJjaGl0ZWN0dXJlIHRoZXJlLiBUaW1lIHRvIHNlZSB3aGF0IGl0ICphY3R1YWxseSogbG9va3MgbGlrZSB0byBiZSBjZXJ0YWluIG9mIG15IGFzc3VtcHRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0XG4gICAyOlx0Y29uZmlnIE1QVENQXG4gICAzOlx0XHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcbiAgMTA6XHRcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcbiAgMTE6XHRcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxuICAxMjpcdFx0ICBNUFRDUC5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBNUFRDUFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NDkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFN0YWNrIEludGVyYWN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhcmVhLCBsaWtlbHkgcmVsYXRlZCB0byBuZXR3b3JraW5nLCBhbmQgdGhlc2UgdGVybXMga2VlcCBwb3BwaW5nIHVwOiBgSU5FVGAsIGBNUFRDUGAsIGFuZCBgQlBGX1NZU0NBTExgLCBvciBwb3RlbnRpYWxseSBgTkVUX1NPQ0tfTVNHYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGVzZSB0aGluZ3MgaW50ZXJhY3QuIEkgcmVjb2duaXplIHRoZW0gYXMgY29yZSBjb21wb25lbnRzIGFuZCBtZWNoYW5pc21zIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBoaXN0b3J5LCB0aGUgJiMzOTt3aHkmIzM5OyBvZiB0aGUgY29kZSwgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgdGhlIEdpdCBjb21taXQgbG9nIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24uIFRoYXQgbG9nIHNob3VsZCBnaXZlIG1lIHRoZSBoaXN0b3JpY2FsIGNvbnRleHQsIHRoZSBwcm9ibGVtIGJlaW5nIGFkZHJlc3NlZCwgYW5kIHRoZSB0aG91Z2h0IHByb2Nlc3Mgb2YgdGhlIGRldmVsb3BlcnMgaW52b2x2ZWQuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtsbCBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYW5kIGludGVncmF0aW9uIG9mIHRoZXNlIGVsZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxODExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIEVycm9yIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb21taXQgdGhpcyBpcyByZWxhdGVkIHRvLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUga2VybmVsIHNvdXJjZSBsb2dzIHVzaW5nIGEgZ3JlcHBlciBzZWFyY2gsIGJ1dCBncmVwcGVyIGlzIG9uIGtlcm5lbCBzb3VyY2UsIHNvIEkgd2lsbCBzd2l0Y2ggdG8gZ2l0IGxvZyB0byBmaW5kIHRoZSBhc3NvY2lhdGVkIGNvbW1pdC4KCk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIGEgY29kZSByZWZhY3RvciBmb3IgaG93IGBzay0mZ3Q7c2tfZXJyYCBpcyBjaGVja2VkIGFjcm9zcyBzZXZlcmFsIFRDUC1yZWxhdGVkIGZ1bmN0aW9ucy4gIEVzc2VudGlhbGx5LCB0aGUgY2hhbmdlIGludm9sdmVzIHJlcGxhY2luZyBkaXJlY3QgYWNjZXNzIG9mIGBzay0mZ3Q7c2tfZXJyYCB3aXRoIGBSRUFEX09OQ0Uoc2stJmd0O3NrX2VycilgIGluIHNldmVyYWwgY29udGV4dHMgbGlrZSBgdGNwX3JlY3Zfc2hvdWxkX3N0b3BgLCBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCwgYHRjcF9zcGxpY2VfcmVhZGAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBgdGNwX3JlY3Ztc2dfbG9ja2VkYCwgYW5kIHRoZSBgbXB0Y3BgIHNlbmQgYW5kIHJlY3YgcGF0aHMuIEFsc28sIEkgc2VlIGB0Y3BfYnBmX3NlbmRtc2dgIGhhcyBiZWVuIGNoYW5nZWQgd2l0aCBob3cgYHNrLSZndDtza19lcnJgIGlzIGhhbmRsZWQuICAKCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFib3V0IGVuc3VyaW5nIHRoYXQgdGhlIGVycm9yIHN0YXR1cyBvZiBhIHNvY2tldCAoYHNrX2VycmApIGlzIHJlYWQgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIuIGBza19lcnJgIGNhbiBiZSBtb2RpZmllZCBjb25jdXJyZW50bHkgYnkgYHNvY2tfZXJyb3IoKWAsIHNvIGEgcmVndWxhciBsb2FkIGNvdWxkIGJlIHJhY3kuIFVzaW5nIGBSRUFEX09OQ0VgIGVuZm9yY2VzIGEgbWVtb3J5IGJhcnJpZXIsIGd1YXJhbnRlZWluZyB0aGF0IHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBvZiBgc2tfZXJyYCBpcyBvYnNlcnZlZC4gVGhpcyBzaG91bGQgaW1wcm92ZSBkYXRhIGNvbnNpc3RlbmN5LCBlc3BlY2lhbGx5IGluIG11bHRpdGhyZWFkZWQgc2NlbmFyaW9zLCBvciBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIG1lbW9yeSBhY2Nlc3Mgb3JkZXIgaXMgbm90IHN0cmljdC4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBpbXByb3ZlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdFxuIDU0NjpcdFx0cHNvY2sgPSBza19wc29ja19nZXQoc2spO1xuIDU0NzpcdFx0aWYgKHVubGlrZWx5KCFwc29jaykpXG4gNTQ4Olx0XHRcdHJldHVybiB0Y3Bfc2VuZG1zZyhzaywgbXNnLCBzaXplKTtcbiA1NDk6XHRcbiA1NTA6XHRcdGxvY2tfc29jayhzayk7XG4gNTUxOlx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4gNTUyOlx0XHR3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpKSB7XG4gNTUzOlx0XHRcdGJvb2wgZW5vc3BjID0gZmFsc2U7XG4gNTU0Olx0XHRcdHUzMiBjb3B5LCBvc2l6ZTtcbiA1NTU6XHRcbiA1NTY6XHRcdFx0ZXJyID0gLVJFQURfT05DRShzay1cdTAwM2Vza19lcnIpO1xuIDU1NzpcdFx0XHRpZiAoZXJyKVxuIDU1ODpcdFx0XHRcdGdvdG8gb3V0X2VycjtcbiA1NTk6XHRcbiA1NjA6XHRcdFx0Y29weSA9IG1zZ19kYXRhX2xlZnQobXNnKTtcbiA1NjE6XHRcdFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxuIDU2MjpcdFx0XHRcdGdvdG8gd2FpdF9mb3Jfc25kYnVmO1xuIDU2MzpcdFx0XHRpZiAocHNvY2stXHUwMDNlY29yaykge1xuIDU2NDpcdFx0XHRcdG1zZ190eCA9IHBzb2NrLVx1MDAzZWNvcms7XG4gNTY1Olx0XHRcdH0gZWxzZSB7XG4gNTY2Olx0XHRcdFx0bXNnX3R4ID0gXHUwMDI2dG1wO1xuIDU2NzpcdFx0XHRcdHNrX21zZ19pbml0KG1zZ190eCk7XG4gNTY4Olx0XHRcdH1cbiA1Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGB0Y3BfcmVjdm1zZ19sb2NrZWRgKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjc2MC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCB0aGUgZXhhY3QgbG9naWMgYmVpbmcgZXhlY3V0ZWQgaW4gdGhhdCBhcmVhIG9mIHRoZSBmdW5jdGlvbi4gTGV0IG1lIHNlZSB3aGF0IHRoYXQgY2h1bmsgb2YgY29kZSBpcyBkb2luZyAtIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSB0byB0aGUgaXNzdWUgaW4gaG93IHRoZSBkYXRhIGlzIGJlaW5nIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBpcyBhIGJ1ZmZlciBtYW5hZ2VtZW50IHByb2JsZW0sIGEgc3luY2hyb25pemF0aW9uIGlzc3VlLCBhIHNlcXVlbmNpbmcgcHJvYmxlbSwgb3IgbWF5YmUgZXZlbiBzb21ldGhpbmcgc3VidGxlIHJlbGF0ZWQgdG8gZmxhZ3Mgb3IgcHJvdG9jb2wgc3RhdGUuIEtub3dpbmcgdGhhdCBzcGVjaWZpYyBjb2RlIGJsb2NrIHdpbGwgaGVscC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1MDpcdFx0XHQvKiBXZWxsLCBpZiB3ZSBoYXZlIGJhY2tsb2csIHRyeSB0byBwcm9jZXNzIGl0IG5vdyB5ZXQuICovXG4yNzUxOlx0XG4yNzUyOlx0XHRcdGlmIChjb3BpZWQgXHUwMDNlPSB0YXJnZXQgXHUwMDI2XHUwMDI2ICFSRUFEX09OQ0Uoc2stXHUwMDNlc2tfYmFja2xvZy50YWlsKSlcbjI3NTM6XHRcdFx0XHRicmVhaztcbjI3NTQ6XHRcbjI3NTU6XHRcdFx0aWYgKGNvcGllZCkge1xuMjc1NjpcdFx0XHRcdGlmICghdGltZW8gfHxcbjI3NTc6XHRcdFx0XHQgICAgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spKVxuMjc1ODpcdFx0XHRcdFx0YnJlYWs7XG4yNzU5Olx0XHRcdH0gZWxzZSB7XG4yNzYwOlx0XHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbjI3NjE6XHRcdFx0XHRcdGJyZWFrO1xuMjc2MjpcdFxuMjc2MzpcdFx0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuMjc2NDpcdFx0XHRcdFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XG4yNzY1Olx0XHRcdFx0XHRicmVhaztcbjI3NjY6XHRcdFx0XHR9XG4yNzY3Olx0XG4yNzY4Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pXG4yNzY5Olx0XHRcdFx0XHRicmVhaztcbjI3NzA6XHRcbjI3NzE6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XG4yNzcyOlx0XHRcdFx0XHQvKiBUaGlzIG9jY3VycyB3aGVuIHVzZXIgdHJpZXMgdG8gcmVhZFxuMjc3MzpcdFx0XHRcdFx0ICogZnJvbSBuZXZlciBjb25uZWN0ZWQgc29ja2V0LlxuMjc3NDpcdFx0XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTE5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB0Y3Bfc3BsaWNlX3JlYWRgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB0Y3Bfc3BsaWNlX3JlYWRgIOKAkyBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBkYXRhIHRyYW5zZmVyIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIFRDUCBzdGFjay4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBkZWZpbmVkIGluIGBuZXQvaXB2NC90Y3AuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0IG9mIElQdjQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgZGF0YSBpcyBtb3ZlZCBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIHRvIHRoZSBhcHBsaWNhdGlvbiwgaG9wZWZ1bGx5IGJ5cGFzc2luZyB1bm5lY2Vzc2FyeSBjb3B5aW5nIHdoZW5ldmVyIHBvc3NpYmxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBidWZmZXIgbWFuYWdlbWVudCwgbWVtb3J5IG1hcHBpbmcsIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgdGhhdCBsZXZlcmFnZSB0aGUga2VybmVsJiMzOTtzIGFiaWxpdHkgdG8gbWluaW1pemUgZGF0YSBtb3ZlbWVudC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBrZWVwIG15IGV5ZSBvdXQgZm9yIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3BsaWNlIGluZnJhc3RydWN0dXJlLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGlzIHdob2xlIGFwcHJvYWNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzU6XHRcbiA4MzY6XHRcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spO1xuIDgzNzpcdFx0d2hpbGUgKHRzcy5sZW4pIHtcbiA4Mzg6XHRcdFx0cmV0ID0gX190Y3Bfc3BsaWNlX3JlYWQoc2ssIFx1MDAyNnRzcyk7XG4gODM5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gODQwOlx0XHRcdFx0YnJlYWs7XG4gODQxOlx0XHRcdGVsc2UgaWYgKCFyZXQpIHtcbiA4NDI6XHRcdFx0XHRpZiAoc3BsaWNlZClcbiA4NDM6XHRcdFx0XHRcdGJyZWFrO1xuIDg0NDpcdFx0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG4gODQ1Olx0XHRcdFx0XHRicmVhaztcbiA4NDY6XHRcdFx0XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikpIHtcbiA4NDc6XHRcdFx0XHRcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xuIDg0ODpcdFx0XHRcdFx0YnJlYWs7XG4gODQ5Olx0XHRcdFx0fVxuIDg1MDpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKVxuIDg1MTpcdFx0XHRcdFx0YnJlYWs7XG4gODUyOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xuIDg1MzpcdFx0XHRcdFx0LypcbiA4NTQ6XHRcdFx0XHRcdCAqIFRoaXMgb2NjdXJzIHdoZW4gdXNlciB0cmllcyB0byByZWFkXG4gODU1Olx0XHRcdFx0XHQgKiBmcm9tIG5ldmVyIGNvbm5lY3RlZCBzb2NrZXQuXG4gODU2Olx0XHRcdFx0XHQgKi9cbiA4NTc6XHRcdFx0XHRcdHJldCA9IC1FTk9UQ09OTjtcbiA4NTg6XHRcdFx0XHRcdGJyZWFrO1xuIDg1OTpcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3MzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBEZXRlcm1pbmF0aW9uOiBBIFN5c3RlbWF0aWMgUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBlZmZlY3RpdmUgYEZvY3VzU3ltYm9sc2AgdG8gZ3VpZGUgdGhlIGZ1enplciwgc3BlY2lmaWNhbGx5IHRvIHByZXZlbnQgZGlsdXRpb24gb2YgZWZmb3J0LiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHN0aWNraW5nIHRvIHRoZSBndWlkZWxpbmVzIGluIFNlY3Rpb24gNCBvZiB0aGUgZG9jdW1lbnRhdGlvbi4gSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCB0YXJnZXQgc3BlY2lmaWMgbG9naWMgYW5kIGVudHJ5cG9pbnRzLgoKT2theSwgSSYjMzk7dmUgZ290IHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluOiBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCwgYHRjcF9zcGxpY2VfcmVhZGAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBgdGNwX3JlY3Ztc2dfbG9ja2VkYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBgdGNwX2JwZl9zZW5kbXNnYCwgYG1wdGNwX3NlbmRtc2dgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc3BsaWNlX3JlYWRgLiBOb3csIEkgbmVlZCB0byBldmFsdWF0ZSBlYWNoIG9uZSBhZ2FpbnN0IHRob3NlIGNyaXRlcmlhLgoKRmlyc3QsIEkgYW0gY2hlY2tpbmcgd2hldGhlciB0aGUgZnVuY3Rpb25zIGFyZSBzdGF0aWMgb3Igbm90LiBTb21lIGFyZSBzdGF0aWMsIGxpa2UgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGJ1dCBJIGtub3cgaXQmIzM5O3Mgb2Z0ZW4gbm90IGlubGluZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2FsbHMgdGhlbS4gSXQgbG9va3MgbGlrZSBgdGNwX3JlY3Ztc2dgIGNhbGxzIGl0IGFuZCBpdCBpcyBub24tc3RhdGljLiBCZWNhdXNlIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGhhcyBtdWx0aXBsZSBjYWxsZXJzLCBHQ0Mgd2lsbCBsaWtlbHkgbm90IGlubGluZSBpdC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBoYXMgYSBzeW1ib2wuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKTm93LCBjb25zaWRlcmluZyB0aGUgZG9jdW1lbnRhdGlvbiwgSSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgbm90IGluY2x1ZGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgdG9vIGdlbmVyYWwuIFdoaWxlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBhcmUgYXNzb2NpYXRlZCB3aXRoIFRDUCBzb2NrZXRzLCBhbmQgSSBuZWVkIHRvIGF2b2lkIHRoZXNlIGhvdC1wYXRocywgaXQgaXMgb2theSBzaW5jZSBpdCBpcyBhIHNwZWNpZmljIGVudHJ5cG9pbnQgZm9yIFRDUCBzb2NrZXRzIGFuZCBjb250YWlucyB0aGUgYWx0ZXJlZCBsb2dpYy4KClNvLCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbnMgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIGdvb2QgRm9jdXNTeW1ib2xzOiBgdGNwX3NwbGljZV9yZWFkYCwgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAsIGB0Y3BfYnBmX3NlbmRtc2dgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYC4gVGhhdCBsb29rcyBwcmV0dHkgdGFyZ2V0ZWQuCgpJIHN0aWxsIG5lZWQgdG8gYWRkcmVzcyBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAuIFdhaXQgYSBtaW51dGUsIEkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRob3NlIHN5bWJvbHMgZXhpc3QgaW4gdm1saW51eC4KCk9rYXksIGxldCYjMzk7cyBhZGRyZXNzIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLiBJJiMzOTt2ZSBnb3QgYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCwgd2hpY2ggaXMgc3RhdGljIGlubGluZSwgYnV0IGlzIGNhbGxlZCBieSBgdGNwX3NwbGljZV9yZWFkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zcGxpY2VfcmVhZGAsIHdoaWNoIGFyZSBub24tc3RhdGljLgoKRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgcmVsZXZhbnQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgYG5ldC9jb3JlL3N0cmVhbS5jYCwgYG5ldC9pcHY0L3RjcC5jYCwgYG5ldC9pcHY0L3RjcF9icGYuY2AsIGFuZCBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCBhbmQgSSBoYXZlIGlkZW50aWZpZWQgdGhlIHJpZ2h0IGZ1bmN0aW9ucyBmb3IgZWFjaC4KCkkgdGhpbmsgSSYjMzk7dmUgbmFycm93ZWQgaXQgZG93biB0bzogYHNrX3N0cmVhbV93YWl0X21lbW9yeWAsIGB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGB0Y3BfYnBmX3NlbmRtc2dgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYC4KCk5vdywgSSBhbHNvIGhhdmUgdG8gY29uc2lkZXIgdGhlaXIgRW5hYmxlQ29uZmlncy4gRm9yIGBuZXQvaXB2NC90Y3AuY2AgYW5kIGBpbmNsdWRlL25ldC90Y3AuaGAsIGl0JiMzOTtzIGBJTkVUYC4gRm9yIGBuZXQvaXB2NC90Y3BfYnBmLmNgLCBpdCYjMzk7cyBgQlBGX1NZU0NBTExgLCBzaW5jZSBgTkVUX1NPQ0tfTVNHYCBpcyBzZWxlY3RlZCBieSBvdGhlciBjb25maWdzLCBub3QgZGlyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHVzZXIgZW5hYmxlcyBgQlBGX1NZU0NBTExgLgoKT2theSwgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgSSBuZWVkIHRvIGRlZmluZSB0aGUgRm9jdXNTeW1ib2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfTVBUQ1ApICYjNDM7PSBtcHRjcC5vXG4gICAzOlx0XG4gICA0Olx0bXB0Y3AteSA6PSBwcm90b2NvbC5vIHN1YmZsb3cubyBvcHRpb25zLm8gdG9rZW4ubyBjcnlwdG8ubyBjdHJsLm8gcG0ubyBkaWFnLm8gXFxcbiAgIDU6XHRcdCAgIG1pYi5vIHBtX25ldGxpbmsubyBzb2Nrb3B0Lm8gcG1fdXNlcnNwYWNlLm8gZmFzdG9wZW4ubyBzY2hlZC5vIFxcXG4gICA2Olx0XHQgICBtcHRjcF9wbV9nZW4ubyBwbV9rZXJuZWwub1xuICAgNzpcdFxuICAgODpcdG9iai0kKENPTkZJR19TWU5fQ09PS0lFUykgJiM0Mzs9IHN5bmNvb2tpZXMub1xuICAgOTpcdG9iai0kKENPTkZJR19JTkVUX01QVENQX0RJQUcpICYjNDM7PSBtcHRjcF9kaWFnLm9cbiAgMTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4MjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIE1QVENQKioKCk9rYXksIHNvIEkmIzM5O20gd29ya2luZyBvbiBnZXR0aW5nIHRoaXMgTVBUQ1AgY29uZmlndXJhdGlvbiByaWdodC4gQmFzZWQgb24gdGhlIGZpbGUgc3RydWN0dXJlLCBgcHJvdG9jb2wub2AgaXMgY2xlYXJseSBuZXN0ZWQgd2l0aGluIGBtcHRjcC5vYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX01QVENQYCBpcyBzZXQuIE5vdywgYENPTkZJR19NUFRDUGAgaXRzZWxmIGhhcyBhIGRlcGVuZGVuY3kgb24gYElORVRgLiBTbywgdGhlIGJhc2UgcmVxdWlyZW1lbnRzIGFyZTogYElORVRgLCBgTVBUQ1BgLCBhbmQgYEJQRl9TWVNDQUxMYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHN3ZWVwIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLiBEaXZpbmcgaW50byBgbmV0L21wdGNwL0tjb25maWdgLCBpdCBjb25maXJtcyB0aGUgYGRlcGVuZHMgb24gSU5FVGAsIHdoaWNoIEkgZXhwZWN0ZWQsIGFuZCB0aGVuIGl0ICpzZWxlY3RzKiBhIGZldyB0aGluZ3M6IGBTS0JfRVhURU5TSU9OU2AsIGBDUllQVE9fTElCX1NIQTI1NmAsIGFuZCBgQ1JZUFRPX0xJQl9VVElMU2AuIFRoZXNlIGFyZSBhbGwgYXV0b21hdGljIHNlbGVjdGlvbnMsIHdoaWNoIGlzIGdvb2Qg4oCTIGxlc3MgbWFudWFsIGludGVydmVudGlvbiBpcyBhbHdheXMgYSB3aW4uCgpGaW5hbGx5LCByZWdhcmRpbmcgYEJQRl9TWVNDQUxMYCwgSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSBjaGVjayBga2VybmVsL2JwZi9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTA4CgkJCQkJCQlvdXRwdXQ6IDIyNwoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUQ1AvTVBUQ1AgYHNrX2VycmAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgc3RyYWlnaHRmb3J3YXJkOyBgQlBGX1NZU0NBTExgIGlzIHNlbGYtY29udGFpbmVkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIGBORVRgIGlzIGEgZ2l2ZW4gZm9yIG5ldHdvcmtpbmcgY29kZSwgYW5kIGBJTkVUYCBpcyBzdGFuZGFyZCBmb3IgSVB2NC9UQ1AuIE5vIHN1cnByaXNlcyB0aGVyZS4KClRoZSBwYXRjaCBpdHNlbGYgaXMgZm9jdXNlZCBvbiBhZGRyZXNzaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCBgc2stJmd0O3NrX2VycmAuIEl0IHVzZXMgYFJFQURfT05DRSgpYCB0byBlbnN1cmUgc2FmZSwgY29uY3VycmVudCBhY2Nlc3Mgd2hlbiBgc29ja19lcnJvcigpYCBtaWdodCBiZSBjbGVhcmluZyBpdC4gVGhpcyBpbXBhY3RzIHNldmVyYWwgY29yZSBmdW5jdGlvbnMgYWNyb3NzIFRDUCwgc3RyZWFtIHNvY2tldHMsIFRDUCBCUEYsIGFuZCBNUFRDUC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCwgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAsIHRoZSBzcGxpY2UgZnVuY3Rpb25zIChgdGNwX3NwbGljZV9yZWFkYCwgYG1wdGNwX3NwbGljZV9yZWFkYCksIGFuZCB0aGUgYHNlbmRtc2dgIGFuZCBgcmVjdm1zZ2AgcGF0aHMgaW4gYm90aCBUQ1AsIE1QVENQLCBhbmQgQlBGLiBUaGVzZSBhcmUgYWxsIGNyaXRpY2FsIHBhdGhzLgoKTG9va2luZyBhdCB0aGUgbGlzdCBvZiAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7LCBpdCBzZWVtcyB3ZSYjMzk7cmUgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBkYXRhIHRyYW5zZmVyLCBhbmQgbWVzc2FnZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGggaG93IGVycm9yIHN0YXRlcyBhcmUgbWFuYWdlZCBpbiB0aG9zZSBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGEgZm9jdXNlZCBzZXQgb2YgZnVuY3Rpb25zLgoKQmFzZWQgb24gdGhpcywgYW5kIHRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IHNvY2tldCBvcGVyYXRpb25zLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBJdCYjMzk7cyB0aGUgcmlnaHQgY2FsbCB0byBmbHVzaCBvdXQgYW55IHN1YnRsZSBiZWhhdmlvcmFsIGNoYW5nZXMgb3IgcmVncmVzc2lvbnMgdGhpcyBtaWdodCBpbnRyb2R1Y2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucy4KCkdpdmVuIHRoZSBjb2RlJiMzOTtzIHNjb3BlIGFuZCB0aGUgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9ucywgdGhpcyBsb29rcyBjbGVhbiBhbmQgd2VsbC1zdXBwb3J0ZWQsIG5vIHJlZCBmbGFncy4gSXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfc3RyZWFtX3dhaXRfbWVtb3J5JiMzNDssCiAgICAmIzM0O3RjcF9zcGxpY2VfcmVhZCYjMzQ7LAogICAgJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7dGNwX3JlY3Ztc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyJiMzNDssCiAgICAmIzM0O21wdGNwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7bXB0Y3BfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDttcHRjcF9zcGxpY2VfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbm5vdGF0ZXMgbG9ja2xlc3MgcmVhZHMgb2Ygc2stXHUwMDNlc2tfZXJyIHdpdGggUkVBRF9PTkNFKCkgYWNyb3NzIFRDUCwgTVBUQ1AsIHN0cmVhbSBzb2NrZXQgd2FpdCBwYXRocywgYW5kIFRDUCBCUEYgaGVscGVycyB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGltcHJvcGVyIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgd2hlbiBza19lcnIgaXMgY29uY3VycmVudGx5IGNsZWFyZWQgYnkgc29ja19lcnJvcigpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW1zIChUQ1AsIE1QVENQLCBhbmQgc29ja21hcCBCUEYpLCBtYWtpbmcgaXQgdmFsdWFibGUgdG8gZnV6eiBmb3Igc3VidGxlIGNvbmN1cnJlbmN5IHJlZ3Jlc3Npb25zIGFuZCBlcnJvci1oYW5kbGluZyBjb3JyZWN0bmVzcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3N0cmVhbV93YWl0X21lbW9yeSYjMzQ7LAogICAgJiMzNDt0Y3Bfc3BsaWNlX3JlYWQmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O3RjcF9yZWN2bXNnX2xvY2tlZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDttcHRjcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc3BsaWNlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYW5ub3RhdGVzIGxvY2tsZXNzIHJlYWRzIG9mIHNrLVx1MDAzZXNrX2VyciB3aXRoIFJFQURfT05DRSgpIGFjcm9zcyBUQ1AsIE1QVENQLCBzdHJlYW0gc29ja2V0IHdhaXQgcGF0aHMsIGFuZCBUQ1AgQlBGIGhlbHBlcnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBpbXByb3BlciBjb21waWxlciBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkIGJ5IHNvY2tfZXJyb3IoKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyAoVENQLCBNUFRDUCwgYW5kIHNvY2ttYXAgQlBGKSwgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHN1YnRsZSBjb25jdXJyZW5jeSByZWdyZXNzaW9ucyBhbmQgZXJyb3ItaGFuZGxpbmcgY29ycmVjdG5lc3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFJFQURfT05DRSgpIGFubm90YXRpb25zIHRvIHJlYWRzIG9mIHNrLVx1MDAzZXNrX2VyciBhY3Jvc3MgVENQLCBNUFRDUCwgYW5kIGNvcmUgc3RyZWFtIHNvY2tldCBmdW5jdGlvbnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciByZS1yZWFkaW5nIG9wdGltaXphdGlvbnMgd2hlbiBza19lcnIgaXMgYWNjZXNzZWQgbG9ja2xlc3NseS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gU3RydWN0IHNvY2sgYW5kIGl0cyBza19lcnIgZmllbGQgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZXJlZm9yZSwgdGhlIHBhdGNoIHBvc2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIwNTM4Y2RiYzMxMGEyOGEwMGZmYWI1ZjAyNjE2ZmMzNjhmMTIxNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxNTo1NToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggNWU1ZjVmOWI4OWEzOC4uNmVlNTEzYmRiNTAzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTMwOTMsNyAmIzQzOzMwOTMsOCBAQCBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfaW5ib3VuZF9oYXNoKHN0cnVjdCBzb2NrICpzaywKIAogc3RhdGljIGlubGluZSBpbnQgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc3RydWN0IHNvY2sgKnNrKQogewotCXJldHVybiBzay0mZ3Q7c2tfZXJyIHx8CiYjNDM7CS8qIHNrX2VyciBjYW4gYmUgY2xlYXJlZCBsb2NrbGVzc2x5IGJ5IHNvY2tfZXJyb3IoKS4gKi8KJiM0MzsJcmV0dXJuIFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSB8fAogCSAgICAgICBzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0NMT1NFIHx8CiAJICAgICAgIChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOKSB8fAogCSAgICAgICBzaWduYWxfcGVuZGluZyhjdXJyZW50KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N0cmVhbS5jIGIvbmV0L2NvcmUvc3RyZWFtLmMKaW5kZXggMmQ3NDg1ODE4NjJkMC4uNWMwYWRjMzA3N2YwMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3RyZWFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc3RyZWFtLmMKQEAgLTEzMyw3ICYjNDM7MTMzLDcgQEAgaW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApCiAJd2hpbGUgKDEpIHsKIAkJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCi0JCWlmIChzay0mZ3Q7c2tfZXJyIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpCiYjNDM7CQlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpCiAJCQlnb3RvIGRvX2Vycm9yOwogCQlpZiAoISp0aW1lb19wKQogCQkJZ290byBkb19lYWdhaW47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDFjODY3YTMwMjQ0NDYuLjllN2ZhN2UzOTcyNjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC04NDMsNyAmIzQzOzg0Myw3IEBAIHNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcywKIAkJCQlicmVhazsKIAkJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpCiAJCQkJYnJlYWs7Ci0JCQlpZiAoc2stJmd0O3NrX2VycikgewomIzQzOwkJCWlmIChSRUFEX09OQ0Uoc2stJmd0O3NrX2VycikpIHsKIAkJCQlyZXQgPSBzb2NrX2Vycm9yKHNrKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTEyMjgsNyAmIzQzOzEyMjgsNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmYW1wO3NpemVfZ29hbCwgZmxhZ3MpOwogCiAJZXJyID0gLUVQSVBFOwotCWlmIChzay0mZ3Q7c2tfZXJyIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpCiYjNDM7CWlmIChSRUFEX09OQ0Uoc2stJmd0O3NrX2VycikgfHwgKHNrLSZndDtza19zaHV0ZG93biAmYW1wOyBTRU5EX1NIVVRET1dOKSkKIAkJZ290byBkb19lcnJvcjsKIAogCXdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykpIHsKQEAgLTI3NjAsNyAmIzQzOzI3NjAsNyBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpCiAJCQkJYnJlYWs7CiAKLQkJCWlmIChzay0mZ3Q7c2tfZXJyKSB7CiYjNDM7CQkJaWYgKFJFQURfT05DRShzay0mZ3Q7c2tfZXJyKSkgewogCQkJCWNvcGllZCA9IHNvY2tfZXJyb3Ioc2spOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jCmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmE5NjMyM2U2NTc1OGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTI4Niw3ICYjNDM7Mjg2LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzaywKIAkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkKIAkJCWdvdG8gb3V0OwogCi0JCWlmIChzay0mZ3Q7c2tfZXJyKSB7CiYjNDM7CQlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpKSB7CiAJCQljb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC01NTMsMTAgJiM0Mzs1NTMsOSBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJCWJvb2wgZW5vc3BjID0gZmFsc2U7CiAJCXUzMiBjb3B5LCBvc2l6ZTsKIAotCQlpZiAoc2stJmd0O3NrX2VycikgewotCQkJZXJyID0gLXNrLSZndDtza19lcnI7CiYjNDM7CQllcnIgPSAtUkVBRF9PTkNFKHNrLSZndDtza19lcnIpOwomIzQzOwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2VycjsKLQkJfQogCiAJCWNvcHkgPSBtc2dfZGF0YV9sZWZ0KG1zZyk7CiAJCWlmICghc2tfc3RyZWFtX21lbW9yeV9mcmVlKHNrKSkKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmMKaW5kZXggZTFmMDhmNzFjZGIxNi4uNzYzMWZhNTgyODM0NyAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmMKQEAgLTIwMjgsNyAmIzQzOzIwMjgsNyBAQCBzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJfQogCiAJcmV0ID0gLUVQSVBFOwotCWlmICh1bmxpa2VseShzay0mZ3Q7c2tfZXJyIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpKQomIzQzOwlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpIHx8IChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgU0VORF9TSFVURE9XTikpKQogCQlnb3RvIGRvX2Vycm9yOwogCiAJcGZyYWcgPSBza19wYWdlX2ZyYWcoc2spOwpAQCAtMjQyOSw3ICYjNDM7MjQyOSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJCSAgICAhdGltZW8pCiAJCQkJYnJlYWs7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoc2stJmd0O3NrX2VycikgewomIzQzOwkJCWlmIChSRUFEX09OQ0Uoc2stJmd0O3NrX2VycikpIHsKIAkJCQljb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTQ2NTUsNyAmIzQzOzQ2NTUsNyBAQCBzdGF0aWMgc3NpemVfdCBtcHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsCiAJCQkJYnJlYWs7CiAJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQogCQkJCWJyZWFrOwotCQkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoUkVBRF9PTkNFKHNrLSZndDtza19lcnIpKSB7CiAJCQkJcmV0ID0gc29ja19lcnJvcihzayk7CiAJCQkJYnJlYWs7CiAJCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk3CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDgwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzay0mZ3Q7c2tfZXJyYCBEYXRhIFJhY2UgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2U6IGl0JiMzOTtzIGFkZGluZyBgUkVBRF9PTkNFYCBhcm91bmQgc2V2ZXJhbCBhY2Nlc3NlcyB0byBgc2stJmd0O3NrX2VycmAgYWNyb3NzIGJvdGggVENQIGFuZCBNUFRDUCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZDogYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCwgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAsIGB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYHRjcF9icGZfc2VuZG1zZ2AsIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYC4gVGhlIHVzZSBvZiBgUkVBRF9PTkNFYCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIHRvIGFkZHJlc3MgcG90ZW50aWFsIGRhdGEgcmFjZXMsIGxpa2VseSBpZGVudGlmaWVkIGJ5IEtDU0FOIG9yIHNpbWlsYXIgdG9vbHMsIG9yIHBlcmhhcHMganVzdCBhIHByb2FjdGl2ZSBtZWFzdXJlIHRvIGVuc3VyZSBjb3JyZWN0IGNvbXBpbGVyIGJlaGF2aW9yIGFyb3VuZCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlLgoKYHNrLSZndDtza19lcnJgIGlzIGFuIGludGVnZXIgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IHNvY2tgLiBTaW5jZSB0aGUgYHN0cnVjdCBzb2NrYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgd3JhcHBpbmcgZXhpc3RpbmcgcmVhZHMgd2l0aCBgUkVBRF9PTkNFYCwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIHRvIHByZXZlbnQgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBmcm9tIHJlLW9yZGVyaW5nIG1lbW9yeSBhY2Nlc3NlcyBpbiB3YXlzIHRoYXQgY291bGQgZXhwb3NlIHN0YWxlIHZhbHVlcy4KCkkmIzM5O20gY29uZmlkZW50IHRoaXMgaXNuJiMzOTt0IGFsdGVyaW5nIGxlbmd0aHMsIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluaXRpYWxpemF0aW9uIHByb2JsZW1zLiBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O3ZlIG1lbnRhbGx5IGdvbmUgdGhyb3VnaCBteSB1c3VhbCBjaGVja2xpc3Q6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZSwgbm90aGluZyBoZXJlIHRoYXQgdHJhbnNtaXRzIHBhcnRpYWxseSBpbml0aWFsaXplZCBzdHJ1Y3R1cmVzIG9yIGZpZWxkcy4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIGBzay0mZ3Q7c2tfZXJyYCBpcyBpbml0aWFsaXplZCBkdXJpbmcgc29ja2V0IGFsbG9jYXRpb24gdXNpbmcgZWl0aGVyIGBrbWVtX2NhY2hlX2FsbG9jYCB3aXRoIHplcm9pbmcgb3IgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCBsYXRlciByZWFkcz8qKiBOb3QgYSBmYWN0b3IuIFRoZSBjaGFuZ2UgaXMgY29uZmluZWQgdG8gYSBzaW5nbGUgaW50ZWdlciBmaWVsZC4KNC4gICoqQm91bmRzIGNoZWNrcyBvciBsZW5ndGggaXNzdWVzPyoqIE5vIGNoYW5nZXMgdG8gYW55IHN1cnJvdW5kaW5nIGNvZGUgdGhhdCBtaWdodCBiZSBzdWJqZWN0IHRvIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MuCgpUaGVyZWZvcmUsIHRoaXMgc2VlbXMgbGlrZSBhIHB1cmVseSBhZGRpdGl2ZSBhbm5vdGF0aW9uL2NvbmN1cnJlbmN5IGZpeC4gSXQmIzM5O3Mgc2FmZSwgYW5kIGxpa2VseSBuZWNlc3NhcnkgZm9yIHJvYnVzdG5lc3MsIHBhcnRpY3VsYXJseSBnaXZlbiBtb2Rlcm4gY29uY3VycmVuY3kgdG9vbHMuIFdoaWxlIEkmIzM5O2QgcnVuIEtDU0FOLCBLVFNBTiwgb3Igc2ltaWxhciB0b29scywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4uIFRpbWUgdG8gcnVuIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgdG8gcmVhZHMgb2Ygc2stXHUwMDNlc2tfZXJyIGFjcm9zcyBUQ1AsIE1QVENQLCBhbmQgY29yZSBzdHJlYW0gc29ja2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGNvbXBpbGVyIHJlLXJlYWRpbmcgb3B0aW1pemF0aW9ucyB3aGVuIHNrX2VyciBpcyBhY2Nlc3NlZCBsb2NrbGVzc2x5LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBTdHJ1Y3Qgc29jayBhbmQgaXRzIHNrX2VyciBmaWVsZCBhcmUgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCB1cG9uIHNvY2tldCBjcmVhdGlvbi4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggcG9zZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBSRUFEX09OQ0UoKSBhbm5vdGF0aW9ucyB0byByZWFkcyBvZiBzay1cdTAwM2Vza19lcnIgYWNyb3NzIFRDUCwgTVBUQ1AsIGFuZCBjb3JlIHN0cmVhbSBzb2NrZXQgZnVuY3Rpb25zIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgcmUtcmVhZGluZyBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGFjY2Vzc2VkIGxvY2tsZXNzbHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFN0cnVjdCBzb2NrIGFuZCBpdHMgc2tfZXJyIGZpZWxkIGFyZSBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIHVwb24gc29ja2V0IGNyZWF0aW9uLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBwb3NlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU1OjEzLjQxOTQ3MzMzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTUwMjAyOTQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19zdHJlYW1fd2FpdF9tZW1vcnlcIixcbiAgICBcInRjcF9zcGxpY2VfcmVhZFwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3BfcmVjdm1zZ19sb2NrZWRcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwibXB0Y3Bfc2VuZG1zZ1wiLFxuICAgIFwibXB0Y3BfcmVjdm1zZ1wiLFxuICAgIFwibXB0Y3Bfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgdG8gcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciBhY3Jvc3MgVENQLCBNUFRDUCwgYW5kIGNvcmUgc3RyZWFtIHNvY2tldCBmdW5jdGlvbnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciByZS1yZWFkaW5nIG9wdGltaXphdGlvbnMgd2hlbiBza19lcnIgaXMgYWNjZXNzZWQgbG9ja2xlc3NseS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gU3RydWN0IHNvY2sgYW5kIGl0cyBza19lcnIgZmllbGQgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZXJlZm9yZSwgdGhlIHBhdGNoIHBvc2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbm5vdGF0ZXMgbG9ja2xlc3MgcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciB3aXRoIFJFQURfT05DRSgpIGFjcm9zcyBUQ1AsIE1QVENQLCBzdHJlYW0gc29ja2V0IHdhaXQgcGF0aHMsIGFuZCBUQ1AgQlBGIGhlbHBlcnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBpbXByb3BlciBjb21waWxlciBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkIGJ5IHNvY2tfZXJyb3IoKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyAoVENQLCBNUFRDUCwgYW5kIHNvY2ttYXAgQlBGKSwgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHN1YnRsZSBjb25jdXJyZW5jeSByZWdyZXNzaW9ucyBhbmQgZXJyb3ItaGFuZGxpbmcgY29ycmVjdG5lc3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU1OjEzLjQxOTQ3ODc1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4MTY0NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjA1MzhjZGJjMzEwYTI4YTAwZmZhYjVmMDI2MTZmYzM2OGYxMjE1NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAxNTo1NToxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuaW5kZXggNWU1ZjVmOWI4OWEzOC4uNmVlNTEzYmRiNTAzMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuQEAgLTMwOTMsNyArMzA5Myw4IEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9pbmJvdW5kX2hhc2goc3RydWN0IHNvY2sgKnNrLFxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxcbiB7XFxuLVxcdHJldHVybiBzay1cXHUwMDNlc2tfZXJyIHx8XFxuK1xcdC8qIHNrX2VyciBjYW4gYmUgY2xlYXJlZCBsb2NrbGVzc2x5IGJ5IHNvY2tfZXJyb3IoKS4gKi9cXG4rXFx0cmV0dXJuIFJFQURfT05DRShzay1cXHUwMDNlc2tfZXJyKSB8fFxcbiBcXHQgICAgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSB8fFxcbiBcXHQgICAgICAgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTikgfHxcXG4gXFx0ICAgICAgIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpO1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zdHJlYW0uYyBiL25ldC9jb3JlL3N0cmVhbS5jXFxuaW5kZXggMmQ3NDg1ODE4NjJkMC4uNWMwYWRjMzA3N2YwMyAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9zdHJlYW0uY1xcbisrKyBiL25ldC9jb3JlL3N0cmVhbS5jXFxuQEAgLTEzMyw3ICsxMzMsNyBAQCBpbnQgc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW9fcClcXG4gXFx0d2hpbGUgKDEpIHtcXG4gXFx0XFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spO1xcbiBcXG4tXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19lcnIgfHwgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFNFTkRfU0hVVERPV04pKVxcbitcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpIHx8IChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcXG4gXFx0XFx0XFx0Z290byBkb19lcnJvcjtcXG4gXFx0XFx0aWYgKCEqdGltZW9fcClcXG4gXFx0XFx0XFx0Z290byBkb19lYWdhaW47XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcXG5pbmRleCAxYzg2N2EzMDI0NDQ2Li45ZTdmYTdlMzk3MjY1IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwLmNcXG5AQCAtODQzLDcgKzg0Myw3IEBAIHNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpKSB7XFxuIFxcdFxcdFxcdFxcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbkBAIC0xMjI4LDcgKzEyMjgsNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0bXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgXFx1MDAyNnNpemVfZ29hbCwgZmxhZ3MpO1xcbiBcXG4gXFx0ZXJyID0gLUVQSVBFO1xcbi1cXHRpZiAoc2stXFx1MDAzZXNrX2VyciB8fCAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgU0VORF9TSFVURE9XTikpXFxuK1xcdGlmIChSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2VycikgfHwgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFNFTkRfU0hVVERPV04pKVxcbiBcXHRcXHRnb3RvIGRvX2Vycm9yO1xcbiBcXG4gXFx0d2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSkge1xcbkBAIC0yNzYwLDcgKzI3NjAsNyBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpKSB7XFxuIFxcdFxcdFxcdFxcdGNvcGllZCA9IHNvY2tfZXJyb3Ioc2spO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcXG5pbmRleCAyZTIzNGQxNTViNWU2Li5hOTYzMjNlNjU3NThlIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xcbkBAIC0yODYsNyArMjg2LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpKSB7XFxuIFxcdFxcdFxcdGNvcGllZCA9IHNvY2tfZXJyb3Ioc2spO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbkBAIC01NTMsMTAgKzU1Myw5IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0Ym9vbCBlbm9zcGMgPSBmYWxzZTtcXG4gXFx0XFx0dTMyIGNvcHksIG9zaXplO1xcbiBcXG4tXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19lcnIpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLXNrLVxcdTAwM2Vza19lcnI7XFxuK1xcdFxcdGVyciA9IC1SRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2Vycik7XFxuK1xcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0Y29weSA9IG1zZ19kYXRhX2xlZnQobXNnKTtcXG4gXFx0XFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuaW5kZXggZTFmMDhmNzFjZGIxNi4uNzYzMWZhNTgyODM0NyAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuQEAgLTIwMjgsNyArMjAyOCw3IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gLUVQSVBFO1xcbi1cXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2VyciB8fCAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgU0VORF9TSFVURE9XTikpKVxcbitcXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpIHx8IChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBTRU5EX1NIVVRET1dOKSkpXFxuIFxcdFxcdGdvdG8gZG9fZXJyb3I7XFxuIFxcbiBcXHRwZnJhZyA9IHNrX3BhZ2VfZnJhZyhzayk7XFxuQEAgLTI0MjksNyArMjQyOSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0ICAgICF0aW1lbylcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfZXJyKSB7XFxuK1xcdFxcdFxcdGlmIChSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2VycikpIHtcXG4gXFx0XFx0XFx0XFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuQEAgLTQ2NTUsNyArNDY1NSw3IEBAIHN0YXRpYyBzc2l6ZV90IG1wdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpKSB7XFxuIFxcdFxcdFxcdFxcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1NToxMy45NzgzMTE4MzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwNzU5NTM4MDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19zdHJlYW1fd2FpdF9tZW1vcnlcIixcbiAgICBcInRjcF9zcGxpY2VfcmVhZFwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3BfcmVjdm1zZ19sb2NrZWRcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwibXB0Y3Bfc2VuZG1zZ1wiLFxuICAgIFwibXB0Y3BfcmVjdm1zZ1wiLFxuICAgIFwibXB0Y3Bfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbm5vdGF0ZXMgbG9ja2xlc3MgcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciB3aXRoIFJFQURfT05DRSgpIGFjcm9zcyBUQ1AsIE1QVENQLCBzdHJlYW0gc29ja2V0IHdhaXQgcGF0aHMsIGFuZCBUQ1AgQlBGIGhlbHBlcnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBpbXByb3BlciBjb21waWxlciBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkIGJ5IHNvY2tfZXJyb3IoKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyAoVENQLCBNUFRDUCwgYW5kIHNvY2ttYXAgQlBGKSwgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHN1YnRsZSBjb25jdXJyZW5jeSByZWdyZXNzaW9ucyBhbmQgZXJyb3ItaGFuZGxpbmcgY29ycmVjdG5lc3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjA1MzhjZGJjMzEwYTI4YTAwZmZhYjVmMDI2MTZmYzM2OGYxMjE1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE1OjU1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggNWU1ZjVmOWI4OWEzOC4uNmVlNTEzYmRiNTAzMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4rKysgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTMwOTMsNyArMzA5Myw4IEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9pbmJvdW5kX2hhc2goc3RydWN0IHNvY2sgKnNrLFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9yZWN2X3Nob3VsZF9zdG9wKHN0cnVjdCBzb2NrICpzaylcbiB7XG4tXHRyZXR1cm4gc2stXHUwMDNlc2tfZXJyIHx8XG4rXHQvKiBza19lcnIgY2FuIGJlIGNsZWFyZWQgbG9ja2xlc3NseSBieSBzb2NrX2Vycm9yKCkuICovXG4rXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikgfHxcbiBcdCAgICAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UgfHxcbiBcdCAgICAgICAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTikgfHxcbiBcdCAgICAgICBzaWduYWxfcGVuZGluZyhjdXJyZW50KTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zdHJlYW0uYyBiL25ldC9jb3JlL3N0cmVhbS5jXG5pbmRleCAyZDc0ODU4MTg2MmQwLi41YzBhZGMzMDc3ZjAzIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc3RyZWFtLmNcbisrKyBiL25ldC9jb3JlL3N0cmVhbS5jXG5AQCAtMTMzLDcgKzEzMyw3IEBAIGludCBza19zdHJlYW1fd2FpdF9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lb19wKVxuIFx0d2hpbGUgKDEpIHtcbiBcdFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spO1xuIFxuLVx0XHRpZiAoc2stXHUwMDNlc2tfZXJyIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpXG4rXHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSB8fCAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFNFTkRfU0hVVERPV04pKVxuIFx0XHRcdGdvdG8gZG9fZXJyb3I7XG4gXHRcdGlmICghKnRpbWVvX3ApXG4gXHRcdFx0Z290byBkb19lYWdhaW47XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggMWM4NjdhMzAyNDQ0Ni4uOWU3ZmE3ZTM5NzI2NSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTg0Myw3ICs4NDMsNyBAQCBzc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuK1x0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG5AQCAtMTIyOCw3ICsxMjI4LDcgQEAgaW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRtc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCBcdTAwMjZzaXplX2dvYWwsIGZsYWdzKTtcbiBcbiBcdGVyciA9IC1FUElQRTtcbi1cdGlmIChzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbitcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSB8fCAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFNFTkRfU0hVVERPV04pKVxuIFx0XHRnb3RvIGRvX2Vycm9yO1xuIFxuIFx0d2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSkge1xuQEAgLTI3NjAsNyArMjc2MCw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG4gXHRcdFx0XHRicmVhaztcbiBcbi1cdFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4rXHRcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0XHRjb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmE5NjMyM2U2NTc1OGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTI4Niw3ICsyODYsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4rXHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdGNvcGllZCA9IHNvY2tfZXJyb3Ioc2spO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG5AQCAtNTUzLDEwICs1NTMsOSBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdGJvb2wgZW5vc3BjID0gZmFsc2U7XG4gXHRcdHUzMiBjb3B5LCBvc2l6ZTtcbiBcbi1cdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuLVx0XHRcdGVyciA9IC1zay1cdTAwM2Vza19lcnI7XG4rXHRcdGVyciA9IC1SRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKTtcbitcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdH1cbiBcbiBcdFx0Y29weSA9IG1zZ19kYXRhX2xlZnQobXNnKTtcbiBcdFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGUxZjA4ZjcxY2RiMTYuLjc2MzFmYTU4MjgzNDcgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0yMDI4LDcgKzIwMjgsNyBAQCBzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHR9XG4gXG4gXHRyZXQgPSAtRVBJUEU7XG4tXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfZXJyIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpKVxuK1x0aWYgKHVubGlrZWx5KFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpKVxuIFx0XHRnb3RvIGRvX2Vycm9yO1xuIFxuIFx0cGZyYWcgPSBza19wYWdlX2ZyYWcoc2spO1xuQEAgLTI0MjksNyArMjQyOSw3IEBAIHN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0XHQgICAgIXRpbWVvKVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuK1x0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG5AQCAtNDY1NSw3ICs0NjU1LDcgQEAgc3RhdGljIHNzaXplX3QgbXB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbiBcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbitcdFx0XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikpIHtcbiBcdFx0XHRcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTU6MTMuOTc4MzE0MjE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI1NTYyMzg1MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpczogQ29yZSBOZXR3b3JraW5nIE1vZGlmaWNhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgc2V2ZXJhbCBpbnN0YW5jZXMgb2YgYHNrLVx1MDAzZXNrX2VycmAgcmVhZHMgYWNyb3NzIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBzcGVjaWZpY2FsbHkgaW4gYHRjcC5oYCwgYHN0cmVhbS5jYCwgdmFyaW91cyBgdGNwLmNgIGZpbGVzIChpbmNsdWRpbmcgdGhlIEJQRiBhbmQgTVBUQ1AgdmFyaWFudHMpLiBJdCdzIGFkZGluZyBgUkVBRF9PTkNFKClgIHRvIHRoZXNlIHJlYWRzLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyBhbiBhdHRlbXB0IHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgbGlrZWx5IGFkZHJlc3NlcyBpc3N1ZXMgZmxhZ2dlZCBieSBhIHRvb2wgbGlrZSBLQ1NBTiBvciBwb3RlbnRpYWwgY29tcGlsZXIgb3B0aW1pemF0aW9uIHByb2JsZW1zLiBUaGlzIGlzIGFsbCAqY29yZSogbmV0d29ya2luZyBzdHVmZi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoaXMgcmVxdWlyZXMgZnV6emluZyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZ3VpZGVsaW5lcy4gSSBuZWVkIHRvIGJlIGRpbGlnZW50IGFib3V0IHRoaXMga2luZCBvZiBjaGFuZ2UsIHNpbmNlIHRoZSBwYXRjaCBhdXRob3IgbWlnaHQgY2xhaW0gXCJubyBmdW5jdGlvbmFsIGNoYW5nZSxcIiBidXQgdGhhdCBpcyBub3Qgc3VmZmljaWVudC5cblxuTG9va2luZyBhdCB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBjaGFuZ2UuXG5cbkknbSBjaGVja2luZyB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZmlyc3QuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGRlZmluaXRlbHkgKm5vdCogZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBidWlsZCBzeXN0ZW0gY2hhbmdlcy4gSXQncyBub3QgdW5yZWFjaGFibGUgaGFyZHdhcmUgb3IgZXhjbHVzaXZlIHRvIG90aGVyIGFyY2hpdGVjdHVyZXMuIEl0J3MgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4gU28sIHRoZSBcIm5lZ2F0aXZlIGNyaXRlcmlhXCIgYWxsIGZhaWwuXG5cbk5vdywgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLiBTZWN0aW9uIDMgaXMgY2xlYXI6IFwiUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzogQ29yZSBTdWJzeXN0ZW1zOiAuLi4gY29yZSBuZXR3b3JraW5nLi4uXCIuIEJpbmdvISBUaGlzICphYnNvbHV0ZWx5KiBmYWxscyB1bmRlciB0aGF0IGRlZmluaXRpb24uIENoYW5naW5nIHRoaXMsIGV2ZW4gaWYgaXQgKnNlZW1zKiBsaWtlIGEgc2ltcGxlIGNoYW5nZSwgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIHRodXMgbmVlZHMgdG8gYmUgZnV6emVkLiBBZGRpbmcgYFJFQURfT05DRWAgY2FuLCBmb3IgZXhhbXBsZSwgZGlzYWJsZSBzb21lIG9wdGltaXphdGlvbnMgdGhhdCBkZXBlbmQgb24gc3BlY2lmaWMgb3JkZXJpbmcgYXNzdW1wdGlvbnMsIGFuZCByZXZlYWwgYSBoaWRkZW4gYnVnIG9yIGEgbmV3IGNvZGUgcGF0aC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGxvYWQvc3RvcmUgY29kZS5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCAqbXVzdCogYmUgYHRydWVgLiBJJ2xsIG5vdyBjaGVjayB0aGUgY29tbWl0IGxvZyBpbiBnaXQgdG8gc2VlIGlmIGFueSBtb3JlIGRldGFpbHMgY2FuIGJlIGdsZWFuZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MTkuNTQwNzAyMzIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODc3MzQ2NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfZXJyIGNhbiBiZSBjbGVhcmVkIGxvY2tsZXNzbHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9MzA5ND1zdGF0aWMgaW5saW5lIGludCB0Y3BfcmVjdl9zaG91bGRfc3RvcChzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvdGNwLmgtMzA5NS17XFxuaW5jbHVkZS9uZXQvdGNwLmg6MzA5NjpcXHQvKiBza19lcnIgY2FuIGJlIGNsZWFyZWQgbG9ja2xlc3NseSBieSBzb2NrX2Vycm9yKCkuICovXFxuaW5jbHVkZS9uZXQvdGNwLmgtMzA5Ny1cXHRyZXR1cm4gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjIxLjYyODQ0Mzc3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MDkwOTMwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBUQ1AvTVBUQ1AgRGF0YSBGbG93IGFuZCBQb3RlbnRpYWwgQm90dGxlbmVja3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93IGFuZCBwb3RlbnRpYWwgY2hva2UgcG9pbnRzIHdpdGhpbiB0aGUgVENQIGFuZCBNUFRDUCBzdGFja3MuIEknbSB0aGlua2luZyBvZiBmb2N1c2luZyBvbiBhIHNwZWNpZmljIHNldCBvZiBrZXkgZnVuY3Rpb25zOiBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3NlbmRtc2dgLCB0aGVuIEknbGwgbG9vayBpbnRvIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBgbXB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NwbGljZV9yZWFkYCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCBhbmQgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IHN1c3BlY3RzIHdoZXJlIGRhdGEgaXMgYmVpbmcgcHJvY2Vzc2VkLCBjb3BpZWQsIGFuZCBxdWV1ZWQuIEknbSBwcmV0dHkgc3VyZSBJIGNhbiBnZXQgYSBnb29kIG92ZXJ2aWV3IGJ5IGZvY3VzaW5nIG9uIHRob3NlLlxuXG5Ob3csIGFuIGltcG9ydGFudCBmYWN0b3IgaW4gdGhlIGRhdGEgZmxvdyBpcyBkZXRlcm1pbmluZyB3aGVuIHRvIHBhdXNlIHRyYW5zbWlzc2lvbiwgYW5kIEkgcmVtZW1iZXIgYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCBwbGF5cyBhIHJvbGUgaW4gaXQuIFNvIEkgbmVlZCB0byBzZWUgd2hvJ3MgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24uIEknbGwgcmVhY2ggZm9yIGBncmVwcGVyYCB0byBxdWlja2x5IHRyYWNrIGRvd24gYWxsIG9mIHRoZSBjYWxsIHNpdGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBsYXJnZXIgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBkYXRhIHJlY2VwdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1NzoyNS4xMzc1MzkxMDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MTg5MjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfcmVjdl9zaG91bGRfc3RvcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0zMDg5PWVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9pbmJvdW5kX2hhc2goc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMzA5My1cXG5pbmNsdWRlL25ldC90Y3AuaDozMDk0OnN0YXRpYyBpbmxpbmUgaW50IHRjcF9yZWN2X3Nob3VsZF9zdG9wKHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC90Y3AuaC0zMDk1LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTgxMT1zc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy04ODYtXFxubmV0L2lwdjQvdGNwLmM6ODg3OlxcdFxcdGlmICh0Y3BfcmVjdl9zaG91bGRfc3RvcChzaykpXFxubmV0L2lwdjQvdGNwLmMtODg4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjY1Nj1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI3NTYtXFx0XFx0XFx0aWYgKCF0aW1lbyB8fFxcbm5ldC9pcHY0L3RjcC5jOjI3NTc6XFx0XFx0XFx0ICAgIHRjcF9yZWN2X3Nob3VsZF9zdG9wKHNrKSlcXG5uZXQvaXB2NC90Y3AuYy0yNzU4LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjM3ND1zdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDI3LVxcdFxcdGlmIChjb3BpZWQpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDI4OlxcdFxcdFxcdGlmICh0Y3BfcmVjdl9zaG91bGRfc3RvcChzaykgfHxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDI5LVxcdFxcdFxcdCAgICAhdGltZW8pXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00NjI0PXN0YXRpYyBzc2l6ZV90IG1wdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2OTgtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDY5OTpcXHRcXHRpZiAodGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ3MDAtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjI2Ljg5OTQzNjkyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzMzIxNTUwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1vZGlmaWVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBJJ20gc2VlaW5nIGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGltcGFjdCBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUgcmVncmVzc2lvbnMgd2l0aGluIHRoZXNlIG5ldHdvcmsgY29yZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZW0gYW5kIHVuZGVyc3RhbmQgdGhlIGV4dGVudCBvZiB0aGUgbW9kaWZpY2F0aW9ucy5cblxuSGVyZeKAmXMgbXkgbWVudGFsIGNoZWNrbGlzdDpcbiogICBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCBpbiBgbmV0L2NvcmUvc3RyZWFtLmNgIC0gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLCBzbyBhbnkgY2hhbmdlIGhlcmUgaXMgaW1tZWRpYXRlbHkgc3VzcGVjdC5cbiogICBgdGNwX3NwbGljZV9yZWFkYCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGFuZCBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBpbiBgbmV0L2lwdjQvdGNwLmNgIC0gVGhlc2UgYXJlIGNyaXRpY2FsIGZvciBkYXRhIHRyYW5zZmVyOyBjaGFuZ2VzIGhlcmUgbmVjZXNzaXRhdGUgdGhvcm91Z2ggaW5zcGVjdGlvbi5cbiogICBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3NlbmRtc2dgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIC0gQlBGIGhvb2tzLCB3aGljaCBjb3VsZCBpbmRpY2F0ZSBpbnN0cnVtZW50YXRpb24gb3IgcG90ZW50aWFsIGNvbnRyb2wgZmxvdyBjaGFuZ2VzLlxuKiAgIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIC0gTVBUQ1Atc3BlY2lmaWMsIGFueSBjaGFuZ2VzIHRvIHRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS5cblxuQW5kIHRoZW4gdGhlcmUncyB0aGUgYGluY2x1ZGUvbmV0L3RjcC5oYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGB0Y3BfcmVjdl9zaG91bGRfc3RvcGAgZnVuY3Rpb24sIGlubGluZWQgaW50byBzZXZlcmFsIG90aGVyIGtleSBmdW5jdGlvbnMuIFRoaXMgaXMgcG90ZW50aWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0cyB1c2UgaW4gc28gbWFueSBvdGhlciBrZXkgZnVuY3Rpb25zIG1lYW5zIGl0IGlzIHZlcnkgaW1wb3J0YW50LlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGFuZCBgdGNwX3NlbmRtc2dfbG9ja2VkYCBzcGVjaWZpY2FsbHkuIEFyZSB0aGV5IGRlY2xhcmVkIHN0YXRpYyBvciBub24tc3RhdGljPyBJIG5lZWQgdG8ga25vdyB0aGVpciB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIExldCdzIGhlYWQgb3ZlciB0byBgbmV0L2lwdjQvdGNwLmNgIGFuZCBmaWd1cmUgdGhpcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNjksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MzAuMjMxNTk0ODIxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTUwNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9zZW5kbXNnX2xvY2tlZHx0Y3BfcmVjdm1zZ19sb2NrZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwLmM9MTExND1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XFxubmV0L2lwdjQvdGNwLmMtMTExNS1cXG5uZXQvaXB2NC90Y3AuYzoxMTE2OmludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcC5jLTExMTcte1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTI0MC1cXG5uZXQvaXB2NC90Y3AuYzoxMjQxOlxcdFxcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XFxubmV0L2lwdjQvdGNwLmMtMTI0Mi1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0NDQtfVxcbm5ldC9pcHY0L3RjcC5jOjE0NDU6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDQ2LVxcbm5ldC9pcHY0L3RjcC5jPTE0NDc9aW50IHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE0NTEtXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3AuYzoxNDUyOlxcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBzaXplKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDUzLVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xOTM2PXN0YXRpYyB2b2lkIHRjcF96ZXJvY29weV9zZXRfaGludF9mb3Jfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE5NzItXFxubmV0L2lwdjQvdGNwLmM6MTk3MzpzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvaXB2NC90Y3AuYy0xOTc0LVxcdFxcdFxcdCAgICAgIGludCBmbGFncywgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcyxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTE5NzY9c3RhdGljIGludCByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTk5NC1cXG5uZXQvaXB2NC90Y3AuYzoxOTk1OlxcdGVyciA9IHRjcF9yZWN2bXNnX2xvY2tlZChzaywgXFx1MDAyNm1zZywgaW5xLCBNU0dfRE9OVFdBSVQsXFxubmV0L2lwdjQvdGNwLmMtMTk5Ni1cXHRcXHRcXHRcXHQgdHNzLCBcXHUwMDI2emMtXFx1MDAzZW1zZ19mbGFncyk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yNTAwPXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI2NTUtXFxubmV0L2lwdjQvdGNwLmM6MjY1NjpzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvaXB2NC90Y3AuYy0yNjU3LVxcdFxcdFxcdCAgICAgIGludCBmbGFncywgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcyxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI5MzE9aW50IHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yOTQ0LVxcdGxvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdGNwLmM6Mjk0NTpcXHRyZXQgPSB0Y3BfcmVjdm1zZ19sb2NrZWQoc2ssIG1zZywgbGVuLCBmbGFncywgXFx1MDAyNnRzcywgXFx1MDAyNmNtc2dfZmxhZ3MpO1xcbm5ldC9pcHY0L3RjcC5jLTI5NDYtXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MzAuMjc5NTUwNzcxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU3OTc3MTQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRDUCBGdW5jdGlvbiBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEl0J3MgZXhwb3NlZCwgYEVYUE9SVF9TWU1CT0xfR1BMYCB0byBiZSBwcmVjaXNlLCB3aGljaCBtZWFucyBrVExTLCB0Y3BfYnBmIGFuZCBgdGNwX3NlbmRtc2dgIGNhbiBhbGwgY2FsbCBpdC4gVGhhdCBtYWtlcyBzZW5zZSwgYSBjcnVjaWFsIGludGVybmFsIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGFjY2Vzc2libGUgZm9yIHRob3NlIGZlYXR1cmVzLlxuXG5CdXQgd2FpdCBhIHNlY29uZC4uLiB3aGF0IGFib3V0IHRoZSByZWNlaXZlIHNpZGU/IElzIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIHZpc2libGUgaW4gdGhlIHNhbWUgd2F5PyBIbW1tLCBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIGRlY2xhcmVkICpzdGF0aWMqLiBOZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhhdCBjb3VsZCBjaGFuZ2UgdGhlIGZsb3cgaW4gYSBzdWJ0bGUgd2F5LiBHb3R0YSByZW1lbWJlciB0byBrZWVwIGFuIGV5ZSBvbiBob3cgdGhhdCBpbXBhY3RzIHRoZSBzdGFjay5cblxuSnVzdCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgZWRnZSBjYXNlcywgbGV0J3MgYWxzbyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgdGNwX3NwbGljZV9yZWFkYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBleHBvc3VyZS4gSXMgaXQgZXhwb3J0ZWQsIG9yIGlzIGl0IGFsc28gYSBzdGF0aWMgaW50ZXJuYWwgZnVuY3Rpb24/IFRoZSBpbXBsaWNhdGlvbnMgZm9yIGtlcm5lbCBpbnRlcm5hbHMgYW5kIHNlY3VyaXR5IGNvdWxkIGRpZmZlciBzaWduaWZpY2FudGx5IGJhc2VkIG9uIHRoYXQgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MzIuODU5MzI0NjExWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE0NDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzc2l6ZV90IHRjcF9zcGxpY2VfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz03ODg9c3RhdGljIGludCBfX3RjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc3BsaWNlX3N0YXRlICp0c3MpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy04MTAtICoqL1xcbm5ldC9pcHY0L3RjcC5jOjgxMTpzc2l6ZV90IHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXFxubmV0L2lwdjQvdGNwLmMtODEyLVxcdFxcdFxcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjMyLjkwNzQ3NTY5MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzc0MDE3OTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVENQIERhdGEgRmxvdyoqXG5cbk9rYXksIHNvIGB0Y3Bfc3BsaWNlX3JlYWRgIGlzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfc2VuZG1zZ2AuIEFyZSB0aGV5IHJlbGF0ZWQsIGFuZCBob3c/IFRvIGZpbmQgb3V0LCBJIHNob3VsZCBkaXZlIGludG8gYHRjcF9icGYuY2AuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBleHBsb3JpbmcgaG93IHRoZXNlIGRpZmZlcmVudCBmdW5jdGlvbnMgd29yayB0b2dldGhlciB3aXRoaW4gdGhlIFRDUCBkYXRhIGZsb3cuIEkgd2FudCB0byBzZWUgaG93IHRoZSBCUEYgaW50ZWdyYXRpb24gcGxheXMgd2l0aCB0aGUgZGF0YSBwYXRoLiBMZXQncyBzZWUgd2hhdCBgdGNwX2JwZi5jYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxOTYsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1NzozNS4yODE0OTY0ODNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDcyNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJ8dGNwX2JwZl9zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmM9MTUzPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjMtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjE2NDppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNjUtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcywgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE3Ny19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjE3ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz00MTg9c3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg2LVxcdFxcdG9yaWdzaXplID0gbXNnLVxcdTAwM2VzZy5zaXplO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo0ODc6XFx0XFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00ODgtXFx0XFx0XFx0XFx0XFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo1MzQ6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcF9icGYuYy01MzUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTYzOT1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY0OS1cXHRwcm90W1RDUF9CUEZfVFhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY1MDpcXHRwcm90W1RDUF9CUEZfVFhdLnNlbmRtc2dcXHRcXHQ9IHRjcF9icGZfc2VuZG1zZztcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUxLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTItXFx0cHJvdFtUQ1BfQlBGX1JYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTM6XFx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NTQtXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1NS1cXHRwcm90W1RDUF9CUEZfVFhSWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9UWF07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY1NjpcXHRwcm90W1RDUF9CUEZfVFhSWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU3LX1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02ODk9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzEyLVxcdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3JcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzEzOlxcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcxNC1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MzUuMzI4NTcyOTgyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5OTA1ODkwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBGdW5jdGlvbiBTeW1ib2wgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3NlbmRtc2dgIOKAkyB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBgdGNwX2JwZi5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhleSBiZSBjb25zaWRlcmVkIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXM/XG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBGb2N1c1N5bWJvbCBydWxlczogV2UncmUgc3VwcG9zZWQgdG8gYXZvaWQgdWJpcXVpdG91cyBob3QtcGF0aCBmdW5jdGlvbnMsIHNvIG5vdGhpbmcgY2FsbGVkIGJ5ICpldmVyeSogcHJvZ3JhbS4gV2Ugd2FudCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIG9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgYWJvdXQgc3RhdGljICppbmxpbmUqIGZ1bmN0aW9ucyBpcyBpbnRlcmVzdGluZywgYmVjYXVzZSB0aG9zZSBjYW4ndCBiZSB0YXJnZXRlZCBkaXJlY3RseS4gSG93ZXZlciwgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYSBgLmNgIGZpbGUsIGFuZCB1bmxlc3MgdGhlIGNvbXBpbGVyIGlubGluZXMgdGhlbSwgdGhleSAqZG8qIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB0aGUgdm1saW51eCBpbWFnZS4gVGhpcyBpcyBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgc2luY2UgSSBrbm93IGB0Y3BfYnBmX3NlbmRtc2dgIGlzIGFzc2lnbmVkIHRvIGBwcm90W1RDUF9CUEZfVFhdLnNlbmRtc2dgLCBzbyBpdCAqc2hvdWxkKiBoYXZlIGFuIGFkZHJlc3MuXG5cblRoYXQgc2FpZCwgSSB3b25kZXIgYWJvdXQgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgc3BhY2UuIE5vdywgd2hhdCBhYm91dCBgbXB0Y3Bfc2VuZG1zZ2AsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zcGxpY2VfcmVhZGA/IEkgbmVlZCB0byBjaGVjayB0aG9zZSBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NjUsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6MzguMzE5MTY0Nzc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzExMjQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9zZW5kbXNnfG1wdGNwX3JlY3Ztc2d8bXB0Y3Bfc3BsaWNlX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MTI2MT1tcHRjcF9jYXJ2ZV9kYXRhX2ZyYWcoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMjc4LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEyNzk6c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyB7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTI4MC1cXHRpbnQgbXNzX25vdztcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEzNzQ9c3RhdGljIHZvaWQgbXB0Y3BfdXBkYXRlX2luZmluaXRlX21hcChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTM5NC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMzk1OnN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZ19mcmFnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMzk2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzOTc6XFx0XFx0XFx0ICAgICAgc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMzk4LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MzMtXFx0XFx0bXB0Y3BfdXBkYXRlX2luZmluaXRlX21hcChtc2ssIHNzaywgbXBleHQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE1MzQ6XFx0dHJhY2VfbXB0Y3Bfc2VuZG1zZ19mcmFnKG1wZXh0KTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTM1LVxcdG1wdGNwX3N1YmZsb3dfY3R4KHNzayktXFx1MDAzZXJlbF93cml0ZV9zZXEgKz0gY29weTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE1ODc9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE2NjItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTY2MzpzdGF0aWMgdm9pZCBtcHRjcF9wdXNoX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjY0LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE3MDU9c3RhdGljIGludCBfX3N1YmZsb3dfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNzA2OlxcdFxcdFxcdFxcdCAgc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyAqaW5mbylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzA3LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE3MTgtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTcxOTpcXHRcXHRcXHRyZXQgPSBtcHRjcF9zZW5kbXNnX2ZyYWcoc2ssIHNzaywgZGZyYWcsIGluZm8pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE3MjAtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNzQ5PXZvaWQgX19tcHRjcF9wdXNoX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzUyLVxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTc1MzpcXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTc1NC1cXHRcXHRcXHRcXHQuZmxhZ3MgPSBmbGFncyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE4MTc9c3RhdGljIHZvaWQgX19tcHRjcF9zdWJmbG93X3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgZmlyc3QpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODE5LVxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTgyMDpcXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTgyMS1cXHRcXHQuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTg4ND1zdGF0aWMgaW50IG1wdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE4ODUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTg4NjpzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2dfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTg4Ny1cXHRcXHRcXHRcXHQgIHNpemVfdCBsZW4sIGludCAqY29waWVkX3N5bilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE5ODA9c3RhdGljIHZvaWQgbXB0Y3BfcnBzX3JlY29yZF9zdWJmbG93cyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTk5My1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxOTk0OnN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTk1LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIwMTMtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjAxNDpcXHRcXHRyZXQgPSBtcHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHNrLCBtc2csIGxlbiwgXFx1MDAyNmNvcGllZF9zeW4pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIwMTUtXFx0XFx0Y29waWVkICs9IGNvcGllZF9zeW47XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMTM2PXN0YXRpYyB2b2lkIG1wdGNwX2VhdF9yZWN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQ2LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxNDc6c3RhdGljIGludCBfX21wdGNwX3JlY3Ztc2dfbXNrcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQ4LVxcdFxcdFxcdFxcdHNpemVfdCBsZW4sIGludCBmbGFncywgaW50IGNvcGllZF90b3RhbCxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNTM9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzczLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzNzQ6c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzNzUtXFx0XFx0XFx0IGludCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQwNzpcXHRcXHRieXRlc19yZWFkID0gX19tcHRjcF9yZWN2bXNnX21za3Eoc2ssIG1zZywgbGVuIC0gY29waWVkLCBmbGFncyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgY29waWVkLCBcXHUwMDI2dHNzLCBcXHUwMDI2Y21zZ19mbGFncyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4NTg9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg2MC17XFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg2MTpcXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg2Mi1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg5Ny1cXHRcXHRcXHR3aGlsZSAoaW5mby5zZW50IFxcdTAwM2MgaW5mby5saW1pdCkge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4OTg6XFx0XFx0XFx0XFx0cmV0ID0gbXB0Y3Bfc2VuZG1zZ19mcmFnKHNrLCBzc2ssIGRmcmFnLCBcXHUwMDI2aW5mbyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg5OS1cXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MjEwPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMjAtXFx0LmRlc3Ryb3lcXHQ9IG1wdGNwX2Rlc3Ryb3ksXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIyMTpcXHQuc2VuZG1zZ1xcdD0gbXB0Y3Bfc2VuZG1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjIyLVxcdC5pb2N0bFxcdFxcdD0gbXB0Y3BfaW9jdGwsXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIyMzpcXHQucmVjdm1zZ1xcdD0gbXB0Y3BfcmVjdm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjI0LVxcdC5yZWxlYXNlX2NiXFx0PSBtcHRjcF9yZWxlYXNlX2NiLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDU5Mj1zdGF0aWMgaW50IG1wdGNwX3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDU5Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0NTk4OnN0YXRpYyBpbnQgX19tcHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc3BsaWNlX3N0YXRlICp0c3MpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDU5OS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NjA5LS8qKlxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2MTA6ICogIG1wdGNwX3NwbGljZV9yZWFkIC0gc3BsaWNlIGRhdGEgZnJvbSBNUFRDUCBzb2NrZXQgdG8gYSBwaXBlXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDYxMS0gKiBAc29jazpcXHRzb2NrZXQgdG8gc3BsaWNlIGZyb21cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2MjMtICoqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2MjQ6c3RhdGljIHNzaXplX3QgbXB0Y3Bfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgbG9mZl90ICpwcG9zLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2MjUtXFx0XFx0XFx0XFx0IHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NjQ5LVxcdHdoaWxlICh0c3MubGVuKSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDY1MDpcXHRcXHRyZXQgPSBfX21wdGNwX3NwbGljZV9yZWFkKHNrLCBcXHUwMDI2dHNzKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NjUxLVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00Njc1LVxcdFxcdFxcdH1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0Njc2OlxcdFxcdFxcdC8qIGlmIF9fbXB0Y3Bfc3BsaWNlX3JlYWQoKSBnb3Qgbm90aGluZyB3aGlsZSB3ZSBoYXZlXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3Ny1cXHRcXHRcXHQgKiBhbiBza2IgaW4gcmVjZWl2ZSBxdWV1ZSwgd2UgZG8gbm90IHdhbnQgdG8gbG9vcC5cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ3MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXB0Y3Bfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ3MzEtXFx0LnJlYWRfc29ja1xcdCAgID0gbXB0Y3BfcmVhZF9zb2NrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ3MzI6XFx0LnNwbGljZV9yZWFkXFx0ICAgPSBtcHRjcF9zcGxpY2VfcmVhZCxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NzMzLX07XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00ODIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1wdGNwX3Y2X3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00ODQzLVxcdC5yZWFkX3NvY2tcXHQgICA9IG1wdGNwX3JlYWRfc29jayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0ODQ0OlxcdC5zcGxpY2VfcmVhZFxcdCAgID0gbXB0Y3Bfc3BsaWNlX3JlYWQsXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDg0NS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1NzozOC4zNjYyODE5ODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM2MjE2OTA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGBza19zdHJlYW1fd2FpdF9tZW1vcnlgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBzY29wZSBhbmQgdXNhZ2UuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgYnJvYWRseSBhY2Nlc3NpYmxlIG9yIHJlc3RyaWN0ZWQgdG8gc3BlY2lmaWMgY29udGV4dHMuIFRoZSBkb2N1bWVudGF0aW9uIHNob3VsZCBiZSBoZWxwZnVsLCBidXQgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY29kZSBpdHNlbGYsIHN0YXJ0aW5nIHdpdGggYG5ldC9jb3JlL3N0cmVhbS5jYCB3aGVyZSBpdCdzIGRlZmluZWQuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgdW5kZXJzdGFuZGluZyBpdHMgcHJldmFsZW5jZS4gSSdsbCBmb2N1cyBvbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGBpbnQgc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW9fcClgIGFuZCB0aGVuIGRldGVybWluZSwgYmFzZWQgb24gaXRzIGNoYXJhY3RlcmlzdGljcywgd2hldGhlciBpdCdzIGV4cG9ydGVkIGFuZCBhY3RpdmVseSB1c2VkIHRocm91Z2hvdXQgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIHdpbGwgZ3VpZGUgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2lnbmlmaWNhbmNlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjQwLjcyODQ1MzE1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTMyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHNrX3N0cmVhbV93YWl0X21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zdHJlYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9zdHJlYW0uYz0xMDA9dm9pZCBza19zdHJlYW1fd2FpdF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcXG4tLVxcbm5ldC9jb3JlL3N0cmVhbS5jLTEyMC0gKi9cXG5uZXQvY29yZS9zdHJlYW0uYzoxMjE6aW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApXFxubmV0L2NvcmUvc3RyZWFtLmMtMTIyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6NDAuNzc0MzcwMzg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5ODg4MTE5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBza19zdHJlYW1fd2FpdF9tZW1vcnlgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBza19zdHJlYW1fd2FpdF9tZW1vcnlgLi4uIHdoYXQncyBjYWxsaW5nICp0aGF0Kj8sXCIgd2hpY2gsIGluIHRoaXMgY29udGV4dCwgdHJhbnNsYXRlcyB0byB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZnVuY3Rpb24gYW5kIGZpZ3VyZSBvdXQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGJlaW5nIGNhbGxlZCBieSB0aGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBwZXJoYXBzIGEgdXNlci1zcGFjZSBkcml2ZXIsIG9yIHNvbWV3aGVyZSBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgdGVsbCBtZSBhYm91dCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBJcyBpdCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cgcGF0aD8gSXMgaXQgaW52b2x2ZWQgaW4gZXJyb3IgaGFuZGxpbmc/IEkgbmVlZCB0aGUgYmlnIHBpY3R1cmUuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUga2V5IGNhbGwgc2l0ZXMgYW5kIHRoZW4gaW1tZWRpYXRlbHkgY29uc2lkZXIgaG93IHRoZSBzeXN0ZW0gZGVzaWduIGxlYWRzIHRoZSBwcm9ncmFtIHRvIHRoYXQgcG9pbnQgb2YgZXhlY3V0aW9uLiBUaGVuIEknbGwgYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgYmVoYXZpbmcgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBhIHBvdGVudGlhbCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1Nzo0Mi43NjMxODkxNDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzYwMTQwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfc3RyZWFtX3dhaXRfbWVtb3J5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvdHJhbnNwb3J0LmM9MTQxPXNtYl9zZW5kX2t2ZWMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3QgbXNnaGRyICpzbWJfbXNnLFxcbi0tXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xNzQtXFx0XFx0ICogRXZlbiBpZiByZWd1bGFyIHNpZ25hbHMgYXJlIG1hc2tlZCwgRUlOVFIgbWlnaHQgYmVcXG5mcy9zbWIvY2xpZW50L3RyYW5zcG9ydC5jOjE3NTpcXHRcXHQgKiBwcm9wYWdhdGVkIGZyb20gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KCkgdG8gaGVyZSB3aGVuXFxuZnMvc21iL2NsaWVudC90cmFuc3BvcnQuYy0xNzYtXFx0XFx0ICogVElGX05PVElGWV9TSUdOQUwgaXMgdXNlZCBmb3IgdGFzayB3b3JrLiBGb3IgZXhhbXBsZSxcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0xMjQwPWludCBza19zdHJlYW1fd2FpdF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW9fcCk7XFxuaW5jbHVkZS9uZXQvc29jay5oOjEyNDE6aW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApO1xcbmluY2x1ZGUvbmV0L3NvY2suaC0xMjQyLXZvaWQgc2tfc3RyZWFtX3dhaXRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvX3ApO1xcbi0tXFxubmV0L2NvcmUvc3RyZWFtLmM9MTAwPXZvaWQgc2tfc3RyZWFtX3dhaXRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXFxuLS1cXG5uZXQvY29yZS9zdHJlYW0uYy0xMTYtLyoqXFxubmV0L2NvcmUvc3RyZWFtLmM6MTE3OiAqIHNrX3N0cmVhbV93YWl0X21lbW9yeSAtIFdhaXQgZm9yIG1vcmUgbWVtb3J5IGZvciBhIHNvY2tldFxcbm5ldC9jb3JlL3N0cmVhbS5jLTExOC0gKiBAc2s6IHNvY2tldCB0byB3YWl0IGZvciBtZW1vcnlcXG4tLVxcbm5ldC9jb3JlL3N0cmVhbS5jLTEyMC0gKi9cXG5uZXQvY29yZS9zdHJlYW0uYzoxMjE6aW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApXFxubmV0L2NvcmUvc3RyZWFtLmMtMTIyLXtcXG4tLVxcbm5ldC9jb3JlL3N0cmVhbS5jLTE4Ni19XFxubmV0L2NvcmUvc3RyZWFtLmM6MTg3OkVYUE9SVF9TWU1CT0woc2tfc3RyZWFtX3dhaXRfbWVtb3J5KTtcXG5uZXQvY29yZS9zdHJlYW0uYy0xODgtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQwNC1cXG5uZXQvaXB2NC90Y3AuYzoxNDA1OlxcdFxcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXFx1MDAyNnRpbWVvKTtcXG5uZXQvaXB2NC90Y3AuYy0xNDA2LVxcdFxcdGlmIChlcnIgIT0gMClcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz01MzQ9c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTYwNS13YWl0X2Zvcl9tZW1vcnk6XFxubmV0L2lwdjQvdGNwX2JwZi5jOjYwNjpcXHRcXHRlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssIFxcdTAwMjZ0aW1lbyk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTYwNy1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mjk3Mj1zdGF0aWMgYm9vbCB0Y3Bfd3JpdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtc3Nfbm93LCBpbnQgbm9uYWdsZSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zMDYyLVxcdFxcdC8qIEFyZ2gsIHdlIGhpdCBhbiBlbXB0eSBza2IoKSwgcHJlc3VtYWJseSBhIHRocmVhZFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozMDYzOlxcdFxcdCAqIGlzIHNsZWVwaW5nIGluIHNlbmRtc2coKS9za19zdHJlYW1fd2FpdF9tZW1vcnkoKS5cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzA2NC1cXHRcXHQgKiBXZSBkbyBub3Qgd2FudCB0byBzZW5kIGEgcHVyZS1hY2sgcGFja2V0IGFuZCBoYXZlXFxuLS1cXG5uZXQva2NtL2tjbXNvY2suYz03NTI9c3RhdGljIGludCBrY21fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQva2NtL2tjbXNvY2suYy03ODItXFx0XFx0c2V0X2JpdChTT0NLX05PU1BBQ0UsIFxcdTAwMjZzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmbGFncyk7XFxubmV0L2tjbS9rY21zb2NrLmM6NzgzOlxcdFxcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXFx1MDAyNnRpbWVvKTtcXG5uZXQva2NtL2tjbXNvY2suYy03ODQtXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9rY20va2Ntc29jay5jLTc5Mi1cXHRcXHRcXHRrY21fcHVzaChrY20pO1xcbm5ldC9rY20va2Ntc29jay5jOjc5MzpcXHRcXHRcXHRlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssIFxcdTAwMjZ0aW1lbyk7XFxubmV0L2tjbS9rY21zb2NrLmMtNzk0LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQva2NtL2tjbXNvY2suYy04OTMtXFx0XFx0a2NtX3B1c2goa2NtKTtcXG5uZXQva2NtL2tjbXNvY2suYzo4OTQ6XFx0XFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcXHUwMDI2dGltZW8pO1xcbm5ldC9rY20va2Ntc29jay5jLTg5NS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTk5ND1zdGF0aWMgaW50IG1wdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTA1LVxcdFxcdF9fbXB0Y3BfcHVzaF9wZW5kaW5nKHNrLCBtc2ctXFx1MDAzZW1zZ19mbGFncyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjEwNjpcXHRcXHRyZXQgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssIFxcdTAwMjZ0aW1lbyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjEwNy1cXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmM9MTU2MD1zdGF0aWMgaW50IHNjdHBfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsIGludCBlcnIpXFxuLS1cXG5uZXQvc2N0cC9zb2NrZXQuYy0xNTg5LSAqL1xcbm5ldC9zY3RwL3NvY2tldC5jOjE1OTA6LyogQlVHOiAgV2UgZG8gbm90IGltcGxlbWVudCB0aGUgZXF1aXZhbGVudCBvZiBza19zdHJlYW1fd2FpdF9tZW1vcnkoKS4gKi9cXG5uZXQvc2N0cC9zb2NrZXQuYy0xNTkxLVxcbi0tXFxubmV0L3NtYy9zbWNfdHguYz03Nz1zdGF0aWMgaW50IHNtY190eF93YWl0KHN0cnVjdCBzbWNfc29jayAqc21jLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc21jL3NtY190eC5jLTg0LVxcbm5ldC9zbWMvc21jX3R4LmM6ODU6XFx0Lyogc2ltaWxhciB0byBza19zdHJlYW1fd2FpdF9tZW1vcnkgKi9cXG5uZXQvc21jL3NtY190eC5jLTg2LVxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjktXFx0XFx0aWYgKHVubGlrZWx5KHJjKSkge1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ3MDpcXHRcXHRcXHRyYyA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXFx1MDAyNnRpbWVvKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NzEtXFx0XFx0XFx0aWYgKCFyYylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9NzY2PXN0YXRpYyBpbnQgdGxzX3N3X3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy05NzAtd2FpdF9mb3JfbWVtb3J5Olxcbm5ldC90bHMvdGxzX3N3LmM6OTcxOlxcdFxcdHJldCA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXFx1MDAyNnRpbWVvKTtcXG5uZXQvdGxzL3Rsc19zdy5jLTk3Mi1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTMwNz1zdGF0aWMgaW50IGVzcGludGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zNDYtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzozNDc6XFx0XFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcXHUwMDI2dGltZW8pO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzQ4LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjQ0LjI5OTIxMTA2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODc3OTU5MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktjb25maWcgRXhwbG9yYXRpb24gZm9yIE5ldHdvcmsgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoZXNlIGNvZGUgcGF0aHMuIEZpcnN0IHVwLCBgbmV0L2lwdjQvdGNwLmNgLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBpdCBzaG91bGQgYmUgY29udHJvbGxlZCBieSBgQ09ORklHX0lORVRgLiBOb3csIGBuZXQvY29yZS9zdHJlYW0uY2Ag4oCTIHRoYXQgb25lJ3MgdXN1YWxseSBiYWtlZCBpbjsgaXQncyBlaXRoZXIgYWx3YXlzIGJ1aWx0IG9yIHRpZWQgdG8gYENPTkZJR19ORVRgLiBCdXQgdGhhdCB0aGlyZCBmaWxlLCBgbmV0L2lwdjQvdGNwX2JwZi5jYCwgdGhhdCBvbmUgcmVxdWlyZXMgYSBjbG9zZXIgbG9vay4gSSBiZXR0ZXIgb3BlbiB1cCBpdHMgTWFrZWZpbGUgdG8gY29uZmlybSB0aG9zZSBkZXRhaWxzIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjYyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6NDcuMTc3MTcyNzg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMzMjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICs9IHRjcF9pbGxpbm9pcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gdGNwX2JwZi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB1ZHBfYnBmLm9cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg1NS1cXG5uZXQvaXB2NC90Y3AuYzo0ODU2OmJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbm5ldC9pcHY0L3RjcC5jLTQ4NTcte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTMzPXN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy05MC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6OTE6c3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtOTItXFx0XFx0XFx0aW50IGZsYWdzLCBib29sIHVuY2hhcmdlKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE1Mi1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTUzOnN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTU0LVxcdFxcdFxcdCAgICAgICB1MzIgYXBwbHlfYnl0ZXMsIGludCBmbGFncywgYm9vbCB1bmNoYXJnZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNTgtXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTU5OlxcdHJldCA9IHRjcF9icGZfcHVzaChzaywgbXNnLCBhcHBseV9ieXRlcywgZmxhZ3MsIHVuY2hhcmdlKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYwLVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNjQ6aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTY1LVxcdFxcdFxcdCAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMsIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzMtXFx0cmV0ID0gaW5ncmVzcyA/IGJwZl90Y3BfaW5ncmVzcyhzaywgcHNvY2ssIG1zZywgYnl0ZXMpIDpcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTc0OlxcdFxcdFxcdHRjcF9icGZfcHVzaF9sb2NrZWQoc2ssIG1zZywgYnl0ZXMsIGZsYWdzLCBmYWxzZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTE3NS1cXHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzctfVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNzg6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzM0LVxcbm5ldC9pcHY0L3RjcF9icGYuYzozMzU6c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zMzYte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2Ny1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzY4OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjktXFx0XFx0XFx0ICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQxNy1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDE4OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00MTktXFx0XFx0XFx0XFx0c3RydWN0IHNrX21zZyAqbXNnLCBpbnQgKmNvcGllZCwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ2MS1cXHRjYXNlIF9fU0tfUEFTUzpcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDYyOlxcdFxcdHJldCA9IHRjcF9icGZfcHVzaChzaywgbXNnLCB0b3NlbmQsIGZsYWdzLCB0cnVlKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDYzLVxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg2LVxcdFxcdG9yaWdzaXplID0gbXNnLVxcdTAwM2VzZy5zaXplO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo0ODc6XFx0XFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00ODgtXFx0XFx0XFx0XFx0XFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo1MzQ6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcF9icGYuYy01MzUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTU5OC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NTk5OlxcdFxcdGVyciA9IHRjcF9icGZfc2VuZF92ZXJkaWN0KHNrLCBwc29jaywgbXNnX3R4LCBcXHUwMDI2Y29waWVkLCBmbGFncyk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTYwMC1cXHRcXHRpZiAodW5saWtlbHkoZXJyIFxcdTAwM2MgMCkpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM2PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGNwdjZfcHJvdF9sb2NrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjM3OnN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGNwX2JwZl9wcm90c1tUQ1BfQlBGX05VTV9QUk9UU11bVENQX0JQRl9OVU1fQ0ZHU107XFxubmV0L2lwdjQvdGNwX2JwZi5jLTYzOC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjM5OnN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY0MC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcHJvdG8gKmJhc2UpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ0LVxcdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVxcdFxcdD0gc29ja19tYXBfY2xvc2U7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY0NTpcXHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NDYtXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjQ3OlxcdHByb3RbVENQX0JQRl9CQVNFXS5pb2N0bFxcdFxcdD0gdGNwX2JwZl9pb2N0bDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ4LVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NDktXFx0cHJvdFtUQ1BfQlBGX1RYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTA6XFx0cHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnXFx0XFx0PSB0Y3BfYnBmX3NlbmRtc2c7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1MS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUyLVxcdHByb3RbVENQX0JQRl9SWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUzOlxcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU0LVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXFx0cHJvdFtUQ1BfQlBGX1RYUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfVFhdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTY6XFx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny19XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU5OnN0YXRpYyB2b2lkIHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChzdHJ1Y3QgcHJvdG8gKm9wcylcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjYwLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NjMtXFx0XFx0aWYgKGxpa2VseShvcHMgIT0gdGNwdjZfcHJvdF9zYXZlZCkpIHtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjY0OlxcdFxcdFxcdHRjcF9icGZfcmVidWlsZF9wcm90b3ModGNwX2JwZl9wcm90c1tUQ1BfQlBGX0lQVjZdLCBvcHMpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NjUtXFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnRjcHY2X3Byb3Rfc2F2ZWQsIG9wcyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcwLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzE6c3RhdGljIGludCBfX2luaXQgdGNwX2JwZl92NF9idWlsZF9wcm90byh2b2lkKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzIte1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzM6XFx0dGNwX2JwZl9yZWJ1aWxkX3Byb3Rvcyh0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfSVBWNF0sIFxcdTAwMjZ0Y3BfcHJvdCk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3NC1cXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc1LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc2OmxhdGVfaW5pdGNhbGwodGNwX2JwZl92NF9idWlsZF9wcm90byk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3Ny1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc4OnN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02Nzkte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4OC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY4OTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVxcdFxcdFxcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcxMi1cXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXFxubmV0L2lwdjQvdGNwX2JwZi5jOjcxMzpcXHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxcbm5ldC9pcHY0L3RjcF9icGYuYy03MTQtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzIzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3MjQ6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MjUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1MC1cXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbm5ldC9pcHY0L3RjcF9icGYuYzo3NTE6XFx0XFx0aWYgKHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhwc29jay1cXHUwMDNlc2tfcHJvdG8pKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NTItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1My1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzU0OlxcdFxcdHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cXHUwMDNlc2tfcHJvdG8pO1xcbm5ldC9pcHY0L3RjcF9icGYuYy03NTUtXFx0fVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Ny1cXHQvKiBQYWlycyB3aXRoIGxvY2tsZXNzIHJlYWQgaW4gc2tfY2xvbmVfbG9jaygpICovXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1ODpcXHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIFxcdTAwMjZ0Y3BfYnBmX3Byb3RzW2ZhbWlseV1bY29uZmlnXSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1OS1cXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYwLX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzYxOkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NjM6LyogSWYgYSBjaGlsZCBnb3QgY2xvbmVkIGZyb20gYSBsaXN0ZW5pbmcgc29ja2V0IHRoYXQgaGFkIHRjcF9icGZcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzY0LSAqIHByb3RvY29sIGNhbGxiYWNrcyBpbnN0YWxsZWQsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgY2FsbGJhY2tzIHRvXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc2NS0gKiB0aGUgZGVmYXVsdCBvbmVzIGJlY2F1c2UgdGhlIGNoaWxkIGRvZXMgbm90IGluaGVyaXQgdGhlIHBzb2NrIHN0YXRlXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc2NjogKiB0aGF0IHRjcF9icGYgY2FsbGJhY2tzIGV4cGVjdC5cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzY3LSAqL1xcbm5ldC9pcHY0L3RjcF9icGYuYzo3Njg6dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03Njkte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3MS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzcyOlxcdGlmIChpc19pbnNpZGV2YXIocHJvdCwgdGNwX2JwZl9wcm90cykpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3My1cXHRcXHRuZXdzay1cXHUwMDNlc2tfcHJvdCA9IHNrLVxcdTAwM2Vza19wcm90X2NyZWF0b3I7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0xMDcwPXN0YXRpYyB2b2lkIHRjcF9ydHRfZXN0aW1hdG9yKHN0cnVjdCBzb2NrICpzaywgbG9uZyBtcnR0X3VzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEyMi1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoxMTIzOlxcdFxcdFxcdHRjcF9icGZfcnR0KHNrLCBtcnR0X3VzLCBzcnR0KTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMTI0LVxcdFxcdH1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTExMzItXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTEzMzpcXHRcXHR0Y3BfYnBmX3J0dChzaywgbXJ0dF91cywgc3J0dCk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEzNC1cXHR9XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NDU0PXN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ4NC1cXHQgICAgKGVjbl9va19kc3QgXFx1MDAyNiBEU1RfRkVBVFVSRV9FQ05fQ0EpIHx8XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzQ4NTpcXHQgICAgdGNwX2JwZl9jYV9uZWVkc19lY24oKHN0cnVjdCBzb2NrICopcmVxKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDg2LVxcdFxcdGluZXRfcnNrKHJlcSktXFx1MDAzZWVjbl9vayA9IDE7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTExNjI9c3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExOTEtXFx0XFx0aWYgKCFJTkVUX0VDTl9pc19jYXBhYmxlKHRvcykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjExOTI6XFx0XFx0ICAgIHRjcF9icGZfY2FfbmVlZHNfZWNuKChzdHJ1Y3Qgc29jayAqKXJlcSkpXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTkzLVxcdFxcdFxcdHRvcyB8PSBJTkVUX0VDTl9FQ1RfMDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Nz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNjAtXFx0LmdldHNvY2tvcHRcXHRcXHQ9IHRjcF9nZXRzb2Nrb3B0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM2MTpcXHQuYnBmX2J5cGFzc19nZXRzb2Nrb3B0XFx0PSB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM2Mi1cXHQua2VlcGFsaXZlXFx0XFx0PSB0Y3Bfc2V0X2tlZXBhbGl2ZSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3Mi0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzczOlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzc0LSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTU0Nj1zdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02NjMtXFx0bmV3dHAtXFx1MDAzZWJwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjY2NDpcXHR0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTc6NDcuMjI1NTE3NDUzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMjU4MjgyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBLY29uZmlnIGZvciBTb2NrZXQgYW5kIE1QVENQIFN1cHBvcnQqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgbXkgY3VycmVudCBwcm9qZWN0LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIG5ldHdvcmsgc29ja2V0cyBhbmQgTVBUQ1AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgS2NvbmZpZy4gR290dGEgbWFrZSBzdXJlIHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBlbmFibGVkIG9yIGF0IGxlYXN0IGNvbmZpZ3VyYWJsZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGBORVRfU09DS19NU0dgIGlzIGF2YWlsYWJsZS4gVGhhdCdzIGEgZm91bmRhdGlvbmFsIGJ1aWxkaW5nIGJsb2NrLCBzbyBpdOKAmXMgdGhlIGltbWVkaWF0ZSBwcmlvcml0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBXaGVyZSBpcyBpdCBkZWZpbmVkLCB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBUaGVuLCBvZiBjb3Vyc2UsIE1QVENQLiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBNUFRDUCBpcyBlbmFibGVkLCBhbmQgaWYgc28sIGhvdy4gQXJlIHRoZXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gRG9lcyBpdCBkZXBlbmQgb24gc3BlY2lmaWMga2VybmVsIGZlYXR1cmVzPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBnZW5lcmFsIHNlYXJjaCBhbmQgdGhlbiBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4gVGhpcyBpcyBhbGwgYWJvdXQgdmVyaWZ5aW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCdzIGNhcGFiaWxpdGllcyBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHdyaXRpbmcgYSBsaW5lIG9mIGNvZGUuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IGNoYXNpbmcgZ2hvc3RzISBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgSSBjYW4ndCBhZmZvcmQgdG8gd2FzdGUgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3OTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1Nzo1MC4yNTEzNDgyMTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDgwNTk5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TT0NLX01TR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ3OC1cXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTQ4MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjUxLjc5OTQxMzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQyMjU3OTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgTkVUX1NPQ0tfTVNHIFNlbGVjdG9yKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogXCJMZXQncyBpc29sYXRlIHdoYXQncyBhY3R1YWxseSB1c2luZyB0aGUgYE5FVF9TT0NLX01TR2Agc2VsZWN0b3IuXCIgVGhpcyBwcm9iYWJseSBtZWFucyBJJ20gaW4gdGhlIG1pZGRsZSBvZiBkZWJ1Z2dpbmcgYSBuZXR3b3JraW5nIG9yIHNvY2tldC1yZWxhdGVkIGlzc3VlLiBUaGlzIHNlbGVjdG9yIGlzIGEga2V5IHNpZ25hbCBpbiB0aGUgc3lzdGVtLCBhbmQgaXQgY291bGQgYmUgaW5kaWNhdGluZyBhbnkgbnVtYmVyIG9mIHRoaW5ncywgZnJvbSBuZXcgZGF0YSBhcnJpdmluZyBvbiBhIHNvY2tldCB0byB0aGUgc29ja2V0IHN0YXRlIGNoYW5naW5nLiBcblxuTXkgbmV4dCBzdGVwcyB3aWxsIGRlcGVuZCBvbiB0aGUgY29udGV4dCwgb2YgY291cnNlLCBidXQgdGhlIGNvcmUgb2JqZWN0aXZlIHJlbWFpbnMgdGhlIHNhbWU6IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyB0aGF0IGFyZSByZWdpc3RlcmluZywgdXNpbmcsIG9yIHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudC4gSSdsbCBsaWtlbHkgYmUgdHJhY2luZyBmdW5jdGlvbiBjYWxscywgZXhhbWluaW5nIGtlcm5lbCBtb2R1bGVzIChpZiBhcHBsaWNhYmxlKSwgYW5kIHBvc3NpYmx5IGFuYWx5emluZyBwYWNrZXQgY2FwdHVyZXMgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3IgYXJvdW5kIHRoZSBgTkVUX1NPQ0tfTVNHYCBldmVudHMuIEkgbWlnaHQgYmUgbG9va2luZyBmb3IgcmFjZSBjb25kaXRpb25zLCByZXNvdXJjZSBsZWFrcywgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgc29ja2V0LXVzaW5nIGNvbXBvbmVudHMuIEkgbWlnaHQgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBleHBvc2VkIGJ5IHRoaXMgc2VsZWN0b3IuIFRoZSBnb2FsIGhlcmUgaXMgZWZmaWNpZW50LCB0YXJnZXRlZCBkaWFnbm9zdGljcywgbGV2ZXJhZ2luZyBteSBleHBlcnRpc2UgdG8gcXVpY2tseSBuYXJyb3cgZG93biB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNTYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1Nzo1NC4yMjE5OTU4NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE0Nzg2NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9TT0NLX01TR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMzMtXFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG5rZXJuZWwvYnBmL0tjb25maWc6MzQ6XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuLS1cXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjYtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZzozNjc6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTM2OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjQvS2NvbmZpZy0zODctXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjYvS2NvbmZpZzo5NDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZy05NS1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xcbi0tXFxubmV0L3Rscy9LY29uZmlnLTEwLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxubmV0L3Rscy9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvdGxzL0tjb25maWctMTItXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjU1Ljc5MzQ3OTQyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODcwMDkxNDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIEJQRiBhbmQgTVBUQ1AgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIHNvIGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgTkVUX1NPQ0tfTVNHYCB3aGVuIGBORVRgIGlzIHNlbGVjdGVkLiBCdXQsIEkgbmVlZCB0byBjb25zaWRlciBNUFRDUCBhcyB3ZWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3QuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgTVBUQ1AgaXMgY29uZmlndXJlZCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IGBCUEZfU1lTQ0FMTGAgaW50ZXJhY3RzIHdpdGggaXQuIFRoaXMgaXMgYSBjcml0aWNhbCBjaGVjayB0byBlbnN1cmUgdGhlIGZlYXR1cmUgc2V0IEknbSB3b3JraW5nIHdpdGggaXMgY29uc2lzdGVudCBhbmQgY29tcGF0aWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NDMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1Nzo1Ny42NjM1NzM0NjhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDM3NjQyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1QVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnLTEtXFxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWctMjQtXFxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU3OjU5LjIwNzM0MzgxM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzEzNjIwMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNdWx0aXBhdGggVENQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBpbnN0cnVjdGlvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBNUFRDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBzcGVjaWZpYyBmaWxlIHRvIGV4YW1pbmUgaXMgYG5ldC9tcHRjcC9LY29uZmlnYC4gSSBhbHJlYWR5IGtub3cgd2hhdCB0aGlzIGZpbGUgaG91c2VzOiBpdCdzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgTXVsdGlwYXRoIFRDUC4gTXkgZ3Vlc3MgaXMsIHRoZSBwcm92aWRlZCBsaW5lcyAoMS0xNSBhcyByZXF1ZXN0ZWQpIGNvbnRhaW4gdGhlIGhpZ2gtbGV2ZWwgTVBUQ1AgZmVhdHVyZXMgYW5kIG1heWJlIHNvbWUgYmFzaWMgZGVwZW5kZW5jaWVzIG9yIGludHJvZHVjdGlvbiBjb21tZW50cy4gVGhhdCBwYXJ0IHNlZW1zIGNsZWFyIGVub3VnaDsgSSdsbCBleHBlY3QgdG8gZmluZCBhbiBvdmVydmlldyBvZiB0aGUgbW9kdWxlcycgYXJjaGl0ZWN0dXJlIHRoZXJlLiBUaW1lIHRvIHNlZSB3aGF0IGl0ICphY3R1YWxseSogbG9va3MgbGlrZSB0byBiZSBjZXJ0YWluIG9mIG15IGFzc3VtcHRpb25zLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTg6MDEuNTIwOTY3NTY4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0XFxuICAgMjpcXHRjb25maWcgTVBUQ1BcXG4gICAzOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXFxuICAxMDpcXHRcXHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XFxuICAxMTpcXHRcXHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcXG4gIDEyOlxcdFxcdCAgTVBUQ1AuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIE1QVENQXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuICAxODpcXHRcXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBNUFRDUF9JUFY2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjAxLjUyMTA1NTUyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTIyMTgzNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU3RhY2sgSW50ZXJhY3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBhcmVhLCBsaWtlbHkgcmVsYXRlZCB0byBuZXR3b3JraW5nLCBhbmQgdGhlc2UgdGVybXMga2VlcCBwb3BwaW5nIHVwOiBgSU5FVGAsIGBNUFRDUGAsIGFuZCBgQlBGX1NZU0NBTExgLCBvciBwb3RlbnRpYWxseSBgTkVUX1NPQ0tfTVNHYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGVzZSB0aGluZ3MgaW50ZXJhY3QuIEkgcmVjb2duaXplIHRoZW0gYXMgY29yZSBjb21wb25lbnRzIGFuZCBtZWNoYW5pc21zIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBoaXN0b3J5LCB0aGUgJ3doeScgb2YgdGhlIGNvZGUsIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBjaGFuZ2VzLCB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBHaXQgY29tbWl0IGxvZyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhdGNoIGluIHF1ZXN0aW9uLiBUaGF0IGxvZyBzaG91bGQgZ2l2ZSBtZSB0aGUgaGlzdG9yaWNhbCBjb250ZXh0LCB0aGUgcHJvYmxlbSBiZWluZyBhZGRyZXNzZWQsIGFuZCB0aGUgdGhvdWdodCBwcm9jZXNzIG9mIHRoZSBkZXZlbG9wZXJzIGludm9sdmVkLiBJJ20gaG9waW5nIGl0J2xsIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBhbmQgaW50ZWdyYXRpb24gb2YgdGhlc2UgZWxlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzQ5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODowNC4wNDMyNDcxNThaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjYyNjY4ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODowNS42MDk1MzgxMzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzIwMjMzODQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBFcnJvciBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbW1pdCB0aGlzIGlzIHJlbGF0ZWQgdG8uIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGtlcm5lbCBzb3VyY2UgbG9ncyB1c2luZyBhIGdyZXBwZXIgc2VhcmNoLCBidXQgZ3JlcHBlciBpcyBvbiBrZXJuZWwgc291cmNlLCBzbyBJIHdpbGwgc3dpdGNoIHRvIGdpdCBsb2cgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBjb21taXQuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCdzIGNsZWFyIHRoaXMgaXMgYSBjb2RlIHJlZmFjdG9yIGZvciBob3cgYHNrLVx1MDAzZXNrX2VycmAgaXMgY2hlY2tlZCBhY3Jvc3Mgc2V2ZXJhbCBUQ1AtcmVsYXRlZCBmdW5jdGlvbnMuICBFc3NlbnRpYWxseSwgdGhlIGNoYW5nZSBpbnZvbHZlcyByZXBsYWNpbmcgZGlyZWN0IGFjY2VzcyBvZiBgc2stXHUwMDNlc2tfZXJyYCB3aXRoIGBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKWAgaW4gc2V2ZXJhbCBjb250ZXh0cyBsaWtlIGB0Y3BfcmVjdl9zaG91bGRfc3RvcGAsIGBza19zdHJlYW1fd2FpdF9tZW1vcnlgLCBgdGNwX3NwbGljZV9yZWFkYCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCBhbmQgdGhlIGBtcHRjcGAgc2VuZCBhbmQgcmVjdiBwYXRocy4gQWxzbywgSSBzZWUgYHRjcF9icGZfc2VuZG1zZ2AgaGFzIGJlZW4gY2hhbmdlZCB3aXRoIGhvdyBgc2stXHUwMDNlc2tfZXJyYCBpcyBoYW5kbGVkLiAgXG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGFib3V0IGVuc3VyaW5nIHRoYXQgdGhlIGVycm9yIHN0YXR1cyBvZiBhIHNvY2tldCAoYHNrX2VycmApIGlzIHJlYWQgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIuIGBza19lcnJgIGNhbiBiZSBtb2RpZmllZCBjb25jdXJyZW50bHkgYnkgYHNvY2tfZXJyb3IoKWAsIHNvIGEgcmVndWxhciBsb2FkIGNvdWxkIGJlIHJhY3kuIFVzaW5nIGBSRUFEX09OQ0VgIGVuZm9yY2VzIGEgbWVtb3J5IGJhcnJpZXIsIGd1YXJhbnRlZWluZyB0aGF0IHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBvZiBgc2tfZXJyYCBpcyBvYnNlcnZlZC4gVGhpcyBzaG91bGQgaW1wcm92ZSBkYXRhIGNvbnNpc3RlbmN5LCBlc3BlY2lhbGx5IGluIG11bHRpdGhyZWFkZWQgc2NlbmFyaW9zLCBvciBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIG1lbW9yeSBhY2Nlc3Mgb3JkZXIgaXMgbm90IHN0cmljdC4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcyBpbXByb3ZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjEyLjgxMTg3OTE4MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ1OlxcdFxcbiA1NDY6XFx0XFx0cHNvY2sgPSBza19wc29ja19nZXQoc2spO1xcbiA1NDc6XFx0XFx0aWYgKHVubGlrZWx5KCFwc29jaykpXFxuIDU0ODpcXHRcXHRcXHRyZXR1cm4gdGNwX3NlbmRtc2coc2ssIG1zZywgc2l6ZSk7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDU1MTpcXHRcXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4gNTUyOlxcdFxcdHdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykpIHtcXG4gNTUzOlxcdFxcdFxcdGJvb2wgZW5vc3BjID0gZmFsc2U7XFxuIDU1NDpcXHRcXHRcXHR1MzIgY29weSwgb3NpemU7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdFxcdGVyciA9IC1SRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2Vycik7XFxuIDU1NzpcXHRcXHRcXHRpZiAoZXJyKVxcbiA1NTg6XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRcXHRjb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpO1xcbiA1NjE6XFx0XFx0XFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxcbiA1NjI6XFx0XFx0XFx0XFx0Z290byB3YWl0X2Zvcl9zbmRidWY7XFxuIDU2MzpcXHRcXHRcXHRpZiAocHNvY2stXFx1MDAzZWNvcmspIHtcXG4gNTY0OlxcdFxcdFxcdFxcdG1zZ190eCA9IHBzb2NrLVxcdTAwM2Vjb3JrO1xcbiA1NjU6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTY2OlxcdFxcdFxcdFxcdG1zZ190eCA9IFxcdTAwMjZ0bXA7XFxuIDU2NzpcXHRcXHRcXHRcXHRza19tc2dfaW5pdChtc2dfdHgpO1xcbiA1Njg6XFx0XFx0XFx0fVxcbiA1Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjEyLjgxMTk3MDI4MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4ODQyMzg2MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0Y3BfcmVjdm1zZ19sb2NrZWRgKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBgdGNwX3JlY3Ztc2dfbG9ja2VkYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI3NjAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLCB0aGUgZXhhY3QgbG9naWMgYmVpbmcgZXhlY3V0ZWQgaW4gdGhhdCBhcmVhIG9mIHRoZSBmdW5jdGlvbi4gTGV0IG1lIHNlZSB3aGF0IHRoYXQgY2h1bmsgb2YgY29kZSBpcyBkb2luZyAtIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHRvIHRoZSBpc3N1ZSBpbiBob3cgdGhlIGRhdGEgaXMgYmVpbmcgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgYnVmZmVyIG1hbmFnZW1lbnQgcHJvYmxlbSwgYSBzeW5jaHJvbml6YXRpb24gaXNzdWUsIGEgc2VxdWVuY2luZyBwcm9ibGVtLCBvciBtYXliZSBldmVuIHNvbWV0aGluZyBzdWJ0bGUgcmVsYXRlZCB0byBmbGFncyBvciBwcm90b2NvbCBzdGF0ZS4gS25vd2luZyB0aGF0IHNwZWNpZmljIGNvZGUgYmxvY2sgd2lsbCBoZWxwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTg6MjEuNjU0MzYwMzI3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzUwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzUwOlxcdFxcdFxcdC8qIFdlbGwsIGlmIHdlIGhhdmUgYmFja2xvZywgdHJ5IHRvIHByb2Nlc3MgaXQgbm93IHlldC4gKi9cXG4yNzUxOlxcdFxcbjI3NTI6XFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNlPSB0YXJnZXQgXFx1MDAyNlxcdTAwMjYgIVJFQURfT05DRShzay1cXHUwMDNlc2tfYmFja2xvZy50YWlsKSlcXG4yNzUzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3NTQ6XFx0XFxuMjc1NTpcXHRcXHRcXHRpZiAoY29waWVkKSB7XFxuMjc1NjpcXHRcXHRcXHRcXHRpZiAoIXRpbWVvIHx8XFxuMjc1NzpcXHRcXHRcXHRcXHQgICAgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc2spKVxcbjI3NTg6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjc1OTpcXHRcXHRcXHR9IGVsc2Uge1xcbjI3NjA6XFx0XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG4yNzYxOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3NjI6XFx0XFxuMjc2MzpcXHRcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19lcnIpKSB7XFxuMjc2NDpcXHRcXHRcXHRcXHRcXHRjb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTtcXG4yNzY1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI3NjY6XFx0XFx0XFx0XFx0fVxcbjI3Njc6XFx0XFxuMjc2ODpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKVxcbjI3Njk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjc3MDpcXHRcXG4yNzcxOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuMjc3MjpcXHRcXHRcXHRcXHRcXHQvKiBUaGlzIG9jY3VycyB3aGVuIHVzZXIgdHJpZXMgdG8gcmVhZFxcbjI3NzM6XFx0XFx0XFx0XFx0XFx0ICogZnJvbSBuZXZlciBjb25uZWN0ZWQgc29ja2V0LlxcbjI3NzQ6XFx0XFx0XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjIxLjY1NDU0NzgwN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjA5NDYyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgdGNwX3NwbGljZV9yZWFkYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYHRjcF9zcGxpY2VfcmVhZGAg4oCTIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGRhdGEgdHJhbnNmZXIgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgVENQIHN0YWNrLiBTcGVjaWZpY2FsbHksIGl0J3MgZGVmaW5lZCBpbiBgbmV0L2lwdjQvdGNwLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29udGV4dCBvZiBJUHY0LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgZGF0YSBpcyBtb3ZlZCBkaXJlY3RseSBmcm9tIHRoZSBzb2NrZXQgYnVmZmVyIHRvIHRoZSBhcHBsaWNhdGlvbiwgaG9wZWZ1bGx5IGJ5cGFzc2luZyB1bm5lY2Vzc2FyeSBjb3B5aW5nIHdoZW5ldmVyIHBvc3NpYmxlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIGJ1ZmZlciBtYW5hZ2VtZW50LCBtZW1vcnkgbWFwcGluZywgYW5kIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyB0aGF0IGxldmVyYWdlIHRoZSBrZXJuZWwncyBhYmlsaXR5IHRvIG1pbmltaXplIGRhdGEgbW92ZW1lbnQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBrZWVwIG15IGV5ZSBvdXQgZm9yIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3BsaWNlIGluZnJhc3RydWN0dXJlLCB3aGljaCBpcyB0aGUgY29yZSBvZiB0aGlzIHdob2xlIGFwcHJvYWNoLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTE5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODoyNC4yNjQwMTE5NzZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzNTpcXHRcXG4gODM2OlxcdFxcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fTk9OQkxPQ0spO1xcbiA4Mzc6XFx0XFx0d2hpbGUgKHRzcy5sZW4pIHtcXG4gODM4OlxcdFxcdFxcdHJldCA9IF9fdGNwX3NwbGljZV9yZWFkKHNrLCBcXHUwMDI2dHNzKTtcXG4gODM5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA4NDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg0MTpcXHRcXHRcXHRlbHNlIGlmICghcmV0KSB7XFxuIDg0MjpcXHRcXHRcXHRcXHRpZiAoc3BsaWNlZClcXG4gODQzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NDQ6XFx0XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG4gODQ1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NDY6XFx0XFx0XFx0XFx0aWYgKFJFQURfT05DRShzay1cXHUwMDNlc2tfZXJyKSkge1xcbiA4NDc6XFx0XFx0XFx0XFx0XFx0cmV0ID0gc29ja19lcnJvcihzayk7XFxuIDg0ODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gODQ5OlxcdFxcdFxcdFxcdH1cXG4gODUwOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pXFxuIDg1MTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gODUyOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuIDg1MzpcXHRcXHRcXHRcXHRcXHQvKlxcbiA4NTQ6XFx0XFx0XFx0XFx0XFx0ICogVGhpcyBvY2N1cnMgd2hlbiB1c2VyIHRyaWVzIHRvIHJlYWRcXG4gODU1OlxcdFxcdFxcdFxcdFxcdCAqIGZyb20gbmV2ZXIgY29ubmVjdGVkIHNvY2tldC5cXG4gODU2OlxcdFxcdFxcdFxcdFxcdCAqL1xcbiA4NTc6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVOT1RDT05OO1xcbiA4NTg6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg1OTpcXHRcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjI0LjI2NDIzMTg0NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MDAwNjAwMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBEZXRlcm1pbmF0aW9uOiBBIFN5c3RlbWF0aWMgUmV2aWV3KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIG1vc3QgZWZmZWN0aXZlIGBGb2N1c1N5bWJvbHNgIHRvIGd1aWRlIHRoZSBmdXp6ZXIsIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IGRpbHV0aW9uIG9mIGVmZm9ydC4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHN0aWNraW5nIHRvIHRoZSBndWlkZWxpbmVzIGluIFNlY3Rpb24gNCBvZiB0aGUgZG9jdW1lbnRhdGlvbi4gSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCB0YXJnZXQgc3BlY2lmaWMgbG9naWMgYW5kIGVudHJ5cG9pbnRzLlxuXG5Pa2F5LCBJJ3ZlIGdvdCB0aGUgZnVuY3Rpb25zIEknbSBpbnRlcmVzdGVkIGluOiBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCwgYHRjcF9zcGxpY2VfcmVhZGAsIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBgdGNwX3JlY3Ztc2dfbG9ja2VkYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBgdGNwX2JwZl9zZW5kbXNnYCwgYG1wdGNwX3NlbmRtc2dgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc3BsaWNlX3JlYWRgLiBOb3csIEkgbmVlZCB0byBldmFsdWF0ZSBlYWNoIG9uZSBhZ2FpbnN0IHRob3NlIGNyaXRlcmlhLlxuXG5GaXJzdCwgSSBhbSBjaGVja2luZyB3aGV0aGVyIHRoZSBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBub3QuIFNvbWUgYXJlIHN0YXRpYywgbGlrZSBgdGNwX3JlY3Ztc2dfbG9ja2VkYCwgYnV0IEkga25vdyBpdCdzIG9mdGVuIG5vdCBpbmxpbmVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNhbGxzIHRoZW0uIEl0IGxvb2tzIGxpa2UgYHRjcF9yZWN2bXNnYCBjYWxscyBpdCBhbmQgaXQgaXMgbm9uLXN0YXRpYy4gQmVjYXVzZSBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBoYXMgbXVsdGlwbGUgY2FsbGVycywgR0NDIHdpbGwgbGlrZWx5IG5vdCBpbmxpbmUgaXQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHRjcF9yZWN2bXNnX2xvY2tlZGAgaGFzIGEgc3ltYm9sLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBkb2N1bWVudGF0aW9uLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBub3QgaW5jbHVkaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSB0b28gZ2VuZXJhbC4gV2hpbGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGFyZSBhc3NvY2lhdGVkIHdpdGggVENQIHNvY2tldHMsIGFuZCBJIG5lZWQgdG8gYXZvaWQgdGhlc2UgaG90LXBhdGhzLCBpdCBpcyBva2F5IHNpbmNlIGl0IGlzIGEgc3BlY2lmaWMgZW50cnlwb2ludCBmb3IgVENQIHNvY2tldHMgYW5kIGNvbnRhaW5zIHRoZSBhbHRlcmVkIGxvZ2ljLlxuXG5TbywgbGV0J3MgZXhhbWluZSB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbnMgdG8gc2VlIGlmIHRoZXkncmUgZ29vZCBGb2N1c1N5bWJvbHM6IGB0Y3Bfc3BsaWNlX3JlYWRgLCBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCwgYHRjcF9icGZfc2VuZG1zZ2AsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYG1wdGNwX3NlbmRtc2dgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc3BsaWNlX3JlYWRgLiBUaGF0IGxvb2tzIHByZXR0eSB0YXJnZXRlZC5cblxuSSBzdGlsbCBuZWVkIHRvIGFkZHJlc3MgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLiBXYWl0IGEgbWludXRlLCBJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aG9zZSBzeW1ib2xzIGV4aXN0IGluIHZtbGludXguXG5cbk9rYXksIGxldCdzIGFkZHJlc3Mgc3RhdGljIGlubGluZSBmdW5jdGlvbnMuIEkndmUgZ290IGB0Y3BfcmVjdl9zaG91bGRfc3RvcGAsIHdoaWNoIGlzIHN0YXRpYyBpbmxpbmUsIGJ1dCBpcyBjYWxsZWQgYnkgYHRjcF9zcGxpY2VfcmVhZGAsIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc3BsaWNlX3JlYWRgLCB3aGljaCBhcmUgbm9uLXN0YXRpYy5cblxuRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgcmVsZXZhbnQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgYG5ldC9jb3JlL3N0cmVhbS5jYCwgYG5ldC9pcHY0L3RjcC5jYCwgYG5ldC9pcHY0L3RjcF9icGYuY2AsIGFuZCBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCBhbmQgSSBoYXZlIGlkZW50aWZpZWQgdGhlIHJpZ2h0IGZ1bmN0aW9ucyBmb3IgZWFjaC5cblxuSSB0aGluayBJJ3ZlIG5hcnJvd2VkIGl0IGRvd24gdG86IGBza19zdHJlYW1fd2FpdF9tZW1vcnlgLCBgdGNwX3NwbGljZV9yZWFkYCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCBgdGNwX2JwZl9zZW5kbXNnYCwgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBgbXB0Y3Bfc2VuZG1zZ2AsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zcGxpY2VfcmVhZGAuXG5cbk5vdywgSSBhbHNvIGhhdmUgdG8gY29uc2lkZXIgdGhlaXIgRW5hYmxlQ29uZmlncy4gRm9yIGBuZXQvaXB2NC90Y3AuY2AgYW5kIGBpbmNsdWRlL25ldC90Y3AuaGAsIGl0J3MgYElORVRgLiBGb3IgYG5ldC9pcHY0L3RjcF9icGYuY2AsIGl0J3MgYEJQRl9TWVNDQUxMYCwgc2luY2UgYE5FVF9TT0NLX01TR2AgaXMgc2VsZWN0ZWQgYnkgb3RoZXIgY29uZmlncywgbm90IGRpcmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB1c2VyIGVuYWJsZXMgYEJQRl9TWVNDQUxMYC5cblxuT2theSwgSSd2ZSBnb3QgZXZlcnl0aGluZyBJIG5lZWQgdG8gZGVmaW5lIHRoZSBGb2N1c1N5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjMzLjI2NDgzNDU5OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3AvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfTVBUQ1ApICs9IG1wdGNwLm9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0bXB0Y3AteSA6PSBwcm90b2NvbC5vIHN1YmZsb3cubyBvcHRpb25zLm8gdG9rZW4ubyBjcnlwdG8ubyBjdHJsLm8gcG0ubyBkaWFnLm8gXFxcXFxcbiAgIDU6XFx0XFx0ICAgbWliLm8gcG1fbmV0bGluay5vIHNvY2tvcHQubyBwbV91c2Vyc3BhY2UubyBmYXN0b3Blbi5vIHNjaGVkLm8gXFxcXFxcbiAgIDY6XFx0XFx0ICAgbXB0Y3BfcG1fZ2VuLm8gcG1fa2VybmVsLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0b2JqLSQoQ09ORklHX1NZTl9DT09LSUVTKSArPSBzeW5jb29raWVzLm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19JTkVUX01QVENQX0RJQUcpICs9IG1wdGNwX2RpYWcub1xcbiAgMTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjU4OjMzLjI2NDg5MDkwOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjkxNzQwMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBNUFRDUCoqXG5cbk9rYXksIHNvIEknbSB3b3JraW5nIG9uIGdldHRpbmcgdGhpcyBNUFRDUCBjb25maWd1cmF0aW9uIHJpZ2h0LiBCYXNlZCBvbiB0aGUgZmlsZSBzdHJ1Y3R1cmUsIGBwcm90b2NvbC5vYCBpcyBjbGVhcmx5IG5lc3RlZCB3aXRoaW4gYG1wdGNwLm9gLCB3aGljaCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfTVBUQ1BgIGlzIHNldC4gTm93LCBgQ09ORklHX01QVENQYCBpdHNlbGYgaGFzIGEgZGVwZW5kZW5jeSBvbiBgSU5FVGAuIFNvLCB0aGUgYmFzZSByZXF1aXJlbWVudHMgYXJlOiBgSU5FVGAsIGBNUFRDUGAsIGFuZCBgQlBGX1NZU0NBTExgLlxuXG5MZXQncyBkbyBhIHF1aWNrIHN3ZWVwIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwuIERpdmluZyBpbnRvIGBuZXQvbXB0Y3AvS2NvbmZpZ2AsIGl0IGNvbmZpcm1zIHRoZSBgZGVwZW5kcyBvbiBJTkVUYCwgd2hpY2ggSSBleHBlY3RlZCwgYW5kIHRoZW4gaXQgKnNlbGVjdHMqIGEgZmV3IHRoaW5nczogYFNLQl9FWFRFTlNJT05TYCwgYENSWVBUT19MSUJfU0hBMjU2YCwgYW5kIGBDUllQVE9fTElCX1VUSUxTYC4gVGhlc2UgYXJlIGFsbCBhdXRvbWF0aWMgc2VsZWN0aW9ucywgd2hpY2ggaXMgZ29vZCDigJMgbGVzcyBtYW51YWwgaW50ZXJ2ZW50aW9uIGlzIGFsd2F5cyBhIHdpbi5cblxuRmluYWxseSwgcmVnYXJkaW5nIGBCUEZfU1lTQ0FMTGAsIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODIxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTg6MzYuOTU2NjM1MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTg6MzYuOTU2NzExMzcxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1NDMwNjQwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVENQL01QVENQIGBza19lcnJgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQ7IGBCUEZfU1lTQ0FMTGAgaXMgc2VsZi1jb250YWluZWQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gYE5FVGAgaXMgYSBnaXZlbiBmb3IgbmV0d29ya2luZyBjb2RlLCBhbmQgYElORVRgIGlzIHN0YW5kYXJkIGZvciBJUHY0L1RDUC4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGZvY3VzZWQgb24gYWRkcmVzc2luZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGggYHNrLVx1MDAzZXNrX2VycmAuIEl0IHVzZXMgYFJFQURfT05DRSgpYCB0byBlbnN1cmUgc2FmZSwgY29uY3VycmVudCBhY2Nlc3Mgd2hlbiBgc29ja19lcnJvcigpYCBtaWdodCBiZSBjbGVhcmluZyBpdC4gVGhpcyBpbXBhY3RzIHNldmVyYWwgY29yZSBmdW5jdGlvbnMgYWNyb3NzIFRDUCwgc3RyZWFtIHNvY2tldHMsIFRDUCBCUEYsIGFuZCBNUFRDUC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgdGNwX3JlY3Zfc2hvdWxkX3N0b3BgLCBgc2tfc3RyZWFtX3dhaXRfbWVtb3J5YCwgdGhlIHNwbGljZSBmdW5jdGlvbnMgKGB0Y3Bfc3BsaWNlX3JlYWRgLCBgbXB0Y3Bfc3BsaWNlX3JlYWRgKSwgYW5kIHRoZSBgc2VuZG1zZ2AgYW5kIGByZWN2bXNnYCBwYXRocyBpbiBib3RoIFRDUCwgTVBUQ1AsIGFuZCBCUEYuIFRoZXNlIGFyZSBhbGwgY3JpdGljYWwgcGF0aHMuXG5cbkxvb2tpbmcgYXQgdGhlIGxpc3Qgb2YgXCJGb2N1c1N5bWJvbHNcIiwgaXQgc2VlbXMgd2UncmUgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBkYXRhIHRyYW5zZmVyLCBhbmQgbWVzc2FnZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGggaG93IGVycm9yIHN0YXRlcyBhcmUgbWFuYWdlZCBpbiB0aG9zZSBvcGVyYXRpb25zLiBUaGF0J3MgZ29vZDsgaXQncyBhIGZvY3VzZWQgc2V0IG9mIGZ1bmN0aW9ucy5cblxuQmFzZWQgb24gdGhpcywgYW5kIHRoZSBmYWN0IHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgc29ja2V0IG9wZXJhdGlvbnMsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIEl0J3MgdGhlIHJpZ2h0IGNhbGwgdG8gZmx1c2ggb3V0IGFueSBzdWJ0bGUgYmVoYXZpb3JhbCBjaGFuZ2VzIG9yIHJlZ3Jlc3Npb25zIHRoaXMgbWlnaHQgaW50cm9kdWNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMuXG5cbkdpdmVuIHRoZSBjb2RlJ3Mgc2NvcGUgYW5kIHRoZSB0YXJnZXRlZCBtb2RpZmljYXRpb25zLCB0aGlzIGxvb2tzIGNsZWFuIGFuZCB3ZWxsLXN1cHBvcnRlZCwgbm8gcmVkIGZsYWdzLiBJdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDUwOCwiT3V0cHV0VG9rZW5zIjoyMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODo0MS40OTk3NzgxNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTEwODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19zdHJlYW1fd2FpdF9tZW1vcnlcIixcbiAgICBcInRjcF9zcGxpY2VfcmVhZFwiLFxuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3BfcmVjdm1zZ19sb2NrZWRcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwibXB0Y3Bfc2VuZG1zZ1wiLFxuICAgIFwibXB0Y3BfcmVjdm1zZ1wiLFxuICAgIFwibXB0Y3Bfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbm5vdGF0ZXMgbG9ja2xlc3MgcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciB3aXRoIFJFQURfT05DRSgpIGFjcm9zcyBUQ1AsIE1QVENQLCBzdHJlYW0gc29ja2V0IHdhaXQgcGF0aHMsIGFuZCBUQ1AgQlBGIGhlbHBlcnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBpbXByb3BlciBjb21waWxlciBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkIGJ5IHNvY2tfZXJyb3IoKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcyAoVENQLCBNUFRDUCwgYW5kIHNvY2ttYXAgQlBGKSwgbWFraW5nIGl0IHZhbHVhYmxlIHRvIGZ1enogZm9yIHN1YnRsZSBjb25jdXJyZW5jeSByZWdyZXNzaW9ucyBhbmQgZXJyb3ItaGFuZGxpbmcgY29ycmVjdG5lc3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTVBUQ1BcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tfc3RyZWFtX3dhaXRfbWVtb3J5XCIsXG4gICAgXCJ0Y3Bfc3BsaWNlX3JlYWRcIixcbiAgICBcInRjcF9zZW5kbXNnX2xvY2tlZFwiLFxuICAgIFwidGNwX3JlY3Ztc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcIm1wdGNwX3NlbmRtc2dcIixcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIixcbiAgICBcIm1wdGNwX3NwbGljZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYW5ub3RhdGVzIGxvY2tsZXNzIHJlYWRzIG9mIHNrLVxcdTAwM2Vza19lcnIgd2l0aCBSRUFEX09OQ0UoKSBhY3Jvc3MgVENQLCBNUFRDUCwgc3RyZWFtIHNvY2tldCB3YWl0IHBhdGhzLCBhbmQgVENQIEJQRiBoZWxwZXJzIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgaW1wcm9wZXIgY29tcGlsZXIgb3B0aW1pemF0aW9ucyB3aGVuIHNrX2VyciBpcyBjb25jdXJyZW50bHkgY2xlYXJlZCBieSBzb2NrX2Vycm9yKCkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4gY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbXMgKFRDUCwgTVBUQ1AsIGFuZCBzb2NrbWFwIEJQRiksIG1ha2luZyBpdCB2YWx1YWJsZSB0byBmdXp6IGZvciBzdWJ0bGUgY29uY3VycmVuY3kgcmVncmVzc2lvbnMgYW5kIGVycm9yLWhhbmRsaW5nIGNvcnJlY3RuZXNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODo0MS41NzM2OTY0NDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzQ3Nzk2Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NTg6NDEuNTc0MTYwNTQ5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEzNDczMjgzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgdG8gcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciBhY3Jvc3MgVENQLCBNUFRDUCwgYW5kIGNvcmUgc3RyZWFtIHNvY2tldCBmdW5jdGlvbnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciByZS1yZWFkaW5nIG9wdGltaXphdGlvbnMgd2hlbiBza19lcnIgaXMgYWNjZXNzZWQgbG9ja2xlc3NseS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gU3RydWN0IHNvY2sgYW5kIGl0cyBza19lcnIgZmllbGQgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZXJlZm9yZSwgdGhlIHBhdGNoIHBvc2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMDUzOGNkYmMzMTBhMjhhMDBmZmFiNWYwMjYxNmZjMzY4ZjEyMTU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTU6NTU6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXG5pbmRleCA1ZTVmNWY5Yjg5YTM4Li42ZWU1MTNiZGI1MDMyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmhcbisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oXG5AQCAtMzA5Myw3ICszMDkzLDggQEAgZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2luYm91bmRfaGFzaChzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gc3RhdGljIGlubGluZSBpbnQgdGNwX3JlY3Zfc2hvdWxkX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxuIHtcbi1cdHJldHVybiBzay1cdTAwM2Vza19lcnIgfHxcbitcdC8qIHNrX2VyciBjYW4gYmUgY2xlYXJlZCBsb2NrbGVzc2x5IGJ5IHNvY2tfZXJyb3IoKS4gKi9cbitcdHJldHVybiBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSB8fFxuIFx0ICAgICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSB8fFxuIFx0ICAgICAgIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB8fFxuIFx0ICAgICAgIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N0cmVhbS5jIGIvbmV0L2NvcmUvc3RyZWFtLmNcbmluZGV4IDJkNzQ4NTgxODYyZDAuLjVjMGFkYzMwNzdmMDMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zdHJlYW0uY1xuKysrIGIvbmV0L2NvcmUvc3RyZWFtLmNcbkBAIC0xMzMsNyArMTMzLDcgQEAgaW50IHNrX3N0cmVhbV93YWl0X21lbW9yeShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvX3ApXG4gXHR3aGlsZSAoMSkge1xuIFx0XHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCBzayk7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbitcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpXG4gXHRcdFx0Z290byBkb19lcnJvcjtcbiBcdFx0aWYgKCEqdGltZW9fcClcbiBcdFx0XHRnb3RvIGRvX2VhZ2FpbjtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCAxYzg2N2EzMDI0NDQ2Li45ZTdmYTdlMzk3MjY1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbisrKyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtODQzLDcgKzg0Myw3IEBAIHNzaXplX3QgdGNwX3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4rXHRcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0XHRyZXQgPSBzb2NrX2Vycm9yKHNrKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbkBAIC0xMjI4LDcgKzEyMjgsNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdG1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssIFx1MDAyNnNpemVfZ29hbCwgZmxhZ3MpO1xuIFxuIFx0ZXJyID0gLUVQSVBFO1xuLVx0aWYgKHNrLVx1MDAzZXNrX2VyciB8fCAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFNFTkRfU0hVVERPV04pKVxuK1x0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpIHx8IChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgU0VORF9TSFVURE9XTikpXG4gXHRcdGdvdG8gZG9fZXJyb3I7XG4gXG4gXHR3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpKSB7XG5AQCAtMjc2MCw3ICsyNzYwLDcgQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbitcdFx0XHRpZiAoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikpIHtcbiBcdFx0XHRcdGNvcGllZCA9IHNvY2tfZXJyb3Ioc2spO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xuaW5kZXggMmUyMzRkMTU1YjVlNi4uYTk2MzIzZTY1NzU4ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xuKysrIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5AQCAtMjg2LDcgKzI4Niw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbitcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0Y29waWVkID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC01NTMsMTAgKzU1Myw5IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0Ym9vbCBlbm9zcGMgPSBmYWxzZTtcbiBcdFx0dTMyIGNvcHksIG9zaXplO1xuIFxuLVx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4tXHRcdFx0ZXJyID0gLXNrLVx1MDAzZXNrX2VycjtcbitcdFx0ZXJyID0gLVJFQURfT05DRShzay1cdTAwM2Vza19lcnIpO1xuK1x0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X2Vycjtcbi1cdFx0fVxuIFxuIFx0XHRjb3B5ID0gbXNnX2RhdGFfbGVmdChtc2cpO1xuIFx0XHRpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggZTFmMDhmNzFjZGIxNi4uNzYzMWZhNTgyODM0NyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTIwMjgsNyArMjAyOCw3IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdH1cbiBcbiBcdHJldCA9IC1FUElQRTtcbi1cdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSkpXG4rXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX2VycikgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSkpXG4gXHRcdGdvdG8gZG9fZXJyb3I7XG4gXG4gXHRwZnJhZyA9IHNrX3BhZ2VfZnJhZyhzayk7XG5AQCAtMjQyOSw3ICsyNDI5LDcgQEAgc3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdCAgICAhdGltZW8pXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4rXHRcdFx0aWYgKFJFQURfT05DRShzay1cdTAwM2Vza19lcnIpKSB7XG4gXHRcdFx0XHRjb3BpZWQgPSBzb2NrX2Vycm9yKHNrKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbkBAIC00NjU1LDcgKzQ2NTUsNyBAQCBzdGF0aWMgc3NpemVfdCBtcHRjcF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuK1x0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZXJyKSkge1xuIFx0XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODo0MS41NzQxNjE3MTlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTEzNDczMDc0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc2stXHUwMDNlc2tfZXJyYCBEYXRhIFJhY2UgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZTogaXQncyBhZGRpbmcgYFJFQURfT05DRWAgYXJvdW5kIHNldmVyYWwgYWNjZXNzZXMgdG8gYHNrLVx1MDAzZXNrX2VycmAgYWNyb3NzIGJvdGggVENQIGFuZCBNUFRDUCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZDogYHRjcF9yZWN2X3Nob3VsZF9zdG9wYCwgYHNrX3N0cmVhbV93YWl0X21lbW9yeWAsIGB0Y3Bfc3BsaWNlX3JlYWRgLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9yZWN2bXNnX2xvY2tlZGAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYHRjcF9icGZfc2VuZG1zZ2AsIGBtcHRjcF9zZW5kbXNnYCwgYG1wdGNwX3JlY3Ztc2dgLCBhbmQgYG1wdGNwX3NwbGljZV9yZWFkYC4gVGhlIHVzZSBvZiBgUkVBRF9PTkNFYCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIHRvIGFkZHJlc3MgcG90ZW50aWFsIGRhdGEgcmFjZXMsIGxpa2VseSBpZGVudGlmaWVkIGJ5IEtDU0FOIG9yIHNpbWlsYXIgdG9vbHMsIG9yIHBlcmhhcHMganVzdCBhIHByb2FjdGl2ZSBtZWFzdXJlIHRvIGVuc3VyZSBjb3JyZWN0IGNvbXBpbGVyIGJlaGF2aW9yIGFyb3VuZCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlLlxuXG5gc2stXHUwMDNlc2tfZXJyYCBpcyBhbiBpbnRlZ2VyIGZpZWxkIHdpdGhpbiB0aGUgYHN0cnVjdCBzb2NrYC4gU2luY2UgdGhlIGBzdHJ1Y3Qgc29ja2AgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCwgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSXQncyBlc3NlbnRpYWxseSB3cmFwcGluZyBleGlzdGluZyByZWFkcyB3aXRoIGBSRUFEX09OQ0VgLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gcHJldmVudCBjb21waWxlciBvcHRpbWl6YXRpb25zIGZyb20gcmUtb3JkZXJpbmcgbWVtb3J5IGFjY2Vzc2VzIGluIHdheXMgdGhhdCBjb3VsZCBleHBvc2Ugc3RhbGUgdmFsdWVzLlxuXG5JJ20gY29uZmlkZW50IHRoaXMgaXNuJ3QgYWx0ZXJpbmcgbGVuZ3RocywgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMuIFRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSd2ZSBtZW50YWxseSBnb25lIHRocm91Z2ggbXkgdXN1YWwgY2hlY2tsaXN0OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZSwgbm90aGluZyBoZXJlIHRoYXQgdHJhbnNtaXRzIHBhcnRpYWxseSBpbml0aWFsaXplZCBzdHJ1Y3R1cmVzIG9yIGZpZWxkcy5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBgc2stXHUwMDNlc2tfZXJyYCBpcyBpbml0aWFsaXplZCBkdXJpbmcgc29ja2V0IGFsbG9jYXRpb24gdXNpbmcgZWl0aGVyIGBrbWVtX2NhY2hlX2FsbG9jYCB3aXRoIHplcm9pbmcgb3IgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdpdGggbGF0ZXIgcmVhZHM/KiogTm90IGEgZmFjdG9yLiBUaGUgY2hhbmdlIGlzIGNvbmZpbmVkIHRvIGEgc2luZ2xlIGludGVnZXIgZmllbGQuXG40LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBpc3N1ZXM/KiogTm8gY2hhbmdlcyB0byBhbnkgc3Vycm91bmRpbmcgY29kZSB0aGF0IG1pZ2h0IGJlIHN1YmplY3QgdG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcy5cblxuVGhlcmVmb3JlLCB0aGlzIHNlZW1zIGxpa2UgYSBwdXJlbHkgYWRkaXRpdmUgYW5ub3RhdGlvbi9jb25jdXJyZW5jeSBmaXguIEl0J3Mgc2FmZSwgYW5kIGxpa2VseSBuZWNlc3NhcnkgZm9yIHJvYnVzdG5lc3MsIHBhcnRpY3VsYXJseSBnaXZlbiBtb2Rlcm4gY29uY3VycmVuY3kgdG9vbHMuIFdoaWxlIEknZCBydW4gS0NTQU4sIEtUU0FOLCBvciBzaW1pbGFyIHRvb2xzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi4gVGltZSB0byBydW4gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NywiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo1ODo1Mi45MjE0NzI5NTRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUkVBRF9PTkNFKCkgYW5ub3RhdGlvbnMgdG8gcmVhZHMgb2Ygc2stXFx1MDAzZXNrX2VyciBhY3Jvc3MgVENQLCBNUFRDUCwgYW5kIGNvcmUgc3RyZWFtIHNvY2tldCBmdW5jdGlvbnMgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBjb21waWxlciByZS1yZWFkaW5nIG9wdGltaXphdGlvbnMgd2hlbiBza19lcnIgaXMgYWNjZXNzZWQgbG9ja2xlc3NseS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4gU3RydWN0IHNvY2sgYW5kIGl0cyBza19lcnIgZmllbGQgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZXJlZm9yZSwgdGhlIHBhdGNoIHBvc2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFJFQURfT05DRSgpIGFubm90YXRpb25zIHRvIHJlYWRzIG9mIHNrLVxcdTAwM2Vza19lcnIgYWNyb3NzIFRDUCwgTVBUQ1AsIGFuZCBjb3JlIHN0cmVhbSBzb2NrZXQgZnVuY3Rpb25zIHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgY29tcGlsZXIgcmUtcmVhZGluZyBvcHRpbWl6YXRpb25zIHdoZW4gc2tfZXJyIGlzIGFjY2Vzc2VkIGxvY2tsZXNzbHkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFN0cnVjdCBzb2NrIGFuZCBpdHMgc2tfZXJyIGZpZWxkIGFyZSBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIHVwb24gc29ja2V0IGNyZWF0aW9uLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBwb3NlcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[1] Phase: Succeeded StartedAt: 2026-09-12 15:59:03 +0000 UTC FinishedAt: 2026-09-12 15:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 15:59:03 +0000 UTC FinishedAt: 2026-09-12 15:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2] Phase: Succeeded StartedAt: 2026-09-12 15:59:03 +0000 UTC FinishedAt: 2026-09-12 19:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-12 15:59:03 +0000 UTC FinishedAt: 2026-09-12 19:41:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-12 15:59:03 +0000 UTC FinishedAt: 2026-09-12 15:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-12 15:59:03 +0000 UTC FinishedAt: 2026-09-12 15:59:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-convert-artifact-410436842/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-12 15:59:14 +0000 UTC FinishedAt: 2026-09-12 16:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-12 15:59:14 +0000 UTC FinishedAt: 2026-09-12 16:15:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ca2804c5-2a00-44eb-aaf6-6c2e48987458,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-convert-artifact-410436842/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a5f956d3-22b1-47e2-8d1e-bbdbaa31a131", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-build-action-3415571288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-12 15:59:14 +0000 UTC FinishedAt: 2026-09-12 16:15:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ca2804c5-2a00-44eb-aaf6-6c2e48987458,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-convert-artifact-410436842/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a5f956d3-22b1-47e2-8d1e-bbdbaa31a131", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-build-action-3415571288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-12 16:15:22 +0000 UTC FinishedAt: 2026-09-12 16:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-12 16:15:22 +0000 UTC FinishedAt: 2026-09-12 16:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-12 16:15:22 +0000 UTC FinishedAt: 2026-09-12 16:15:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-12 16:15:22 +0000 UTC FinishedAt: 2026-09-12 16:15:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-convert-artifact-2118747397/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-12 16:15:32 +0000 UTC FinishedAt: 2026-09-12 16:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-12 16:15:32 +0000 UTC FinishedAt: 2026-09-12 16:17:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a5f956d3-22b1-47e2-8d1e-bbdbaa31a131,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-build-action-3415571288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-12 16:17:26 +0000 UTC FinishedAt: 2026-09-12 16:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-12 16:17:26 +0000 UTC FinishedAt: 2026-09-12 16:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-12 16:17:26 +0000 UTC FinishedAt: 2026-09-12 16:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-12 16:17:26 +0000 UTC FinishedAt: 2026-09-12 16:33:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ca2804c5-2a00-44eb-aaf6-6c2e48987458,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-convert-artifact-2118747397/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "19a07627-6154-424e-9b6a-8ef40c50ebfd", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-build-action-3480627281/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-12 16:17:26 +0000 UTC FinishedAt: 2026-09-12 16:33:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ca2804c5-2a00-44eb-aaf6-6c2e48987458,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-convert-artifact-2118747397/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "19a07627-6154-424e-9b6a-8ef40c50ebfd", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-build-action-3480627281/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-12 16:33:40 +0000 UTC FinishedAt: 2026-09-12 16:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-12 16:33:40 +0000 UTC FinishedAt: 2026-09-12 16:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-12 16:33:40 +0000 UTC FinishedAt: 2026-09-12 16:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-12 16:33:40 +0000 UTC FinishedAt: 2026-09-12 16:35:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19a07627-6154-424e-9b6a-8ef40c50ebfd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-build-action-3480627281/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-12 16:35:37 +0000 UTC FinishedAt: 2026-09-12 19:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-12 16:35:37 +0000 UTC FinishedAt: 2026-09-12 19:41:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a5f956d3-22b1-47e2-8d1e-bbdbaa31a131,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19a07627-6154-424e-9b6a-8ef40c50ebfd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-build-action-3415571288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-build-action-3480627281/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-12 16:35:37 +0000 UTC FinishedAt: 2026-09-12 16:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-12 16:35:37 +0000 UTC FinishedAt: 2026-09-12 16:35:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-convert-artifact-1674456970/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-12 16:35:37 +0000 UTC FinishedAt: 2026-09-12 16:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-12 16:35:37 +0000 UTC FinishedAt: 2026-09-12 16:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-12 16:35:37 +0000 UTC FinishedAt: 2026-09-12 16:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-12 16:35:47 +0000 UTC FinishedAt: 2026-09-12 19:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz97jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"211f2a875f6f447745d80d5762d6d614503ac84a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_stream_wait_memory","tcp_splice_read","tcp_sendmsg_locked","tcp_recvmsg_locked","tcp_bpf_sendmsg","tcp_bpf_recvmsg_parser","mptcp_sendmsg","mptcp_recvmsg","mptcp_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"211f2a875f6f447745d80d5762d6d614503ac84a","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP","BPF_SYSCALL"],"series_id":"dddb82c2-5096-436d-891e-0d027167b301","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-12 16:35:47 +0000 UTC FinishedAt: 2026-09-12 19:40:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a5f956d3-22b1-47e2-8d1e-bbdbaa31a131,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19a07627-6154-424e-9b6a-8ef40c50ebfd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-build-action-3415571288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-build-action-3480627281/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz97jf/series-workflowz97jf-convert-artifact-1674456970/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}